我做了一个5S的信号,是一个指数信号叠加一个50Hz正弦波
现在我希望滤掉50Hz,恢复原来的指数信号,
大家有好方法吗?
dt=1/1000;
t=0:dt:5;
x1=exp(-t);
x2=0.025*sin(2*pi*50*t);
y=x1+x2;
plot(t,y)
xlabel('t(s)'),ylabel('x(t)');title('指数信号叠加50Hz纹波');
grid on
----------------
低通滤波。
----------------
低通可以吗?
指数信号的频谱是不是也包括50Hz?
跟正弦波频谱混在一起了吧。
能滤掉吗
-----------------
可以用自适应陷波器,但在数据的开始段,因滤波器从暂态到稳态的过渡,将有较大的起伏。
------------------
你的指数信号部分x1=exp(-t);指数信号的频谱一般为钟形。
最好把频谱贴出来,看看重叠关系。50Hz没重叠,就传统滤波。重叠了可以考虑一些非常规的方法,如论坛以前有的陷滤波器(我没研究过)。
-----------------
1。低通滤波
2。最小二乘法去趋势项
----------------
谢谢楼上各位,低通滤波器,陷波器都做了。
不知道能不能达到要求。
如果用FFT滤波,会不会效果好点呢?
FFT滤波我还没研究过
图2 50Hz陷波器滤波效果
所谓陷波器,不过就是带阻滤波器
我这个是物理可实现的双T网络陷波器,推导出来的传递函数
再送入matlab中
代码如下:
b=[1.01 0 100000];
a=[1.01 637 100000];
[H,w]=freqs(b,a,0:0.1:3000);%滤波器的复数频率特性
magH=abs(H);
phaH=unwrap(angle(H))*180/pi;%化为角度
figure(1)
subplot(211),plot(w/(2*pi),20*log10(magH))
xlabel('频率/Hz');ylabel('振幅/dB')
grid on
subplot(212),plot(w/2/pi,phaH)
xlabel('频率/Hz');ylabel('相位/度^o')
grid on
注:
H=[tf(b,a)];
[yA,t1]=lsim(H,y,t);%y是原始信号
yA就是滤波后的波形
图3 低通滤波(10Hz截止频率)
------------------------
可以的,将对应50Hz简单置零,再取逆变换。稍微麻烦一点是,直流可能太大
-----------------------
另外,FFT滤波,在实际中是否有应用呢?
还是这种滤波方法只是理论上的。
-----------------------
我经常用FFT滤波的,它其实是一种理想的滤波器(矩形的),理论的,硬件无法实现。
----------------------
刚做了FFT滤波,不知道对不对
麻烦大家帮忙看看
dt=1/1000;
N=5000;
n=0:N-1;
t=n*dt;
f=n/(N*dt);
x1=exp(-t);
x2=0.025*sin(2*pi*50*t);
y1=x1+x2;
z=fft(y1);
z(251)=0.;%50Hz点频谱幅度置零
figure(1)
plot(t,x1)
title('指数信号')
xlabel('时间/S')
figure(2)
plot(t,y1)
xlabel('时间/S')
title('指数信号叠加50Hz纹波')
figure(3)
plot(t,real(ifft(z)))
title('FFT滤波后,通过IFFT变换到时间域')
xlabel('时间/S')
这种方法应该很彻底的滤掉了50HZ正弦波
但是滤波效果不太理想,是我程序有问题吗?
麻烦高手帮我看看。谢谢了 ~
----------------------
要共扼置零,也就是z(4751)也要为零
----------------------
把“z(251)=0.;%50Hz点频谱幅度置零”语句改为
z(251)=0.; z(4751)=0;%50Hz点频谱幅度置零
就能把正弦信号消去,得下图:
--------------------------
高手就是高手,谢谢楼上二位!!
------------------------
文章评论(0条评论)
登录后参与讨论