硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5037|回复: 6
收起左侧

[有问必答] 求解一个50HZ的滤波问题

[复制链接]

2

主题

8

回帖

2

积分

新手上路

积分
2
发表于 2016-7-27 14:47:36 | 显示全部楼层 |阅读模式
现在在做一个带阻滤波,想把50Hz的频率滤掉,采样率为1200。滤波器的系数是靠matlab的fdatool生成的,

fdatool配置界面

fdatool配置界面
,可以看得到在50HZ的点上分贝数已经达到了40dB多,接近50dB了,理应可以滤掉波形。在MATLAB中仿真也是没问题的,图如下

仿真结果

仿真结果

单片机具体的程序如下

输入信号为
main函数:(没完整粘贴,变量定义没贴上)
        sum1=40;//点数
    for(i=0; i<sum1; i++)
    {
//   INPUT =i*30;
        INPUT = (arm_sin_f32(2*3.1415926f*50*i/1200))*2047;
    }
    for(i=sum1; i<sum1+sum1; i++)
    {
//   INPUT1[i-sum1] =i*30;
        INPUT1[i-sum1] = (arm_sin_f32(2*3.1415926f*50*i/1200))*2047;
    }

    while(1)
    {
        LCD_Clear(WHITE);
//         LCD_DrawLine(0,48,180,48);

   fil();
    for(i=1;i<140;i++)
    {
//    LCD_DrawLine(100+INPUT[i-1]/25,2*(i-1+10),100+INPUT/25,2*(i-0+10));
        LCD_DrawLine(100+BSOUT[i-1]/25,2*(i-1+10),100+BSOUT[i+0]/25,2*(i+10)); //190-290,,,205-302 BS:95-215
    }
    }


这是fil()函数

#define TEST_LENGTH_SAMPLES  320    /* 采样点数 */
#define SIZE           32     /* 调用一次arm_fir_f32处理的采样点个数 */
#define NUM_TAPS             201     /* 滤波器系数个数 */
#define tableSize 320
uint32_t blockSize = SIZE;
uint32_t numBlocks =10;//TEST_LENGTH_SAMPLES/SIZE;            /* 需要调用arm_fir_f32的次数 */
static float32_t firStateF32[SIZE + NUM_TAPS - 1];        /* 状态缓存,大小numTaps + blockSize - 1*/

  void fil()[
        uint32_t i;
    arm_fir_instance_f32 S;
    float32_t  *inputF32, *outputF32;
   

    if(num2==0)
    {
    inputF32=&INPUT[0];
    }
  else if(num2==1)
    {
    inputF32 = &INPUT1[0];
    }
   
    /* 初始化输入输出缓存指针 */
//    inputF32 = &HPOUT[82];
    outputF32 = &BSOUT[0];

   
    /* 初始化结构体S */
    arm_fir_init_f32(&S, NUM_TAPS, (float32_t *)&BS[0], &firStateF32[0], blockSize);

    /* 实现FIR滤波 */
    for(i=0; i < numBlocks; i++)
    {
        arm_fir_f32(&S, inputF32 + (i * blockSize), outputF32 + (i * blockSize), blockSize);

    }
]
可是得到的波形如下,因为拍照拍不出来,只能按着图手画了出来,

这是两段输入滤波后的形状

这是两段输入滤波后的形状
,也尝试过使用把数据发送出去再收集绘图,波形如下 3.png ,从图中可以看到50HZ的频率的幅值仍然有一半(原值为2000+),滤波后为1000+。

这个究竟是什么原因,这问题搞了两个星期都没解决掉,也尝试过把滤波器的阶数改为不同,波形还是不能完全的滤掉。
回复

使用道具 举报

2

主题

8

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2016-7-27 14:50:17 | 显示全部楼层
手绘的图放的方向错了,上图应为把图逆时针看
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
发表于 2016-7-28 09:43:49 | 显示全部楼层
工频信号滤除,使用梳状滤波器或者工频陷波比较好。
回复

使用道具 举报

2

主题

8

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2016-7-29 10:44:48 | 显示全部楼层

回 eric2013 的帖子

eric2013:工频信号滤除,使用梳状滤波器或者工频陷波比较好。 (2016-07-28 09:43) 
你好,请问下MATLAB怎么设置梳妆滤波器,我发现matlab好像也没这选项
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
发表于 2016-7-29 11:22:18 | 显示全部楼层

回 xgqxgq 的帖子

xgqxgq:你好,请问下MATLAB怎么设置梳妆滤波器,我发现matlab好像也没这选项 (2016-07-29 10:44) 
具体我没有研究过。以前上学时候学过。
回复

使用道具 举报

2

主题

8

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2016-7-31 10:12:48 | 显示全部楼层

回 eric2013 的帖子

eric2013:具体我没有研究过。以前上学时候学过。 (2016-07-29 11:22) 
你好,我想问一个问题,我在网上找到了一个用IIR滤波的,他那个能把200采样率,50hz的滤掉,可是我把采样率改为1200拿到的参数,再用他的程序做,却发现不能滤掉,是不是也会受到采样率的影响的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
发表于 2016-8-2 10:40:44 | 显示全部楼层

回 xgqxgq 的帖子

xgqxgq:你好,我想问一个问题,我在网上找到了一个用IIR滤波的,他那个能把200采样率,50hz的滤掉,可是我把采样率改为1200拿到的参数,再用他的程序做,却发现不能滤掉,是不是也会受到采样率的影响的 (2016-07-31 10:12) 
用高通滤波器试过吗,用高通滤波器去做
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-13 01:18 , Processed in 0.274638 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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