双线性变换法低通滤波器程序: FS=8000
F1=1000;Fh=1200; WP=(F1/FS)*2*pi; WS=(Fh/FS)*2*pi; OmegaP=2*FS*tan(WP/2); OmegaS=2*FS*tan(WS/2);
[n,Wn]=buttord(OmegaP,OmegaS,1,100,'s'); [b,a]=butter(n,Wn,'s'); [bz,az]=bilinear(b,a,FS); freqz(bz,az,4096,FS,'whole'); title('双线性变换法低通滤波器') 双线性变换法低通滤波器频率波形图:
6. 用滤波器对信号进行滤波
然后用自己设计的滤波器对采集到的信号进行滤波,画出滤波后信号的时域波形及频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号,分析滤波前后的语音变化;
窗函数低通滤波器滤波实现程序: [x1,Fs,bits]=wavread('h15.wav');
derta_Fs = Fs/length(x1);%设置频谱的间隔,分辨率 ,这里保证了x轴的点数必须和y轴点数一致 fs=Fs; fp1=1000; fs1=1200; As1=100; wp1=2*pi*fp1/fs; ws1=2*pi*fs1/fs; BF1=ws1-wp1; wc1=(wp1+ws1)/2;
M1=ceil((As1-7.95)/(2.286*BF1))+1;%按凯泽窗计算滤波器阶数 N1=M1+1;
beta1=0.1102*(As1-8.7);
Window=(kaiser(N1,beta1)); %求凯泽窗窗函数
b1=fir1(M1,wc1/pi,'low',Window); %wc1/pi为归一化,窗函数法设计函数 figure(2); freqz(b1,1,512);
title('FIR低通滤波器的频率响应');
x1_low = filter(b1,1, x1);%对信号进行低通滤波 ,Y = filter(B,A,X) ,输入X为滤波前序列,Y为滤波结果序列,B/A 提供滤波器系数,B为分子, A为分母 sound(x1_low,Fs,bits); figure(3); subplot(2,1,1); plot(x1_low);
title('信号经过FIR低通滤波器(时域)'); subplot(2,1,2);
plot([-Fs/2:derta_Fs: Fs/2-derta_Fs],abs(fftshift(fft(x1_low)))); title('信号经过FIR低通滤波器(频域)');
窗函数高通滤波器滤波的程序: clc; clear; close all;
[x1,Fs,bits]=wavread('h15.wav');
derta_Fs = Fs/length(x1);%设置频谱的间隔,分辨率 ,这里保证了x轴的点数必须和y轴点数一致 fs=Fs; As2=100; fp2=3000; fs2=2700; wp2=2*pi*fp2/fs; ws2=2*pi*fs2/fs; BF2=wp2-ws2; wc2=(wp2+ws2)/2;
M2=ceil((As2-7.95)/(2.286*BF2))+1;%按凯泽窗计算滤波器阶数 N2=M2+1;
beta2=0.1102*(As2-8.7);
Window=(kaiser(N2,beta2)); %求凯泽窗窗函数 b2=fir1(M2,wc2/pi,'high',Window); figure(4);
freqz(b2,1,512);%数字滤波器频率响应 title('FIR高通滤波器的频率响应');
x1_high = filter(b2,1,x1);%对信号进行高通滤波 sound(x1_high,Fs,bits); figure(5); subplot(2,1,1); plot(x1_high);
title('信号经过FIR高通滤波器(时域)'); subplot(2,1,2);
plot([-Fs/2:derta_Fs: Fs/2-derta_Fs],abs(fftshift(fft(x1_high)))); title('信号经过FIR高通滤波器(频域)');
窗函数带通滤波器滤波的程序: clc; clear; close all;
[x1,Fs,bits]=wavread('h15.wav');
derta_Fs = Fs/length(x1);%设置频谱的间隔,分辨率 ,这里保证了x轴的点数必须和y轴点数一致 fs=Fs; As3=100;
fp3=[1200,3000];fs3=[1000,3200];
wp3=2*pi*fp3/fs; ws3=2*pi*fs3/fs; BF3=wp3(1)-ws3(1); wc3=wp3+BF3/2;
M3=ceil((As3-7.95)/(2.286*BF3))+1;%按凯泽窗计算滤波器阶数 N3=M3+1;
beta3=0.1102*(As3-8.7);
Window=(kaiser(N3,beta3)); %求凯泽窗窗函数 b3=fir1(M3,wc3/pi,'bandpass',Window);%带通滤波器 figure(6);
freqz(b3,1,512);%数字滤波器频率响应 title('FIR带通滤波器的频率响应');
x1_daitong = filter(b3,1,x1);%对信号进行带通滤波 sound(x1_daitong,Fs,bits); figure(7); subplot(2,1,1); plot(x1_daitong);
title('信号经过FIR带通滤波器(时域)'); subplot(2,1,2);
plot([-Fs/2:derta_Fs: Fs/2-derta_Fs],abs(fftshift(fft(x1_daitong)))); title('信号经过FIR带通滤波器(频域)');