clear all;
clc;
[filename,filepath]=uigetfile('.wav','Open wav file');
[y,fs,nbits]=wavread([filepath,filename]);  %从电脑文件夹选择wav音频文件b=menu('请选择选项','原始信号采样后时域图和频谱图','FIR滤波器','IIR滤波器','退出');
while(b~=4)
if b==1temp=menu('请选择选项','播放原始语音','原始语音时域图','原始语音做FFT变换后频谱图','返回');if temp==1%播放语音sound(y);elseif temp==2%画出原始语音时域图figure(11) plot(y);xlabel('时间(ms)'); ylabel('幅值');    title('原始语音时域图');elseif temp==3%画出原始语音做FFT变换后频谱图Y1=fft(y);Y=abs(Y1);figure(12)plot(Y);xlabel('频率'); ylabel('幅值');title('原始语音做FFT变换后频谱图');elseend
end
if b==2temp=menu('请选择选项','FIR低通滤波器','FIR高通滤波器','FIR带通滤波器','返回');if temp==1%FIR低通滤波器fs=10000;wp=2*pi*1000/fs;wst=2*pi*1200/fs;Rp=1;Rs=100;wdelta=wst-wp;N=ceil(8*pi/wdelta);              %取整wn=(wp+wst)/2;[b,a]=fir1(N,wn/pi,hamming(N+1));       %选择窗函数,并归一化截止频率figure(21)freqz(b,a,512);title('FIR低通滤波器');y1=filter(b,a,y);figure(22)subplot(2,1,1)plot(y)title('FIR低通滤波器滤波前的时域波形');xlabel('时间(ms)'); ylabel('幅值'); subplot(2,1,2)plot(y1);title('FIR低通滤波器滤波后的时域波形');xlabel('时间(ms)'); ylabel('幅值');    sound(y1,8000);                    %播放滤波后的语音信号F0=fft(y1,1024);f=fs*(0:511)/1024;figure(23)y2=fft(y,1024);subplot(2,1,1);plot(f,abs(y2(1:512)));title('FIR带通滤波器滤波前的频谱')xlabel('频率/Hz');ylabel('幅值');subplot(2,1,2)F2=plot(f,abs(F0(1:512)));title('FIR低通滤波器滤波后的频谱');xlabel('频率/Hz');ylabel('幅值');elseif temp==2%FIR高通滤波器fs=22050;wp=2*pi*5000/fs;wst=2*pi*3000/fs;Rp=1;Rs=100;wdelta=wp-wst;N=ceil(8*pi/wdelta);    %取整wn=(wp+wst)/2;[b,a]=fir1(N,wn/pi,'high');     figure(24)freqz(b,a,512);title('FIR高通滤波器');y1=filter(b,a,y);figure(25)subplot(2,1,1)plot(y)title('FIR高通滤波器滤波前的时域波形');xlabel('时间(ms)'); ylabel('幅值');subplot(2,1,2)plot(y1);title('FIR高通滤波器滤波后的时域波形');xlabel('时间(ms)'); ylabel('幅值');sound(y1,8000);      %播放滤波后的语音信号F0=fft(y1,3000);f=fs*(0:511)/1024;figure(26)y2=fft(y,1024);subplot(2,1,1);plot(f,abs(y2(1:512)));title('FIR高通滤波器滤波前的频谱')xlabel('频率/Hz');ylabel('幅值');subplot(2,1,2)plot(f,abs(F0(1:512)));title('FIR高通滤波器滤波后的频谱')xlabel('频率/Hz');ylabel('幅值');elseif temp==3%FIR带通滤波器fs=22050;wp1=2*pi*1200/fs;wp2=2*pi*3000/fs;ws1=2*pi*1000/fs;ws2=2*pi*3200/fs;Rp=1;Rs=100;wp=(wp1+ws1)/2;ws=(wp2+ws2)/2;wdelta=wp1-ws1;N=ceil(8*pi/wdelta);              %取整wn=[wp ws];[b,a]=fir1(N,wn/pi,'bandpass');      figure(27)freqz(b,a,512);title('FIR带通滤波器');y1=filter(b,a,y);figure(28)subplot(2,1,1)plot(y);xlabel('时间(ms)'); ylabel('幅值'); title('FIR带通滤波器滤波前的时域波形');subplot(2,1,2)plot(y1);title('FIR带通滤波器滤波后的时域波形');xlabel('时间(ms)'); ylabel('幅值'); sound(y1,8000);                    %播放滤波后的语音信号F0=fft(y1,3000);f=fs*(0:511)/1024;figure(29)y2=fft(y,1024);subplot(2,1,1);plot(f,abs(y2(1:512)));title('FIR带通滤波器滤波前的频谱')xlabel('频率/Hz');ylabel('幅值');subplot(2,1,2)plot(f,abs(F0(1:512)));title('FIR带通滤波器滤波后的频谱')xlabel('频率/Hz');ylabel('幅值');elseend
endif b==3temp=menu('请选择选项','IIR低通滤波器','IIR高通滤波器','IIR带通滤波器','返回');if temp==1%IIR低通滤波器fs=22050;Ts=1/fs;R1=10;wp=2*pi*1000/fs;ws=2*pi*1200/fs;Rp=1;Rl=100;wp1=2/Ts*tan(wp/2);                 %将模拟指标转换成数字指标ws1=2/Ts*tan(ws/2); [N,Wn]=buttord(wp1,ws1,Rp,R1,'s');  %选择滤波器的最小阶数[Z,P,K]=buttap(N);                  %创建butterworth模拟滤波器[Bap,Aap]=zp2tf(Z,P,K);[b,a]=lp2lp(Bap,Aap,Wn);   [bz,az]=bilinear(b,a,fs);           %用双线性变换法实现模拟滤波器到数字滤波器的转换[H,W]=freqz(bz,az); figure(31)plot(W*fs/(2*pi),abs(H))gridxlabel('频率/Hz');ylabel('频率响应幅度');title('IIR低通滤波器');f1=filter(bz,az,y);figure(32)subplot(2,1,1)    %画出滤波前的时域图plot(y); xlabel('时间(ms)'); ylabel('幅值'); title('IIR低通滤波器滤波前的时域波形');subplot(2,1,2)plot(f1);                         %画出滤波后的时域图title('IIR低通滤波器滤波后的时域波形');xlabel('时间(ms)'); ylabel('幅值');sound(f1,9000);                    %播放滤波后的信号F0=fft(f1,3000);f=fs*(0:511)/1024;figure(33)y2=fft(y,1024);subplot(2,1,1);plot(f,abs(y2(1:512)));             %画出滤波前的频谱图title('IIR低通滤波器滤波前的频谱')xlabel('频率/Hz');ylabel('幅值');subplot(2,1,2)f=fs*(0:511)/1024;F1=plot(f,abs(F0(1:512)));          %画出滤波后的频谱图title('IIR低通滤波器滤波后的频谱')xlabel('频率/Hz');ylabel('幅值');elseif temp==2%IIR高通滤波器fs=22050;Fs=22050;Ts=1/Fs;R1=50;Wp=2*pi*5000/fs;Ws=2*pi*3000/fs;Rp=1;Rl=100;Wp1=2/Ts*tan(Wp/2);                 %将模拟指标转换成数字指标Ws1=2/Ts*tan(Ws/2); [N,Wn]=cheb2ord(Wp1,Ws1,Rp,Rl,'s');  %选择滤波器的最小阶数[Z,P,K]=cheb2ap(N,Rl);                  %创建切比雪夫模拟滤波器[Bap,Aap]=zp2tf(Z,P,K);[b,a]=lp2hp(Bap,Aap,Wn);   [bz,az]=bilinear(b,a,Fs);           %用双线性变换法实现模拟滤波器到数字滤波器的转换[H,W]=freqz(bz,az);                 %绘制频率响应曲线figure(34)plot(W*fs/(2*pi),abs(H));gridxlabel('频率/Hz');ylabel('频率响应幅度');title('IIR高通滤波器');f1=filter(bz,az,y);figure(35)subplot(2,1,1)plot(y);                       %画出滤波前的时域图xlabel('时间(ms)'); ylabel('幅值'); title('IIR高通滤波器滤波前的时域波形');subplot(2,1,2)xlabel('时间(ms)'); ylabel('幅值'); plot(f1);xlabel('时间(ms)'); ylabel('幅值'); title('IIR高通滤波器滤波后的时域波形');sound(f1,8000);                    %播放滤波后的信号F0=fft(f1,1024);figure(36)y2=fft(y,1024);subplot(2,1,1);plot(f,abs(y2(1:512)));             %画出滤波前的频谱图title('IIR高通滤波器滤波前的频谱')xlabel('频率/Hz');ylabel('幅值');subplot(2,1,2)f=fs*(0:511)/1024;plot(f,abs(F0(1:512)));          %画出滤波后的频谱图title('IIR高通滤波器滤波后的频谱')xlabel('频率/Hz');ylabel('幅值');elseif temp==3%IIR带通滤波器Fs=22050;Ts=1/Fs;R1=30;fb1=1200;fb2=3000;fc1=1000;fc2=3200;fs=22050;W1=2*fb1*pi/fs;W2=2*fc1*pi/fs;W3=2*fb2*pi/fs;W4=2*fc2*pi/fs;Wp=[W1,W3];Ws=[W2,W4];Rp=1;Rl=100;Wp1=2/Ts*tan(Wp/2);                 %将模拟指标转换成数字指标Ws1=2/Ts*tan(Ws/2); [N,Wn]=cheb2ord(Wp1,Ws1,Rp,R1,'s');  %选择滤波器的最小阶数[Z,P,K]=cheb2ap(N,Rl);                  %创建切比雪夫模拟滤波器[Bap,Aap]=zp2tf(Z,P,K);[b,a]=lp2bp(Bap,Aap,2100*2*pi,1800*2*pi);   [bz,az]=bilinear(b,a,Fs);           %用双线性变换法实现模拟滤波器到数字滤波器的转换[H,W]=freqz(bz,az);                 %绘制频率响应曲线figure(37)plot(W*fs/(2*pi),abs(H));gridxlabel('频率/Hz');ylabel('频率响应幅度');title('IIR带通滤波器');f1=filter(bz,az,y);figure(38)subplot(2,1,1)plot(y);                        %画出滤波前的时域图xlabel('时间(ms)'); ylabel('幅值'); title('IIR带通滤波器滤波前的时域波形');subplot(2,1,2)F0=fft(f1,1024);f=fs*(0:511)/1024;plot(f1);title('IIR带通滤波器滤波后的时域波形');xlabel('时间(ms)'); ylabel('幅值'); sound(f1,8000);  %播放滤波后的信号F0=fft(f1,3000);figure(39)y2=fft(y,1024);f=fs*(0:511)/1024;subplot(2,1,1);plot(f,abs(y2(1:512)));             %画出滤波前的频谱图title('IIR带通滤波器滤波前的频谱')xlabel('频率/Hz');ylabel('幅值');subplot(2,1,2)plot(f,abs(F0(1:512)));          %画出滤波后的频谱图title('IIR带通滤波器滤波后的频谱')xlabel('频率/Hz');ylabel('幅值');else endend
b=menu('请选择选项','原始信号采样后时域图和频谱图','FIR滤波器','IIR滤波器','退出');
end

