1、题目2:基于Matlab的数字滤波器设计及其对语音信号的应用一 课程设计的目的:1掌握数字信号处理的基本概念、基本理论和基本方法; 2掌握MATLAB设计FIR和IIR数字滤波器的方法; 3掌握在Windows环境下语音信号采集以及时域、频域分析;4学会MATLAB的使用,掌握MATLAB的程序设计方法;5学会用MATLAB对信号进行分析和处理。二 课程设计内容:1录制一段自己的语音信号,对录制的信号进行采样;2画出采样后语音信号的时域波形和频谱图;3给定滤波器的性能指标,采matlab设计数字滤波器,并画出滤波器的频率响应;4用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和
2、频谱,并对滤波前后的信号进行对比,分析信号的变化;5回放语音信号。三.滤波器设计方法综述:(1)直接设计数字滤波器(2)脉冲相应不变法(3)双线性变换(4)使用matlab6下的Filter Designed Tool3利用Matlab设计数字滤波器的方法:设计思路:首先将数字高通滤波器的技术指标转化为模拟滤波器的技术指标,再采用Buttetworth逼近的方法求得其系统函数H(S),再利用冲激响应不变法将模拟滤波器的系统函数H(s)变为相应的数字滤波器的系统函数H(Z),然后用MATALB进行仿真,然后确定数字滤波器的结构。四.设计任务及步骤:1.语音信号的采集方法一:通过开始程序附件娱乐录
3、音机,录制一段自己的话音。方法二:或利用老师给的语音,在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。函数:wavrecord(2*fs,fs)程序如下:y,fs,bite=wavread(1.wav);sound(y)wavrecord(2*fs,fs);fft(y);Y=fft(y);fp=1000;fr=1200;as=40;ap=1;N, Wn = BUTTORD(2*fp/fs, 2*fr/fs, ap, as);B,A = BUTTER(N,Wn);2语音信号的频谱分析要求画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的
4、频谱特性。fft程序如下:y,fs,bite=wavread(1.wav);sound(y);Y=fft(y);mag=abs(Y); phase=angle(Y);phase=phase*180/pi;dB=20*log10(abs(Y)+eps);t=(0:length(y)-1)/fs;figure(1)subplot(221);plot(t,y);title(波形图);xlabel(时间(s);ylabel(幅度);f=(1:length(Y)*fs/length(Y);subplot(222);plot(f,mag);title(幅度谱);xlabel(频率(Hz);ylabel(频
5、谱幅度);subplot(223);plot(f,phase);title(相位谱);xlabel(频率(Hz);ylabel(频谱相位);subplot(224);plot(f,dB);title(对数幅度谱);xlabel(频率(Hz);ylabel(频谱幅度(dB);x1=wavread(f:s1.wav); %读取语音信号的数据,赋给变量x13设计数字滤波器,画出其频率响应曲线各滤波器的性能指标:(1)低通滤波器性能指标fp1000Hz, fs1200Hz, As40dB, Ap1dB。(2)高通滤波器性能指标fs4000Hz, fp4300Hz, As40dB, Ap1dB(3)带通
6、滤波器性能指标fp11200 Hz, fp23 000 Hz, fs11000 Hz, fs23200 Hz, As40dB, Ap1dB。要求:(1)频率变换法设计IIR滤波器: 可以利用函数butter、cheby1、cheby2和ellip等设计。(2)(选做)设计IIR滤波器:用双线性变换法设计上面要求的3种滤波器。bilinear(3)(选做)设计FIR滤波器:用窗函数法设计上面要求的3种滤波器。可以利用函数fir1设计FIR滤波器。(4)函数freqz画出各滤波器的频率响应。低通滤波器:1(频率变换法设计IIR滤波器)butter函数y,fs,bit=wavread(1);fp=1
7、000;fr=1200;ap=1;as=40;n,fn= buttord(fp/(fs/2),fr/(fs/2),ap,as,z);b,a=butter(n,fn);freqz(b,a);h,w=freqz(b,a);subplot(221);plot(w*fs/(2*pi),abs(h);title(butter低通滤波);y1=filter(b,a,y);y2=fftfilt(b,y);subplot(222);plot(y);title(原始语音信号);subplot(223);plot(y1);title(IIR滤波后语音信号);subplot(224);plot(y2);title(
8、FIR滤波后语音信号);sound(y1,fs,bit);2(频率变换法设计IIR滤波器)cheby1函数y,fs,bit=wavread(1);fp=1000;fr=1200;ap=1;as=40;n,fn=cheb1ord(fp/(fs/2),fr/(fs/2),ap,as,z);b,a=cheby1(n,ap,fn);freqz(b,a);h,w=freqz(b,a);subplot(221);plot(w*fs/(2*pi),abs(h);title(cheby1低通滤波);y1=filter(b,a,y);y2=fftfilt(b,y);subplot(222);plot(y);ti
9、tle(原始语音信号);subplot(223);plot(y1);title(IIR滤波后语音信号);subplot(224);plot(y2);title(FIR滤波后语音信号);sound(y1,fs,bit);3(频率变换法设计IIR滤波器)cheby2函数y,fs,bit=wavread(1);fp=1000;fr=1200;ap=1;as=40;n,fn=cheb2ord(fp/(fs/2),fr/(fs/2),ap,as,z);b,a=cheby2(n,ap,fn);freqz(b,a);h,w=freqz(b,a);subplot(221);plot(w*fs/(2*pi),a
10、bs(h);title(cheby2低通滤波);y1=filter(b,a,y);y2=fftfilt(b,y);subplot(222);plot(y);title(原始语音信号);subplot(223);plot(y1);title(IIR滤波后语音信号);subplot(224);plot(y2);title(FIR滤波后语音信号);sound(y1,fs,bit);得出来的信号波形如下:4(频率变换法设计IIR滤波器)ellip函数y,fs,bit=wavread(1);fp=1000;fr=1200;ap=1;as=40;n,fn=ellipord(fp/(fs/2),fr/(fs
11、/2),ap,as,z);b,a=ellip(n,ap,as,fn);freqz(b,a);h,w=freqz(b,a);subplot(221);plot(w*fs/(2*pi),abs(h);title(ellip低通滤波);y1=filter(b,a,y);y2=fftfilt(b,y);subplot(222);plot(y);title(原始语音信号);subplot(223);plot(y1);title(IIR滤波后语音信号);subplot(224);plot(y2);title(FIR滤波后语音信号);sound(y1,fs,bit);高通滤波器:1(频率变换法设计IIR滤波
12、器)butter函数y,fs,bit=wavread(1);fp=4300;fr=4000;ap=1;as=40;n,fn= buttord(fp/(fs/2),fr/(fs/2),ap,as,z);b,a=butter(n,fn,high);freqz(b,a);h,w=freqz(b,a);subplot(221);plot(w*fs/(2*pi),abs(h);title(butter高通滤波);y1=filter(b,a,y);y2=fftfilt(b,y);subplot(222);plot(y);title(原始语音信号);subplot(223);plot(y1);title(I
13、IR滤波后语音信号);subplot(224);plot(y2);title(FIR滤波后语音信号);2(频率变换法设计IIR滤波器)cheby1函数y,fs,bit=wavread(1);fp=4300;fr=4000;ap=1;as=40;n,fn=cheb1ord(fp/(fs/2),fr/(fs/2),ap,as,z);b,a=cheby1(n,ap,fn,high);freqz(b,a);h,w=freqz(b,a);subplot(221);plot(w*fs/(2*pi),abs(h);title(cheby1高通滤波);y1=filter(b,a,y);y2=fftfilt(b
14、,y);subplot(222);plot(y);title(原始语音信号);subplot(223);plot(y1);title(IIR滤波后语音信号);subplot(224);plot(y2);title(FIR滤波后语音信号);3(频率变换法设计IIR滤波器)cheby2函数y,fs,bit=wavread(1);fp=4300;fr=4000;ap=1;as=40;n,fn=cheb2ord(fp/(fs/2),fr/(fs/2),ap,as,z);b,a=cheby2(n,ap,fn,high);freqz(b,a);h,w=freqz(b,a);subplot(221);plo
15、t(w*fs/(2*pi),abs(h);title(cheby2高通滤波);y1=filter(b,a,y);y2=fftfilt(b,y);subplot(222);plot(y);title(原始语音信号);subplot(223);plot(y1);title(IIR滤波后语音信号);subplot(224);plot(y2);title(FIR滤波后语音信号);4(频率变换法设计IIR滤波器)ellip函数y,fs,bit=wavread(1);fp=4300;fr=4000;ap=1;as=40;n,fn=ellipord(fp/(fs/2),fr/(fs/2),ap,as,z);
16、b,a=ellip(n,ap,as,fn,high);freqz(b,a);h,w=freqz(b,a);subplot(221);plot(w*fs/(2*pi),abs(h);title(ellip高通滤波);y1=filter(b,a,y);y2=fftfilt(b,y);subplot(222);plot(y);title(原始语音信号);subplot(223);plot(y1);title(IIR滤波后语音信号);subplot(224);plot(y2);title(FIR滤波后语音信号);带通滤波器:1y,fs,bit=wavread(1);fp1=1200;fr1=1000;
17、fp2=3000;fr2=3200;ap=1;as=40;fp=fp1,fp2;fr=fr1,fr2;n,fn=buttord(fp/(fs/2),fr/(fs/2),ap,as,z);b,a=butter(n,fn);h,w=freqz(b,a);subplot(221);plot(w*fs/(2*pi),abs(h);title(butter带通滤波);y1=filter(b,a,y);y2=fftfilt(b,y);subplot(222);plot(y);title(原始语音信号);subplot(223);plot(y1);title(IIR滤波后语音信号);subplot(224)
18、;plot(y2);title(FIR滤波后语音信号);2y,fs,bit=wavread(1);fp1=1200;fr1=1000;fp2=3000;fr2=3200;ap=1;as=40;fp=fp1,fp2;fr=fr1,fr2;n,fn=cheb1ord(fp/(fs/2),fr/(fs/2),ap,as,z);b,a=cheby1(n,ap,fn);h,w=freqz(b,a);subplot(221);plot(w*fs/(2*pi),abs(h);title(cheby1带通滤波);y1=filter(b,a,y);y2=fftfilt(b,y);subplot(222);plo
19、t(y);title(原始语音信号);subplot(223);plot(y1);title(IIR滤波后语音信号);subplot(224);plot(y2);title(FIR滤波后语音信号);3y,fs,bit=wavread(1);fp1=1200;fr1=1000;fp2=3000;fr2=3200;ap=1;as=40;fp=fp1,fp2;fr=fr1,fr2;n,fn=cheb2ord(fp/(fs/2),fr/(fs/2),ap,as,z);b,a=cheby2(n,ap,fn);h,w=freqz(b,a);subplot(221);plot(w*fs/(2*pi),abs
20、(h);title(cheby2带通滤波);y1=filter(b,a,y);y2=fftfilt(b,y);subplot(222);plot(y);title(原始语音信号);subplot(223);plot(y1);title(IIR滤波后语音信号);subplot(224);plot(y2);title(FIR滤波后语音信号);4y,fs,bit=wavread(1);fp1=1200;fr1=1000;fp2=3000;fr2=3200;ap=1;as=40;fp=fp1,fp2;fr=fr1,fr2;n,fn=ellipord(fp/(fs/2),fr/(fs/2),ap,as,
21、z);b,a=ellip(n,ap,as,fn);h,w=freqz(b,a);subplot(221);plot(w*fs/(2*pi),abs(h);title(ellip带通滤波);y1=filter(b,a,y);y2=fftfilt(b,y);subplot(222);plot(y);title(原始语音信号);subplot(223);plot(y1);title(IIR滤波后语音信号);subplot(224);plot(y2);title(FIR滤波后语音信号);窗函数1.低通y,fs,bit=wavread(1);fr=1000;wr=2*pi*fr;Window=boxca
22、r(8);b=fir1(7,fr/(fs/2),Window);h,w=freqz(b,1);subplot(221);plot(w*fs/(2*pi),abs(h);title(低通滤波);y1=filter(b,1,y);y2=fftfilt(b,y);subplot(222);plot(y);title(原始语音信号);subplot(223);plot(y1);title(IIR滤波后语音信号);subplot(224);plot(y2);title(FIR滤波后语音信号);sound(y1,fs,bit);2.带通y,fs,bit=wavread(1);fr=1000;fp=3000
23、wr=2*pi*fr;Window=blackman(16);b=fir1(15,fr/(fs/2),fp/(fs/2),Window);h,w=freqz(b,1);subplot(221);plot(w*fs/(2*pi),abs(h);title(带通滤波);y1=filter(b,1,y);y2=fftfilt(b,y);subplot(222);plot(y);title(原始语音信号);subplot(223);plot(y1);title(IIR滤波后语音信号);subplot(224);plot(y2);title(FIR滤波后语音信号);sound(y1,fs,bit);3.
24、高通y,fs,bit=wavread(1);fr=3000;wr=2*pi*fr;Window=boxcar(8);b=fir1(7,fr/(fs/2),high);h,w=freqz(b,1);subplot(221);plot(w*fs/(2*pi),abs(h);title(低通滤波);y1=filter(b,1,y);y2=fftfilt(b,y);subplot(222);plot(y);title(原始语音信号);subplot(223);plot(y1);title(IIR滤波后语音信号);subplot(224);plot(y2);title(FIR滤波后语音信号);sound
25、(y1,fs,bit);双线性变换1.用双线行变换butter低通滤波y,fs,bit=wavread(1);fp=1000;fr=1200;wp=(fp/fs)*2*pi;ws=(fr/fs)*2*pi;OmegaP=2*fs*tan(wp/2);OmegaS=2*fs*tan(ws/2);ap=1;as=40;N,Wn=buttord(OmegaP,OmegaS,ap,as,s); %选择滤波器的最小阶数b,a=butter(N,Wn,s);bz,az=bilinear(b,a,fs);h,w=freqz(bz,az);subplot(221);plot(w*fs/(2*pi),abs(h
26、);title(butter低通滤波);y1=filter(bz,az,y);y2=fftfilt(bz,y);subplot(222);plot(y);title(原始语音信号);subplot(223);plot(y1);title(IIR滤波后语音信号);subplot(224);plot(y2);title(FIR滤波后语音信号);sound(y1,fs,bit);2.用双线行变换butter高通滤波y,fs,bit=wavread(1);fp=1000;fr=1200;wp=(fp/fs)*2*pi;ws=(fr/fs)*2*pi;OmegaP=2*fs*tan(wp/2);Omeg
27、aS=2*fs*tan(ws/2);ap=1;as=40;N,Wn=buttord(OmegaP,OmegaS,ap,as,s); %选择滤波器的最小阶数b,a=butter(N,Wn,high,s);bz,az=bilinear(b,a,fs);h,w=freqz(bz,az);subplot(221);plot(w*fs/(2*pi),abs(h);title(butter低通滤波);y1=filter(bz,az,y);y2=fftfilt(bz,y);subplot(222);plot(y);title(原始语音信号);subplot(223);plot(y1);title(IIR滤波
28、后语音信号);subplot(224);plot(y2);title(FIR滤波后语音信号);sound(y1,fs,bit);3.用双线行变换butter带通滤波y,fs,bit=wavread(1);fp1=1200;fr1=1000;fp2=3000;fr2=3200;fp=fp1 fp2;fr=fr1 fr2;wp=(fp/fs)*2*pi;ws=(fr/fs)*2*pi;OmegaP=2*fs*tan(wp/2);OmegaS=2*fs*tan(ws/2);ap=1;as=15;N,Wn=buttord(OmegaP,OmegaS,ap,as,s); %选择滤波器的最小阶数b,a=b
29、utter(N,Wn,s);%b1,a1=lp2bp(b,a,sqrt()bz,az=bilinear(b,a,fs);h,w=freqz(bz,az);subplot(221);plot(w*fs/(2*pi),abs(h);title(butter低通滤波);y1=filter(bz,az,y);y2=fftfilt(bz,y);subplot(222);plot(y);title(原始语音信号);subplot(223);plot(y1);title(IIR滤波后语音信号);subplot(224);plot(y2);title(FIR滤波后语音信号);sound(y1,fs,bit);
30、4)用滤波器对信号进行滤波,比较滤波前后语音信号的波形及频谱要求用自己设计的各滤波器分别对采集的语音信号进行滤波,并在一个窗口同时画出滤波前后的波形及频谱。(1) IIR滤波器利用函数filter对信号进行滤波;(2) FIR滤波器利用函数fftfilt对信号进行滤波。程序如下:x=filter(b,a,y);X=fft(x,4096);subplot(223);plot(x);title(滤波后信号波形);subplot(224);plot(abs(X);title(滤波后信号频谱);5)回放语音信号在Matlab中,函数sound可以对声音进行回放。其调用格式:sound(x,fs,bits);可以感觉滤波前后的声音有变化。原来已给的语音没有噪声,而滤波后出现了失真。