一、FFT(快速傅里叶变换)的物理意义:
  傅立叶原理表明:任何连续测量的时序或信号,都可以表示为不同频率的正弦波信号的无限叠加。而根据该原理创立的傅立叶变换算法利用直接测量到的原始信号,以累加方式来计算该信号中不同正弦波信号的频率、振幅和相位。当然这是从数学的角度去看傅立叶变换。
  有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。这就是很多信号分析采用FFT变换的原因。另外,FFT可以将一个信号的频谱提取出来,这在频谱分析方面也是经常用的。

二、MSP432中的FFT
  小鱼君个人理解它其实就是一个工具,利用FFT将信号从时域变化为频域,可以得到信号的频率以及做一些谐波分析。由于原理也比较复杂,这里我们就不瞎说了,直接开始套代码,代码来自之前在网上乱找的,后来用在了E4系列上发现效果还不错,如果有什么问题大家可以在后台指出来。

三、FFT的代码应用
  目前就是使用FFT来获取信号的频率,经过测试100khz的波形频率还是比较准的,但是由于纯c的话我们对于虚部就直接给0了,就导致幅值测出来后不准确。
  我们的主要原理就是用ADC来测量信号的电压,然后存储2的n次个大小的数组作为FFT的输入,通过排序得到频谱中赋值最大的下标。

  我们定义为X,那么信号的频率就是X*f/n,这里的f就是ADC采样频率,我们根据奈奎斯特采样可得我们的ADC采样频率应该大于信号频率的两倍以上;n就是我们常说的点数,可以有以下几种:

  N越大就越精确,相应的单片机就负担越大,这里是个人在开发时候遇到的第一个坑:如果直接跑点数小于64时候代码不会有问题,但是点数更大之后,单片机就开始卡了,直接卡到了死循环。小鱼君也曾一度以为是代码问题,也请教过做信号的同学,说这种问题一般都是代码的问题,因为用STM32开发时候它是有硬件库的,据说是什么查表法解决了这个问题,但是网络上搜索发现432E4系列好像不行欸,于是就用这样莽下去了。

四、采样前提:ADC
  这里详细可以参照TI官方给的例程包中的,下面图片中加粗的这个,它里面可以修改定时器的频率来改变ADC的频率。

五、核心代码:
  网络上大神真牛,主要代码说下来也就六七十行,

