OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9440|回复: 2

求帮助,谁用过STM32 DSP库里面的FIR滤波功能?

[复制链接]

16

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2013-12-18
在线时间
64 小时
发表于 2014-8-10 20:58:20 | 显示全部楼层 |阅读模式
5金钱
现在想用STM32 DSP库里面FIR滤波进行数字滤波,但是 不知道怎么用,参数怎么给,希望会用的大神指导指导,最好是有调好的程序。。谢谢啦

最佳答案

查看完整内容[请看2#楼]

直接正点原子历程,然后加上这些代码实现fir
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2018-5-22
在线时间
27 小时
发表于 2014-8-10 20:58:21 | 显示全部楼层
直接正点原子历程,然后加上这些代码实现fir
  1. #include "sys.h"
  2. #include "delay.h"  
  3. #include "usart.h"  
  4. #include "led.h"
  5. #include "key.h"
  6. #include "lcd.h"
  7. #include "timer.h"
  8. #include "math.h"
  9. #include "arm_math.h"  
  10. #include "adc.h"
  11. #include "stm32f4xx_tim.h"

  12. #define TEST_LENGTH_SAMPLES  1    /* 采样点数 */
  13. #define BLOCK_SIZE           1     /* 调用一次arm_fir_f32处理的采样个数 */
  14. #define NUM_TAPS             7     /* 滤波器系数个数 */

  15. uint32_t blockSize = BLOCK_SIZE;
  16. uint32_t numBlocks = TEST_LENGTH_SAMPLES/BLOCK_SIZE;            /* 需要调用arm_fir_f32的次数 */

  17. static float32_t testInput[TEST_LENGTH_SAMPLES]; /* 采样点 */
  18. static float32_t testOutput[TEST_LENGTH_SAMPLES];               /* 滤波后的输出 */
  19. static float32_t firStateF32[BLOCK_SIZE + NUM_TAPS - 1];        /* 状态缓存,大小numTaps + blockSize - 1*/

  20. /* 低通滤波器系数 通过fadtool获取*/
  21. const float32_t firCoeffs32LP[NUM_TAPS] = {
  22.   0.0236681328589047f,  0.106508571904596f,  0.226331867141095f,  0.286243514759345f,  0.226331867141095f,
  23.   0.106508571904596f,   0.0236681328589047f};


  24. int main(void)
  25. {
  26.         u8 status=0x00;
  27.         u16 ID=0X0000;
  28.         u32 i,j,k;
  29.         u32 temp_data;
  30.         arm_fir_instance_f32 S;
  31.         float32_t  *inputF32, *outputF32;

  32. /* 初始化指针 */
  33.         inputF32 = &testInput[0];
  34.         outputF32 = &testOutput[0];
  35. /* 初始化结构体S */
  36.         arm_fir_init_f32(&S, NUM_TAPS, (float32_t *)&firCoeffs32LP[0], &firStateF32[0], blockSize);
  37.    
  38.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
  39.         delay_init(168);  //初始化延时函数
  40.         uart_init(115200);                //初始化串口波特率为115200
  41.        
  42.         LED_Init();                                        //初始化LED
  43.         KEY_Init();                                        //初始化按键
  44. //         LCD_Init();                                        //初始化LCD
  45.    
  46.     Adc_Init();         //初始化ADC
  47.    
  48. //         TIM3_Int_Init(65535,8400-1);//10Khz计数频率,最大计时6.5秒超出

  49. /* 初始化结构体S */
  50.         arm_fir_init_f32(&S, NUM_TAPS, (float32_t *)&firCoeffs32LP[0], &firStateF32[0], blockSize);
  51.         while(1)
  52.         {
  53. //        for(k=0;k<TEST_LENGTH_SAMPLES;k++)
  54. //        {
  55. //            testInput[k] = Get_Adc_Average(ADC_Channel_5,20);
  56. //            printf("test1=:%f\r\n",testInput[k]);
  57. //        }
  58.         
  59.         if(i>TEST_LENGTH_SAMPLES)
  60.                 {
  61.                                 /* 实现FIR滤波*/
  62.                         for(j=0; j < numBlocks; j++)
  63.                         {
  64.                                 arm_fir_f32(&S, inputF32 + (j * blockSize), outputF32 + (j * blockSize), blockSize);
  65.                         }
  66.                         for(j=0; j<(TEST_LENGTH_SAMPLES);j++)
  67.                         {
  68. //                                        FIR_send_data(outputF32[j]); //存在群延迟
  69.                 printf("adcx2=:%f\r\n",outputF32[j]);
  70.                         }
  71.                         i=0;
  72.                 }
  73.         
  74.         if(i<=TEST_LENGTH_SAMPLES)
  75.                 {
  76.                                 testInput[i] = Get_Adc_Average(ADC_Channel_5,2);
  77.                                 i++;
  78.                 }
  79. //                        printf("adcx2=:%f\r\n",outputF32[i * blockSize + k]);
  80. //                        printf("Input3=:%f\r\n",testInput[k]);
  81.             
  82.      }
  83. }

复制代码
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-10 22:57:53 | 显示全部楼层
帮顶....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 05:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表