0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【英飞凌PSoC 6 RTT开发板试用】信号处理前端之滤波

嵌入式USB开发 来源:嵌入式USB开发 作者:嵌入式USB开发 2023-07-14 00:09 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

3.3数字滤波信号前端

原理

CMSIS-DSP提供直接I型IIR库支持Q7,Q15,Q31和浮点四种数据类型。其中Q15和Q31提供了快速版本。

直接I型IIR滤波器是基于二阶Biquad级联的方式来实现的。每个Biquad由一个二阶的滤波器组成:

y[n] = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2]

直接I型算法每个阶段需要5个系数和4个状态变量。
image.png

y[n] = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] - a1 * y[n-1] - a2 * y[n-2]

matlab使用上面的公式实现,在使用fdatool工具箱生成的a系数需要取反才能用于直接I型IIR滤波器的函数中。

高阶IIR滤波器的实现是采用二阶Biquad级联的方式来实现的。其中参数numStages就是用来做指定二阶Biquad的个数。比如8阶IIR滤波器就可以采用numStages=4个二阶Biquad来实现。

image.png

如果要实现9阶IIR滤波器就需要将numStages=5,这时就需要其中一个Biquad配置成一阶滤波器(也就是b2=0,a2=0)。

添加命令行

shell_fun.h中

void IirFun(void* param);

shell_fun.c中

#include "iir.h"

shell_cmd_list中添加一行

