个人在处理工程信号的时候,会遇到电信号50Hz及其倍频干扰特别强的情况,如何直接滤掉这些特定信号,而不影响周边有用信号呢,下面,就给大家推荐一个能精确剔除掉指定频率的滤波器——陷波滤波器。
input=textread('input2(t) Mar 21,2013 12-53-14.txt');%原信号
fs=2560;%采样频率
Ts=1/fs;
x=input(15*fs:17*fs,2);%提取信号第二列要处理的那一段,即要处理的时域信号。
f0=100;%要滤掉的信号,单位Hz
NLen=length(x(:,1));%信号长度
n=0:NLen-1;%陷波器的设计
apha=-2*cos(2*pi*f0*Ts);
beta=0.96;
b=[1 apha 1];
a=[1 apha*beta beta^2];
figure(1);
freqz(b,a,NLen,fs);%陷波器幅频特性显示
y=dlsim(b,a,x);%陷波器滤波处理,y即为滤波后的时域信号%对信号进行频域变换。
xfft=fft(x,NLen);
xfft=xfft.*conj(xfft)/NLen;
y1=fft(y,NLen);
y2=y1.*conj(y1)/NLen;
figure(2);%滤除前后的信号对比。
subplot(2,2,1);plot(n,x);
grid;
xlabel('Time (s)');
ylabel('Amplitude');
title('Input signal');
subplot(2,2,3);plot(n,y);
grid;
xlabel('Time (s)');
ylabel('Amplitude');
title('Filter output');
subplot(2,2,2);
plot(n*fs/NLen,xfft);
axis([0 fs/2 min(xfft) max(xfft)]);
grid;xlabel('Frequency (Hz)');
ylabel('Magnitude (dB)');
title('Input signal');
subplot(2,2,4);
plot(n*fs/NLen,y2);
axis([0 fs/2 min(y2) max(y2)]);
grid;
xlabel('Frequency (Hz)');
ylabel('Magnitude (dB)');
title('Filter output');
我们看到100Hz的信号被干净利落的剔除了