MATLAB基于汉宁窗的FIR的低通滤波器的源代码及注释

MATLAB基于汉宁窗的FIR的低通滤波器的源代码及注释,第1张

很常见的设计题目

给你一个例程,只需要改一改参数就行了

clear all

f=[0 0.19 0.2 0.3 0.31 0.59 0.6 0.8 0.81 1]

% 给定频率轴分点;

m=[0 0 1 1 0 0 1 1 0 0]

% 给定在这些频率分蔽扰点上理想的幅频响应

N1=30

N2=90

% 取两种不同的滤波器长度;

b1=fir2(N1,f,m)

b2=fir2(N2,f,m)

% 得到两个滤波器;

subplot(311)

stem(b1,'.')grid

subplot(312)

stem(b2,'.')grid

M=128

[h1,w]=freqz(b1,1,M,1)

[h2,w]=freqz(b2,1,M,1)

subplot(313)

plot(w,abs(h1),'b-',w,abs(h2),'g-')grid

其中,f是归依化以后的迟并氏频码散率 通过数字滤波器的采样频率算出来,根据通带和阻带算好f和m就行了

看一看help,这个函数应该有窗函数的选择 默认情况下是汉明窗

希望能够帮到你

先确弯燃羡定的带阻归一化频率,就是你要组织的频带范围埋拍,比如采样频率fs=100Hz,带阻是bandstop=20Hz~40Hz,那么Wn=bandstop*2/fs=[0.4,0.8]

接着,窗函数滤波段郑器,即FIR有限冲激相应滤波器,这样取得

b=fir1(n,Wn,'stop'),n 是一个合适的阶数,适当选取,要求不高,Wn上面取得了,stop表示带阻。

y=filter2(b,x)

x为滤波器输入,y即输出。

低通FIR滤波器的设计就是Wn的设计要根据你的通带上限设置,然后fir1函数里的‘stop’变为‘low’,其它都一样。

function xt=xtg(N)

%x(t)信号产生函数,并显示信号的幅频特性曲线

%xt=xtg 产生一个长度N,有加性高频噪声的单频调幅信号xt,采样频率Fs=1000Hz

%载波频率fc=Fs/喊逗10=100Hz,调制正弦波频率f0=fc/10=10Hz

N=2000Fs=1000T=1/FsTp=N*T

t=0:T:(N-1)*T

fc=Fs/10f0=fc/10 %载波频率fc=Fs/10,单频调制信号频率为f0=Fc/10

mt=cos(2*pi*f0*t) %产生单频正弦波调制信号mt,频率为f0

ct=cos(2*pi*fc*t) %产生载波正弦波信号ct,频率为f0

xt=mt.*ct%相乘产冲渗搜生单频调制信号xt

nt=2*rand(1,N)-1 %产生随机噪声nt

%-----------设计高通滤波器用于滤除噪声nt中的低频成分,生成高通噪声---------

fp=150fs=200Rp=0.1As=70 %滤波器指标

fb=[fp,fs]m=[0,1] %计算remezord函数所需参数f,m,dev

dev=[10^(-As/20),(10^(Rp/20)-1)/(10^(Rp/散历20)+1)]

[n,fo,mo,W]=remezord(fb,m,dev,Fs)%确定remez函数所需参数

hn=remez(n,fo,mo,W) %调用remez函数进行设计,滤除nt中的低频成分

yt=filter(hn,1,10*nt) %滤除低频噪声,生成高频噪声yt

%==================================================================

xt=xt+yt %噪声加信号

fst=fft(xt,N)k=0:N-1f=k/Tp

subplot(2,1,1)plot(t,xt)gridxlabel('t/s')ylabel('x(t)')

axis([0,Tp/5,min(xt),max(xt)])title('(a)信号加噪声波形')

subplot(2,1,2)plot(f,abs(fst)/max(abs(fst)))gridtitle('(b)信号加噪声频谱')

axis([0,Fs/2,0,1.2])xlabel('f/Hz')ylabel('幅度')

-----------------------------------------------------------------------

FIR滤波器实现

clear allclose all

%==调用xtg产生信号xt,xt长度N=1000,并显示xt及其频谱==========

N=1000xt=xtg(N)

fp=120fs=150Rp=0.2As=60Fs=1000 %输入给定指标

%用窗函数法

wc=(fp+fs)/Fs

B=2*pi*(fs-fp)/Fs

Nb=ceil(11*pi/B)

hn=fir1(Nb-1,wc,blackman(Nb))

ywt=fftfilt(hn,xt,N)

plot(。。。后面怎么写········求教


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12342811.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存