Matlab在语音信号处理中的应用.docx
《Matlab在语音信号处理中的应用.docx》由会员分享,可在线阅读,更多相关《Matlab在语音信号处理中的应用.docx(29页珍藏版)》请在冰豆网上搜索。
Matlab在语音信号处理中的应用
《数字信号处理》课程设计报告
学院(部)信息工程学院
专业电子信息工程
班级24030902
学生姓名周小军
学号**********
数字信号综合设计
一、实验目的
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('