?? digital_filter.m
?? 錄制一段自己的語音信號
?? 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低通濾波器對信號進(jìn)行濾波
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('低通濾波器函數(shù)頻率響應(yīng)');
sound(x);
else if b==2
figure(2);
[y,fs,bits]=wavread('D:\MATLAB6p5\work\sj.wav'); %用IIR高通濾波器對信號進(jìn)行濾波
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('高通濾波器函數(shù)頻率響應(yīng)');
sound(x);
else figure(3);
[y,fs,bits]=wavread('D:\MATLAB6p5\work\sj.wav'); %用IIR帶帶通濾波器對信號進(jìn)行濾波
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('帶通濾波器函數(shù)頻率響應(yīng)');
sound(x);
end
end
else
if b==1
figure(4);
[y,fs,bits]=wavread('D:\MATLAB6p5\work\sj.wav'); %用FIR低通濾波器對信號進(jìn)行濾波
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('低通濾波器函數(shù)頻率響應(yīng)');
sound(x);
else if b==2
figure(5);
[y,fs,bits]=wavread('D:\MATLAB6p5\work\sj.wav'); %用FIR高通濾波器對信號進(jìn)行濾波
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('高通濾波器函數(shù)頻率響應(yīng)');
sound(x);
else figure(6);
[y,fs,bits]=wavread('D:\MATLAB6p5\work\sj.wav');%用FIR帶通濾波器對信號進(jìn)行濾波
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('帶通濾波器函數(shù)頻率響應(yīng)');
sound(x);
end
end
end
b=menu('請選擇濾波器','低通濾波器','高通濾波器','帶通濾波器','EXIT');
if b==4;
b=0;
end
close all;
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -