STM32F407 DSP+FPU进行FFT变换(2)

article/2025/11/6 16:20:02

STM32F407 DSP+FPU进行FFT变换

接着上一篇继续,要用FFT运算的话,F4有FPU和DSP库,可以很方便让我们去对数据进行傅氏变换。首先得配置好DSP库和FPU。

配置DPS库和FPU

CubeMX一般是默认配置开启FPU,但是DSP库需要自己去添加。这里添加方法可能不适用所有人。

FPU开启:点仙女棒在这里插入图片描述
,然后可以看到在这里插入图片描述
然后选择Single Precision,就开启了FPU。

添加DSP库:点小绿标在这里插入图片描述
再展开CMSIS勾选DSP在这里插入图片描述
,添加三个头文件 #include <math.h>#include “arm_math.h”#include “arm_const_structs.h”,最后点击仙女棒选择C/C++,在预处理符号定义栏添加宏ARM_MATH_CM4,不同信号使用不同的宏,至此软硬件配置完毕。

查看DSP库

在使用前我们需要DSP库里面有什么东西,所以这里要用到上一篇的推荐cubeMX官方文档。我的DSP库索引文档在C:\Users\Administrator\STM32Cube\Repository\STM32Cube_FW_F4_V1.24.2\Drivers\CMSIS\docs\DSP\html\index.html
也可以访问网站:http://www.wisemcu.cn/STM32/docs/DSP/html/
在这里插入图片描述

这里我们查找到需要FFT变换函数和复数点积函数,函数名为

在这里插入图片描述

             --------------------------------分隔符------------------------------

在这里插入图片描述

简单说明ARM_CFFT_F32函数,需要输入4个参数,第一个参数是输入需要转换多少数据仅限于

在这里插入图片描述

第二个是FFT输入数组,大小为第一个参数数量的两倍,两个数据组成一个复数,前一个为实数部分,后一个为虚数部分;

第三个是选择正逆向变换,0为FFT变换,1为FFT逆变换;

第四个用于设置输出位反转,参靠输入1;

注:该函数只有一个输入数组,FFT运算完后会将运算后数据按设定顺序放入输入数组。

简单说明ARM_CMPLX_MAG_F32函数,需要输入三个参数。

第一个是输入数组,结构与FFT数组一样,两个数据组成一个复数,前一个为实数部分,后一个为虚数部分;

第二个参数是输出数组,将复数的模按输入顺序放入输出数组,因为复数有占个数据,而复数模只占一个数据,所以输出数据应该为输入数据1/2;

第三个参数是需要转换多少个复数数据;

使用DSP库

首先使用ADC捕获一段信号,我使用的是10Khz、1Vpp、1V偏置的正弦信号

uint16_t buf[1024]={0};//ADC采样数组
float buf_Value[1024] = {0};//ADC采样电压数组
float testInput_f32_10khz[2048] = {0};//FFT输入数组
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)buf,1024);//捕获完1024个值停止ADC和DMA
HAL_Delay(50);//等待DMA传输完毕
for(int i=0;i<1024;i++)
{
buf_Value[i]=(float)(buf[i])*3.3/4069;//ADC电压转换
printf("%02f\r\n",buf_Value[i]);//打印电压值
}

将打印的电压值放入Excel表格曲线连接

在这里插入图片描述

确定ADC采集处理正常,再进行FFT运算

for(int i=0;i<1024;i++)
{
testInput_f32_10khz[i*2]=buf_Value[i];
}
arm_cfft_f32(&arm_cfft_sR_f32_len1024, testInput_f32_10khz, 0, 1);//FFT变换
arm_cmplx_mag_f32(testInput_f32_10khz, testOutput, 1024);//求复数模
testOutput[0]/=1024;//直流分量除以采样点数
for(int i=1;i<1024;i++)
testOutput[i]/=512;//其他分量除以(采样点数/2)
for(int i=0;i<1024;i++)
printf("%02f\r\n",testOutput[i]);//打印数据

数据如上图;

分析FFT求模后的数据

