用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的信号。行文至此,点个赞呗亲!