Matlab在语音信号处理中的应用.docx
- 文档编号:13281647
- 上传时间:2023-06-12
- 格式:DOCX
- 页数:32
- 大小:1,005.45KB
Matlab在语音信号处理中的应用.docx
《Matlab在语音信号处理中的应用.docx》由会员分享,可在线阅读,更多相关《Matlab在语音信号处理中的应用.docx(32页珍藏版)》请在冰点文库上搜索。
Matlab在语音信号处理中的应用
《数字信号处理》课程设计报告
学院(部)信息工程学院
专业电子信息工程
班级24030902
学生姓名周小军
学号2403090212
数字信号综合设计
一、实验目的
1.学会MATLAB的使用,掌握MATLAB的程序设计方法;
2.掌握在Windows环境下语音信号采集的方法;
3.掌握数字信号处理的基本概念、基本理论和基本方法;
4.掌握MATLAB设计FIR和IIR数字滤波器的方法;
5.学会用MATLAB对信号进行分析和处理。
二、实验原理
2.1语音信号采集和分析
运用windows下的录音机,录制一段自己的话音,时间控制在一秒。
然后在MATLAB软件平台下,利用函数wavread对语音信号进行采样,再运用plot函数画出语音信号的时域波形,最后在语音信号频谱分析时运用fft对信号进行快速傅里叶变换,得到频谱特性图形,具体运用见程序代码。
2.2滤波器设计和运用滤波器进行滤波
1)窗函数和等波纹逼近法设计FIR滤波器及滤波
首先根据阻带最小衰减选定窗口类型,然后调用fir1函数设计线性相位FIR数字滤波器,再用freqz函数画出其频谱图形,最后运用fftfilt函数对信号进行滤波。
而等波纹逼近法中则运用remez和remezord直接设计FIR滤波器,然后运用fftfilt函数对信号进行滤波。
具体见程序代码。
2)双线性变换法社设计IIR数字滤波器及滤波
首先将数字滤波器的技术指标运用预畸校正法转换成模拟滤波器的设计指标:
Ωph=2/T*tan(wp/2),然后用butter和buttord、cheby1和cheb1ord、ellip和ellipord设计各种模拟滤波器,再用bilinear函数进行模拟滤波器和数字滤波器之间的转换,最后用filter函数对语音信号进行滤波,并运用函数sound播放滤波后语音。
三、主要实验仪器及材料
微型计算机、Matlab7.x
四、实验程序代码、结果和滤波性能分析
1)语音信号采集及频谱分析
程序代码如下:
%语音信号的时域波形和频谱特性
clearall;closeall;clc;
file='zhong.wav';%zhong.wav的内容为“中华人民共和国”
[y,fs,nbits]=wavread(file);
sound(y,fs,nbits);
yn=fft(y);
figure
(1);
plot(y);
title(‘语音时域波形’);
figure
(2);
freqz(yn);
title(‘语音频谱特新’);
运行结果如下;
先会听到“中华人民共和国”,然后会看到如下图形:
图1语音时域波形
图2语音频谱
2)窗函数设计FIR滤波器及滤波
程序代码如下:
%用凯瑟窗设计FIR低通滤波器
clearall;closeall;clc;
fp=1000;fs=1200;rs=100;Fs=8000;%kaiser滤波器设计
wp=2*pi*fp/Fs;ws=2*pi*fs/Fs;
Bt=ws-wp;
alph=0.112*(rs-8.7);
M=ceil((rs-8)/2.285/Bt);
wc=(wp+ws)/2/pi;
hn=fir1(M,wc,kaiser(M+1,alph));
figure
(1);
freqz(hn);
[y,fn,nbits]=wavread('zhong');
Y=fft(y);
y1=fftfilt(hn,y);%利用kaiser滤波器对语音信号滤波
Y1=fft(y1);
n=0:
length(y)-1;
figure
(2);
subplot(221);plot(y);title('未滤波语音波形');
subplot(222);plot(y1);title('滤波后语音波形');
subplot(223);plot(n,Y);title('未滤波语音频谱');
subplot(224);plot(n,Y1);title('滤波后语音频谱');
sound(y1,fn,nbits);%滤波后语音回放
运行结果如下:
图3凯瑟窗设计FIR低通滤波器
图4Kaiser滤波器滤波前后语音波形、频谱
%用凯瑟窗设计FIR数字高通滤波器
clearall;closeall;clc;
fp=3000;fs=2800;FS=8000;as=100;
wp=2*pi*fp/FS;ws=2*pi*fs/FS;
Bt=wp-ws;
alph=0.112*(as-8.7);
M=ceil(as-8/2.285/Bt);
wc=(wp+ws)/2/pi;
hn=fir1(M,wc,'high',kaiser(M+1,alph));
figure
(1);
freqz(hn)
[y,fn,nbits]=wavread('zhong');
Y=fft(y);
y1=fftfilt(hn,y);%用kaiser滤波器进行滤波
Y1=fft(y1);
n=0:
length(y)-1;
figure
(2);
subplot(221);plot(y);title('未滤波语音波形');
subplot(222);plot(y1);title('滤波后语音波形');
subplot(223);plot(n,Y);title('未滤波语音频谱');
subplot(224);plot(n,Y1);title('滤波后语音频谱');
sound(y1,fn,nbits);%滤波后语音回放
运行结果:
图5凯瑟窗设计FIR数字高通滤波器
图6Kaiser滤波器滤波前后语音波形、频谱
%用凯瑟窗设计FIR数字带通滤波器
clearall;closeall;clc;
fp1=1200;fp2=300;fc1=1000;fc2=3200;FS=8000;as=100;
wlp=2*pi*fp1/FS;wls=2*pi*fc1/FS;wup=2*pi*fp2/FS;wus=2*pi*fc2/FS;
Bt=min(wlp-wls,wus-wup);
alph=0.112*(as-8.7);
M=ceil(as-8/2.285/Bt);
wc=[(wlp+wls)/2/pi,(wup+wus)/2/pi];
hn=fir1(M,wc,'bandpass',kaiser(M+1,alph));
figure
(1);
freqz(hn);
[y,fn,nbits]=wavread('zhong');
Y=fft(y);
y1=fftfilt(hn,y);%用kaiser滤波器进行滤波
Y1=fft(y1);
n=0:
length(y)-1;
figure
(2);
subplot(221);plot(y);title('未滤波语音波形');
subplot(222);plot(y1);title('滤波后语音波形');
subplot(223);plot(n,Y);title('未滤波语音频谱');
subplot(224);plot(n,Y1);title('滤波后语音频谱');
sound(y1,fn,nbits);%滤波后语音回放
运行结果:
图7凯瑟窗设计FIR数字带通滤波器
图8Kaiser滤波器滤波前后语音波形、频谱
3 )等波纹逼近法设计FIR滤波器及滤波
程序代码如下:
%等波纹逼近法设计FIR低通滤波器及滤波fp=1000;fs=1200;FS=8000;rp=1;rs=100;
f=[fp,fs];
m=[1,0];
dat1=(10^(rp/20)-1)/(10^(rp/20)+1);dat2=10^(-rs/20);
rip=[dat1,dat2];
[M,fo,mo,w]=remezord(f,m,rip,FS);
M=M+1;
hn=remez(M,fo,mo,w);
figure
(1);
freqz(hn);
[y,fn,nbits]=wavread('zhong');
Y=fft(y);
y1=fftfilt(hn,y);%用remez设计的滤波器进行滤波
Y1=fft(y1);
n=0:
length(y)-1;
figure
(2);
subplot(221);plot(y);title('未滤波语音波形');
subplot(222);plot(y1);title('滤波后语音波形');
subplot(223);plot(n,Y);title('未滤波语音频谱');
subplot(224);plot(n,Y1);title('滤波后语音频谱');
sound(y1,fn,nbits);%滤波后语音回放
运行结果如下:
图9等波纹逼近法设计FIR低通滤波器及滤波
图10等波纹逼近法设计数字滤波器滤波前后语音波形、频谱
%等波纹逼近法设计FIR高通滤波器及滤波
fp=3000;fs=2800;FS=8000;rp=1;rs=100;
f=[fs,fp];
m=[0,1];
dat1=(10^(rp/20)-1)/(10^(rp/20)+1);dat2=10^(-rs/20);
rip=[dat2,dat1];
[M,fo,mo,w]=remezord(f,m,rip,FS);
M=M+1;
hn=remez(M,fo,mo,w);
figure
(1);
freqz(hn);
[y,fn,nbits]=wavread('zhong');
Y=fft(y);
y1=fftfilt(hn,y);%用remez设计的滤波器进行滤波
Y1=fft(y1);
n=0:
length(y)-1;
figure
(2);
subplot(221);plot(y);title('未滤波语音波形');
subplot(222);plot(y1);title('滤波后语音波形');
subplot(223);plot(n,Y);title('未滤波语音频谱');
subplot(224);plot(n,Y1);title('滤波后语音频谱');
sound(y1,fn,nbits);%滤波后语音回放
运行结果如下:
图11等波纹逼近法设计FIR高通滤波器
图12等波纹逼近法设计数字滤波器滤波前后语音波形、频谱
%等波纹逼近法设计FIR带通滤波器及滤波
fp1=1200;fp2=3000;fc1=1000;fc2=3200;FS=8000;rp=1;rs=100;
f=[fc1,fp1,fp2,fc2];
m=[0,1,0];
dat1=(10^(rp/20)-1)/(10^(rp/20)+1);dat2=10^(-rs/20);
rip=[dat2,dat1,dat2];
[M,fo,mo,w]=remezord(f,m,rip,FS);
M=M+1;
hn=remez(M,fo,mo,w);
figure
(1);
freqz(hn);
[y,fn,nbits]=wavread('zhong');
Y=fft(y);
y1=fftfilt(hn,y);%用remez设计的滤波器进行滤波
Y1=fft(y1);
n=0:
length(y)-1;
figure
(2);
subplot(221);plot(y);title('未滤波语音波形');
subplot(222);plot(y1);title('滤波后语音波形');
subplot(223);plot(n,Y);title('未滤波语音频谱');
subplot(224);plot(n,Y1);title('滤波后语音频谱');
sound(y1,fn,nbits);%滤波后语音回放
运行结果如下:
图13%等波纹逼近法设计FIR高通滤波器及滤波
图14等波纹逼近法设计数字滤波器滤波前后语音波形、频谱
4 )双线性变换法设计IIR数字滤波器
1.butter设计模拟滤波器,再经双线性变换法设计IIR数字滤波器
程序代码如下:
%butter设计模拟低通滤波器再用双线性变换法设计IIR数字低通滤波器
clearall;closeall;clc;
fp=1000;fc=1200;FS=8000;rp=1;rs=100;
wpz=2*pi*1000/FS;wsz=2*pi*1200/FS;
wp=2*tan(wpz/2)*FS;ws=2*tan(wsz/2)*FS;%预畸校正转换指标
[N,wc]=buttord(wp,ws,rp,rs,'s');
[B,A]=butter(N,wc,'s');
[Bz,Az]=bilinear(B,A,FS);
w=0:
0.01*pi:
pi;
[h,w]=freqz(Bz,Az,w);
figure
(1);
plot(w/pi,20*log(abs(h)),'k');axis([0,1,-800,100]);
xlabel('w/pi');ylabel('幅度/dB');grid;
title('butter数字低通滤波器');
[y,fn,nbits]=wavread('zhong');
Y=fft(y);
y1=filter(Bz,Az,y);
Y1=fft(y1);
n=0:
length(y)-1;
figure
(2);
subplot(221);plot(y);title('未滤波语音波形');
subplot(222);plot(y1);title('滤波后语音波形');
subplot(223);plot(n,Y);title('未滤波语音频谱');
subplot(224);plot(n,Y1);title('滤波后语音频谱');
sound(y1,fn,nbits);%滤波后语音回放
运行结果如下:
图15butter设计的数字低通滤波器频谱
图16滤波前后语音信号的时域波形和频谱
%butter设计数字高通滤波器(此处直接运用了butter设计数字高通滤波器)
clearall;closeall;clc;
fp=3000;fc=2800;rp=1;rs=100;FS=8000;
wp=2*pi*1000/FS;ws=2*pi*1200/FS;
[N,wc]=buttord(wp,ws,rp,rs);
[B,A]=butter(N,wc,'high');
w=0:
0.01*pi:
pi;
[h,w]=freqz(B,A,w);
figure
(1);
plot(w/pi,20*log(abs(h)),'k');axis([0,1,-800,100]);
xlabel('w/pi');ylabel('幅度/dB');grid;
title('butter数字高通滤波器');
[y,fn,nbits]=wavread('zhong');
Y=fft(y);
y1=filter(B,A,y);
Y1=fft(y1);
n=0:
length(y)-1;
figure
(2);
subplot(221);plot(y);title('未滤波语音波形');
subplot(222);plot(y1);title('滤波后语音波形');
subplot(223);plot(n,Y);title('未滤波语音频谱');
subplot(224);plot(n,Y1);title('滤波后语音频谱');
sound(y1,fn,nbits);%滤波后语音回放
运行结果如下:
图17butter设计的数字高通滤波器频谱
图18滤波前后语音信号的时域波形和频谱
%butter设计数字带通滤波器(此处直接运用了butter设计数字带通滤波器)
clearall;closeall;clc;
fp1=1200;fp2=3000;fc1=1000;fc2=3200;rp=1;rs=100;FS=8000;
wp=[2*fp1/FS,2*fp2/FS];ws=[2*fc1/FS,2*fc2/FS];
[N,wc]=buttord(wp,ws,rp,rs);
[B,A]=butter(N,wc);
w=0:
0.01*pi:
pi;
[h,w]=freqz(B,A,w);
figure
(1);
plot(w/pi,20*log(abs(h)),'k');axis([0,1,-1000,100]);
xlabel('w/pi');ylabel('幅度/dB');grid;
title('butter数字带通滤波器');
[y,fn,nbits]=wavread('zhong');
Y=fft(y);
y1=filter(B,A,y);
Y1=fft(y1);
n=0:
length(y)-1;
figure
(2);
subplot(221);plot(y);title('未滤波语音波形');
subplot(222);plot(y1);title('滤波后语音波形');
subplot(223);plot(n,Y);title('未滤波语音频谱');
subplot(224);plot(n,Y1);title('滤波后语音频谱');
sound(y1,fn,nbits);%滤波后语音回放
运行结果如下:
图19butter设计的数带低通滤波器频谱
图20滤波前后语音信号的时域波形和频谱
2.cheby1设计模拟滤波器,然后经双线性变换法设计数字滤波器
程序代码如下:
%cheby1设计模拟低通滤波器再经双线性变换法设计成低通数字滤波器
fp=1000;fc=1200;rp=1;rs=100;FS=8000;
wpz=2*pi*fp/FS;wsz=2*pi*fc/FS;
wp=2*tan(wpz/2)*FS;ws=2*tan(wsz/2)*FS;%预畸校正转换指标
[N,wpo]=cheb1ord(wp,ws,rp,rs,'s');
[BH,AH]=cheby1(N,rp,wpo,'s');
[Bz,Az]=bilinear(BH,AH,FS);
w=0:
0.01*pi:
pi;
[h,w]=freqz(Bz,Az,w);
figure
(1);
plot(w/pi,20*log(abs(h)),'k');axis([0,1,-800,100]);
xlabel('w/pi');ylabel('幅度/dB');grid;
title('cheby1数字低通滤波器');
[y,fn,nbits]=wavread('zhong');
Y=fft(y);
y1=filter(Bz,Az,y);
Y1=fft(y1);
n=0:
length(y)-1;
figure
(2);
subplot(221);plot(y);title('未滤波语音波形');
subplot(222);plot(y1);title('滤波后语音波形');
subplot(223);plot(n,Y);title('未滤波语音频谱');
subplot(224);plot(n,Y1);title('滤波后语音频谱');
sound(y1,fn,nbits);%滤波后语音回放
运行结果如下:
图21cheby1数字低通滤波器
图22滤波前后语音信号的时域波形和频谱
%cheby1设计模拟高通滤波器再经双线性变换法设计成数字高通滤波器
fp=3000;fc=2800;rp=1;rs=100;FS=8000;
wpz=2*pi*fp/FS;wsz=2*pi*fc/FS;
wp=2*tan(wpz/2)*FS;ws=2*tan(wsz/2)*FS;%预畸校正转换指标
[N,wpo]=cheb1ord(wp,ws,rp,rs,'s');
[BH,AH]=cheby1(N,rp,wpo,'high','s');
[Bz,Az]=bilinear(BH,AH,FS);
w=0:
0.01*pi:
pi;
[h,w]=freqz(Bz,Az,w);
plot(w/pi,20*log(abs(h)),'k');axis([0,1,-800,100]);
xlabel('w/pi');ylabel('幅度/dB');grid;
title('cheby1数字高通滤波器');
[y,fn,nbits]=wavread('zhong');
Y=fft(y);
y1=filter(Bz,Az,y);
Y1=fft(y1);
n=0:
length(y)-1;
figure
(2);
subplot(221);plot(y);title('未滤波语音波形');
subplot(222);plot(y1);title('滤波后语音波形');
subplot(223);plot(n,Y);title('未滤波语音频谱');
subplot(224);plot(n,Y1);title('滤波后语音频谱');
sound(y1,fn,nbits);%滤波后语音回放
运行结果如下:
图2cheby1数字高通滤波器
图24滤波前后语音信号的时域波形和频谱
%cheby1设计模拟带通滤波器再经双线性变换法设计成数字带通滤波器
fp1=1200;fp2=3000;fc1=1000;fc2=3200;rp=1;rs=100;FS=8000;
wpz=[2*pi*fp1/FS,2*pi*fp2/FS];wsz=[2*pi*fc1/FS,2*pi*fc2/FS];
wp=2*tan(wpz/2)*FS;ws=2*tan(wsz/2)*FS;%预畸校正转换指标[N,wpo]=cheb1ord(wp,ws,rp,rs,'s');
[BH,AH]=cheby1(N,rp,wpo,'s');
[Bz,Az]=bilinear(BH,AH,FS);
w=0:
0.01*pi:
pi;
[h,w]=freqz(Bz,Az,w);
figure
(1);
plot(w/pi,20*log(abs(h)),'k');axis([0,1,-1000,100]);
xlabel('w/pi');ylabel('幅度/dB');grid;
title('数字带通滤波器');
[y,fn,nbits]=wavread('zhong');
Y=fft(y);
y1=filter(Bz,Az,y);
Y1=fft(y1);
n=0:
length(y)-1;
figure
(2);
subplot(221);plot(y);title('未滤波语音波形');
subplot(222);plot(y1);title('滤波后语音波形');
subplot(223);plot(n,Y);title('未滤波语音频谱');
subplot(224);plot(n,Y1);title('滤波后语音频谱');
sound(y1,fn,nbits);%滤波后语音回放
运行结果如下:
图25cheby1数字带通滤波器
图26滤波前后语音信号的时域波形和频谱
3.ellip设计模拟滤波器,然后经双线性变换法设计数字滤波器
%ellip设计模拟低通滤波器再经双线性变换法设计数字低通滤波器
f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 语音 信号 处理 中的 应用
![提示](https://static.bingdoc.com/images/bang_tan.gif)