matlab声音处理

转载 2013年12月05日 16:44:00


由于最近的Project要做声音分析,需要用到MATLAB,之前一直没怎么接触过,所以乘着做Project学习下。真的用了才知道MATLAB真是神器啊,呵呵~~~其强大的函数库和数学运算能力彻底让我折服了。言归正传,我们来讨论下用MATLAB做声音文件处理。

1. 读取WAV声音文件

  1. % wavread(filename) 读取一个WAVE文件,并返回采样数据到向量y中,Fs表示采样频率, bits表示采样位数  
  2. [y, Fs, bits] = wavread('drum.wav');  
  3.   
  4. %假设声音文件有两个声道,我们只分析第一个声道,如果要分析第二个声道可以改为:ft=y(:,2);  
  5. ft = y(:,1);  
  6. sigLength = length(ft); %获取声音长度  
  7.   
  8. %可以使用sound函数来播放声音  
  9. sound(y, Fs, bits)  


2. 绘制波形图
  1. t=(0:sigLength-1)/Fs;   
  2. figure;  
  3. subplot(2,1,1);  
  4. plot(t, ft), title('Plot of the Tone'),grid;  
  5. xlabel('Time(s)');  
  6. ylabel('Amplitude');  

3. 绘制振幅频谱图
  1. %Y = fft(X) 使用快速傅里叶变换算法返回向量X的离散型傅里叶变换  
  2. %Y = fft(X,n) 返回n点的离散傅里叶变换,如果向量X的长度小于n,函数要将向量X补零到长度n;如果向量X的长度大于n, 则函数阶段X使之长度为n。若X是矩阵,按相同方法对X进行处理。  
  3.   
  4. Y = fft(ft,sigLength);   
  5. halfLength = floor(sigLength/2);  
  6. Pyy =Y(1:halfLength + 1); % 只选取前半截部分  

波形的傅里叶变换返回震级和相位信息,并且用复数的形式表达,通过计算绝对值来获取其频率的振幅
  1. Pyy = abs(Pyy);%用于计算复向量的Y的振幅  
  2. f = ((0:halfLength)+1)* Fs/sigLength;   
  3. subplot(2,1,2);  
  4. plot(f,Pyy), title('Frequency spectrum'),grid;  
  5. xlabel('Frequency(Hz)');  
  6. ylabel('Amplitude');  

4. 绘制能量频谱图
  1. Y = fft(ft,sigLength);   
  2. halfLength = floor(sigLength/2);  
  3. Pyy =Y(1:halfLength + 1); % 只选取前半截部分  
  4. Pyy = abs(Pyy);%用于计算复向量的Y的振幅  
  5. f = ((0:halfLength)+1)* Fs/sigLength;   
  6. %通过点数调整比例,从而使振幅不依赖于信号长度或采样频率,说实话这部分还不是很明白  
  7. Pyy = Pyy/sigLength;   
  8. Pyy = Pyy.^2; %求平方得到能量  
  9. % 乘以2, 请参照 http://www.mathworks.com/support/tech-notes/1700/1702.html  
  10. if rem(sigLength, 2)  %奇数的 n fft 不包含奈奎斯特(Nyquist)点  
  11.    Pyy(2:end) = Pyy(2:end)*2;  
  12. else  
  13.    Pyy(2:end -1) = Pyy(2:end-1)*2;  
  14. end  
  15.   
  16. plot(f/1000, 10*log10(Pyy), 'k')   
  17. xlabel('Frequency (kHz)')   
  18. ylabel('Power (dB)')   



引用:
The MethWorks Support. Technique notes 1702, http://www.mathworks.com/support/tech-notes/1700/1702.html
Basic Sound Processing with Matlab http://xoomer.virgilio.it/sam_psy/psych/sound_proc/sound_proc_matlab.html
Matlab语音文件处理http://www.ymlib.net/article/sort010/info-685.html

基于MATLAB的声音信号频谱分析仪设计

1.概述随着软硬件技术的发展,仪器的智能化与虚拟化已成为未来实验室及研究机构的发展方向[1]。虚拟仪器技术的优势在于可由用户定义自己的专用仪器系统,且功能灵活,很容易构建,所以应用面极为广泛。基于计算...

Matlab GUI 简易音频信号采集分析

基于Matlab,带有GUI界面,可以选择声卡采集、wav文件、信号生成器三种输入方式,可播放,显示音频的时域、频域波形,可叠加噪声,可选择进行参数可调的高通、低通滤波,滤波采用butterworth...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

MATLAB 声音文件处理

由于最近的Project要做声音分析,需要用到MATLAB,之前一直没怎么接触过,所以乘着做Project学习下。真的用了才知道MATLAB真是神器啊,呵呵~~~其强大的函数库和数学运算能力彻底让我折...
  • wubo9935
  • wubo9935
  • 2011年08月02日 23:20
  • 11191

Matlab之声音处理:对wav音频信号量化

对于matlab,大家应该比较熟悉。今天小哥就带大家来做均匀量化。 量化是将模拟信号转化为数字信号必不可少的一步。均匀量化相对比较简单,就是比如将信号在[-1,1]分成相同的很多段,要是某个值在其中...

MATLAB 声音文件处理

MATLAB 声音文件处理 分类: Matlab2011-08-02 23:20 796人阅读 评论(0) 收藏 举报 由于最近的Project要做声音分析,需要用到MATLA...

用MATLAB做声音文件处理

1. 读取WAV声音文件 % wavread(filename) 读取一个WAVE文件,并返回采样数据到向量y中,Fs表示采样频率, bits表示采样位数 [y, Fs, bits] = wavr...

声音信号处理matlab实现

  • 2015年08月02日 10:25
  • 2KB
  • 下载

Android AudioManager处理两个播放器同时有声音,停止其中一个播放的问题

  尽管某个时刻只有一个activity可以运行,Android却是一个多任务环境.这对使用音频的应用带来了特殊的挑战,因为只有一个音频输出而可能多个媒体都想用它.在Android2.2之前,没...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:matlab声音处理
举报原因:
原因补充:

(最多只允许输入30个字)