首页 > 编程知识 正文

巴特沃斯滤波器matlab代码,低通滤波器仿真matlab

时间:2023-05-06 10:44:53 阅读:58317 作者:1941

用matlab做了ssdss低通滤波器,暑假做了心电图的matlab实验。 我遇到了过滤器的问题。 因为网上的代码很杂乱,所以汇总整理了一下。

主要制作简单的低通滤波器,以三角函数为例进行低通滤波。

基本数据fk=100 %采样频率N=1024 %采样个数n=-n/2: n/2-1f=n * fk/nt=n/fky=sin (2* pi * 10 * t )当然f是

步骤1 :制作原信号频谱函数注意:将fft函数用于频谱分析,得到0~fk内的频谱

用fftshift函数得到-fk/2~fk/2内的光谱

FFT_y=FFT(y; FTshift_y=FFTshift(FFT_y ); f=linspace (-50、50、1024 ); plot(f,ABS ) FFTshift_y );

创建步骤ssdss低通滤波器以使用buttord函数获取阶数和Wn butter函数是求Butterworth数字滤波器的系数,在求出系数后对信号进行滤波时用filter函数

[g,wn]=buttord(WP、ws、Rp、Rs );

WP=FP/(0.5fk )=20/50=0.4 (通带截止频率) )

ws=fs/(0.5*fk )=30/50=0.6 (阻带截止频率)

Rp=1; 通带最大衰减

Rs=30; 阻带最小衰减

代码如下。

[g,wn ]=but tord (0.4,0.6,1,30 ); 用butter求差分方程的系数b a。 如果您不知道如何使用差分方程和过滤器,请单击以下链接以了解这个大人物

差分方程介绍

[b,a]=Butter(g,Wn ); 准备到此结束。 看看这个滤波器的相位频率特性

滤波器的相位频率特性[q,w]=freqz(b,a,256 ); 因为是plot(w*fs/)2*pi )、ABS (q ) ),所以我们写的过滤器的长度是这样的

20Hz是通带截止频率

30Hz是阻带截止频率

步骤3 (如果滤波器滤波器对滤波器函数进行滤波,用滤波器对信号进行滤波以获得频谱图,就可以将原始信号y滤波成k函数。 需要注意的是,这些是时域函数,并且观看频谱图需要fft变换

k=filter(b,a,y ); ft_k=FFT(k; FTshift_k=FFTshift(FFT_k ); plot(f,ABS ) FFTshift_k ); 过滤结果如下

没错,没变! 我们的低通滤波器可以使20Hz以下的信号恒定,但我们原来信号的频率是10Hz!

虽然这里省略了对高频信号的低通滤波,但是对于y=sin(2pi40*t )的信号,仍然使用上面的低通滤波的结果如下图所示。

请不要做鬼脸。 请注意振幅。 大约0。 也就是说,我们过滤了40Hz的信号。行文至此,点个赞呗亲!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。