对信号进行滤波处理

目录

用fft对信号进行滤波

在下采样前进行滤波


用fft对信号进行滤波

        首先,建立三个模拟信号,它们的频率分别为5、20、50Hz,并将这个三个信号相加合成一个信号,即:

y1 = sin(2*pi*5*t);
y2 = cos(2*pi*20*t);
y3 = sin(2*pi*50*t);

%%合并信号
y = y1 + y2 + y3;

plot(y);

        如图所示:

        合成信号的图形为:

        对该合成的信号进行傅里叶变换得到频谱图得:

        图中的频率与实际的频率基本一致,接下来将频谱进行滤波处理,将频率为20Hz的信号滤除:

ffs = find(f>16 & f < 24);
Y(ffs) = 0;  %单边
Y(N-ffs+1) = 0;%双边
yfilter = ifft(Y);
figure;
plot(t,yfilter);

        滤波后的图形为:

        对滤波后的信号进行fft变换求得频谱图得: 

         从频谱图中可知,20Hz的信号已经被滤除了,达到了滤波的效果。完整的代码:

%%
ds = 500;
t = 0:1/ds:1;
y1 = sin(2*pi*5*t);
y2 = cos(2*pi*20*t);
y3 = sin(2*pi*50*t);

%%合并信号
y = y1 + y2 + y3;

subplot(311)
plot(t,y1);
subplot(312);
plot(t,y2);
subplot(313);
plot(t,y3);

%%y
figure;
plot(t,y);

%%fft
N = length(y);
f = (ds/N)*(0:N/2-1);
Y = fft(y);
%%
figure;
plot(f,abs(Y(1:N/2)));
title('Single-Sided Amplitude Spectrum of S(t)')
xlabel('f (Hz)')
ylabel('|Y(f)|')

%%filter
ffs = find(f>16 & f < 24);
Y(ffs) = 0;  %单边
Y(N-ffs+1) = 0;%双边
yfilter = ifft(Y);
figure;
plot(t,yfilter);
%%
Yfilter = fft(yfilter);
figure;
plot(f,abs(Yfilter(1:N/2)));
title('Single-Sided Amplitude Spectrum of S(t)')
xlabel('f (Hz)')
ylabel('|Y(f)|')

在下采样前进行滤波

         此示例说明如何在下采样前进行滤波以减轻混叠造成的失真。

        可以使用 decimate 或 resample 以通过一个函数进行滤波和下采样。也可以先对数据进行低通滤波,然后使用 downsample。创建基带频谱支持大于 π 弧度的信号。使用 decimate 以在下采样之前通过 10 阶 Chebyshev I 类低通滤波器对信号滤波。

        创建信号并绘制幅值频谱。

f = [0 0.2500 0.5000 0.7500 1.0000];
a = [1.00 0.6667 0.3333 0 0];

nf = 512;
b = fir2(nf-1,f,a);
Hx = fftshift(freqz(b,1,nf,'whole'));

omega = -pi:2*pi/nf:pi-2*pi/nf;
plot(omega/pi,abs(Hx))
grid
xlabel('\times\pi rad/sample')
ylabel('Magnitude')

        如图所示:

        使用 10 阶 Chebyshev I 类低通滤波器对信号进行滤波,然后以 2 为因子下采样。绘制原始信号以及经过滤波和下采样的信号的幅值频谱。低通滤波器减少了区间 [−π/2,π/2] 之外的混叠失真量。

y = decimate(b,2,10);
Hy = fftshift(freqz(y,1,nf,'whole'));

hold on
plot(omega/pi,abs(Hy))
legend('Original','Downsampled')

         如图所示:

  • 7
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值