[toc]
窗口函數(shù)本刽、頻率采樣法鲸湃、等波紋法設(shè)計fir高通濾波,matlab編程
1、設(shè)計指標
通帶截止頻率wp=pi/2,阻帶截至頻率ws=pi/4,ap=1db,as=40db
2子寓、窗口函數(shù)法
為了達到設(shè)計指標暗挑、窗口函數(shù)使用了漢明窗
具體設(shè)計的原理不多說、這里直接貼代碼和運行結(jié)果
%窗口函數(shù)設(shè)計fir高通濾波器
N0=ceil(6.2*pi/Bt);
N=N0+mod(N0+1,2);
wc=(wp+ws)/2/pi;
hn=fir1(N-1,wc,'high',hanning(N));
n=0:N-1;
fh=fft(hn,1024);f1=20*log10(abs(fh));
wk=0:1023;wk=2*wk/1024;
subplot(3,3,1);
stem(n,hn,'.');title('漢寧窗設(shè)計的h(n)');
grid;
xlabel('n');ylabel('h(n)');
subplot(3,3,2);
plot(wk,f1);title('漢寧窗設(shè)計的損耗函數(shù)');grid;
xlabel('\omega/\pi');ylabel('幅度(dB)');axis([0,1,-90,10]);
subplot(3,3,3);
plot(wk,abs(fh));title('漢寧窗設(shè)計的幅頻特性');grid;
xlabel('\omega/\pi');ylabel('幅度');axis([0,1,-0.1,1.1]);
結(jié)果
3斜友、頻率采樣法設(shè)計fir高通濾波器
clear all;
N=19;%采樣點
wp=0.5*pi;%通帶截止頻率
T1=0.4;
T2=0.7;
N1=fix(wp/(2*pi/N));%阻帶上采樣點
N2=N-2*N1;%通帶上采樣點
A=[zeros(1,N1),ones(1,N2),zeros(1,N1)];
theta=-pi*[0:N-1]*(N-1)/N;%線性相位約束條件
H=A.*exp(j*theta);%頻率采樣
h=real(ifft(H));%傅里葉逆變換
v=1:N; figure(1);
%subplot(411)
%plot(v,A,'*');
%title('頻率采樣'); ylabel('H(k)');
%axis([0,fix(N*1.1),-0.1,1.1]);
subplot(334)
stem(v ,h);title("采樣法hn");ylabel('h(n)'); axis([0,fix(N*1.1),min(h)*1.1,max(h)*1.1]); grid;
subplot(335)
M=5000; nx=[1:N];
w=linspace(0,pi,M);%0~π范圍等間隔
X=h*exp(-j*nx'*w);%求取頻率響應(yīng) figure(2);
plot(w./pi,20*log10(abs(X)));grid;
xlabel('\omega/\pi');
ylabel('幅度(dB)');
title('頻率幅度衰減');
axis([0,1,-90,10]);
subplot(336)
plot(w./pi,abs(X));grid;
xlabel('\omega/\pi');
ylabel('|Hd(w)|');
title('頻率采樣法幅度響應(yīng)');
axis([0,1,-0.1,1.3]);
4炸裆、等波紋逼近法設(shè)計fir高通濾波器
%等波紋逼近法設(shè)計
clc;
clear;
f=[0.25,0.5];
m=[0,1];
rp=1;
rs=40;
dat1=(10^(rp/20)-1)/(10^(rp/20)+1);
dat2=10^(-rs/20);
rip=[dat2,dat1];
[M,fo,mo,w]=remezord(f,m,rip);
M=M+1;
hn=remez(M,fo,mo,w);
subplot(3,3,7);
stem(hn);title('等波紋法hn')
Hk=fft(hn,1024);
wk=0:1023;wk=2*wk/1024;
subplot(3,3,8);
plot(wk,20*log10(abs(Hk)));title('等波紋法設(shè)計的損耗函數(shù)');grid;
xlabel('\omega/\pi');ylabel('幅度(dB)');axis([0,1,-90,10]);
subplot(3,3,9);
plot(wk,abs(Hk));title('等波紋法設(shè)計的幅頻特性');grid;
xlabel('\omega/\pi');ylabel('幅度');axis([0,1,0.1,1.1]);