ST官方DSP库FIRl滤波器使用方法

#include "sys.h"
#include "arm_math.h"

/* ----------------------------------------------------------------------
** Macro Defines
** ------------------------------------------------------------------- */

#define TEST_LENGTH_SAMPLES  320    //采样点数
#define BLOCK_SIZE            32	//调用一次arm_fir_f32处理的采样点个数,这个参数的大小没有特殊要求,只需保证其1<blockSize<=TEST_LENGTH_SAMPLES
#define NUM_TAPS              29	//滤波器系数个数
/* -------------------------------------------------------------------
 * The input signal and reference output (computed with MATLAB)
 * are defined externally in arm_fir_lpf_data.c.
 * ------------------------------------------------------------------- */
static float32_t testInput_f32_1kHz_15kHz[TEST_LENGTH_SAMPLES];//采样点
static float32_t testOutput[TEST_LENGTH_SAMPLES];			   //滤波后输出
/* -------------------------------------------------------------------
 * 声明大小为的状态缓冲区(numTaps+blockSize-1)
 * ------------------------------------------------------------------- */
static float32_t firStateF32[BLOCK_SIZE + NUM_TAPS - 1];//状态缓存,大小=BLOCK_SIZE + NUM_TAPS - 1
/* ----------------------------------------------------------------------
** 用fir1()MATLAB函数生成FIR系数缓冲区.
** fir1(28, 6/24)
** ------------------------------------------------------------------- */

const float firCoeffs32[NUM_TAPS] = {
  -0.0018225230, -0.0015879294, +0.0000000000, +0.0036977508, +0.0080754303, +0.0085302217, -0.0000000000, -0.0173976984,
  -0.0341458607, -0.0333591565, +0.0000000000, +0.0676308395, +0.1522061835, +0.2229246956, +0.2504960933, +0.2229246956,
  +0.1522061835, +0.0676308395, +0.0000000000, -0.0333591565, -0.0341458607, -0.0173976984, -0.0000000000, +0.0085302217,
  +0.0080754303, +0.0036977508, +0.0000000000, -0.0015879294, -0.0018225230
};

/* ------------------------------------------------------------------
 * Global variables for FIR LPF Example
 * ------------------------------------------------------------------- */
uint32_t blockSize = BLOCK_SIZE;					//blocksize就是指一次处理多少个值
uint32_t numBlocks = TEST_LENGTH_SAMPLES/BLOCK_SIZE;	//采样数据长度/一次处理的值的个数
/* ----------------------------------------------------------------------
 * FIR LPF Example
 * ------------------------------------------------------------------- */
int32_t main(void)
{
  uint32_t i;
  arm_fir_instance_f32 S;		//定义结构体
  float32_t  *inputF32, *outputF32;//定义输入数据和输出数据指针

  /* 初始化输入输出缓存指针*/
  inputF32 = &testInput_f32_1kHz_15kHz[0];
  outputF32 = &testOutput[0];
    HAL_Init();                     //初始化HAL库   
    Stm32_Clock_Init(360,25,2,8);   //设置时钟,180Mhz
  /* 调用FIR初始化功能来初始化这个实例结构*/
  arm_fir_init_f32(&S, NUM_TAPS, (float32_t *)&firCoeffs32[0], &firStateF32[0], blockSize);//初始化结构体

  /* ----------------------------------------------------------------------
  ** 为每一个采样块blockSize调用FIR处理功能,实现FIR滤波
  **outputF32即为滤波后的序列
  ** ------------------------------------------------------------------- */

  for(i=0; i < numBlocks; i++)
  {
    arm_fir_f32(&S, inputF32 + (i * blockSize), outputF32 + (i * blockSize), blockSize);
  }
  while(1);                             /* main function does not return */
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值