Matlab语音信号频谱分析代码实现相关推荐

  1. matlab编写信号采集程序,MATLAB语音信号采集课程设计

    MATLAB语音信号采集课程设计 数字信号处理 课程设计报告 课设题目:语音信号的采集与处理 学 院:信息科学与工程学院 专 业:电子信息工程 班 级:电子0903 姓 名: 学 号: 指导教师:张海 ...

  2. 《MATLAB语音信号分析与合成(第二版)》:第4章 语音信号的线性预测分析

    <MATLAB语音信号分析与合成(第二版)>:第4章 语音信号的线性预测分析 前言 1. 数据与函数路径设置 2. MATLAB仿真一:LPC的频谱分析 3. MATLAB仿真二:普通预测 ...

  3. Matlab语音信号去噪程序,使用低通巴特沃斯滤波器

    Matlab语音信号去噪程序,使用低通巴特沃斯滤波器. 1.读取一段歌曲的信号,绘制时域频域图,并播放. 2.添加正弦噪声: 3.设计巴特沃斯低通滤波器: 4.使用滤波器去除噪声,并画出时域频域图,播 ...

  4. 《MATLAB语音信号分析与合成(第二版)》:第8章 基音周期的估算方法

    <MATLAB语音信号分析与合成(第二版)>:第8章 基音周期的估算方法 前言 1. 数据与函数路径设置 2. MATLAB仿真一:基音周期提取的预处理 3. MATLAB仿真二:倒谱法的 ...

  5. 《MATLAB语音信号分析与合成(第二版)》:第7章 语音信号的减噪

    <MATLAB语音信号分析与合成(第二版)>:第7章 语音信号的减噪 前言 1. 数据与函数路径设置 2. MATLAB仿真一:自适应滤波器LMS滤波减噪一 3. MATLAB仿真二:自适 ...

  6. 《MATLAB语音信号分析与合成(第二版)》:第10章 语音信号的合成算法

    <MATLAB语音信号分析与合成(第二版)>:第10章 语音信号的合成算法 前言 1. 数据与函数路径设置 2. MATLAB仿真一:重叠相加法语音合成 3. MATLAB仿真二:重叠存储 ...

  7. 《MATLAB语音信号分析与合成(第二版)》:第3章 语音信号在其他变换域中的分析技术和特性

    <MATLAB语音信号分析与合成(第二版)>:第3章 语音信号在其他变换域中的分析技术和特性 前言 1. 数据与函数路径设置 2. MATLAB仿真一:信号倒谱图.声道冲激响频谱.声门激励 ...

  8. matlab 信号的频谱分析,实验五基于Matlab的信号频谱分析(复杂)

    实验五基于Matlab的信号频谱分析(复杂) 本次实验注意:<实验五MALTAB基础知识(简单)> <实验五 基于Matlab的信号频谱分析(复杂)> 选作一个即可 实验五 基 ...

  9. matlab复杂周期信号类建立,实验五 基于Matlab的信号频谱分析(复杂)

    本次实验注意:<实验五MALTAB基础知识(简单)> <实验五 基于Matlab的信号频谱分析(复杂)> 选作一个即可 实验五 基于Matlab的信号频谱分析 (一) 实验目的 ...

