- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
mlb-zoologist
使用 MATLAB 处理声音的基本操作
你可以在这里下载 文件。这个一个400Hz的基础频率加上噪音构成的复杂音频。
[snd, sampFreq, nBits] = wavread(440_sine.wav);
这个音频文件还有2个声道,5060个采样点
size(snd)
ans =
5060 2
素材音频(采样频率为sampFreq = 44110)对应的时长大约是114ms(Zt:应该只
是为了下面绘制图象确定范围使用的)
5060 / sampFreq
ans =
0.1147
用下面的方法可以播放这个音频
sound(snd, 44100, 16)
我们只处理音频中的一个声道
s1 = snd(:,1);
绘制音频
一种表示声音的方法是以声压为纵轴,时间为横轴。首先,我们需要建立一个包
含时间点的数组:
timeArray = (0:5060-1) / sampFreq;
timeArray = timeArray * 1000; %放大到毫秒级
之后,即可绘制音频:
plot(timeArray, s1, k)
绘制频率信息
另外一种表示音频的方法是绘制其中的频率信息。我们可以用过FFT函数取得音
频中的频率信息,FFT是“快速傅立叶变换”的缩写。我们通过下面文档
/support/tech-notes/1700/1702.html 介绍的技术
来获得声音中的功率谱(横坐标是频率,纵坐标是功率)。
n = length(s1);
p = fft(s1); % 计算傅立叶变换
注意:和上面的那份技术文档中提到的不同,我们没有指定参加FFT的点的数量,
默认下FFT函数会使用信号全部采样值(上面表达式中的n)。上面的n并不是
2的幂次,在计算上会稍微慢一些,但因为我们数值总量不多,这样的影响完全
可以忽略不计。
nUniquePts = ceil((n+1)/2);
p = p(1:nUniquePts); % 选择前半部,因为后半部是前半部的一个镜像
p = abs(p); % 取绝对值,或者称之为幅度
FFT函数处理音频返回值包括幅度和相位信息,是以复数的形式给出的(返回复
数)。对傅立叶变换后的结果取绝对值后,我们就可以取得频率分量的幅度信息。
p = p/n; % 使用点数按比例缩放,这样幅度和信号长度或者它自身
% 的频率无关
p = p.^2; % 平方得到功率
% 乘以2(原因请参考上面的文档)
if rem(n, 2) % 奇数,nfft 需要排除奈奎斯特点
p(2:end) = p(2:end)*2;
else
p(2:end -1) = p(2:end -1)*2;
end
freqArray = (0:nUniquePts-1) * (sampFreq / n); % 创建频率数组
plot(freqArray/1000, 10*log10(p), k)
xlabel(Frequency (kHz))
ylabel(Power (dB))
运行结果如下,需要注意的是我们在绘制功率时使用10*log10(p)将其单位换算
为分贝,我们也将频率除以1000单位换算为KHz.
为了验证计算结果是信号的能量。我们可以计算信号的均方根。宽泛的说,rms
可以看作是波形的幅度值的测量(Zt:面积吧?)。如果你只是简单的取正弦信
号的平均值,结果将会是0,原因是正数部分会和负数部分相互抵消。为了避免
这样的情况,在求平均值之前先求平方然后再开方(单纯的平方会放大一些极
值):
rms_val = sqrt(mean(s1.^2))
rms_val =
0.0615
因为rms等于全部信号求平方后再开方的值,将fft后的每个频率的功率相加结
果应
您可能关注的文档
- 用户手册user'smanualhart通讯eja系列变送器-重庆横河川仪.pdf
- 长江期货价格与波动性的相互关系.pdf
- hunter肌腱植入物-wrightmedical.pdf
- 大或算経における判別式の求め方.pdf
- flowtotalizers(simplifiedchinese)dpf708708.pdf
- 可控释放磷酸盐玻璃表面形貌与水溶解过程-无机材料学报.pdf
- 3124开关和监控设备控制器rms705b-siemens.pdf
- 陈婧瑶-简单电子计算器-中国传媒大学.pdf
- 如何对trace到的曲线进行数学处理-siemensindustryonline.pdf
- 複數的源流.pdf
文档评论(0)