查看: 203|回复: 6
打印 上一主题 下一主题

【新技能get】开发板一起学起来——F429教程第四讲 DSP

[复制链接] qrcode

41

主题

50

帖子

150

积分

注册会员

Rank: 2

积分
150
楼主
跳转到指定楼层
发表于 2015-7-20 01:31 AM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


【新技能get】开发板一起学起来 (第四部分)





 本教程作者为ICkey网友@HelloWii ,回帖参与讨论、提问、分享,就能赢取超多丰厚奖励哦~  
@HelloWii 也将随时和大家交流学习中的问题。(PS:本教程未经允许谢绝转载)

学教程,送奖励,活动说明详见:
【新技能get√】开发板STM32F429I Discovery技术一起学起来



 

FPU,Float Point Unit 浮点运算单元

从字面就可以理解,FPU就是做浮点运算来帮助CPU减轻负担的。Cortex M4 具有一个可选的FPU,STM32F429 集成了FPU。Cortex-M4的浮点运算单元(FPU)是一个改变的单精度ARMv7-M的浮点架构(FPv4-SP)。

FPU功能描述

支持单精度加、减、乘、除和平方根操作。也支持定点和浮点的转换。

 

 

图4-1:FPU寄存器

详细的信息请查看:

ARM® Cortex®-M4 Processor

 (Revision: r0p1 Technical Reference Manual Copyright © 2009, 2010, 2013, 20

 

 

CMSIS是ARM 公司独立于供应商对Cortex-M实现的硬件抽象层。

整个的CMSIS框架图如下:

 

图4-2:CMSIS框架图

 

CMSIS-DSP:DSP的库文件中,包含了60多个信号处理算法函数和多重的数据类型(q7、q15、q31)以及32位单精度浮点型。该库文件支持Cortex-M0、M3、M4,在Cortex-M4中实现了SIMD(单周期多数据指令)。

CMSIS中的代码和API编写,是附和MISRA-C2004标准的,具体请参考这个帖子(http://bbs.ickey.cn/group-topic-id-51803.html)。

 

 

 

DSP 库文件主要包括以下内容具体内容在这个文件下(STM32F429I-Discovery_FW_V1.0.1LibrariesCMSISDSP_LibSource):

 

 

图4-3:CMSIS-DSP

 

同样官方也给了一些相应的例子(STM32F429I-Discovery_FW_V1.0.1LibrariesCMSISDSP_LibExamples):


 

图4-4:CMSIS-DSP 例子

 

我们就来写一个关于FIR滤波器的例子。

将1KHz中混入15KHz的信号,制作一个FIR低通滤波器,去除15KHz的信号,保留1KHz。

 

FIR(Finite Impulse Response)滤波器:有限长单位冲激响应滤波器,又称为非递归型滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。由于FIR滤波器只有零点,除了原点外,在z平面没有极点,所以FIR滤波器总是稳定的。如果他的有现长单位脉冲响应是非因果,可以简单的通过移位得到因果的单位冲激响应,FIR滤波器突出的有点是不存在稳定和可实现的问题。因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。此路径(STM32F429I-Discovery_FW_V1.0.1LibrariesCMSISDSP_LibExamplesarm_fir_example)下有两个文件,一个是使用的数据文件,一个使用的样例程序。

如下:

 

图4-5:FIR例程程序文件

 

具体的可以参考这个程序arm_fir_example_f32.c

里面详细的讲了FIR的例子:

这个FIR的系数使用matlab的  fir1(28, 6/24) 函数生成的如下:


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


 

15KHz和1KHz的信号Matlab显示如下图所示:

图4-6:15KHz和1KHz的信号

滤波后效果如下1KHz信号Matlab,如下所示:

图4-7:1KHz的信号

使用这个例子需要用到以下的文件。

 

包含STM32F429I-Discovery_FW_V1.0.1LibrariesCMSISDSP_LibSourceFilteringFunctions文件夹下的这两个程序文件:arm_fir_init_f32.c   arm_fir_f32.c

#define ARM_MATH_CM4   1

#include “arm_math.h”

 

关于使用Cortex-M4的FPU配置如下所示:

 

图4-8:FPU配置

上面的选择性编译,选择不同的定义代表使用不同的设备。选择#define ARM_MATH_CM4   1  加入core_cm4.h到系统。

F429效果图如下:

图4-9:15KHz和1KHz的信号


图4-10:1KHz的信号

 

DAC(Digital Analog Converter)数模转换器

F429的DAC最高为12bit的电压输出模数转换器。可以配置为8或者12bit的模式,可以通过DMA控制器读取。

(具体的参数可以参考数据手册RM900)

DAC的框架图如下:

 

图4-11:DAC 框架图

 

官方的例程中给了DAC的样例程序(STM32F429I-Discovery_FW_V1.0.1ProjectsPeripheral_ExamplesDAC_SignalsGenerationEWARM):

通过按键控制PA4和PA5输出三角波、正弦函数等四种波形。


框架函数如下,具体配置,可查看详细的文件。


while (1)
  {
    // If the User Button is pressed 
    if (KeyPressed == RESET)
    {           
      DAC_DeInit();
 
      // select waves forms according to the Key Button status 
      if (SelectedWavesForm == 1)
      {
        // The sine wave and the escalator wave has been selected 
 
        // Escalator Wave generator ------------------------------------------
        DAC_Ch1_EscalatorConfig();
 
        // Sine Wave generator -----------------------------------------------
        DAC_Ch2_SineWaveConfig();
        
      }
      else
      {
        // The triangle wave and the noise wave has been selected 
 
        // Noise Wave generator ----------------------------------------------
        DAC_Ch1_NoiseConfig();
 
        // Triangle Wave generator -------------------------------------------
        DAC_Ch2_TriangleConfig();
      }
     
      KeyPressed = SET;
    }
  }
}
 


通过示波器,效果图如下:


图4-12:三角波

 

 

图4-13:正弦波

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

1

主题

82

帖子

29

积分

新手上路

Rank: 1

积分
29
沙发
发表于 2015-7-20 10:21 AM | 只看该作者
之前也接触过,发一些资料
回复 支持 反对

使用道具 举报

0

主题

65

帖子

6

积分

新手上路

Rank: 1

积分
6
板凳
发表于 2015-7-20 10:24 AM | 只看该作者

我们平常所使用的CPU为定点CPU,意思是进行整点数值运算的CPU。当遇到形如1.1+1.1的浮点数运算时,定点CPU就遇到大难题了。对于32位单片机,利用Q化处理能发挥他本身的性能,但是精度和速度仍然不会提高很多。

现在设计出了一个新的CPU,叫做FPU,这个芯片专门处理浮点数的运算,这样处理器就将整点数和浮点数分开来处理,整点数交由定点CPU处理而浮点数交由FPU处理。我们见到过TI的DSP,还有STM32F4系列的带有DSP功能的微控制器。后者如果需要用到FPU的浮点运算功能,必须要进行一些必要的设置。


回复 支持 反对

使用道具 举报

0

主题

98

帖子

16

积分

新手上路

Rank: 1

积分
16
地板
发表于 2015-7-20 01:46 PM | 只看该作者
学习学习

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

0

主题

88

帖子

16

积分

新手上路

Rank: 1

积分
16
5#
发表于 2015-7-20 02:02 PM | 只看该作者
为什么F429板子屏幕上显示的波形不是连续的曲线?
回复 支持 反对

使用道具 举报

0

主题

74

帖子

12

积分

新手上路

Rank: 1

积分
12
6#
发表于 2015-7-20 02:05 PM | 只看该作者
支持以下
回复 支持 反对

使用道具 举报

0

主题

100

帖子

44

积分

新手上路

Rank: 1

积分
44
7#
发表于 2015-7-20 04:54 PM | 只看该作者

STM32F429DSP库学习笔记系列汇总

http://bbs.ickey.cn/group-topic-id-48485.html

回复 支持 反对

使用道具 举报

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

本版积分规则

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