{ (const uint8_t*)"iir",         IirFun,           “iir"},

添加命令执行函数

void IirFun(void* param)

{

Iir_main();

}

实现代码

Iir.c

#include "arm_math.h"
#include "arm_const_structs.h"
#include < stdio.h >

#define TEST_LENGTH_SAMPLES 2048
#define FS 10000

extern float32_t testInput_f32_10khz[TEST_LENGTH_SAMPLES];
static float32_t testOutput[TEST_LENGTH_SAMPLES];


static uint32_t fftSize = 1024;
static uint32_t ifftFlag = 0;
static uint32_t doBitReverse = 1;
static arm_cfft_instance_f32 varInstCfftF32;

static int testIndex = 0;

static float testtmp_f32_10khz[2048];
static int32_t adcbuffer[2048];


#define numStages  2                /* 2阶IIR滤波的个数 */
#define BLOCK_SIZE           128    /* 调用一次arm_biquad_cascade_df1_f32处理的采样点个数 */


uint32_t blockSize = BLOCK_SIZE;
uint32_t numBlocks = TEST_LENGTH_SAMPLES/BLOCK_SIZE;      /* 需要调用arm_biquad_cascade_df1_f32的次数 */
static float32_t IIRStateF32[4*numStages];                      /* 状态缓存 */

/* 巴特沃斯低通滤波器系数 80Hz*/
const float32_t IIRCoeffs32LP[5*numStages] = {
    1.0f,  2.0f,  1.0f,  1.479798894397216679763573665695730596781f,
-0.688676953053861784503908438637154176831f,

    1.0f,  2.0f,  1.0f,  1.212812092620218384908525877108331769705f,
-0.384004162286553540894828984164632856846f
};

int32_t iir_main(void)
{
    uint32_t i;
    arm_biquad_casd_df1_inst_f32 S;
    float32_t ScaleValue;
    float32_t  *inputF32, *outputF32;

    /* 初始化输入输出缓存指针 */

    //memcpy(testtmp_f32_10khz,testInput_f32_10khz,sizeof(testInput_f32_10khz));
#if 1
    adc_samp(adcbuffer,2048);
    for(int i=0; i< 2048;i ++)
   {
  	  testtmp_f32_10khz[i] = (float)adcbuffer[i];
    }
#endif
    inputF32 = testtmp_f32_10khz;
    outputF32 = testOutput;

    /* 初始化 */
    arm_biquad_cascade_df1_init_f32(&S, numStages, (float32_t *)&IIRCoeffs32LP[0],
(float32_t *)&IIRStateF32[0]);

    /* 实现IIR滤波,这里每次处理1个点 */
    for(i=0; i < numBlocks; i++)
    {
        arm_biquad_cascade_df1_f32(&S, inputF32 + (i * blockSize),  outputF32 + (i * blockSize),
  blockSize);
    }

    /*放缩系数 */
    ScaleValue = 0.012f* 0.42f;

    /* 打印滤波后结果 */
    for(i=0; i< TEST_LENGTH_SAMPLES; i++)
    {
        printf("/*%f, %f*/rn", testtmp_f32_10khz[i], testOutput[i]*ScaleValue);
    }


}

 /** endlink */

Iir.h

#ifndef IIR_H
#define IIR_H

int iir_main(void);

#endif

测试

输入iir回车,查看波形

见视频

以下可以看到滤波导致了滞后,黄色线有滞后
image.png

image.png

以下是实时采集滤波
image.png
审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 英飞凌
    +关注

    关注

    69

    文章

    2595

    浏览量

    143275
  • 滤波器
    +关注

    关注

    162

    文章

    8497

    浏览量

    186585
  • PSoC
    +关注

    关注

    12

    文章

    182

    浏览量

    95249
  • 滤波
    +关注

    关注

    10

    文章

    714

    浏览量

    58127
  • 信号处理
    +关注

    关注

    49

    文章

    1172

    浏览量

    105322
  • 开发板
    +关注

    关注

    26

    文章

    6506

    浏览量

    121351
  • RTT
    RTT
    +关注

    关注

    0

    文章

    66

    浏览量

    18366
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    有奖丨米尔全志 T153 MINI开发板免费试用来啦

    米尔与全志合作发布的新品基于全志T153应用处理器的MYD-YT153MX-MINI开发板免费试用名额来啦~~米尔提供了3套价值399元的MYD-YT153MX-MINI开发板发起
    的头像 发表于 01-29 08:04 715次阅读
    有奖丨米尔全志 T153 MINI<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>来啦

    【免费试用】正点原子STM32N647开发板免费试用

    STM32N647开发板是正点原子以STM32N647X0H3Q为核心推出的开发板开发板提供了强大的AI算力和CPU处理能力支持,可进行人工智能与机器听视觉的应用
    的头像 发表于 12-23 08:06 1844次阅读
    【免费<b class='flag-5'>试用</b>】正点原子STM32N647<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>

    RK3506开发板Linux开发板极致性价比

    RK3506开发板Linux开发板极致性价比选瑞芯微RK3506开发板,3核Cortex-A7@1.5GHz+Cortex-M0,Linux+RT-Thread系统支持,128MB超
    的头像 发表于 09-11 16:26 4053次阅读
    RK3506<b class='flag-5'>开发板</b>Linux<b class='flag-5'>开发板</b>极致性价比<b class='flag-5'>之</b>选

    【作品合集】创龙科技TLT113/TL3562-MiniEVM开发板测评

    开发板试用体验】Grove移植5BUZZER【创龙TL3562-MiniEVM开发板试用体验】Grove移植
    发表于 09-02 11:25

    【RA-Eco-RA6M4开发板评测】SEGGER_RTT打印日志

    【前言】我使用的RA6M4开发板只接了jlink-ob没有接串口,因此打印日志可以通过SEGGER_RTT来实现,本篇将介绍如何移植SEGGER_RTT,并通过
    发表于 07-31 14:40

    有奖丨米尔 瑞芯微RK3506开发板免费试用来啦!

    米尔与瑞芯微合作发布的新品基于瑞芯微RK3506应用处理器的MYD-YR3506开发板免费试用名额增加啦
    的头像 发表于 07-10 08:03 1297次阅读
    有奖丨米尔 瑞芯微RK3506<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>来啦!

    有奖丨米尔 瑞芯微RK3506开发板免费试用

    米尔与瑞芯微合作发布的新品基于瑞芯微RK3506应用处理器的MYD-YR3506开发板免费试用名额来啦~~米尔提供了3块价值299元的MYD-YR3506开发板发起
    的头像 发表于 06-19 08:04 1356次阅读
    有奖丨米尔 瑞芯微RK3506<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>

    有奖丨米尔 瑞芯微RK3562开发板免费试用新增名额!

    米尔与瑞芯微合作发布的新品基于瑞芯微RK3562应用处理器的MYD-YR3562开发板免费试用名额增加
    的头像 发表于 06-13 08:04 2157次阅读
    有奖丨米尔 瑞芯微RK3562<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>新增名额!

    基于RK3576处理器,米尔RK3576开发板免费试用

    年7月19日   评测数量: 3块   更多热点文章阅读 基于平头哥TH1520芯片,润开鸿HH-SCDAYU800A开发板免费试用 RISC-V开发板深度评测!顶级开发板免费
    的头像 发表于 06-09 15:00 1439次阅读
    基于RK3576<b class='flag-5'>处理</b>器,米尔RK3576<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>

    搭载OpenHarmony操作系统,视美泰SC-3568HA开发板免费试用

    : 10块   更多热点文章阅读 基于平头哥TH1520芯片,润开鸿HH-SCDAYU800A开发板免费试用 RISC-V开发板深度评测!顶级开发板免费
    的头像 发表于 06-05 16:45 1550次阅读
    搭载OpenHarmony操作系统,视美泰SC-3568HA<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>

    基于RK处理器,创龙TL3562-MiniEVM开发板试用体验

    数量: 10块   更多热点文章阅读 基于平头哥TH1520芯片,润开鸿HH-SCDAYU800A开发板免费试用 RISC-V开发板深度评测!顶级开发板免费
    的头像 发表于 06-05 16:31 1401次阅读
    基于RK<b class='flag-5'>处理</b>器,创龙TL3562-MiniEVM<b class='flag-5'>开发板</b><b class='flag-5'>试用</b>体验

    性能强悍!合众HZ-RK3568开发板试用体验

    月19日   评测数量: 10块   更多热点文章阅读 基于平头哥TH1520芯片,润开鸿HH-SCDAYU800A开发板免费试用 RISC-V开发板深度评测!顶级开发板免费
    的头像 发表于 06-05 16:30 1811次阅读
    性能强悍!合众HZ-RK3568<b class='flag-5'>开发板</b><b class='flag-5'>试用</b>体验

    【免费试用开发板评测大赛开启!OH 、RISC-V、Rockchip顶级开发板等你试用~

    技术人的狂欢,开发者的盛宴!2025年最值得期待的硬核赛事——电子发烧友开发板评测大赛正式启动!无论你是开源生态的探索者、芯片架构的极客,还是物联网领域的创新达人,本次大赛三大赛
    的头像 发表于 06-05 08:05 1259次阅读
    【免费<b class='flag-5'>试用</b>】<b class='flag-5'>开发板</b>评测大赛开启!OH 、RISC-V、Rockchip顶级<b class='flag-5'>开发板</b>等你<b class='flag-5'>试用</b>~

    有奖丨米尔 NXP i.MX91开发板免费试用来啦

    米尔与NXP合作发布的新品基于NXPi.MX91应用处理器的MYD-LMX91开发板免费试用名额来啦~~米尔提供了3套价值588元的MYD-LMX91开发板发起
    的头像 发表于 06-05 08:02 1608次阅读
    有奖丨米尔 NXP i.MX91<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>来啦

    【评测试用】合众HZ-T536开发板免费试用体验

    【评测试用】合众HZ-T536开发板免费试用体验
    的头像 发表于 05-27 08:05 1326次阅读
    【评测<b class='flag-5'>试用</b>】合众HZ-T536<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>体验