matlab语音信号采集与初步处理要点.docx
- 文档编号:24855954
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:19
- 大小:272.62KB
matlab语音信号采集与初步处理要点.docx
《matlab语音信号采集与初步处理要点.docx》由会员分享,可在线阅读,更多相关《matlab语音信号采集与初步处理要点.docx(19页珍藏版)》请在冰豆网上搜索。
matlab语音信号采集与初步处理要点
《matlab与信号系统》实验报告
学院:
学号:
姓名:
考核实验——语音信号采集与处理初步
一、课题要求
1.语音信号的采集
2.语音信号的频谱分析
3.设计数字滤波器和画出频率响应
4.用滤波器对信号进行滤波
5.比较滤波前后语音信号的波形及频谱
6.回放和存储语音信号
(第5、第6步我放到一起做了)
二、语音信号的采集
本段音频文件为胡夏演唱的“那些年”的前奏(采用Audition音频软件进行剪切,时长17秒)。
运行matlab软件,在当前目录中打开原音频文件所在的位置,采用wavread函数对其进行采样,并用sound函数可进行试听,程序运行之后记下采样频率和采样点。
利用函数wavread对语音信号的采集的程序如下:
clear;
[y,fs,bits]=wavread('music.wav');%x:
语音数据;fs:
采样频率;bits:
采样点数
sound(y,fs,bits);%话音回放
程序运行之后,在工作区间中可以看到采样频率fs=44100Hz,采样点bits=16
三、语音信号的频谱分析
先画出语音信号的时域波形,然后对语音号进行快速傅里叶变换,得到信号的频谱特性。
语音信号的FFT频谱分析的完整程序如下:
clear;
[y,fs,bits]=wavread('music.wav');%x:
语音数据;fs:
采样频率;bits:
采样点数
sound(y,fs,bits);%话音回放
n=length(y);%求出语音信号的长度
Y=fft(y,n);%傅里叶变换
subplot(2,1,1);
plot(y);
title('原始信号波形');
subplot(2,1,2);
plot(abs(Y));title('原始信号频谱');
程序结果如下图:
四、设计数字滤波器和画出频率响应
根据语音信号的特点给出有关滤波器的性能指标:
1)低通滤波器性能指标,fp=1000Hz,fc=1200Hz,As=100dB,Ap=1dB;
2)高通滤波器性能指标,fc=4800Hz,fp=5000HzAs=100dB,Ap=1dB。
要求学生分别用窗函数法和双线性变换法设计上面要求的两种滤波器,在MATLAB中,可以利用函数fir1设计FIR滤波器;用函数butte设计IIR滤波器;最后,利用MATLAB中的函数freqz画出各滤波器的频率响应。
分析如下:
函数fir1默认的设计滤波器的方法为窗函数法,其中可选的窗函数有RectangularBarlrttHammingHannBlackman窗,其相应的都有实现函数。
函数butter,cheby1和ellip设计IIR滤波器时都是默认的双线性变换法,所以在设计滤波器时只需要代入相应的实现函数即可。
1、IIR低通滤波器:
Ft=8000;
Fp=1000;
Fs=1200;
wp=2*pi*Fp/Ft;
ws=2*pi*Fs/Ft;
fp=2*Ft*tan(wp/2);
fs=2*Fs*tan(wp/2);
[n11,wn11]=buttord(wp,ws,1,50,'s');%求低通滤波器的阶数和截止频率
[b11,a11]=butter(n11,wn11,'s');%求S域的频率响应的参数
[num11,den11]=bilinear(b11,a11,0.5);%利用双线性变换实现频率响应S域到Z域的变换
[h,w]=freqz(num11,den11);%根据参数求出频率响应
plot(w*8000*0.5/pi,abs(h));
title('IIR低通滤波器');
legend('用butter设计');
grid;
2、IIR高通滤波器:
Ft=8000;
Fp=5000;
Fs=4800;
wp1=tan(pi*Fp/Ft);%高通到低通滤波器参数转换
ws1=tan(pi*Fs/Ft);
wp=1;
ws=wp1*wp/ws1;
[n13,wn13]=cheb1ord(wp,ws,1,100,'s');%求模拟的低通滤波器阶数和截止频率
[b13,a13]=cheby1(n13,1,wn13,'s');%求S域的频率响应的参数
[num,den]=lp2hp(b13,a13,wn13);%将S域低通参数转为高通的
[num13,den13]=bilinear(num,den,0.5);%利用双线性变换实现频率响应S域到Z域转换
[h,w]=freqz(num13,den13);
plot(w*21000*0.5/pi,abs(h));
title('IIR高通滤波器');
legend('用cheby1设计');
axis([01200001.5]);
grid;
3、FIR低通滤波器:
用窗函数设计低通滤波器的程序如下:
Ft=8000;
Fp=1000;
Fs=1200;
wp=2*Fp/Ft;
ws=2*Fs/Ft;
rp=1;
rs=100;
p=1-10.^(-rp/20);%通带阻带波纹
s=10.^(-rs/20);
fpts=[wpws];
mag=[10];
dev=[ps];
[n21,wn21,beta,ftype]=kaiserord(fpts,mag,dev);%由kaiserord求滤波器的阶数和截止频率
b21=fir1(n21,wn21,Kaiser(n21+1,beta));%由fir1设计滤波器
[h,w]=freqz(b21,1);%得到频率响应
plot(w/pi,abs(h));
title('FIR低通滤波器');
grid;
4、FIR高通滤波器:
高通滤波器的性能指标:
fp=3500Hz,fc=4000Hz,As=50dB,Ap=1dB;
(由于边界频率必须位于采样频率的中间值,此时指标略微有些改动,望老师见谅)
Ft=8001;
Fp=4000;
Fs=3500;
wp=2*Fp/Ft;
ws=2*Fs/Ft;
rp=1;
rs=100;
p=1-10.^(-rp/20);%通带阻带波纹
s=10.^(-rs/20);
fpts=[wswp];
mag=[01];
dev=[ps];
[n23,wn23,beta,ftype]=kaiserord(fpts,mag,dev);
b23=fir1(n23,wn23,'high',Kaiser(n23+1,beta));%由fir1设计滤波器
[h,w]=freqz(b23,1);%得到频率响应
plot(w*12000*0.5/pi,abs(h));
title('FIR高通滤波器');
axis([3000600001.2]);
grid;
五、用滤波器对信号进行滤波
比较两种滤波器(FIR和IIR)的性能,然后用性能好的各滤波器(低通、高通)分别对采集的信号进行滤波,在MATLAB中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。
1、双线性变换法:
(1)低通滤波器:
z11=filter(num11,den11,s);
(2)高通滤波器:
z12=filter(num12,den12,s);
2、窗函数法:
(1)低通滤波器:
z21=fftfilt(b21,s);
(2)高通滤波器:
z22=fftfilt(b22,s);
六、比较滤波前后语音信号的波形、频谱、声音的变化
要求:
(1)要求在一个窗口同时画出滤波前后的波形及频谱;
(2)用函数sound对声音进行回放。
感觉滤波前后声音的变化;
(3)用函数wavwrite对滤波后的文件进行存储存储
1、双线性变换法——低通滤波器
IIR低通:
clear;
[y,fs,bits]=wavread('music.wav');%x:
语音数据;fs:
采样频率;bits:
采样点数
sound(y,fs,bits);%话音回放
n=length(y);%求出语音信号的长度
Y=fft(y,n);%傅里叶变换
Ft=8000;
Fp=1000;
Fs=1200;
wp=2*pi*Fp/Ft;
ws=2*pi*Fs/Ft;
fp=2*Ft*tan(wp/2);
fs=2*Fs*tan(wp/2);
[n11,wn11]=buttord(wp,ws,1,50,'s');%求低通滤波器的阶数和截止频率
[b11,a11]=butter(n11,wn11,'s');%求S域的频率响应的参数
[num11,den11]=bilinear(b11,a11,0.5);%利用双线性变换实现频率响应S域到Z域的变换
[h,w]=freqz(num11,den11);%根据参数求出频率响应
z11=filter(num11,den11,y);
sound(z11);
m11=fft(z11);%求滤波后的信号
subplot(2,2,1);
plot(abs(Y),'g');
title('滤波前信号的频谱');
grid;
subplot(2,2,2);
plot(abs(m11),'r');
title('滤波后信号的频谱');
grid;
subplot(2,2,3);
plot(y);
title('滤波前信号的波形');
grid;
subplot(2,2,4);
plot(z11);
title('滤波后的信号波形');
grid;
wavwrite(y,'IIR低通.wav');%滤波后的音频信号名为“IIR低通.wav”
2、双线性变换法——高通滤波器
IIR高通:
clear;
[y,fs,bits]=wavread('music.wav');%x:
语音数据;fs:
采样频率;bits:
采样点数
sound(y,fs,bits);%话音回放
n=length(y);%求出语音信号的长度
Y=fft(y,n);%傅里叶变换
Ft=8000;
Fp=5000;
Fs=4800;
wp1=tan(pi*Fp/Ft);%高通到低通滤波器参数转换
ws1=tan(pi*Fs/Ft);
wp=1;
ws=wp1*wp/ws1;
[n12,wn12]=cheb1ord(wp,ws,1,100,'s');%求模拟的低通滤波器阶数和截止频率
[b12,a12]=cheby1(n12,1,wn12,'s');%求S域的频率响应的参数
[num,den]=lp2hp(b12,a12,wn12);%将S域低通参数转为高通的
[num12,den12]=bilinear(num,den,0.5);%利用双线性变换实现频率响应S域到Z域转换
[h,w]=freqz(num12,den12);
z12=filter(num12,den12,y);
sound(z12);
m12=fft(z12);%求滤波后的信号
subplot(2,2,1);
plot(abs(Y),'g');
title('滤波前信号的频谱');
grid;
subplot(2,2,2);
plot(abs(m12),'r');
title('滤波后信号的频谱');
grid;
subplot(2,2,3);
plot(y);
title('滤波前信号的波形');
grid;
subplot(2,2,4);
plot(z12);
title('滤波后的信号波形');
grid;
wavwrite(y,'IIR高通.wav');%滤波后的音频信号名为“IIR高通.wav”
高通滤波后,此时只有少许杂音,原因是低频分量被高通滤波器衰减,而人声部分正好是低频部分,所以只剩下杂音,或者发出高频杂音但人的耳朵听不到。
3、窗函数法——低通滤波器
FIR低通:
clear;
[y,fs,bits]=wavread('music.wav');%x:
语音数据;fs:
采样频率;bits:
采样点数
sound(y,fs,bits);%话音回放
n=length(y);%求出语音信号的长度
Y=fft(y,n);%傅里叶变换
Ft=8000;
Fp=1000;
Fs=1200;
wp=2*Fp/Ft;
ws=2*Fs/Ft;
rp=1;
rs=100;
p=1-10.^(-rp/20);%通带阻带波纹
s=10.^(-rs/20);
fpts=[wpws];
mag=[10];
dev=[ps];
[n21,wn21,beta,ftype]=kaiserord(fpts,mag,dev);%由kaiserord求滤波器的阶数和截止频率
b21=fir1(n21,wn21,Kaiser(n21+1,beta));%由fir1设计滤波器
[h,w]=freqz(b21,1);%得到频率响应
z21=fftfilt(b21,y);
sound(z21);
m21=fft(z21);%求滤波后的信号
subplot(2,2,1);
plot(abs(Y),'g');
title('滤波前信号的频谱');
grid;
subplot(2,2,2);
plot(abs(m21),'r');
title('滤波后信号的频谱');
grid;
subplot(2,2,3);
plot(y);
title('滤波前信号的波形');
grid;
subplot(2,2,4);
plot(z21);
title('滤波后的信号波形');
grid;
wavwrite(y,'FIR低通.wav');%滤波后的音频信号名为“'FIR低通.wav”
4、窗函数法——高通滤波器
FIR高通:
clear;
[y,fs,bits]=wavread('music.wav');%x:
语音数据;fs:
采样频率;bits:
采样点数
sound(y,fs,bits);%话音回放
n=length(y);%求出语音信号的长度
Y=fft(y,n);%傅里叶变换
Ft=8001;
Fp=4000;
Fs=3500;
wp=2*Fp/Ft;
ws=2*Fs/Ft;
rp=1;
rs=100;
p=1-10.^(-rp/20);%通带阻带波纹
s=10.^(-rs/20);
fpts=[wswp];
mag=[01];
dev=[ps];
[n22,wn22,beta,ftype]=kaiserord(fpts,mag,dev);
b22=fir1(n22,wn22,'high',Kaiser(n22+1,beta));%由fir1设计滤波器
[h,w]=freqz(b22,1);%得到频率响应
z22=fftfilt(b22,y);
sound(z22);
m22=fft(z22);%求滤波后的信号
subplot(2,2,1);
plot(abs(Y),'g');
title('滤波前信号的频谱');
grid;
subplot(2,2,2);
plot(abs(m22),'r');
title('滤波后信号的频谱');
grid;
subplot(2,2,3);
plot(y);
title('滤波前信号的波形');
grid;
subplot(2,2,4);
plot(z22);
title('滤波后的信号波形');
grid;
wavwrite(y,'FIR高通.wav');%滤波后的音频信号名为“'FIR高通.wav”
七、实验结论
经过IIR低通滤波器、IIR高通滤波器、FIR低通滤波器、FIR高通滤波器等四种
滤波器的设计及滤波发现,FIR滤波器滤除的成分更多,且在高通滤波中FIRl滤波器具有更好的线性。
从以上各种数字滤波器经过滤波后得出的语音信号相比较,低通滤波后,声音稍微有些发闷;高通滤波后听不到人的声音。
从频谱图中我们可以看出声音的能量主要集中在低频(0.2pi即2204.5Hz以内)部分。
八、课程总结
通过这次的课程设计,我进一步熟悉了Matlab的使用,我感觉到Matlab软件功能的强大。
这次个人语音信号处理里,比较重要的函数有wavread函数、sound函数等,通过上网和在图书馆查找相关书籍,了解了他们的基本用法。
关于滤波也是很重要的一部分,即FIR滤波器的设计。
通过本次实验,我基本掌握了程序编辑和解决实际问题的技巧,同时也了解到了理论联系实践的重要性。
这次的课程设计让我们把平时所学到的知识真正的运用于实际,让我们体会到专业课学习的乐趣,在今后的实验中我会更加努力。
同时,也非常感谢我们的刘军清老师!
从课程设计材料的搜集到根据选题对素材的提取与整理,从Matlab的简易入手到程序的分析与设计,从理论与算法到程序的编写与仿真,上课时都有刘老师的细心指导与讲解。
在浩瀚的知识海洋面前,使我感觉到自己要不断进取。
2009111222梅亚敏
2012年6月9日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 语音 信号 采集 初步 处理 要点