找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 199|回复: 8
打印 上一主题 下一主题
收起左侧

从软件滤波的角度,有没有什么办法能将干扰的工频信号滤除?

[复制链接]
跳转到指定楼层
楼主
最近做一款微波产品,发现微波感应信号会受到工频信号的干扰,频率大致是50Hz
硬件上已经做了很多努力,没办法解决,现在只能从软件滤波角度入手
以下分别是受干扰的采样信号和正常的采样信号
不能作限幅滤波处理,因为微波响应的依据是前后两次采样数据的差值,差值达到某一基准视为探测到移动信号

MAP004.jpg (378 KB, 下载次数: 0)

受干扰信号

受干扰信号

MAP005.jpg (378 KB, 下载次数: 0)

正常信号

正常信号
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:879809 发表于 2025-7-15 11:04 | 只看该作者
你都微波了,随便放一个pF级别的耦合电容就把工频信号滤掉了,pF级电容对于微波来说就是阳关道,对于工频就是不可逾越的喜马拉雅山。你的现象明显是检波后处理电路PCB布线有问题引入了工频。
回复

使用道具 举报

板凳
ID:1034262 发表于 2025-7-15 11:06 | 只看该作者
滤波,是将频率(频谱)不同的干扰滤除,你同频干扰,是没有办法用滤波器滤除的。
回复

使用道具 举报

地板
ID:879809 发表于 2025-7-15 13:46 | 只看该作者
coody_sz 发表于 2025-7-15 11:06
滤波,是将频率(频谱)不同的干扰滤除,你同频干扰,是没有办法用滤波器滤除的。

你看他的图X轴是20ms/div,显然丈育把“工频”写成“共频”了。
回复

使用道具 举报

5#
ID:1143744 发表于 2025-7-15 16:27 | 只看该作者
rundstedt 发表于 2025-7-15 13:46
你看他的图X轴是20ms/div,显然丈育把“工频”写成“共频”了。

我是文盲谢谢回复
回复

使用道具 举报

6#
ID:844772 发表于 2025-7-16 08:48 | 只看该作者
条件是什么呢,如果已经取到数据,在电脑上处理,那有点简单用MATLAB之类搞个带阻滤波器不难。如果单板机上,最好用楼上沙发的方法,否则用FFT 剔除50Hz点的值,再IFFT回来,这个效果不好说。
回复

使用道具 举报

7#
ID:1034262 发表于 2025-7-16 10:42 | 只看该作者
rundstedt 发表于 2025-7-15 13:46
你看他的图X轴是20ms/div,显然丈育把“工频”写成“共频”了。

那就是楼主的问题,误导我,让我得出错误的结论。
回复

使用道具 举报

8#
ID:1153607 发表于 2025-7-17 19:31 | 只看该作者
好歹搞个高频环节,比如高频变压器,工频就过不去了。或者把系统阻抗降下来,比如50欧也可以解决。
回复

使用道具 举报

9#
ID:136119 发表于 2025-7-18 09:18 | 只看该作者
建立数据队列可能好用  只要数据队列够长应该会稳定
/////////////建立数据队列 计数平均值///////////////
/*!
        说明:建立数据队列 计数平均值; 建立全局数据求和 先减去数据 在加数据在求平均数
             target:结构体定义对象
            data:新的数据
*/
void DataFlowRecordFast(SAD_DataFlow* target ,u16 data)//记录数据
{
        u8 i ;               
        i = 0x7f & target->Sign;
        target -> SumDataADC = (target -> SumDataADC)  - (target -> DataFlow [i]) ;       
        target -> DataFlow [i] = data;
        target -> Sign++;                i++;
        if(i >= ADDE_DataFlow)         {target->Sign = 0x80;}                // 数据等0x80,表示数据填充1周,当数据有效;
        target -> SumDataADC = (target -> SumDataADC) +  data;
  target->DataADC = target -> SumDataADC / ADDE_DataFlow;
}

////#define ADDE_DataFlow  15                   
////typedef struct
////{
////        u8 Sign;                                                                                         // 数据记录标号  Sign 高位为数据有效标记位,为1 数据已经填充一周。
////        u16 DataFlow[ADDE_DataFlow];  // 记录相关数据
////        u32 SumDataADC;                                                          // 当前数据相加后的结果
////        u16 DataADC;                                                                  // 数据有效值
////} SAD_DataFlow ;                                                                 // 记录AD数据转换结果
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表