初级会员

- 积分
- 129
- 金钱
- 129
- 注册时间
- 2018-5-22
- 在线时间
- 27 小时
|
发表于 2014-8-10 20:58:21
|
显示全部楼层
直接正点原子历程,然后加上这些代码实现fir- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "key.h"
- #include "lcd.h"
- #include "timer.h"
- #include "math.h"
- #include "arm_math.h"
- #include "adc.h"
- #include "stm32f4xx_tim.h"
- #define TEST_LENGTH_SAMPLES 1 /* 采样点数 */
- #define BLOCK_SIZE 1 /* 调用一次arm_fir_f32处理的采样个数 */
- #define NUM_TAPS 7 /* 滤波器系数个数 */
- 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.0236681328589047f, 0.106508571904596f, 0.226331867141095f, 0.286243514759345f, 0.226331867141095f,
- 0.106508571904596f, 0.0236681328589047f};
- int main(void)
- {
- u8 status=0x00;
- u16 ID=0X0000;
- u32 i,j,k;
- u32 temp_data;
- arm_fir_instance_f32 S;
- float32_t *inputF32, *outputF32;
- /* 初始化指针 */
- inputF32 = &testInput[0];
- outputF32 = &testOutput[0];
- /* 初始化结构体S */
- arm_fir_init_f32(&S, NUM_TAPS, (float32_t *)&firCoeffs32LP[0], &firStateF32[0], blockSize);
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
- delay_init(168); //初始化延时函数
- uart_init(115200); //初始化串口波特率为115200
-
- LED_Init(); //初始化LED
- KEY_Init(); //初始化按键
- // LCD_Init(); //初始化LCD
-
- Adc_Init(); //初始化ADC
-
- // TIM3_Int_Init(65535,8400-1);//10Khz计数频率,最大计时6.5秒超出
- /* 初始化结构体S */
- arm_fir_init_f32(&S, NUM_TAPS, (float32_t *)&firCoeffs32LP[0], &firStateF32[0], blockSize);
- while(1)
- {
- // for(k=0;k<TEST_LENGTH_SAMPLES;k++)
- // {
- // testInput[k] = Get_Adc_Average(ADC_Channel_5,20);
- // printf("test1=:%f\r\n",testInput[k]);
- // }
-
- if(i>TEST_LENGTH_SAMPLES)
- {
- /* 实现FIR滤波*/
- for(j=0; j < numBlocks; j++)
- {
- arm_fir_f32(&S, inputF32 + (j * blockSize), outputF32 + (j * blockSize), blockSize);
- }
- for(j=0; j<(TEST_LENGTH_SAMPLES);j++)
- {
- // FIR_send_data(outputF32[j]); //存在群延迟
- printf("adcx2=:%f\r\n",outputF32[j]);
- }
- i=0;
- }
-
- if(i<=TEST_LENGTH_SAMPLES)
- {
- testInput[i] = Get_Adc_Average(ADC_Channel_5,2);
- i++;
- }
- // printf("adcx2=:%f\r\n",outputF32[i * blockSize + k]);
- // printf("Input3=:%f\r\n",testInput[k]);
-
- }
- }
-
复制代码 |
|