基于matlab各滤波器源代码.docx
《基于matlab各滤波器源代码.docx》由会员分享,可在线阅读,更多相关《基于matlab各滤波器源代码.docx(11页珍藏版)》请在冰豆网上搜索。
![基于matlab各滤波器源代码.docx](https://file1.bdocx.com/fileroot1/2022-12/6/b06cbec2-a337-4252-ba39-f067e79ee917/b06cbec2-a337-4252-ba39-f067e79ee9171.gif)
基于matlab各滤波器源代码
汉明窗的FIR低通滤波:
Fs=22050;
[x,FS,bits]=wavread('G:
\Users\DP\Desktop\SoundTest.wav');%G:
\Users\DP\Desktop\SoundTest.wavG:
\Users\DP\Desktop\好铃网-湖人掘金宣传片.wav
x=x(:
1);
figure
(1);
subplot(2,1,1);
plot(x);
%sound(x,FS,bits);%回放语音
title('语音信号时域波形图')
y=fft(x,3260);
f=(FS/3260)*[1:
1630];
subplot(2,1,2);
plot(f(1:
1630),abs(y(1:
1630)));
title('语音信号频谱图');
%产生噪声信号并加到语音信号
t=0:
length(x)-1;
zs0=0.05*cos(2*pi*100*t/22050);
figure
(2);
subplot(2,1,1)
plot(zs0)
title('噪声信号波形');
zs1=fft(zs0,1200);
%sound(zs0,FS,bits);%回放噪音
f=(FS/1200)*[1:
600];
subplot(2,1,2)
plot(f(1:
600),abs(zs1(1:
600)));
title('噪声信号频谱');
x1=x+zs0';
%sound(x1,FS,bits);%回放加入噪声后的语音
y1=fft(x1,1200);
figure(3);
subplot(2,1,1);plot(x1);
f=(FS/1200)*[1:
600];
subplot(2,1,2);
plot(f(1:
600),abs(y1(1:
600)));
title('加入噪声后的信号波形');
title('加入噪声后的信号频谱');
%加窗滤波
wp=0.25*pi;
ws=0.3*pi;
wdelta=ws-wp;
N=ceil(6.6*pi/wdelta);%取整
t=0:
(size(x1)-1);
wn=(0.2+0.3)*pi/2;
b=fir1(N,wn/pi,hamming(N+1));%选择窗函数,并归一化截止频率
f1=fftfilt(b,x1);
figure(4)
freqz(b,1,512)
[h1,w1]=freqz(b,1);
plot(w1*FS/(2*pi),20*log10(abs(h1)));
figure(5)
subplot(2,1,1)
plot(t,x1)
title('滤波前的时域波形');
subplot(2,1,2)
plot(t,f1);
title('滤波后的时域波形');
sound(f1);%播放滤波后的语音信号
F0=fft(f1,1024);
f=FS*(0:
511)/1024;
figure(6)
y2=fft(x1,1024);
subplot(2,1,1);
plot(f,abs(y2(1:
512)));%画出滤波前的频谱图
title('滤波前的频谱')
xlabel('Hz');
ylabel('fuzhi');
subplot(2,1,2)
F1=plot(f,abs(F0(1:
512)));%画出滤波后的频谱图
title('滤波后的频谱')
xlabel('Hz');
ylabel('fuzhi');
巴特沃兹低通滤波器:
Fs=22050;
[x,FS,bits]=wavread('G:
\Users\DP\Desktop\SoundTest.wav');%G:
\Users\DP\Desktop\SoundTest.wavG:
\Users\DP\Desktop\好铃网-湖人掘金宣传片.wav
x=x(:
1);
figure
(1);
subplot(2,1,1);
plot(x);
%sound(x,FS,bits);%回放语音
title('语音信号时域波形图')
y=fft(x,3260);
f=(FS/1630)*[1:
1630];
subplot(2,1,2);
plot(f(1:
1630),abs(y(1:
1630)));
title('语音信号频谱图');
%产生噪声信号并加到语音信号
t=0:
length(x)-1;
zs=0.05*cos(2*pi*10000*t/22050);
zs0=0.05*cos(2*pi*10000*t/22050000);
figure
(2);
subplot(2,1,1)
plot(zs0)
title('噪声信号波形');
zs1=fft(zs,1200);
%sound(zs,FS,bits);%回放噪音
subplot(2,1,2)
plot(f(1:
600),abs(zs1(1:
600)));
title('噪声信号频谱');
x1=x+zs';
sound(x1,FS,bits);%回放加入噪声后的语音
y1=fft(x1,1200);
figure(3);
subplot(2,1,1);plot(x1);
title('加入噪声后的信号波形');
subplot(2,1,2);
plot(f(1:
600),abs(y1(1:
600)));
title('加入噪声后的信号频谱');
%低通滤波
fp=3000;fs=3500;Fs=22050;
rp=1;rs=10;
wp=2*pi*fp/Fs;
ws=2*pi*fs/Fs;
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*22050);
plot(w,abs(h));
title('巴特沃斯低通滤波器');
xlabel('频率(HZ)');ylabel('耗损(dB)');
gridon;
yd=filter(Bz,Az,x1);
figure(5);
subplot(2,1,1);plot(yd);title('滤波后信号波形');
ydd=fft(yd,1200);
subplot(2,1,2);plot(f(1:
600),abs(ydd(1:
600)));
title('滤波后信号频谱');
%sound(yd,FS,bits);
巴特沃兹高通滤波器:
Fs=22050;
[x,FS,bits]=wavread('G:
\Users\DP\Desktop\SoundTest.wav');
x=x(:
1);
figure
(1);
subplot(2,1,1);
plot(x);
%sound(x,FS,bits);%回放语音
title('语音信号时域波形图')
y=fft(x,3260);
f=(FS/1630)*[1:
1630];
subplot(2,1,2);
plot(f(1:
1630),abs(y(1:
1630)));
title('语音信号频谱图');
%产生噪声信号并加到语音信号
t=0:
length(x)-1;
zs0=0.25*cos(2*pi*100*t/22050);
figure
(2);
subplot(2,1,1)
plot(zs0)
title('噪声信号波形');
zs1=fft(zs0,1200);
%sound(zs0,FS,bits);%回放噪音
subplot(2,1,2)
plot(f(1:
600),abs(zs1(1:
600)));
title('噪声信号频谱');
x1=x+zs0';
%sound(x1,FS,bits);%回放加入噪声后的语音
y1=fft(x1,1200);
figure(3);
subplot(2,1,1);plot(x1);
title('加入噪声后的信号波形');
subplot(2,1,2);
plot(f(1:
600),abs(y1(1:
600)));
title('加入噪声后的信号频谱');
%高通滤波
fp=400;fs=300;Fs=22050;
rp=1;rs=10;
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,'high','s');
[Bz,Az]=bilinear(B,A,Fs1);
figure(4);
[h,w]=freqz(Bz,Az,512,Fs1*22050);
plot(w,abs(h));
title('巴特沃斯高通滤波器');
xlabel('频率(HZ)');ylabel('耗损(dB)');
gridon;
yd=filter(Bz,Az,x1);
figure(5);
subplot(2,1,1);plot(yd);title('滤波后信号波形');
ydd=fft(yd,1200);
subplot(2,1,2);plot(f(1:
600),abs(ydd(1:
600)));
title('滤波后信号频谱');
%sound(yd,FS,bits)
巴特沃兹带通滤波器:
Fs=22050;
[x,FS,bits]=wavread('G:
\Users\DP\Desktop\SoundTest.wav');
x=x(:
1);
figure
(1);
subplot(2,1,1);
plot(x);
%sound(x,FS,bits);%回放语音
title('语音信号时域波形图')
y=fft(x,3260);
f=(FS/1630)*[1:
1630];
subplot(2,1,2);
plot(f(1:
1630),abs(y(1:
1630)));
title('语音信号频谱图');
%产生噪声信号并加到语音信号
t=0:
length(x)-1;
zs0=0.05*cos(2*pi*100*t/22050);
figure
(2);
subplot(2,1,1)
plot(zs0)
title('噪声信号波形');
zs1=fft(zs0,1200);
%sound(zs,FS,bits);%回放噪音
subplot(2,1,2)
plot(f(1:
600),abs(zs1(1:
600)));
title('噪声信号频谱');
x1=x+zs0';
%sound(x1,FS,bits);%回放加入噪声后的语音
y1=fft(x1,1200);
figure(3);
subplot(2,1,1);plot(x1);
title('加入噪声后的信号波形');
subplot(2,1,2);
plot(f(1:
600),abs(y1(1:
600)));
title('加入噪声后的信号频谱');
%带通滤波
fp=[800,9000];fs=[700,10000];Fs=22050;
rp=1;rs=10;
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*22050);
plot(w,abs(h));
title('巴特沃斯带通滤波器');
xlabel('频率(HZ)');ylabel('耗损(dB)');
gridon;
yd=filter(Bz,Az,x1);
figure(5);
subplot(2,1,1);plot(yd);
ydd=fft(yd,1200);
subplot(2,1,2);plot(f(1:
600),abs(ydd(1:
600)));
%sound(yd,FS,bits)
Blackman加窗高通滤波器:
Fs=22050;
[x,FS,bits]=wavread('G:
\Users\DP\Desktop\SoundTest.wav');
x=x(:
1);
figure
(1);
subplot(2,1,1);
plot(x);
%sound(x,FS,bits);%回放语音
title('语音信号时域波形图')
y=fft(x,3260);
f=(FS/1630)*[1:
1630];
subplot(2,1,2);
plot(f(1:
1630),abs(y(1:
1630)));
title('语音信号频谱图');
%产生噪声信号并加到语音信号
%产生噪声信号并加到语音信号
t=0:
length(x)-1;
zs0=0.05*cos(2*pi*100*t/22050);
figure
(2);
subplot(2,1,1)
plot(zs0)
title('噪声信号波形');
zs1=fft(zs0,1200);
%sound(zs,FS,bits);%回放噪音
subplot(2,1,2)
plot(f(1:
600),abs(zs1(1:
600)));
title('噪声信号频谱');
x1=x+zs0';
%sound(x1,FS,bits);%回放加入噪声后的语音
y1=fft(x1,1200);
figure(3);
subplot(2,1,1);plot(x1);
title('加入噪声后的信号波形');
subplot(2,1,2);
plot(f(1:
600),abs(y1(1:
600)));
title('加入噪声后的信号频谱');
%高通加窗滤波
fp=600,fc=400;
wp=2*pi*fp/FS;
ws=2*pi*fc/FS;
Bt=wp-ws;
N0=ceil(11*pi/Bt);
N=N0+mod(N0+1,2);
wc=(wp+ws)/2/pi;
hn=fir1(N-1,wc,'high',blackman(N));
X=conv(hn,x);
%sound(X,FS,bits);
X1=fft(X,1200);
figure(4);
subplot(211);
plot(X);
title('滤波后的信号波形');
subplot(212);
plot(f(1:
600),abs(X1(1:
600)));
title('滤波后的信号频谱')