<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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
審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 英飛凌
    +關注

    關注

    65

    文章

    1977

    瀏覽量

    137099
  • 濾波器
    +關注

    關注

    158

    文章

    7392

    瀏覽量

    175265
  • PSoC
    +關注

    關注

    12

    文章

    168

    瀏覽量

    91293
  • 濾波
    +關注

    關注

    10

    文章

    628

    瀏覽量

    56298
  • 信號處理
    +關注

    關注

    47

    文章

    884

    瀏覽量

    102662
  • 開發板
    +關注

    關注

    25

    文章

    4560

    瀏覽量

    94840
  • RTT
    RTT
    +關注

    關注

    0

    文章

    64

    瀏覽量

    16918
收藏 人收藏

    評論

    相關推薦

    玩轉PSoC 6 RTT積木式開發套件,實現毫米波雷達等實用功能

    本期英飛凌手工課,將由來自英飛凌的工程師Jenson給大家帶來PSoC62withCAPSENSEevaluationkit(下稱PSoC6RTT
    的頭像 發表于 03-20 08:35 ?362次閱讀
    玩轉<b class='flag-5'>PSoC</b> 6 <b class='flag-5'>RTT</b>積木式<b class='flag-5'>開發</b>套件,實現毫米波雷達等實用功能

    英飛凌PSoC? 62開發板 -LCD ILI9341 8080 DEMO

    英飛凌開發板
    rx_ted
    發布于 :2024年03月07日 21:08:39

    英飛凌測評】英飛凌PSoC? 62開發板試用報告-LCD ILI9341 8080 DEMO

    # Infineon Psoc6-evaluationkit-062S2 說明 ## 簡介 本文檔為 `RT-Thread` 為 `PSoC6 CY8CKIT-062S2-43012` 開發板提供
    的頭像 發表于 03-07 21:07 ?290次閱讀
    【<b class='flag-5'>英飛凌</b>測評】<b class='flag-5'>英飛凌</b><b class='flag-5'>PSoC</b>? 62<b class='flag-5'>開發板</b><b class='flag-5'>試用</b>報告-LCD ILI9341 8080 DEMO

    基于infineonPSOC62開發板的-信號處理前端 虛擬示波器-工具集

    一、前言 本項目基于英飛凌PSoC 6 RTT開發板實現了信號處理
    的頭像 發表于 10-11 18:35 ?355次閱讀
    基于infineonPSOC62<b class='flag-5'>開發板</b>的-<b class='flag-5'>信號</b><b class='flag-5'>處理</b><b class='flag-5'>前端</b> 虛擬示波器-工具集

    基于 Infineon PSoC?62開發板信號處理前端虛擬示波器-工具集

    一、前言 本項目基于英飛凌PSoC6 RT-Thread開發板實現了信號處理前端-一個
    的頭像 發表于 08-16 20:15 ?438次閱讀
    基于 Infineon <b class='flag-5'>PSoC</b>?62<b class='flag-5'>開發板</b>的<b class='flag-5'>信號</b><b class='flag-5'>處理</b><b class='flag-5'>前端</b>虛擬示波器-工具集

    英飛凌開發板模塊評測任務大挑戰-SPI驅動測試

    使用PSoC? 62 with CAPSENSE? evaluation kit開發板適配的RTT SPI驅動,做顯示測試。
    發表于 08-10 15:44 ?493次閱讀
    <b class='flag-5'>英飛凌</b><b class='flag-5'>開發板</b>模塊評測任務大挑戰-SPI驅動測試

    基于RT-thread和Psoc6實現的多線程mpu6050讀取及顯示

    這次RT-thread官方主辦的一個大學生夏令營活動,我們組使用的是Psoc6開發板,這個板子的主控是英飛凌,這個板子的的介紹在RTT的官方文檔里面有。
    的頭像 發表于 07-31 15:42 ?751次閱讀
    基于RT-thread和<b class='flag-5'>Psoc</b>6實現的多線程mpu6050讀取及顯示

    基于PSOC6開發板構建的智能小車

    本項目是基于Psoc6-evaluationkit-062S2開發板構建的智能小車。該開發板由RT-Thread與英飛凌聯合推出,集成了一顆32位雙核CPU子系統,包括150MHz的A
    發表于 07-28 15:14 ?569次閱讀
    基于<b class='flag-5'>PSOC</b>6<b class='flag-5'>開發板</b>構建的智能小車

    英飛凌PSoC 6 RTT開發板試用信號處理前端之頻率幅值相位分析

    FFT變換結果,幅值最大的橫坐標對應信號頻率,縱坐標對應幅度。幅值最大的為out[m]=val;則信號頻率f0=(Fs/N)m ,信號幅值Vpp=val/(N/2)。N為FFT的點數,Fs為采樣頻率。相位Pha=atan2(a,
    的頭像 發表于 07-14 09:02 ?953次閱讀
    【<b class='flag-5'>英飛凌</b><b class='flag-5'>PSoC</b> 6 <b class='flag-5'>RTT</b><b class='flag-5'>開發板</b><b class='flag-5'>試用</b>】<b class='flag-5'>信號</b><b class='flag-5'>處理</b><b class='flag-5'>前端</b>之頻率幅值相位分析

    英飛凌PSoC 6 RTT開發板試用信號處理前端之諧波分析

    3.1 電能質量,諧波分析 添加命令行 在電能檢測應用中,電能質量一項分析即諧波分析,諧波分量大,說明電能質量不好, 基于本板信號處理前端也實現了該功能。 shell_fun.h中 void
    的頭像 發表于 07-13 20:49 ?1256次閱讀
    【<b class='flag-5'>英飛凌</b><b class='flag-5'>PSoC</b> 6 <b class='flag-5'>RTT</b><b class='flag-5'>開發板</b><b class='flag-5'>試用</b>】<b class='flag-5'>信號</b><b class='flag-5'>處理</b><b class='flag-5'>前端</b>之諧波分析

    英飛凌PSoC 6 RTT開發板試用信號處理前端之極值檢測

    在電力等行業,分析電壓極值,是一項重要的參數分析,可以分析電壓的波動;示波器中也有自動測量極值的功能更。
    的頭像 發表于 07-11 14:33 ?1174次閱讀
    【<b class='flag-5'>英飛凌</b><b class='flag-5'>PSoC</b> 6 <b class='flag-5'>RTT</b><b class='flag-5'>開發板</b><b class='flag-5'>試用</b>】<b class='flag-5'>信號</b><b class='flag-5'>處理</b><b class='flag-5'>前端</b>之極值檢測

    英飛凌PSoC 6 RTT開發板試用】使用軟件和硬件I2C點亮OLED屏,幀率從2FPS提升到51FPS

    本文將會分別介紹——使用軟件I2C和硬件I2C在PSoC開發板上點亮OLED屏,并進行屏幕刷新率對比測試,最后還會在硬件I2C的基礎上繼續優化屏幕刷新率。本文實驗使用的OLED屏尺寸為0.96
    的頭像 發表于 07-11 09:21 ?1390次閱讀
    【<b class='flag-5'>英飛凌</b><b class='flag-5'>PSoC</b> 6 <b class='flag-5'>RTT</b><b class='flag-5'>開發板</b><b class='flag-5'>試用</b>】使用軟件和硬件I2C點亮OLED屏,幀率從2FPS提升到51FPS

    英飛凌PSoC 6 RTT開發板試用】通過軟件和硬件I2C接口獲取數字溫濕度傳感器SHT30的數據

    本文將會分別介紹——使用軟件I2C和硬件I2C在PSoC開發板上獲取SHT30數字溫濕度傳感器的數據。本文實驗使用的是4線的SHT30模組,通信接口為I2C,對外僅提供四根線,使用起來簡單、便捷
    的頭像 發表于 07-11 09:21 ?2773次閱讀
    【<b class='flag-5'>英飛凌</b><b class='flag-5'>PSoC</b> 6 <b class='flag-5'>RTT</b><b class='flag-5'>開發板</b><b class='flag-5'>試用</b>】通過軟件和硬件I2C接口獲取數字溫濕度傳感器SHT30的數據

    英飛凌PSoC 6 RTT開發板試用】+USB測試

    參考《Infineon-PSoC_6_MCU_CY8C6xx8_CY8C6xxA_Architecture_Technical_Reference_Manual_(TRM)-AdditionalTechnicalInformation-v08_00-EN.pdf》的33.
    發表于 06-16 23:32

    英飛凌PSoC 6 RTT開發板試用】機器人機械臂控制原創開源(2) 試用英飛凌產品介紹

    接上篇:【英飛凌PSoC 6 RTT開發板試用】機器人機械臂控制原創開源(1) 開箱(產品介紹)
    發表于 06-10 15:28
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>