原创 50hz直消大法

2022-5-7 12:35 5300 20 6 分类: MCU/ 嵌入式 文集: matlab

在生物电(心电ECG 脑电EEG 肌电EMG) 测量时需要将人体感应的50HZ工频交流信号去除。工频交流信号通常是以共模干扰的形式出现在信号中。使用高共模抑制的差分放大电路,可以抑制共模干扰。但由于电路无法做到绝对平衡。总会有50HZ工频干扰出现在信号中,工频干扰严重时,有可能会将信号淹没。模拟方法是使用双T形的带阻滤波器接在仪表放大器后级。在频率域滤除工频干扰。由阻容元件和运算放大器组成的带阻滤波器,频率准确度和稳定度不容易保证。另外群延时特性很糟糕。经滤波后的信号会严重失真。高速高精度的ADC引入,可以直接将仪表放大器的输出数字化。使用数字滤波器来滤除50HZ干扰信号。

使用一个sinc函数做测试,sinc函数是频谱特性为矩形的脉冲。测试信号覆盖了0~200hz频带。

混杂有50hz干扰的信号,引入干扰后,信号面目全非了。

使用的采样率需要为50的倍数。用于分析的数据长度为50hz的整数周期。

使用IIR制作的50hz陷波器,对加了50hz干扰的sinc信号滤波,发现确实可以限制50hz干扰,但经过滤波的信号波形失真很大。原因是陷波器非线性相位。

考虑到由三角函数线性叠加特性,经由不同路径进入系统的50HZ干扰,其结果仍然为50HZ干扰,只是幅值和相位会有变化。可以分析采集到的数据频谱,找出50hz对应的幅度和相位。还原出50hz干扰。将采到的信号与还原的50HZ干扰直接相减,可以得到滤除50hz干扰的信号。

实际使用时,仅需要求出50HZ对应的频谱。FFT的频谱分辨率为采样率与FFT点数之比(Fs/Len)。 0位置为信号直流成份,第50*len/Fs点即为50HZ的频率成份。由50hz频率成份可以重构出50hz干扰的幅度及相位。幅度值为频率成份取模/FFT点数*2,相角为频率成份相角的余弦函数。

  1. Fs = 30000; % Sampling Frequency
  2. Fnotch = 50; % Notch Frequency
  3. BW = 1; % Bandwidth
  4. Apass = 40; % Bandwidth Attenuation
  5. [b, a] = iirnotch(Fnotch/(Fs/2), BW/(Fs/2), Apass);
  6. Hd = dfilt.df1sos(b, a); %生成50hz 数字陷波器 带宽 1hz 阻带衰减 40db
  7. len = Fs/10; % 数据长度 100mS
  8. t = 1:len;
  9. tt = -0.04:1/Fs:0.06-1/Fs;
  10. x = 2*sin(2*pi*100*tt)./(2*pi*200*tt); %生成一个sinc函数作为测试信号
  11. x(1201)=x(1200);
  12. n = 1.0*cos(2*pi*50*t/Fs + pi/5); % 50hz noise
  13. q = x + n ; % sinc 信号加上50hz 干扰
  14. figure(1)
  15. plot(t,x,'.g',t,q,'b')
  16. legend('org','with noise');
  17. %使用50hz notching 滤波
  18. qn = filter(Hd,q);
  19. figure(2)
  20. plot(t,x,'r',t,qn)
  21. legend('org','notch filted');
  22. %使用直接消去法
  23. fftq = fft(q,len) %求出信号频谱
  24. p50 = abs(fftq(50*len/Fs+1))/len*2* … cos(2*pi*50*t/Fs+phase(fftq(50*len/Fs+1)));
  25. %找出其中叠加的 50HZ 信号包括幅度和相位
  26. figure(3)
  27. plot(t,x,'r',t,q-p50)
  28. legend('org','remove')

这种方法取名为“50hz直消大法”吧。理论上“50hz直消大法”的幅频特性在50hz-∞,其它频率点为1。相频特性50hz处无法形容,其它频率为0。非常理想。


作者: southcreek, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-408807.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

zilong26_893896839 2022-5-25 08:53

谢谢分享
相关推荐阅读
southcreek 2024-12-04 16:32
PWM输出隔离DAC设计
这个设计的目标是产生一个隔离的DAC输出。12V供电,产生0~5V的输出。达到10000约13.3位的分辨率。要求DAC输出在改变设置后1S内能稳定。需要能长时间保持稳定和低噪声。能达到要求的DAC只...
southcreek 2024-12-04 15:23
一个基于HAL库的串口控制框架
将串口接收配置为 DMA方式,DMA 使用 DMA_CIRCULAR 模式工作。串口接收的数据实际上构成循环队列。 定义一个结构Comm_typedef 结构体中包含指向接收到的第一字节位置chrc...
southcreek 2024-07-08 11:38
接地不良导致的故障分析
这个电路的控制板需要连接显示板和识别板。5V 供电和串行控制连到显示板,显示板再连接到识别板。识别板上电位器使用一个LDO供电,将输入的5V转成3.3V。当电位器滑动时,输出电压在0~3.3V之间。...
southcreek 2024-06-26 09:15
【EMC整改】带辅助加热的滴速控制器辐射抗扰整改
这个滴速式的输液泵使用一个红外线发射和接收装置,当有液滴通过时,会扰动检测信号,识别这个扰动检测到液滴滴下,获得滴壶中的液滴速度,调整阀门大小,实现输液速度控制。控制器还配备一根加热条,用于输液时对药...
southcreek 2024-06-06 08:52
QT 使用QSettings 操作ini文件配合表格操作
这个项目可以演示 使用QSetting 读取或写入 ini文件。并使用tablewidget 显示。Ini文件的格式如下,这个文件可以事先编写。也可以在程序中生成。有一个大类,下面有一个小类使用等号设...
southcreek 2024-05-27 16:18
差分输入ADC的单端到差分转换器驱动设计
单端信号需要转换成差分信号,以便使用ADC进行转换。这个就所谓的ADC驱动电路。需要的结果为Vp = Vcm + Vi/2Vn = Vcm – Vi/2这样 Vp – Vn = Vi使用简单的加法器和...
EE直播间
更多
我要评论
1
20
关闭 站长推荐上一条 /3 下一条