STM32F4DSP应用学习笔记11-对ADC采集数据进行FFT频谱分析(2)

  • barrettzxn
  • LV5工程师
  • |      2015-05-08 14:45:29
  • 浏览量 6186
  • 回复:12

【原创STM32F4DSP应用学习笔记11-ADC采集数据进行FFT频谱分(2)

上一节中我们知道了如何对ADC采集数据这个过程进行配置。

这一节的内容是我们需要处理采集回来的数据,并通过MATLAB进行分析,并且把结果显示在STM32F429-discoveryTFT屏幕上。

首先还是采集1024个数据,我们把采集回来的数据打印出来并且用MATLAB进行作图,然后。其次,我们对这1024个数据进行复数FFT运算,再把运算出来的结果打印出来,然后用MATLAB进行作图。记住我们的采样率是45k,被采样信号是10k50%占空比的方波信号。板子上的引脚连接为PD12->PF9

1:首先使用如下代码,打印出采样回来的数据。因为采样率大致为4倍的被采样信号频率,所以理论上在一个周期内会有两个4096和两个0。把打印出来的数据导入到MATLAB,命名为data1

for(i=0;i

printf("%drn",uhADC3Converted_buffer1);

2:打印出FFT运算后的模值。这里要提到的一点是,我把运算出来的直流量改为0.111111f;然后把打印出来的数据导入到MATLAB命名为data2

float32_t testOutput;

float32_t testInput;

for(i=0; i<1024; i++)

{

testInput = 0;

testInput = (float32_t)(ipnut_data*3.0f/0XFFF);

}

arm_cfft_f32(&arm_cfft_sR_f32_len1024, testInput, 0, 1);//复数FFT运算   arm_cmplx_mag_f32(testInput, testOutput, 1024);//复数求模值运算

testOutput=0.111111f;

for(i=0; i<1024; i++)

{

printf("%frn", testOutput);

}

3

运行如下MATLAB程序,得到如下结果

Fs=45000;

N=1024;

n=0:1:N-1;

f=n*Fs/N;

subplot(2,1,1);

plot(n(1:300),data1(1:300));

subplot(2,1,2);

plot(f,data2);

xlabel(\'频率/Hz\');

ylabel(\'幅度\');

 

 

 

STM32F4DSP应用学习笔记10-对ADC采集数据进行FFT频谱分析(2)

看了上面的结果,小伙伴们是不是有疑惑呢?

理论上10k方波的FFT变化应该是只有10k30k50k70k........这些谱线的,那为什么会多出5k15k20k............这些谱线的,想必对奈奎斯特比较了解的同学都知道,这是产生频谱混叠了,对的,因为45k采样率只能采集22.5k以下的频率才不会造成混叠,不了解这方面的同学可以百度一下。

现在我们已经得到了正确的数据,那么我们就可以把这些数据显示在LCD屏上了。关于TFT屏,这里我就不详细介绍了,毕竟我们的主要内容是信号处理。STM32F429内部集成了LCD控制器。而且官方也给出了操作TFT屏的库函数。所以我也就直接拿过来用了。关于TFT,我们这里主要用到的就是画矩形块。

画矩形块的函数是这样的:

void LCD_DrawFullRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);

给定坐标,宽度,长度就OK了。要注意的地方是X轴方向和Y轴方向是如下图所示方向

宽度是X轴方向的,长度是Y方向的。

STM32F4DSP应用学习笔记10-对ADC采集数据进行FFT频谱分析(2)

下图是最后显示的频谱,只取了一半,因为另一半是对称的。显示结果和MATLAB结果是一致的。说明我们的显示函数是正确的。并且频谱是随着数据实时更新的!

 

STM32F4DSP应用学习笔记10-对ADC采集数据进行FFT频谱分析(2)

频谱的显示支持多种宽度,因为我们FFT变化输出数据为1024个,我们取一半的画是512个,但是整个TFT屏长度才320个点,所以,我们需要把这512个有效点数进行处理,可以前后两个数据取平均。举个例子,如果我们要显示160个数,那么就是两格显示一个数那么要尽可能利用完这512个数据,我们就把前后三个数平均一下。这样一共用掉了480个数。

下面这个图就是显示数据比较少,每个显示条加宽了。

 

STM32F4DSP应用学习笔记10-对ADC采集数据进行FFT频谱分析(2)

并且通过串口发送a字符还支持横竖屏切换显示

STM32F4DSP应用学习笔记10-对ADC采集数据进行FFT频谱分析(2)

下面附上源码。

 

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:15
feiante 2016-01-14
我下载下来也是不能解压。我的邮箱:zhanghaokm@163.com
0   回复
举报
发布
barrettzxn 2015-12-22
已发送,主要查收!
0   回复
举报
发布
xwlcom 2015-12-13
下来看看。
0   回复
举报
发布
2345无1 2015-12-05
原来是我的电脑有问题。可以解压了。
0   回复
举报
发布
2345无1 2015-12-05
就是下了你的压缩包但是解压出错 ,能不能给我发一份程序看看。谢谢,1354543642@qq.com
0   回复
举报
发布
2345无1 2015-12-05
就是下了你的压缩包但是解压出错 ,能不能给我发一份程序看看。谢谢,1354543642@qq.com
0   回复
举报
发布
barrettzxn 2015-11-27
不能解压是什么鬼
0   回复
举报
发布
yaphet_yu 2015-09-01
st429的板子
0   回复
举报
发布
yaphet_yu 2015-09-01
用的您的程序 用的串口猎人 但是字符串打印的话 打印的都是乱码 st439的板子  直接用IO 口接的 串口吧  是这样么  用杜邦线  ?
0   回复
举报
发布
barrettzxn 2015-08-28
串口打印出来的是小数,不是16进制的数据。这样matlab才可以直接处理
0   回复
举报
发布
查看更多
x
收藏成功!点击 我的收藏 查看收藏的全部帖子

上海固越电子科技有限公司 版权所有©       投诉、举报邮箱:contact@icxbk.com       客服、投诉、举报电话:021-31029100-9104

经营增值电信业务试点批复:沪通信管自贸[2019]24号 出版物经营许可证:新出发沪批字第Y8445号

沪ICP备18038102号  沪公网安备 31011702004806号 |营业执照