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

1. 读取WAV声音文件

[plain] view plaincopyprint?
  1. % wavread(filename) 读取一个WAVE文件,并返回采样数据到向量y中,Fs表示采样频率, bits表示采样位数
  2. [y, Fs, bits] = wavread('drum.wav');
  3. %假设声音文件有两个声道,我们只分析第一个声道,如果要分析第二个声道可以改为:ft=y(:,2);
  4. ft = y(:,1);
  5. sigLength = length(ft); %获取声音长度
  6. %可以使用sound函数来播放声音
  7. sound(y, Fs, bits)
% wavread(filename) 读取一个WAVE文件,并返回采样数据到向量y中,Fs表示采样频率, bits表示采样位数
[y, Fs, bits] = wavread('drum.wav');%假设声音文件有两个声道,我们只分析第一个声道,如果要分析第二个声道可以改为:ft=y(:,2);
ft = y(:,1);
sigLength = length(ft); %获取声音长度%可以使用sound函数来播放声音
sound(y, Fs, bits)
2. 绘制波形图
[plain] view plaincopyprint?
  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');
t=(0:sigLength-1)/Fs;
figure;
subplot(2,1,1);
plot(t, ft), title('Plot of the Tone'),grid;
xlabel('Time(s)');
ylabel('Amplitude');
3. 绘制振幅频谱图
[plain] view plaincopyprint?
  1. %Y = fft(X) 使用快速傅里叶变换算法返回向量X的离散型傅里叶变换
  2. %Y = fft(X,n) 返回n点的离散傅里叶变换,如果向量X的长度小于n,函数要将向量X补零到长度n;如果向量X的长度大于n, 则函数阶段X使之长度为n。若X是矩阵,按相同方法对X进行处理。
  3. Y = fft(ft,sigLength);
  4. halfLength = floor(sigLength/2);
  5. Pyy =Y(1:halfLength + 1); % 只选取前半截部分
%Y = fft(X) 使用快速傅里叶变换算法返回向量X的离散型傅里叶变换
%Y = fft(X,n) 返回n点的离散傅里叶变换,如果向量X的长度小于n,函数要将向量X补零到长度n;如果向量X的长度大于n, 则函数阶段X使之长度为n。若X是矩阵,按相同方法对X进行处理。Y = fft(ft,sigLength);
halfLength = floor(sigLength/2);
Pyy =Y(1:halfLength + 1); % 只选取前半截部分
波形的傅里叶变换返回震级和相位信息,并且用复数的形式表达,通过计算绝对值来获取其频率的振幅
[plain] view plaincopyprint?
  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');
Pyy = abs(Pyy);%用于计算复向量的Y的振幅
f = ((0:halfLength)+1)* Fs/sigLength;
subplot(2,1,2);
plot(f,Pyy), title('Frequency spectrum'),grid;
xlabel('Frequency(Hz)');
ylabel('Amplitude');

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

引用:
The MethWorks Support. Technique notes 1702, http://www.mathworks.com/support/tech-notes/1700/1702.html

Basic Sound Processing with Matlabhttp://xoomer.virgilio.it/sam_psy/psych/sound_proc/sound_proc_matlab.html
Matlab语音文件处理http://www.ymlib.net/article/sort010/info-685.html

matlab声音处理相关推荐

  1. Matlab声音处理教程

    Matlab声音处理教程 1)用mp3录音,生成文件cricket.wav,把该文件放到matlab文件夹里面(就是你打开matlab后中间顶部的地址). 2)使用如下程序,做波形显示以及fft变换. ...

  2. matlab语音处理教程,Matlab声音处理教程 / 声音处理 / 声音处理教程 / 声音处理软件...

    Matlab声音处理教程 / 声音处理 / 声音处理教程 1)用mp3录音,生成文件cricket.wav,把该文件放到matlab文件夹里面(就是你打开matlab后中间顶部的地址). 2)使用如下 ...

  3. matlab声音的滤波处理,matlab声音信号的采集与滤波处理.doc

    matlab声音信号的采集与滤波处理.doc MATLAB实验报告(题目二)(题目二)声音信号的采集与滤波处理采用IIR滤波器或FIR滤波器参考资料信号的采集.数字信号处理及滤波实例要求(1)采集声音 ...

  4. 信号内插matlab,声音信号的抽取和内插,MATLAB代码

    声音信号抽取和内插的MATLAB程序 %%%l为抽取倍数,m为内插倍数,mp3为音频信号, %%%此程序实现音频信号的内插和抽取,并画出处理前后的信号时域.频域图像function myhomewor ...

  5. MATLAB 声音文件处理

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

  6. MATLAB 声音文件分析、处理。

    转自:http://blog.csdn.net/wubo9935/article/details/6655408 由于最近的Project要做声音分析,需要用到MATLAB,之前一直没怎么接触过,所以 ...

  7. matlab声音的滤波处理,MATLAB声音信号的采集与滤波处理

    Matlab 实验报告(题目二) (题目二)声音信号的采集与滤波处理(采用IIR滤波器或FIR滤波器) 参考资料:信号的采集.数字信号处理及滤波实例 要求:(1)采集声音信号或打开已录好的声音文件,并 ...

  8. matlab声音信号分析与合成

    任何一种声音信号都可以表示为 X(n)=Aiinsin(ωit+θi) 其中 ωi=2πfi Ai为归一化幅值, fi为频率,θi为初始相位角.t 为采样向量矩阵,例如采样率为Fs 每帧音频时间为T, ...

  9. matlab声音信号调制-3种方法(附matlab代码)

    %% 单一频率信号调制 clc clear fs = 48000; fc=18000; t=0:1/fs:10;signal = cos(2*pi*fc*t); [ mr ] = plot_fft( ...

最新文章

  1. Milvus Windows
  2. 【转】Android Studio系列教程一--下载与安装
  3. Synchronize锁粒度
  4. 【Windows10】我的电脑从新装到优化配置
  5. Lua脚本语言应用场景
  6. SQL基础E-R图画法(三)
  7. shell_之_find(查找)
  8. 学习了下简单的光照模型
  9. Android 异步任务
  10. [问题]apparmor 问题导致mysql切换datadir目录失败
  11. .NET CF获取当前dll及其调用程序的文件名和完全路径
  12. Win7重装后修复Ubuntu引导项
  13. 视频:老外演示如何做康奈尔笔记
  14. 计算机校本培训措施,2017度信息技术校本培训计划
  15. js基础系列之函数调用与this
  16. CF大陆斗C战士(一)
  17. 【操作系统】CSAPP学习笔记
  18. [附源码]Java计算机毕业设计SSM大学生健康管理系统的设计与实现
  19. 每日自动签到签退的程序
  20. Legolas工业自动化平台案例 —— 水源地自动化监控系统

热门文章

  1. 输入相应的数打印三角形
  2. hive安装mysql_Hive安装MySql
  3. 内存空间 逻辑地址空间 相对地址 绝对地址
  4. 智慧工地车辆冲洗系统 工地渣土车未冲洗自动抓拍 yolo
  5. 浅谈Jsch SSH2
  6. scala中的break和continue
  7. Grib数据转NC数据
  8. 图灵Java架构师学习路线图
  9. Spark+AI Summit 2019 PPT 下载[共124个]
  10. OSI七层模型就这???