CMSIS-DSP

CMSIS-DSP库是由ARM公司提供的一个信号处理算法库,所有使用ARM内核的单片机都可以调用相应的库,当然也包括STM32。今天就来介绍一下CMSIS-DSP库的使用方法。

CMSIS-DSP库简介

CMSIS-DSP库的源码和lib文件可以在Keil安装目录下:

Keil_v5\ARM\PACK\ARM\CMSIS\5.5.1\CMSIS\DSP找到,也可以在STM32CubeMX安装目录下:STM32Cube_FW_F4_V1.25.2\Drivers\CMSIS\DSP找到。主要包括以下几部分:

“”

● lBasicMathFunctions
提供了加减乘除等基本的数据运算,包括浮点和定点运算。

● lFastMathFunctions
提供正弦、余弦以及平方根的运算函数。

● lComplexMathFunctions
提供了向量,求模等复杂的数学运算。

● lFilteringFunctions
提供了数字滤波的功能函数,包括FIR、IIR和LMS等。

● lMatrixFunctions
提供了矩阵运算的函数。

● lTransformFunctions
提供了傅里叶变换、逆变换等运算函数。

● lTransformFunctions
提供了PID等控制功能的函数。

● lStatisticsFunctions
提供了求平均值、均方根、方差、标准差等统计功能的函数。

● lSupportFunctions
提供了数据拷贝、Q格式和浮点格式等的转换函数。

● lCommonTables
提供位翻转或相关参数表。

可以看到,该DSP库的功能还是非常强大的,基本上可以满足大部分的信号处理应用。下面就来介绍一下怎样在STM32中使用这些功能。

在STM32中的应用

首先准备一个STM32工程,将DSP库的源码或者lib文件添加到工程中。不同内核的单片机对应不同的库文件,如下图所示。添加时需要注意根据所用编译器和所用芯片的内核选择合适的lib文件。这里以Keil环境下STM32F407ZGT6单片机为例进行介绍。

“”

库文件的命名以内核名称开始,后面的l或b代表小端格式或大端格式,f代表支持浮点运算单元,M4内核只支持单精度浮点单元,而M7内核的支持单精度(Single Precision)或双精度(Double Precision)浮点运算单元,所以还有fsp和fdp之分。STM32F407ZGT6单片机是M4内核,小端格式,支持单精度浮点运算单元,所以我们选择arm_cortexM4lf_math.lib文件添加到工程中,如下图:

“”

接下来需要将DSP库文件夹下的Include文件夹也添加到工程中,并在工程中添加包含路径,有以下三个文件:

“”

“”

之后添加在工程中添加宏定义ARM_MATH_CM4:

“”

由于我们使用的STM32F4 支持单精度浮点,这里需要开启Single Precision。

“”

最后在程序中添加头文件#include "arm_math.h",然后就可以使用DSP库中的函数了。

这里以正弦函数和FFT函数写一个简单的例子:

float sin_out[256];
float fft_mag[256];
float fft_out[256];

void DSP_Test()
{
  arm_rfft_fast_instance_f32 S;
  
  for(uint16_t i =0;i<256;i++)
  {
      sin_out[i] = arm_sin_f32(i*2*3.1416f/128) + 0.3f*arm_sin_f32(i*2*3.1416f/16);
  }
  for(uint16_t i =0;i<256;i++)
  {
      printf("%f\r\n",sin_out[i]);//串口输出
  }
  arm_rfft_fast_init_f32(&S,256);        //初始化1024点FFT参数
  arm_rfft_fast_f32(&S,sin_out,fft_out,0);//计算FFT
  arm_cmplx_mag_f32(fft_out,fft_mag,256);//计算模值
  
  for(uint16_t i =0;i<256;i++)
  {
      printf("%f\r\n",fft_mag[i]);//串口输出
  }
}

运行结果如下:
两个正弦信号叠加:

“”

FFT运算之后:

“”

程序中用到了正弦函数和FFT运算的相关函数,可以看到,FFT之前的信号是两个正弦信号叠加,FFT之后在频域上可以看到两个频点,与输入信号对应,说明运算结果正确。

本文转载自:嵌入式技术开发
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:
cathy@eetrend.com)。

围观 4826
订阅 RSS - CMSIS-DSP