现在我们成功得到了一组FFT数据,可是不知道怎么去看我们需要的信息,所以现在对数据进行分析

横轴分析

因为FFT变换之后是将信号时域变化,变成了信号频域变化,所以横轴的量纲是HZ,而且每两个点之间的频率是等差的,所以需要计算FFT数据的频率分辨率,

频率分辨率=ADC采样频率/采样点数,按我们之前配置是ADC采样频率为21MHZ,我采了1024个点,所以这里频率分辨率=1367.1875HZ,可以得到两个点之间差1367.1875HZ。

纵轴分析

FFT变换之后纵轴量纲不变

假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A 的N/2倍。

所以只需要把0HZ分量点除以采样点数,其他分量除以(采样点/2),就是其他真实电压值。注:输出的值均为幅值。

结尾

至此我们已经会了FFT的函数使用和数据分析,但有的时候会数据对不上,可能的误差原因有:

1.ADC采样时间被其他语句延时了。

2.根据采样定理,采样频率应为被采样频率的2.56~4倍频。

PS:如果有所帮助可以点个赞✧( ु•⌄• )◞


http://chatgpt.dhexx.cn/article/BQUqJRMm.shtml

相关文章

【STM32F407的DSP教程】第41章 FIR滤波器的群延迟(重要)

完整版教程下载地址&#xff1a;http://www.armbbs.cn/forum.php?modviewthread&tid94547 第41章 FIR滤波器的群延迟&#xff08;重要&#xff09; 本章节为大家介绍FIR滤波器的群延迟问题。 目录 41.1 FIR滤波后的群延迟 41.2 总结 41.1 FIR滤波后的群延迟 波…

Powell算法、Powell修正算法_matlab仿真

1.鲍威尔基本算法的运算流程 1.采用坐标轮转法顺次沿n个坐标轴方向[e1,e2,...,en]进行一维搜索。然后以初始点X(0)和终点Xn(1)构成一个新的方向S(1)&#xff0c;并以此方向为搜索方向在做一维搜索得到极小值点X(n1)(1)。 2.去初始点X0(2)X(n1)(1)&#xff0c;并去掉元搜索方向组…

SVPWM仿真和基于DSP28335的PIL(处理器在环) 仿真模型(将matlab仿真算法生成代码在DSP中在线运行返回数据给Matlab)验证算法可行性和实时性

SVPWM仿真和基于DSP28335的PIL(处理器在环) 仿真模型&#xff08;将matlab仿真算法生成代码在DSP中在线运行返回数据给Matlab&#xff09;验证算法可行性和实时性。 对于数字信号处理很有用。 ID:73400638006173885书院街登山的兰瓜

非极大值抑制算法(NMS)及python实现

在目标检测中&#xff0c;常会利用非极大值抑制算法(NMS)对生成的大量候选框进行后处理&#xff0c;去除冗余的候选框&#xff0c;得到最具代表性的结果&#xff0c;以加快目标检测的效率。即如下图所示&#xff0c;消除多余的候选框&#xff0c;找到最佳的bbox。 NMS算法过程…

ADI Blackfin DSP处理器-BF533的开发详解24:触摸屏的实现和应用(含源代码)

硬件准备** ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 使用到硬件模块原理图 功能介绍 四线电阻式触摸屏&#xff0c;拿笔和指甲划拉的&#xff0c;不是现在的容性触摸屏。 ADSP-EDU-BF53x 板卡的 …

