• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

离线式数字信号处理(二)——使用Matlab对STM32F4 ADC采集到的数据进行分析 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

昨天学弟帮我写好了采集程序,是基于STM32F4的,使用其ADC直接采样,采样2048个点并实施存入数组,随后写入SD卡中。
详情请参考这篇文章 【实验室乱记】基于stm32的采集Adc与SD卡储存

虽然我们的matlab程序正常跑起来了,但是文件存储的部分仍然有点小问题,因为12bit ADC采样获得的最大数值是4096,学弟的程序在存储这些数字进SD卡TXT文档的时候出现了一点小bug,那就是如果非4位数,在该行数字最后会出现几个空格,把不满4位数的补上。如果直接使用matlab打开,会直接报错,但是我打开了文档,随便删掉一个空格随后保存,程序就可以正常运行了。。实在是非常古怪。

但是毕竟能用就行,我们也就没有过多追究,因为这只是一个测试平台,之后我们还会拿到FPGA平台上去运行,到时候出现bug我们可以继续解决。
存储数据的文件放在了实验室的同步文件服务器上,没有带回来,不过大家应该知道,就跟我们之前模拟出来的那个txt文件格式一致的。

下面上实验数据。


这是第一次采集获得的结果,因为一开始的程序中,ADC采集函数里写了个delay进去,所以采样率变得很低,学弟说数值变化的很奇怪,所以他就把信号源产生的频率开的很低了,调整到了10Hz,至于采样率,我也忘记了,貌似是200Hz,我们是用了一个引脚,每一次采集ADC数据就将该引脚电平翻转,随后再用示波器测量其信号频率,乘以2以后就是采样率了。

在其单边幅度谱中,可以看到主peak是位于10Hz位置的,符合预期。但是可以观察到信号边缘有毛刺,这其实是因为我们没有将ADC采样触发放到定时器中运行,而是仅仅使用delay函数来控制它的采样间隔,因此如果出现时间突然加快或者变慢,就会出现相位抖动,导致FFT时,频谱会出现轻微偏移。

上图是第二次采集获得的数据,我们将ADC采集函数中的延时删除了,测得的采样率大约为2 x 32.8kSps左右,将这个数值输入matlab中,可以正确的做出FFT,输入信号为1kHz,可以观察到在1kHz位置有一峰,即为我们所需信号的频谱。

当我们将信号源的频率开到30kHz,也就是接近于1/2 Fs的时候,可以发现虽然信号处于第一奈奎斯特区域内,但是ADC采集的值无法直接用于FFT,需要先恢复出原始信号才可进行后续处理。

以上desu。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
delphi读写文本发布时间:2022-07-18
下一篇:
Delphi【变体记录及存储方式】发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap