从信号中去除 60Hz 杂声

文章介绍了如何在1kHz采样频率下,使用Butterworth陷波滤波器从模拟仪器的输入电压信号中去除60Hz的电力线噪声。通过设计一个2阶带阻IIR滤波器,针对59至61Hz的频率区间进行过滤,有效地减少了60Hz噪声,并通过周期图验证了滤波效果。
摘要由CSDN通过智能技术生成

从信号中去除 60Hz 杂声

美国和其他几个国家/地区的交流电以 60 Hz 的频率振荡。这些振荡通常会破坏测量结果,必须将其减去。

% 在存在 60 Hz 电力线噪声的情况下,研究模拟仪器的输入的开环电压。
% 电压采样频率为 1 kHz。
load openloop60hertz, openLoop = openLoopVoltage;

Fs = 1000; % 采样频率
t = (0:length(openLoop)-1)/Fs;

plot(t,openLoop)
ylabel('Voltage(V)')
xlabel('Time(s)')
title('Open-Loop Voltage with 60 Hz Noise')
grid

使用 Butterworth 陷波滤波器消除 60 Hz 噪声。使用 designfilt 设计该滤波器。陷波的宽度定义为 59 至 61 Hz 的频率区间。滤波器至少去除该范围内频率分量的一半功率。

% % % 设计一个2阶带阻IIR滤波器,低3db频率59hz,高3db频率61hz,
% 采样率为Fs=1000hz。可视化滤波器的幅值响应。
% 用它来过滤openloop60hertz数据样本。
d = designfilt('bandstopiir','FilterOrder',2, ...
               'HalfPowerFrequency1',59,'HalfPowerFrequency2',61, ...
               'DesignMethod','butter','SampleRate',Fs);%设计Butterworth 陷波滤波器

% 绘制滤波器的频率响应。请注意,此陷波滤波器提供高达 45 dB 的衰减。
fvtool(d,'Fs',Fs)

% 用 filtfilt 对信号进行滤波,以补偿滤波器延迟。注意振荡是如何显著减少的。
figure
buttLoop = filtfilt(d, openLoop);%使用数字滤波器d对输入数据x进行零相位滤波。

plot(t,openLoop,t,buttLoop)
ylabel('Voltage (V)')
xlabel('Time (s)')
title('Open-Loop Voltage')
legend('Unfiltered','Filtered')
grid

% 使用周期图可以看到 60 Hz 的“峰值”已去除。
figure
[popen,fopen] = periodogram(openLoop,[],[],Fs);
[pbutt,fbutt] = periodogram(buttLoop,[],[],Fs);

plot(fopen,20*log10(abs(popen)),fbutt,20*log10(abs(pbutt)),'--')
ylabel('Power/frequency (dB/Hz)')
xlabel('Frequency (Hz)')
title('Power Spectrum')
legend('Unfiltered','Filtered')
grid

【我是小蜜蜂,知识的搬运工!】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值