ADI Blackfin DSP处理器-BF533的开发详解8:Timer定时器的驱动和应用(含源代码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 接口功能介绍 ADSP-BF53x 上有 3 个通用定时器&#xff0c;每个定时器有三种模式&#xff1a; 脉冲宽度调制模式&#xff08;PWM_OUT&#xff0…

【信号处理】CFO估计技术(Matlab代码实现)

目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 针对存在未知载波频偏&#xff08;CFO&#xff09;的线性调制分类&#xff0c;提出一种混合似似然比检测&#xff08;qHLRT&#xff09;分类器。并且通过使用多天线接收机来进一步增强分类性能。一种基于盲源分…

基于STM32F469 discovery kit 开发板的开发2

目录 基于STM32F469 discovery kit 开发板的开发2开发环境搭建keil安装F4的固件库keil配置st-link调试工具例程测试 基于STM32F469 discovery kit 开发板的开发2 开发环境搭建 在嵌入式开发中&#xff0c;常用的集成开发环境&#xff08;IDE&#xff09;常用的有keil或IAR&am…

ADI Blackfin DSP处理器-BF533的开发详解16:KEY按键的实现(含源代码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 硬件设计原理图 实现原理 ADSP-EDU-BF53x 开发板上的按键连接到了 CPLD&#xff0c;通过 CPLD 将按键信号与 EBIU 总线和中断管脚 PF0 连接&…

matlab进行傅里叶分析

license需求&#xff1a;需要使用到simulink工具包simscape 1.在matlab的command window中输入power_fftscope命令,并按回车键&#xff0c;该操作会打开FFT分析的窗口 2.加载用于FFT分析的数据到matlab worksapce,该数据需要按照一定的格式显示才能被FFT分析窗口自动识别到。 …

ADI Blackfin DSP处理器-BF533的开发详解18:用触摸屏的例程来理解中断(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 硬件设计原理图 硬件实现原理 ADSP-EDU-BF533 开发板上的中断资源连接到了 CPLD&#xff0c;并通过 CPLD 将中断信号连接到 PF0 触发&#xff0c…

【正点原子FPGA连载】第十三章QSPI Flash读写测试实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十三章QSPI Fl…

ADI Blackfin DSP处理器-BF533的开发详解3:GPIO(含源代码)

我们从最基础的GPIO开始&#xff0c;先讲外设&#xff0c;这玩意不管是单片机&#xff0c;还是ARM&#xff0c;又或是FPGA&#xff0c;甚至SOC的芯片&#xff0c;都有GPIO&#xff0c;有共性&#xff0c;就好理解&#xff0c;让我们看看在ADI的DSP里头&#xff0c;GPIO是怎么一…

Protobuf 简介

protobuf (protocol buffer) 是谷歌内部的混合语言数据标准。通过将结构化的数据进行序列化(串行化)&#xff0c;用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。通常说的protobuf包括以下三点&#xff1a; 是一种二进制数据交换格式。支持不…

【prony】基于prony算法的参数辨识matlab仿真

1.软件版本 matlab2013b 2.系统概述 建立如下被测信号: 被测信号中包含四个振荡模态,在数据窗宽度同样为10s的前提下,利用不同的采样频率做普罗尼计算。结果如表1所示。根据公式的基本表达式: 所以最后,进行估计得到的参数为:

ADI Blackfin DSP处理器-BF533的开发详解54:CVBS输出-DSP和CH7024的应用详解(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 CVBS OUT 视频输出 硬件实现原理 CVBS_OUT 子卡板连接在 ADSP-EDU-BF53x 开发板的扩展端口 PORT3 和 PORT4 上&#xff0c;板卡插入时&#xff0…

【AI+】Martin Fowler: 基于 AI 辅助的测试驱动开发的技术 | An example of LLM prompting for programming

Martin Fowler: 基于 AI 辅助的测试驱动开发的技术 | An example of LLM prompting for programming 目录 Martin Fowler: 基于

iPhone 13分辨率,屏幕尺寸,PPI 详细数据对比 iPhone 13 Pro、iPhone 13 Pro Max、iPhone 13 mini

点击图片放大查看 iPhone 14分辨率,屏幕尺寸,PPI 详细数据对比 iPhone 14 Plus、iPhone 14 Pro、iPhone 14 Pro Max​​​​​​​

android 主流分辨率是多少,android 屏幕分辨率问题

iPhone的icon设计就这么简单&#xff0c;iPhone的屏幕只有320480像素&#xff0c;所以程序没有适配性问题。 Android 在研究Android的icon设计之前&#xff0c;有必要先了解Android的界面是如何适配多样化屏幕的。 适配性 由于同一个UI元素(如100100像素的图片)在高精度的屏幕上…