[N,wc]=buttord(wap,was,rp,rs,'s'); [B,A]=butter(N,wc,'high','s'); [Bz,Az]=bilinear(B,A,Fs1); figure(1);
[h,w]=freqz(Bz,Az,512,Fs1*22050); plot(w,abs(h));
title('巴特沃斯高通滤波器');
xlabel('频率(HZ)');ylabel('耗损(dB)'); grid on;
图2.2巴特沃思高通滤波器
11
2.3设计巴特沃思带通滤波器
MATLAB程序如下。滤波器图如图3.7所示。 %带通滤波
fp=[1200,3000];fs=[1000,3200];Fs=8000; rp=1;rs=100; wp=2*pi*fp/Fs; ws=2*pi*fs/Fs; T=1;Fs1=1; wap=2*tan(wp/2); was=2*tan(ws/2);
[N,wc]=buttord(wap,was,rp,rs,'s'); [B,A]=butter(N,wc,'s'); [Bz,Az]=bilinear(B,A,Fs1); figure(4);
[h,w]=freqz(Bz,Az,512,Fs1*1000); plot(w,abs(h));
title('巴特沃斯带通滤波器');
xlabel('频率(HZ)');ylabel('耗损(dB)'); grid on;
12
图2.3巴特沃思带通滤波器
3.将声音信号送入滤波器滤波
x=wavread('C:\\Users\\acer\\Desktop\\数字信号\\sound.wav');%播放原始信号
wavplay(x,fs); %播放原始信号 N=length(x);%返回采样点数 df=fs/N;%采样间隔 n1=1:N/2;
f=[(n1-1)*(2*pi/N)]/pi;%频带宽度 figure(4); subplot(4,2,1);
plot(x);%录制信号的时域波形
13
title('原始信号的时域波形');%加标题 ylabel('幅值/A');%显示纵坐标的表示意义 grid;%加网格
y0=fft(x);%快速傅立叶变换 subplot(4,2,3);
plot(f,abs(y0(n1)));%原始信号的频谱图 title('原始信号的频谱图');%加标题 xlabel('频率w/pi');%显示横坐标表示的意义 ylabel('幅值 ');%显示纵坐标表示的意义 title('原始信号的频谱图');%加标题 grid;%加网格
3.1低通滤波器滤波 fs=8000; beta=10.056; wc=2*pi*1000/fs; ws=2*pi*1200/fs; width=ws-wc;
wn=(ws+wc)/2; n=ceil(12.8*pi /width);
h=fir1(n,wn/pi,'band',kaiser(n+1,beta)); [h1,w]=freqz(h);
14
ys=fftfilt(h,x);%信号送入滤波器滤波,ys为输出 fftwave=fft(ys);%将滤波后的语音信号进行快速傅立叶变换 figure(4);
subplot(4,2,2);%在四行两列的第二个窗口显示图形 plot(ys);%信号的时域波形
title('低通滤波后信号的时域波形');%加标题 xlabel('频率w/pi');
ylabel('幅值/A');%显示标表示的意义 grid;%网格
subplot(4,2,4); %在四行两列的第四个窗口显示图形 plot(f, abs(fftwave(n1)));%绘制模值 xlabel('频率w/pi');
ylabel('幅值/A');%显示标表示的意义
title('低通滤波器滤波后信号的频谱图');%标题 grid;%加网格
wavplay(ys,8000); %播放滤波后信号
3.2高通滤波器滤波 fs=8000; beta=10.056; ws=2*5000/fs; wc=2*4800/fs;
15