#Matlab在语音信号处理中应用.docx
《#Matlab在语音信号处理中应用.docx》由会员分享,可在线阅读,更多相关《#Matlab在语音信号处理中应用.docx(30页珍藏版)》请在冰豆网上搜索。
#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数字滤波器
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滤波前后语音信号地时域波形和频谱
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滤波前后语音信号地时域波形和频谱
ellip设计模拟滤波器,然后经双线性变换法设计数字滤波器
%ellip设计模拟低通滤波器再经双线性变换法设计数字低通滤波器
fp=1000。
fc=1200。
rp=1。
rs=100。
FS=800