mlb-zoologist.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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后的每个频率的功率相加结 果应

文档评论(0)

75986597 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档