www.gusucode.com > 采样后语音信号的时域波形和频谱图matlab源码程序 > code/Digital_Filter.m
b=menu('请选择滤波器','低通滤波器','高通滤波器','带通滤波器','EXIT'); if b==5; b=0; end close all; while(b) temp=menu('请选择滤波器类型','IIR滤波器','FIR滤波器'); if temp==1 if b==1 figure(1); [y,fs,bits]=wavread('D:\MATLAB6p5\work\sj.wav'); %用IIR低通滤波器对信号进行滤波 sound(y); subplot(2,3,1); plot(y); title('语音信号的时域波形'); Y=fft(y); subplot(2,3,2); plot(abs(Y)); %Y取模 title('语音信号的频谱特性'); fb=1000;fc=1200;As=100;Ap=1;fs=8000; wc=2*fc/fs;wb=2*fb/fs; [n,wn]=ellipord(wc,wb,Ap,As); [b,a]=ellip(n,Ap,As,wn); x=filter(b,a,y); subplot(2,3,4); plot(x); title('滤波后的语音信号'); X=fft(x); subplot(2,3,5); plot(abs(X)); title('滤波后的语音信号的频谱特性'); [H,w]=freqz(b,a,512,fs); mag=abs(H); db=20*log10((mag+eps)/max(mag)); subplot(2,3,3); plot(w,db); title('低通滤波器函数频率响应'); sound(x); else if b==2 figure(2); [y,fs,bits]=wavread('D:\MATLAB6p5\work\sj.wav'); %用IIR高通滤波器对信号进行滤波 sound(y); subplot(2,3,1); plot(y); title('语音信号的时域波形'); Y=fft(y); subplot(2,3,2); plot(abs(Y)); title('语音信号的频谱特性'); fc=3000;fb=3500;As=100;Ap=1;fs=8000; wc=2*fc/fs;wb=2*fb/fs; [n,wn]=ellipord(wc,wb,Ap,As); %椭圆模拟低通滤波器 [b,a]=ellip(n,Ap,As,wn,'high'); x=filter(b,a,y); subplot(2,3,4); plot(x); title('滤波后的语音信号'); X=fft(x); subplot(2,3,5); plot(abs(X)); title('滤波后的语音信号的频谱特性'); [H,w]=freqz(b,a,512,fs); mag=abs(H); db=20*log10((mag+eps)/max(mag)); subplot(2,3,3); plot(w,db); title('高通滤波器函数频率响应'); sound(x); else figure(3); [y,fs,bits]=wavread('D:\MATLAB6p5\work\sj.wav'); %用IIR带带通滤波器对信号进行滤波 sound(y); subplot(2,3,1); plot(y); title('语音信号的时域波形'); Y=fft(y); subplot(2,3,2); plot(abs(Y)); title('语音信号的频谱特性'); As=100; Ap=1; fs=8000; fb1=1200; fb2=3000; fc1=1000; fc2=3200; wc=[2*fc1/fs,2*fc2/fs]; wb=[2*fb1/fs,2*fb2/fs]; [n,wn]=buttord(wc,wb,Ap,As); [b,a]=butter(n,wn); x=filter(b,a,y); subplot(2,3,4); plot(x); title('滤波后的语音信号'); X=fft(x); subplot(2,3,5); plot(abs(X)); title('滤波后的语音信号的频谱特性'); [H,w]=freqz(b,a,512,fs); mag=abs(H); db=20*log10((mag+eps)/max(mag)); subplot(2,3,3); plot(w,db); title('带通滤波器函数频率响应'); sound(x); end end else if b==1 figure(4); [y,fs,bits]=wavread('D:\MATLAB6p5\work\sj.wav'); %用FIR低通滤波器对信号进行滤波 sound(y); subplot(2,3,1); plot(y); title('语音信号的时域波形'); Y=fft(y); subplot(2,3,2); plot(abs(Y)); title('语音信号的频谱特性'); fb=1000;fc=1200;As=100;Ap=1;fs=8000; wc=2*fc/fs;wb=2*fb/fs; [n,wn]=cheb1ord(wc,wb,Ap,As); b=fir1(n,wn,chebwin(n+1,As)); x=fftfilt(b,y); subplot(2,3,4); plot(x); title('滤波后的语音信号'); X=fft(x); subplot(2,3,5); plot(abs(X)); title('滤波后的语音信号的频谱特性'); [H,w]=freqz(b,1,512); mag=abs(H); db=20*log10((mag+eps)/max(mag)); subplot(2,3,3); plot(w,db); title('低通滤波器函数频率响应'); sound(x); else if b==2 figure(5); [y,fs,bits]=wavread('D:\MATLAB6p5\work\sj.wav'); %用FIR高通滤波器对信号进行滤波 sound(y); subplot(2,3,1); plot(y); title('语音信号的时域波形'); Y=fft(y); subplot(2,3,2); plot(abs(Y)); title('语音信号的频谱特性'); fc=3000;fb=3500;As=100;Ap=1;fs=8000; wc=2*fc/fs;wb=2*fb/fs; [n,wn]=cheb1ord(wc,wb,Ap,As); b=fir1(n,wn,'high',chebwin(n+1,As)); x=fftfilt(b,y); subplot(2,3,4); plot(x); title('滤波后的语音信号'); X=fft(x); subplot(2,3,5); plot(abs(X)); title('滤波后的语音信号的频谱特性'); [H,w]=freqz(b,1,512); mag=abs(H); db=20*log10((mag+eps)/max(mag)); subplot(2,3,3); plot(w,db); title('高通滤波器函数频率响应'); sound(x); else figure(6); [y,fs,bits]=wavread('D:\MATLAB6p5\work\sj.wav');%用FIR带通滤波器对信号进行滤波 sound(y); subplot(2,3,1); plot(y); title('语音信号的时域波形'); Y=fft(y); subplot(2,3,2); plot(abs(Y)); title('语音信号的频谱特性'); fb1=1200;fb2=3000;fc1=1000;fc2=3200;As=100;Ap=1; fs=8000; wc=[2*fc1/fs,2*fc2/fs];wb=[2*fb1/fs,2*fb2/fs]; [n,wn]=cheb1ord(wc,wb,Ap,As); b=fir1(n,wn,chebwin(n+1,As)); x=fftfilt(b,y); subplot(2,3,4); plot(x); title('滤波后的语音信号'); X=fft(x); subplot(2,3,5); plot(abs(X)); title('滤波后的语音信号的频谱特性'); [H,w]=freqz(b,1,512); mag=abs(H); db=20*log10((mag+eps)/max(mag)); subplot(2,3,3); plot(w,db); title('带通滤波器函数频率响应'); sound(x); end end end b=menu('请选择滤波器','低通滤波器','高通滤波器','带通滤波器','EXIT'); if b==4; b=0; end close all; end