#include"ar.h"
#define PI 3.141592653
float XR[2048]={0},XI[2048]={0};    //实部和虚部
int dian[]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096};
unsigned int N;
unsigned int m=11;  //dian[6]=64; 64点FFT
void fft(void)
{//位倒置int i,j,k;      //i,j为临时变量,k是倒置后的次序N=dian[m];for(i=0;i<N;i++){k=0;for(j=0;j<m;j++){if(((i>>j)&0x01)==1)    //判断第j位是否为1k=k+(1<<(m-j-1));       //如果是,则倒置后的K对应是第10-j-1位为1,例如i的第二位为1,则k的第七位为1}XI[k]=XR[i];}for(i=0;i<N;i++){XR[i]=XI[i];XI[i]=0;//XI[i]=0;      XI[i]=XR[i]/12;    //虚部置0}butterfly();///计算各频率点幅值//for(i=0;i<N;i++){XR[i]=sqrt((XR[i]*XR[i])+(XI[i]*XI[i]));}} /* END FFT *//蝶形运算
void butterfly(void)
{float TR,TI,WR,WI;unsigned int i,j,k,p,A,B,C;     //*** A为外循环的级数; B为中循环的级数,C为内循环的级数A = m;for(i=0;i<A;i++)                //外循环{B = 1<<i;                   //即B=pow(2,i)//C=N/(1<<(i+1));       //即C=N/pow(2,i+1)for(j=0;j<B;j++)            //中循环{p=j*(1<<(A-i-1));       //这是FFT最难推的式子,旋转因子的系数//for(k=0;k<C;k++)      //内循环for(k=j;k<N;k=k+2*B){TR=XR[k];TI=XI[k];//X[k+B]*W=X[k+B]*exp(-j*2PI*y/N)=WR+WIWR= XR[k+B]*cos((2*PI*p)/N)+XI[k+B]*sin((2*PI*p)/N);WI=-XR[k+B]*sin((2*PI*p)/N)+XI[k+B]*cos((2*PI*p)/N);XR[k]=TR+WR;XI[k]=TI+WI;XR[k+B]=TR-WR;XI[k+B]=TI-WI;}}}
}

  然后在主函数中调用,思路大概就是这个样子。

六、题目要求得分点:
  其实主要就是蓝牙发送然后手机看波形。这里蓝牙模块选择用HC-08模块,手机APP选择用【蓝牙调试器】,只要会使用它的串口就可以了,具体的串口例程可以在博客或者QQ群内获取。
  MSP432博客网站

20221电赛A题-适用MSP432E4系列的FFT速成相关推荐

  1. 2020电赛F题回顾——简易无接触温度测量与身份识别装置

    2020电赛F题回顾--简易无接触温度测量与身份识别装置 第一次参加电赛,已经大三了,这也有可能是我的最后一次,不禁感慨时间过得真快.在实验室一起奋斗的夜晚既辛苦又幸福,感谢陪伴在我身边一起做电赛的同 ...

  2. 「第四篇」电赛控制题可以准备一些什么?

    点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达! 0  前言 在我看来,其实控制题是较好做(混)的一种题型,你懂我意思吧.控制题简单概 ...

  3. 电赛 | 电源题软件如何准备?

    关注.星标公众号,直达精彩内容 摘要:PWM和SPWM在电源的备战中是很有必要的.基础的恒流源.恒压源需要使用PWM的占空比及频率来达到数控的作用,往后的逆变则需要用到SPWM.当然还有ADC.DAC ...

  4. 5_竞赛无人机搭积木式编程——以2021年电赛G题植保无人机国奖标准完整复现为例学习

    竞赛无人机搭积木式编程 --以2021年电赛G题植保无人机国奖标准完整复现为例学习 首先我们需要了解下自动飞行任务执行过程几组关键变量的用法与实际作用效果: flight_subtask_cnt用于控 ...

  5. 2022电赛C题:小车跟踪(方案1+核心代码)

    目录 前言 一.题目 二.方案1 1.材料清单 2.说明 三.核心代码 四.工程获取 前言 针对2022年电赛C题小车跟踪,本团队一共是做了两种方案:       第一种主要以摄像头(openmv)为 ...

  6. 2019年电赛D题《简易电路特性测试仪》全过程

    本人为团队中负责硬件部分,为了准备2022年电赛,本队伍已经制作2019年和2021年电赛信号题,本次主要讲解为2019年电赛D题硬件部分,少部分为软件需要做的部分.后续会对整个硬件进行优化和整理. ...

  7. 2021年电赛 E题 数字传输

    数字-模拟信号混合传输收发机(E题) 目录 题目 方案 工程文件 题目 (2) 实现数字信号传输. 首先键入4个0~9的一组数字,在发送端进行存储并显示,然后按下发送键对数字信号连续循环传输.在接收端 ...

  8. 2020TI省级电赛E题制作杂谈

    2020TI省级电赛E题制作杂谈 写在前面 THD的计算准则 THD测量的步骤 频谱变换 计算部分 常用的波形和其THD THD在系统中的重要性 写在前面 在这里记录2020TI省级电赛E题制作的方案 ...

  9. 【立创EDA开源推荐】005期 | 2019年电赛H题 电磁炮(激光版)

    工程名称: 2019年电赛H题 电磁炮(激光版) 工程作者:zzxw 工程主页链接: https://oshwhub.com/kakaka/tu-ya-zhi-neng-yun-duo 开源协议: G ...

最新文章

  1. python asyncio与aiohttp_python链家网异步IO爬虫,使用asyncio、aiohttp和aiomysql
  2. matlab中antoine方程应用,五参数antoine方程
  3. 一篇写的很好的XGBoost的博客(于简书转载)
  4. 图像编解码:CRF(质量/码率控制)和QP
  5. Android TextView全属性
  6. java源程序可以有几个主类_Java源程序是由类定义组成的,每个程序可以定义若干个类,但只有一个类是主类。_学小易找答案...
  7. mini2440使用jlink烧写superboot到norflash
  8. java byte[] 文件流 转换成string是乱码_Java学习--IO(二)、多线程
  9. git上传代码和下拉
  10. linux下无线网卡安装debian,Debian/Linux下无线网卡驱动的安装,网卡型号是「BCM43228」...
  11. 练习(黄冈中学布局)
  12. python是干嘛的-python到底拿来干什么
  13. 函数凸性与Jensen不等式
  14. 音乐计算机曲谱狂妄之人,undertale狂妄之人简谱
  15. spring boot 报错:extShutdownHook ...was destroying!
  16. 阚俊青少机器人_长春中医药大学附属医院、中医学院阚俊明副书记一行调研我校中医学类学生培养工作...
  17. 后端开发工程师技术导图
  18. 中图杯获奖作品计算机组,“中图杯”第十四届环境地图大赛召开 地图慧成指定制图软件...
  19. 时尚简约风格的ae字幕条模板
  20. 区块链学习入门简介(一)

热门文章

  1. 软银Pepper机器人免费领回家!WAIC黑客马拉松等你来战!
  2. ecos kernel 分析
  3. android 点击按钮的奇数次_java简单的判断奇偶数方法(i 1) != 0 i为奇数
  4. ARM44B0机器人控制程序
  5. 判断iPhone型号
  6. php微信小程序如何无限点赞,小程序中点赞和收藏功能的实现代码
  7. 快速理清使用SSH框架的前后台数据交互/调用的顺序流程(新手)
  8. 通信原理—通信系统组成
  9. android7.0 提示wifi已连接,但无法连接到互联网
  10. 【名企招聘】5月11日18点,学科网岗位招聘来啦~Java、前端、UI、测试等众多岗位供你选择