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