1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 低通 带通 高通滤波器的设计

低通 带通 高通滤波器的设计

时间:2022-12-12 05:22:06

相关推荐

低通 带通 高通滤波器的设计

转载链接:/u010451580/article/details/51460331

这是之前用到的几个简单的滤波器的程序,滤波器的设计比较简单。可以直接使用matlab里的FDA,导出滤波器系数即可。

再就是参考数字信号处理课本里面三种滤波器设计的方法,由过渡带和所选的窗函数推导出滤波器阶数,进一步根据firl和filter函数编写即可。

下面给出三种滤波器的简单代码:

低通:用的hanning窗

function [y]=fir_lpf(x,Fs,fs,fp)

%该函数采用hanning窗实现低通滤波

%x为输入信号,fs,为采样频率

%fs,fp分别为阻带截至频率和通带截至频率

%0615 by boat

%求对应角频率

ws=fs*2*pi/Fs;

wp=fp*2*pi/Fs;

%求滤波器的最小阶数

B=ws-wp; %过渡带宽取二者中较小的

N=ceil(6.2*pi/B);

%计算滤波器系数

wc=(ws+wp)/2;

hn=fir1(N-1,wc,hanning(N));

y=filter(hn,1,x);

freqz(hn)

带通:这里用的布拉克曼窗

function [y]=fir_bpf(x,fs,fs2,fp2,fp1,fs1)

%该函数采用blackman窗实现带通滤波

%x为输入信号,fs,为采样频率

%fs2,fp2分别为阻带上截至频率和通带上截至频率

%fp1,fs1分别为通带下截止频率和阻带下截至频率

%ps:输入时以上四个滤波参数按从大到小输入即可

%0615 by boat

%求对应角频率

ws2=fs2*2*pi/fs;

wp2=fp2*2*pi/fs;

wp1=fp1*2*pi/fs;

ws1=fs1*2*pi/fs;

%求滤波器的阶数

B=min(ws2-wp2,wp1-ws1); %求过渡带宽

N=ceil(12*pi/B);

%计算滤波器系数

wc2=(ws2+wp2)/2;

wc1=(ws1+wp1)/2;

wp=[wc1,wc2];

hn=fir1(N-1,wp,blackman(N));

y=filter(hn,1,x);

高通:这里用的凯泽窗

function [y]=fir_hpf(x,Fs,As,fp,fs)

%该函数采用kaiser窗设计高通滤波器

%输入:x 输入信号

% Fs 采样频率

% As 阻带最小衰减

% fp通带截止频率 fs阻带截止频率(单位Hz)

% 0615 by boat

%设定各种参数

b=fp-fs;% 求取过渡带

M0=round((As-7.95)/(14.36*b/Fs))+2; % 计算窗长

M=M0+mod(M0+1,2); % 保证窗长为奇数

wp=2*fp/Fs*pi; ws=2*fs/Fs*pi;

wc=(wp+ws)/2; % 求截止频率

%求kaiser窗的系数beta的值

if As>50

beta=0.1102*(As-8.7);

elseif As>=21&&As<=50

beta=0.5842*(As-21)^0.4+0.07886*(As-21);

else

beta=0;

end

%设定滤波器参数

N=M-1; %设定滤波器阶数

hd=fir1(N,wc,'high',kaiser(M,beta));

%滤波

x=x-mean(x); % 消除直流分量

y=filter(hd,1,x);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。