1、基于MATLAB的数字滤波器设计及其对语音信号的应用班级:电信1001 姓名:马维民学号:1010930110指导教师:刘丽杰 耿磊日期:2023-11-28课程设计的目的:1)掌握数字信号处理的根本概念、根本理论和根本方法; 2)掌握MATLAB设计FIR和IIR数字滤波器的方法; 3)掌握在Windows环境下语音信号采集以及时域、频域分析;4)学会MATLAB的使用,掌握MATLAB的程序设计方法;5)学会用MATLAB对信号进行分析和处理。1. 课程设计内容:1)录制一段自己的语音信号,对录制的信号进行采样;2)画出采样后语音信号的时域波形和频谱图;3)给定滤波器的性能指标,采MATL
2、AB设计数字滤波器,并画出滤波器的频率响应;4)然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行比照,分析信号的变化;5)回放语音信号。2. 滤波器设计方法综述:1)直接设计数字滤波器;数字滤波器是数字信号处理的一个重要组成局部。数字滤波实际上是一种运算过程,其功能是将一组输入的数字序列通过一定的运算后转变为另一组输出的数字序列。数字滤波器一般可以用两种方法来实现:一种是根据描述数字滤波器的数学模型或信号流图,用数字硬件装配成一台专门的设备,构成专用的信号处理机;另一种方法就是直接利用通用计算机,将所需要的运算编成程序让计算机来执行,这也是用软
3、件来实现数字滤波器。数字滤波器是离散时间系统,所处理的信号是离散时间信号。一般时域离散系统或网络可以用差分方程、单位脉冲响应以及系统函数进行描述。如果输入、输出服从N阶差分方程那么其系统函数,即滤波器的传递函数为4)使用MATLAB下的Filter Designed Tool3。在Command Window窗口中输入fdatool,出现滤波器设计工具界面设计思路:首先将数字高通滤波器的技术指标转化为模拟滤波器的技术指标,再采用Buttetworth逼近的方法求得其系统函数H(S),再利用冲激响应不变法将模拟滤波器的系统函数H(s)变为相应的数字滤波器的系统函数H(Z),然后用MATALB进行
4、仿真,然后确定数字滤波器的结构。3. 具体步骤与任务:4.1语音信号的采集录制一段自己的话音,或利用老师给的语音,在MATLAB软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。4.2语音信号的频谱分析要求画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性。相应的MATLAB程序:clear allI,Fs,bits=wavread(1.wav);%读取语音信号1.wavY=fft(I); %进行快速傅里叶变换mag=abs(Y); %求取幅度谱phase=angle(Y); %求取相位谱phase=phasex180/pi; %转换为Pi单
5、位dB=20xlog10(abs(Y)+eps); %求取对数幅度谱t=(0:length(I)-1)/Fs; %设置标度subplot(221);plot(t,I);title(波形图);xlabel(时间(s);ylabel(幅度);%设置标题和横纵坐标f=(1:length(Y)xFs/length(Y); %设置标度subplot(222);plot(f,mag);title(幅度谱);xlabel(频率(Hz);ylabel(频谱幅度);%设置标题和横纵坐标subplot(223);plot(f,phase);title(相位谱);xlabel(频率(Hz);ylabel(频谱相位)
6、;%设置标题和横纵坐标subplot(224);plot(f,dB);title(对数幅度谱);xlabel(频率(Hz);ylabel(频谱幅度(dB);%设置标题和横纵坐标图2 时域波形和信号的频谱特性4.3设计数字滤波器,画出其频率响应曲线各滤波器的性能指标:(1)低通滤波器性能指标fp1000Hz, fs1200Hz, As40dB, Ap1dB。(2)高通滤波器性能指标fs4000Hz, fp4300Hz, As40dB, Ap1dB(3)带通滤波器性能指标fp11200 Hz, fp23 000 Hz, fs11000 Hz, fs23200 Hz, As40dB, Ap1dB。要
7、求:(1) 频率变换法设计IIR滤波器: 可以利用函数butter、cheby1、cheby2和ellip等设计。(2) (选做)设计IIR滤波器:用双线性变换法设计上面要求的3种滤波器。Bilinear(3) (选做)设计FIR滤波器:用窗函数法设计上面要求的3种滤波器。可以利用函数fir1设计FIR滤波器。(4) 函数freqz画出各滤波器的频率响应。4.4用滤波器对信号进行滤波,比拟滤波前后语音信号的波形及频谱要求用自己设计的各滤波器分别对采集的语音信号进行滤波,并在一个窗口同时画出滤波前后的波形及频谱。(1) IIR滤波器利用函数filter对信号进行滤波;(2) FIR滤波器利用函数
8、fftfilt对信号进行滤波。3.5 回放语音信号在MATLAB中,函数sound可以对声音进行回放。其调用格式:sound(x,fs,bits);可以感觉滤波前后的声音有变化。原来已给的语音没有噪声,而滤波后出现了失真。低通滤波器相应的MATLAB程序:clear allI,Fs,bits=wavread(1.wav);%读取语音信号1.wavfp=1000; %通带截止频率fs=1200; %阻带角频率Ap=1; %通带纹波As=40; %阻带衰减n,fn= buttord(fp/(Fs/2),fs/(Fs/2),Ap,As); %巴特沃斯滤波器n1,fn1=cheb1ord(fp/(Fs
9、/2),fs/(Fs/2),Ap,As);%切比雪夫I型滤波器n2,fn2=cheb2ord(fp/(Fs/2),fs/(Fs/2),Ap,As);%第二类切比雪夫滤波器n3,fn3=ellipord(fp/(Fs/2),fs/(Fs/2),Ap,As);%最小椭圆滤波器b,a=butter(n,fn); %巴特沃斯IIR滤波器b1,a1=cheby1(n1,Ap,fn); %I型切比雪夫IIR滤波器b2,a2=cheby2(n2,Ap,fn); %第二类切比雪夫滤波器b3,a3=ellip(n3,Ap,As,fn); %椭圆滤波器h,w=freqz(b,a); %滤波器的频率响应h1,w1=
10、freqz(b1,a1); %波器的频率响应h2,w2=freqz(b2,a2); %波器的频率响应h3,w3=freqz(b3,a3); %波器的频率响应I1=filter(b,a,I); %1维数字滤波器I3=filter(b1,a1,I); %1维数字滤波器I5=filter(b2,a2,I); %1维数字滤波器I7=filter(b3,a3,I); %1维数字滤波器I2=fftfilt(b,I); %FFT的FIR滤波I4=fftfilt(b1,I); %FFT的FIR滤波I6=fftfilt(b2,I); %FFT的FIR滤波I8=fftfilt(b3,I); %FFT的FIR滤波s
11、ubplot(441),plot(I);title(原始语音信号);subplot(442),plot(I);title(原始语音信号);subplot(443),plot(I);title(原始语音信号);subplot(444),plot(I);title(原始语音信号);subplot(445);plot(wxFs/(2xpi),abs(h);title(巴特沃斯低通滤波);subplot(446);plot(w1xFs/(2xpi),abs(h1);title(切比雪夫1低通滤波);subplot(447);plot(w2xFs/(2xpi),abs(h2);title(切比雪夫2低通
12、滤波);subplot(448);plot(w3xFs/(2xpi),abs(h3);title(椭圆低通滤波);subplot(449);plot(I1);title(巴特沃斯IIR滤波后语音信号);subplot(4,4,13);plot(I2);title(巴特沃斯FIR滤波后语音信号);subplot(4,4,10);plot(I3);title(切比雪夫1IIR滤波后语音信号);subplot(4,4,14);plot(I4);title(切比雪夫1FIR滤波后语音信号);subplot(4,4,11);plot(I5);title(切比雪夫2IIR滤波后语音信号);subplot(
13、4,4,15);plot(I6);title(切比雪夫2FIR滤波后语音信号);subplot(4,4,12);plot(I7);title(椭圆IIR滤波后语音信号);subplot(4,4,16);plot(I8);title(椭圆FIR滤波后语音信号);图3 低通滤波器波形图高通滤波器相应的MATLAB程序:clear allI,Fs,bits=wavread(1.wav);%读取语音信号1.wavfp=4300; %通带截止频率fs=4000; %阻带角频率Ap=1; %通带纹波As=40; %阻带衰减n,fn= buttord(fp/(Fs/2),fs/(Fs/2),Ap,As); %巴特沃斯滤波器n1,fn1=cheb1ord(fp/(Fs/2),fs/(Fs/2),Ap,As);%切比雪夫I型滤波器n2,fn2=cheb2ord(fp/(Fs/2),fs/(Fs/2),Ap,As);%第二类切比雪夫滤波器n3,fn3=ellipord(fp/(Fs/2),fs/(Fs/2),Ap,As);%最小椭圆滤波器b,a=butter(n,fn,high); %巴特沃斯