最新文章

  1. linux 跟踪链接 超时,Linux:跟踪netstat -s“连接尝试失败”的来源
  2. python概率密度函数参数估计_EM算法求高斯混合模型参数估计——Python实现
  3. React开发(235):react可以这样返回dom
  4. 对超长的文字换行处理:程序和CSS样式
  5. linux命令切换tty
  6. 盘点机器学习领域的五大流派
  7. IOS学习笔记02---语言发展概述,计算机语言简介.
  8. 支持统一码 10 的花园明朝字库终于更新出来了
  9. 个推 Spark实践教你绕过开发那些“坑”
  10. 有的编译器,for (i=1; i 《 1; i++)会执行循环体
  11. lr_save_string 和 sprintf 的使用
  12. 一个黑客都要学习什么语言呢?
  13. 记一次抓包和破解App接口
  14. 2020-10-22
  15. Speed Gear(变速精灵XP) V6.0 - 免费版,破解版,绿色版
  16. 华为性格测试的破解方法
  17. 小学语文历史重点名人以及解析大全
  18. 张家界四日自助游攻略及心得
  19. བྱ་དེ་ཁྲུང་ཁྲུང་དཀར་པོ།།--洁白的仙鹤/仓央嘉措情歌--IPA--藏语...
  20. 计算机开机自检时,电脑开机启动时出现DHCP自检怎么办

热门文章

  1. mysql 查询字段语句_mysql查询语句常用字段操作函数
  2. c语言x的2取模_c语言如何取模运算
  3. C - 数据结构实验之查找三:树的种类统计(哈希树)
  4. XML--视频--人脸VOC
  5. Java NIO学习系列四:NIO和IO对比
  6. Spring中ApplicationContext的事件机制
  7. 什么是Code Review 代码审查
  8. 第五章 Python数据结构
  9. Python脚本图解
  10. Python的冷技巧小技巧