2阶节IIR算法C语言源码
生活随笔
收集整理的這篇文章主要介紹了
2阶节IIR算法C语言源码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
純C語言軟件算法,沒有做過多優化,只是實現了基本IIR算法
/****************************************************************************** * 二階IIR濾波器單元,采用直接II型 * 由多個2階節,可以組成更多高階的濾波器 * 根據參數的不同,可以生成低通,高通,帶通,帶阻 ******************************************************************************/ #include "iir.h"//初始化IIR數據 void IIR_Init(IIR_Typedef *pIIR, IIR_COEF* pCoef) {int i;for (i=0; i<3; i++){pIIR->fCoefA[i] = pCoef->fCoefA[i];pIIR->fCoefB[i] = pCoef->fCoefB[i];pIIR->fTemp[i] = 0;} }//復位歷史值 void IIR_Reset(IIR_Typedef *pIIR) {pIIR->fTemp[0] = 0;pIIR->fTemp[1] = 0;pIIR->fTemp[2] = 0; }//IIR濾波 float IIR_Filter(IIR_Typedef *pIIR, float fInput) {float fOutput;//計算輸入值pIIR->fTemp[0] = fInput;pIIR->fTemp[0] = pIIR->fTemp[0] - pIIR->fCoefA[1] * pIIR->fTemp[1];pIIR->fTemp[0] = pIIR->fTemp[0] - pIIR->fCoefA[2] * pIIR->fTemp[2];//計算輸出值fOutput = 0; fOutput = fOutput + pIIR->fCoefB[0] * pIIR->fTemp[0]; fOutput = fOutput + pIIR->fCoefB[1] * pIIR->fTemp[1]; fOutput = fOutput + pIIR->fCoefB[2] * pIIR->fTemp[2]; //移動歷史值pIIR->fTemp[2] = pIIR->fTemp[1]; pIIR->fTemp[1] = pIIR->fTemp[0];return fOutput; }頭文件iir.h
/****************************************************************************** * 二階IIR濾波器單元,采用直接II型 * 由多個2階節,可以組成更多高階的濾波器 * 根據參數的不同,可以生成低通,高通,帶通,帶阻 ******************************************************************************/#ifndef _IIR_H #define _IIR_H//二階IIR濾波器參數,和2個歷史值 //參數由設計軟件直接計算得出 typedef struct {float fCoefA[3]; //分母多項式的系數Denominatorfloat fCoefB[3]; //分子多項式的系數Numeratorfloat fTemp[3]; //歷史值 }IIR_Typedef;//IIR 2階節的系數 typedef struct {float fCoefA[3];float fCoefB[3]; }IIR_COEF;//初始化IIR數據 void IIR_Init(IIR_Typedef *pIIR, IIR_COEF* pCoef);//復位歷史值 void IIR_Reset(IIR_Typedef *pIIR);//IIR濾波 float IIR_Filter(IIR_Typedef *pIIR, float fInput);#endif // _IIR_H轉載于:https://www.cnblogs.com/kerndev/p/5537389.html
總結
以上是生活随笔為你收集整理的2阶节IIR算法C语言源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卷积神经网络(CNN)之一维卷积、二维卷
- 下一篇: 混合开发之iOS快速集成DSBridge