基于MATLAB的语音滤波实验
实验目的:
- 在Matlab环境下对语音的频谱进行处理(数字滤波)并试听效果;
- 在Matlab环境下对语音的抽样率进行处理(语音压缩)并试听效果
实验步骤:
一、音频文件的压缩(抽取)。
- 利用windows附件中的录音机功能录制8~10秒的.wav语音文件,并以lei为文件名保存到Matlab/work的文件夹中。
a.打开 开始/程序/附件/娱乐/录音机;
![v2-33bf7d0199153a332d4411c2be34b462_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/e306014acff593dc0bd1264a213077b1.png)
b.用windows media player播放一首音乐并用MIC对着耳机录音或自已说话录音(按
![v2-329e9b841d608da8fe53a8f4e0e0de1d_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/540156b3b7b2dd38ff135d7d239cb264.png)
键),到10秒时停止(按
![v2-975742155984f0381c9d1cba3c3e77b7_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/ee3353bde4a6cdccd09af053429ce446.png)
键);
c.将录制的文件加存为C:/Matlab/work中,文件名为leii.wav;
![v2-b827015fcd6efad16c6e0b93d3a35255_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/22a337c2486b440aabaae63642acf008.png)
![v2-08f44185aa6a631ea0848932bdc4de28_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/e1d44a368464f8a59156c5485f6b587d.png)
![v2-f0ae34482b30a9ca5c0b75d4e20eef5f_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/c74577cd10d2d565a3d131b50766109e.png)
- 打开Matlab并新建一.m文件;
- 在.m文件中用y=wavread(‘lei.wav’)命令读入语音文件。
![v2-d03e1b30e637cd3b363a5c3ef586feab_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/5d573dad3826dcb97e9ca19d4d87af6d.png)
- 语音压缩:在m命令窗中输入如下命令:
![v2-f8a1b7aed11353f13412e8a9ddca2a43_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/3d4a86a0c8b53b20ff9df9c8b0cb04cf.png)
- 运行sample2.m之后会在work文件夹中生成一个名为lei2的.wav文件,如下图:
![v2-e25f83b4f9ce403c1e5bb118cc8def9e_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/54686b8506de97c2261683609eaaf00c.png)
- 双击lei2音频文件,用耳机试听效果,并跟lei1的效果比较。
- 在sample2.m文件中改变抽取倍率s (必须为正整数),重复4、5、6步,观察在不同抽取倍率s下的音频质量,
(注意:在运行sample2.m之前必须将work中名为lei2的.wav音频文件删除,或在.m文件中wavwrite()中的保存文件名改为其它的名字。)
二、音频信号的时域滤波(音频数据的时域卷积)。
(一)、低通滤波
- 打开Matlab并新建一.m文件,在.m文件中用y=wavread(‘lei.wav’)命令读入语音文件。
- 在m命令窗中输入如下命令,并加存为sample3.m,运行该m文件。
![v2-2f001b56c8f88706a21795fb6c6a9ba6_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/da793982d7bae1e45cafeec161810ca6.png)
- 双击lei3音频文件,用耳机试听效果,并跟lei1的效果比较。
- 再加一级h(n)的低通滤波,重复2、3步,如下图:
(注意:在运行lei2.m之前必须将work中名为lei3的.wav音频文件删除,或在.m文件中wavwrite()中的保存文件名改为其它的名字。)
![v2-f6e0127948e98f1baec7fd099f3465b2_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/d408481f1fcab4248879e0396d1e534b.png)
- 重复2、3、4步,观察在不同阶数的低通滤波下的音频质量。
(二)、高通滤波
1.打开Matlab并新建一.m文件,在.m文件中用y=wavread(‘lei.wav’)命令读入语音文件。
2.在m命令窗中输入如下命令,并加存为sample4.m,运行该m文件。
![v2-6744a88a056a36fde37492f68d6031e0_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/4ec188c16a657e17d9423c3f57583de9.png)
- 双击lei4音频文件,用耳机试听效果,并跟lei1的效果比较。
- 再加一级h(n)的低通滤波,重复2、3步,如下图:
(注意:在运行lei2.m之前必须将work中名为lei4的.wav音频文件删除,或在.m文件中wavwrite()中的保存文件名改为其它的名字。)
![v2-33804f180842bacd95ef1877d2f9a0bc_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/0ed504f051bf2a2e1d458369eae68421.png)
再加一级高通滤波:
![v2-d84de39573a5ea0fd43ea345932a0774_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/e6b0cee4669e83fe7f6238d6dbef0a36.png)
(三)时域低通滤波时频域的频谱变化:
1.打开在第(一)步中创建的sample3.m文件,并在原文件中加入以下命令,另存为sample33.m
![v2-8a15aace5a0c4df781506eed14cdcdec_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/dc5c7b743cc1168e395432930441449e.png)
频谱如下图:
![v2-572f9213d3eb85b84ede2cd3f889e392_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/9135f49762108cf8531b94da72c124c7.png)
2.下图为h(n)为31点的三重低通滤波程序和频谱图:
![v2-3cf7673e7635764f25ff17d33a242126_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/7ec7fa00680ae3c1a4e6c2ed22c21182.png)
![v2-9a08a761ade1805da38e126c1b1d401a_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/d35f06789fa4055a5eb6c12243a98681.png)
(四)时域高通滤波时频域的频谱变化:
1.打开在第(二)步中创建的sample4.m文件,并在原文件中加入以下命令,另存为sample44.m
![v2-0ddde8d979c41910d893837b953b9d09_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/f87f0ff8641c24e3006ae816391eeea6.png)
频谱如下图:
![v2-975e7344e2c29c2c30016ca6f970d1db_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/ed0040afc59f390b0805827dfa20e855.png)
2.下图为h(n)为3点的三重低通滤波程序和频谱图:
![v2-54e3c0f32c1266571016ef603290a713_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/169b9271069e4906837951f502ad1215.png)
![v2-d01a352737631f81afde5e3a55785536_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/67fe99d0e56feaf9ee10156163aca185.png)
二、音频信号的频域理想滤波处理:
原音频信号的抽样频率:
![v2-34ddc2b22db9a43ae5b25f0951e79f20_b.jpg](https://ss.csdn.net/p?https://pic1.zhimg.com/v2-34ddc2b22db9a43ae5b25f0951e79f20_b.jpg)
,
![v2-cd0e95d0055f09d9d44fa28fc05e0ab5_b.jpg](https://ss.csdn.net/p?https://pic2.zhimg.com/v2-cd0e95d0055f09d9d44fa28fc05e0ab5_b.jpg)
![v2-0389918b96c5765b2ec1ef14b084b916_b.jpg](https://ss.csdn.net/p?https://pic3.zhimg.com/v2-0389918b96c5765b2ec1ef14b084b916_b.jpg)
,该式即为模拟域频率f跟频率域(FFT变换)中k的关系
(一)理想低通滤波:
1.设计一截止频率为
![v2-680b9b875e6cfb03a699ea3f5f33f038_b.jpg](https://ss.csdn.net/p?https://pic1.zhimg.com/v2-680b9b875e6cfb03a699ea3f5f33f038_b.jpg)
对应的数字频率域(FFT)的系统函数的频率特性为:
![v2-01cb4596f184be251efeb3ca34281768_b.jpg](https://ss.csdn.net/p?https://pic1.zhimg.com/v2-01cb4596f184be251efeb3ca34281768_b.jpg)
2.按下图所示输入m文件,另存为lowfilter1.m ,并运行该程序。
![v2-d0dd078ccb1b578fc6e36360ecf585ae_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/1382fa5c337bf45f664b1663574988a0.png)
2.双击lei5音频文件,用耳机试听效果,并跟lei1的效果比较。
3.将该m文件中的f0=2000分别改为1000、500、300、200、4000、…….后,运行程序试听效果。
4.在该m 文件中加入如下命令,重复第3步,并观察Xw、Hw、Yw的频谱。
![v2-a96405a602b0f360c580f99ecd70cc96_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/4a96ea7876320b9f89d7199189b49a74.png)
![v2-6667cf4652ef26972d0f0537159d57e3_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/eb6c0c9a4b18f5f599fb4312e107097c.png)
(二)理想高通滤波:
1.设计一截止频率为
![v2-9cd36ab899c52f74b7daf23cd85f91d8_b.jpg](https://ss.csdn.net/p?https://pic1.zhimg.com/v2-9cd36ab899c52f74b7daf23cd85f91d8_b.jpg)
对应的数字频率域(FFT)的系统函数的频率特性为:
![v2-12158b818c300ee7006c8dd50c4fe7a2_b.jpg](https://ss.csdn.net/p?https://pic3.zhimg.com/v2-12158b818c300ee7006c8dd50c4fe7a2_b.jpg)
2.按下图所示输入m文件,另存为lowfilter1.m ,并运行该程序。
![v2-4efb32c068e2e77cf38d613c82867d5f_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/39e11b033455b9610109343828c12e06.png)
2.双击lei6音频文件,用耳机试听效果,并跟lei1的效果比较。
3.将该m文件中的f0=1000分别改为800、500、300、200、1500、2000…….后,运行程序试听效果。
4.在该m 文件中加入如下命令,重复第3步,并观察Xw、Hw、Yw的频谱。
![v2-69785e78b869c200ff592eac5ec15660_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/7558b83d2dc45719fa00c3fbd6725568.png)
![v2-1f192dfb0a52413f121d18f858a206bb_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/b2305717a8f98fe8b2a2d56226410219.png)
(二)理想高通滤波:
1.设计一截止频率为
![v2-43191b4308b5a20a784b814e3fdab14a_b.jpg](https://ss.csdn.net/p?https://pic3.zhimg.com/v2-43191b4308b5a20a784b814e3fdab14a_b.jpg)
对应的数字频率域(FFT)的系统函数的频率特性为:
![v2-5d6c25852d30f50abe3557c84c787697_b.jpg](https://ss.csdn.net/p?https://pic4.zhimg.com/v2-5d6c25852d30f50abe3557c84c787697_b.jpg)
2.按下图所示输入m文件,另存为lowfilter1.m ,并运行该程序。
![v2-7c37e55c6631d841be295b40be431b10_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/42914097587313b7fb56fd65be81f4c4.png)
2.双击lei7音频文件,用耳机试听效果,并跟lei1的效果比较。
3.将该m文件中的fl和fh分别改.后,运行程序试听效果。
4.在该m 文件中加入如下命令,重复第3步,并观察Xw、Hw、Yw的频谱。
![v2-e382b1b6ae4fc9af53756791d1e60dc7_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/415513c6b9f08d4cd8253663ed32c92f.png)
![v2-80e6b35b130449a1ef1ff4659eb63d6a_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/29bd44e701adc184d1afb7d52c9ac443.png)
基于MATLAB的语音加去噪和延时混响实验
实验说明:
1.本实验提供的beiguo.wav,lei1.wav,music.wav,shao.wav,wang.wav均为原始语音信号.
2.本实验中的jiazao.m为语音加噪实验,xiaozao.m为语音消噪实验,musicadd.m为语音全成实验,musicfilter.m为语音滤波实验,dlaymusic.m为语音混响实验.
实验步骤:
1.将本文件夹中的所有.m文件和所有原始语音信号都复制到MATLAB的work文件夹中。
2.打开MATLAB程序。
一、语音消噪实验
%%%%%%在语音中加噪声%%%%%%%
x1=wavread('lei1.wav');%读取原语音信号,lei1中无噪声.
fs=22050; %原语音信的采样率为22050Hz
fn=1000; %设定噪声的频率为1000Hz
t=1:length(x1); %设置噪声的度度跟原语音信一样长,
x2=2*sin(2*pi*fn/fs*t);%产生幅度为2频率为fn的正弦波作为噪声.
x=x1+x2'; %将原子核语音信号跟噪声相加,x为带有噪声的语音信号.
wavwrite(x,22050,'lei2.wav');%将带有噪声的语音信号转换为声音,lei2中将有噪声
1).在MATLAB中打开名为jiazao.m的程序,运行该程序,将在work中产生一个新的语音文件lei2.wav
2).通过试听对比lei1.wav和lei2.wav语音,看噪声是否加上。
二、语音消噪实验
%%%%%%消除语音中的噪声%%%%%%%
x1=wavread('lei2.wav');%读取原语音信号,lei2中带有噪声.
y=filter(hn,1,x); %将带有噪声的语音信号x经过带阻滤波器进行滤波,以达到消噪目的.
%Bndstop,FIR,Equiripple,Minimum order,Fs=22050,Fpass1=950,Fstop1=980,Fstop2=1020,Fpass2=1050,Apass1=1,Astop=60,Apass2=1
wavwrite(y,22050,'lei3.wav');%将经带阻滤波消噪后的信号转换为语音,lei3中将不再有噪声
1).在MATLAB中打开名为xiaozao.m的程序(暂时不运行)
2).在MATLAB左下角start中打开FDATool界面,按本程序m文件中注释的参数设计带阻滤波器,
并通过File-Export-填hn,将设计的滤波器系数导到工作空间。
3).运行该程序,将在work中产生另一个新的语音文件lei3.wav
4).通过试听对比lei2.wav和lei3.wav语音,看噪声是否消除。
三、语音滤波实验
%%%%%带阻和低通滤波%%%%%%%
x=wavread('shao.wav');%读取名为shao.wav的原语音信号
y=filter(hns,1,x); %带阻滤波,滤波器在FDATool中设计,并导到工空间,因本人的中低音太重,高音不足
%Hpass,FIR,Equiripple,Minmum order,Fs=22050,Fpass1=100,Fstop1=1500,Fstop2=1600,Fpass2=3000,Apass1=1,Astop=30,Apass=1.
yy=filter(hnh,1,y); %高通滤波,滤波器在FDATool中设计,并导到工空间,因本人的低音太重,高音不足
%Hpass,FIR,Equiripple,Minmum order,Fs=22050,Fstop=10,Fpass=4000,Astop=20,Apass=1
wavwrite(yy,22050,'shao2.wav');%将经混响后的信转换为语音,shao2.wav的语音中的中低频分量将有所衰减.
1).在MATLAB中打开名为musicfilter.m的程序(暂时不运行)
2)按本程序m文件中注释的参数分别设计带阻和高通滤波器,并通过File-Export-填hns和hnh,将设计的滤波器系数导到工作空间。
3).运行该程序,将在work中产生另一个新的语音文件lei4.wav
4).通过试听对比shao.wav和shao2.wav语音,看语音有可不同。
四、语音混响实验
%%%%%延时混响%%%%%%%
x=wavread('shao2.wav'); %读入原始声音
n=1200; %设定延迟时间t=n/fs秒,改变该数据可改变混响深度(时间间隔)
N=60; %y设定延迟级数为N级,改变该数据可改变次数
x1=[x;zeros(N*n,1)]; %将x通过补零延长到经N级延时后的长度
for i=1:N %进行N次延时,第一次延时在x前补n 个0,后补(N-1)*n个0
x2=[zeros(i*n,1);x;zeros((N-i)*n,1)]; %第i次延时在x前补i*n个0,后补(N-i)*n个0
x1=x1+1/(2*i)*x2; %将经延时的信号x1跟x逐次相加
end
wavwrite(x1,22050,'shao3.wav'); %将混响后的数据转换为声音
1).在MATLAB中打开名为dlaymusic.m的程序
2).运行该程序,将在work中产生另一个新的语音文件shao3.wav
3).通过试听对比shao.wav、shao2.wav和shao3.wav语音,看语音有可不同。
4).修改本程序中的n和N,并重复2)和3)的步骤。
五、语音合成实验
%%%%%将两首语音全成一首%%%%%%
m1=wavread('beiguo.wav');%读取一首语音m1
m2=wavread('wang.wav'); %读取另一首语音m2
if length(m1)>length(m2) %比较两首语音的长度,将短的补成跟长的相等
m3=[m2;zeros((length(m1)-length(m2)),1)];
else
m3=[m1;zeros((length(m2)-length(m1)),1)];
end
m=0.6*m1+m3; %将两个语音相加,为分辩明,将其中一个衰减
wavwrite(m,22050,'mu3.wav'); %将合成后的信转为语音
1).在MATLAB中打开名为musicadd.m的程序
2).运行该程序,将在work中产生另一个新的语音文件mu3.wav
3).通过试听对比beiguo.wav、wang.wav和mu3.wav语音,看语音有否不同。