|

楼主 |
发表于 2019-7-11 17:41:17
|
显示全部楼层
#define TEST_LENGTH_SAMPLES 1 /* 采样点数 */
#define BLOCK_SIZE 1 /* 调用一次arm_fir_f32处理的采样点个数 */
#define NUM_TAPS 29 /* 滤波器系数个数 */
uint32_t blockSize = BLOCK_SIZE;
uint32_t numBlocks = TEST_LENGTH_SAMPLES/BLOCK_SIZE; /* 需要调用arm_fir_f32的次数 */
static float32_t testInput[TEST_LENGTH_SAMPLES]; /* 采样点 */
static float32_t testOutput[TEST_LENGTH_SAMPLES]; /* 滤波后的输出 */
static float32_t firStateF32[BLOCK_SIZE + NUM_TAPS - 1]; /* 状态缓存,大小numTaps + blockSize - 1*/
/* 低通滤波器系数 通过fadtool获取*/
const float32_t firCoeffs32LP[NUM_TAPS] = {
0.005243253894f, 0.006002899725f, 0.00823883526f, 0.01184130926f, 0.01663149334f,
0.0223704353f, 0.02877106704f, 0.03551265225f, 0.04225695878f, 0.04866531491f,
0.05441570282f, 0.0592190288f, 0.06283371896f, 0.06507793814f, 0.06583877653f,
0.06507793814f, 0.06283371896f, 0.0592190288f, 0.05441570282f, 0.04866531491f,
0.04225695878f, 0.03551265225f, 0.02877106704f, 0.0223704353f, 0.01663149334f,
0.01184130926f, 0.00823883526f, 0.006002899725f, 0.005243253894f
};
float32_t wang_my_lowpass(float32_t wang_Input)
{
/* 实现FIR滤波 */
uint16_t j;
arm_fir_instance_f32 S;
float32_t *inputF32, *outputF32,wang_Output;
/* 初始化指针 */
inputF32 =&testInput[0];
outputF32 =&testOutput[0];
inputF32 = &wang_Input;
arm_fir_init_f32(&S, NUM_TAPS, (float32_t *)&firCoeffs32LP[0], &firStateF32[0], blockSize);
for(j=0; j < numBlocks; j++)
{
arm_fir_f32(&S, inputF32 + (j * blockSize), outputF32 + (j * blockSize), blockSize);
}
return *outputF32;
}
这是我写的低通滤波的程序,每次电流采样一个点,作为float32_t wang_my_lowpass(float32_t wang_Input)的入口参数,然后输出一个值送入DAC观测。但是写的不对,我就很疑惑了,请问您能细致的解答一下吗,如果把arm_fir_init_f32放在float32_t wang_my_lowpass(float32_t wang_Input)外面会报错说S, inputF32, outputF32没有定义 |
|