求用matlab实现fir滤波器(低通、高通,带通)

2024年11月16日 16:37
有4个网友回答
网友(1):

窗函数设计低通滤波器:
fp=1000;
fc=1200;
as=100;
ap=1;
fs=22000;
wp=2*fp/fs;
wc=2*fc/fs;
N=ceil((as-7.95)/(14.36*(wc-wp)/2))+1;
beta=0.1102*(as-8.7);
window=Kaiser(N+1,beta);
b=fir1(N,wc,window);
freqz(b,1,512,fs);

高通滤波器:
fs=22000;
Wp=2*5000/fs;
Ws=2*4800/fs;
Ap=1;
As=100;
N=ceil(8*pi/(Wp-Ws))+1;
N=N+mod(N+1,2)+1;
Wc=(Wp+Ws)/2/pi;
h=fir1(N,Wc,'high');
omega=linspace(0,pi,512);
freqz(h,1,omega);

带通滤波器:
fs=22000;
Wp1=2*1200/fs;
Wp2=2*3000/fs;
Wc1=2*1000/fs;
Wc2=2*3200/fs;
Ap=1;
As=100;
W1=(Wp1+Wc1)/2;
W2=(Wp2+Wc2)/2;
wdth=min((Wp1-Wc1),(Wc2-Wp2));
N=ceil(11*pi/wdth)+1;
b = fir1(N,[W1 W2]);
freqz(b,1,512,fs)

双线性法设计低通滤波器:
fp=1000;
fc=1200;
as=100;
ap=1;
fs=22000;
wp=2*fp/fs;
wc=2*fc/fs; %归一化截止频率
[n,wn]=ellipord(wp,wc,ap,as);%求数字滤波器的最小阶数和归一化截止频率
[b,a]=ellip(n,ap,as,wn);%求传递函数的分子分母系数
freqz(b,a,512,fs);

网友(2):

这个你可以通过matlab的help 功能找到相应的函数输入相应的滤波参数就可以得到滤波函数的相应参数。
比如:Syntax[b,a] = butter(n,Wn)
[b,a] = butter(n,Wn,'ftype')
[b,a] = butter(n,Wn,'s')
[b,a] = butter(n,Wn,'ftype','s')
[z,p,k] = butter(...)
[A,B,C,D] = butter(...)
Descriptionbutter designs lowpass, bandpass, highpass, and bandstop digital and analog Butterworth filters. Butterworth filters are characterized by a magnitude response that is maximally flat in the passband and monotonic overall. Butterworth filters sacrifice rolloff steepness for monotonicity in the pass- and stopbands. Unless the smoothness of the Butterworth filter is needed, an elliptic or Chebyshev filter can generally provide steeper rolloff characteristics with a lower filter order.
你还可以使用matlab toolboxes中的filter design 工具设计各种滤波器

网友(3):

simulink-DSP Blockset-flitering-Analog fliter design

模拟信号的滤波器
可以设计为band pass 或者 low pass什么的

有些时候要考虑它产生饿相移问题

网友(4):

%设计低通滤波器:
[n,wc]=buttord()
%估算得到butterworth低通滤波器的最小阶数n和3db截止频率wc
[a,b]=butter(n,wc);%设计butterworth低通滤波器
[h,f]=freqz();%求数字低通滤波器的频率响应
figure(2);%打开窗口2
subplot(221);%图形显示分割窗口
plot(f,abs(h));%绘制butterworth低通滤波器的幅频响应图
title(巴氏低通滤波器'');
grid;%绘制带网格的图像
sf=filter(a,b,s);%叠加函数s经过低通滤波器以后的新函数
subplot(222);
plot(t,sf);%绘制叠加函数s经过低通滤波器以后的时域图形
xlabel('时间(seconds)');
ylabel('时间按幅度');
sf=fft(sf,256);%对叠加函数s经过低通滤波器以后的新函数进行256点的基—2快速傅立叶变换
w=%新信号角频率
subplot(223);
plot());%绘制叠加函数s经过低通滤波器以后的频谱图
title('低通滤波后的频谱图');
%设计高通滤波器
[n,wc]=buttord()
%估算得到butterworth高通滤波器的最小阶数n和3db截止频率wc
[a,b]=butter(n,wc,'high');%设计butterworth高通滤波器
[h,f]=freqz();%求数字高通滤波器的频率响应
figure(3);
subplot(221);
plot(f,abs(h));%绘制butterworth高通滤波器的幅频响应图
title('巴氏高通滤波器');
grid;%绘制带网格的图像
sf=filter();%叠加函数s经过高通滤波器以后的新函数
subplot(222);
plot(t,sf);;%绘制叠加函数s经过高通滤波器以后的时域图形
xlabel('time(seconds)');
ylabel('timewaveform');
w;%新信号角频率
subplot(223);
plot());%绘制叠加函数s经过高通滤波器以后的频谱图
title('高通滤波后的频谱图');
%设计带通滤波器
[n,wc]=buttord([)
%估算得到butterworth带通滤波器的最小阶数n和3db截止频率wc
[a,b]=butter(n,wc);%设计butterworth带通滤波器
[h,f]=freqz();%求数字带通滤波器的频率响应
figure(4);
subplot(221);
plot(f,abs(h));%绘制butterworth带通滤波器的幅频响应图
title('butterbandpassfilter');
grid;%绘制带网格的图像
sf=filter(a,b,s);%叠加函数s经过带通滤波器以后的新函数
subplot(222);
plot(t,sf);%绘制叠加函数s经过带通滤波器以后的时域图形
xlabel('time(seconds)');
ylabel('timewaveform');
sf=fft();%对叠加函数s经过带通滤波器以后的新函数进行256点的基—2快速傅立叶变换
w=(%新信号角频率
subplot(223);
plot('));%绘制叠加函数s经过带通滤波器以后的频谱图
title('带通滤波后的频谱图');