stm32f4进行fft运算

 2024-01-23 01:03:52  阅读 0

0.前言

我是新手。 最近需要使用fft,所以就学会了使用。 这很有趣。 文章内容可能存在描述不准确或错误。 希望读者用辩证的眼光来阅读。 如果方便指出错误,那就非常感谢了。

本文主要关注fft的实际应用。 没有设计如何实现fft和原理部分,因为我不知道怎么实现,哈哈哈。

一、原理:

FFT后的物理意义_神马观智-CSDN博客_fft的含义

CMSIS DSP库手册下载地址(F4):

DSP库API手册:

CMSIS DSP(arm-..io)

2.为什么需要fft? 非常方便分解信号和测量谐波来测量波形频率和幅度,且精度更高。 3.什么是fft?

快速傅里叶算法,(DFT的快速算法),可以将周期信号从时域分解到频域

4、如何使用?

使用fft时需要了解几个概念:

(1)FFT参数

频谱分辨率:Fs/N Fs:采样频率 N:fft 采样点数

因此,需要通过降低采样频率、增加fft点数来提高精度。

谱宽:Fs/2/kk:下采样率

(2)如何计算频率和幅度

如果进行4096点FFT运算

频率:数据输出4096点。 ,第一个点代表0hz信号的幅度,即直流分量,后续点的频率=点数*分辨率。 fft输出是对称的,因此≥N/2的点没有实际意义。

幅度:直流分量/N,谐波分量/(N/2)。

五、方案实施

方案思路:

TIM2(TRGO信号)触发->ADC采样(开启DMA传输)->FFT运算,以及数据处理(DMA传输完成中断期间)

TIM2触发是为了精确控制adc采样频率。这里有一个信号同步问题,即分辨率可能与采样信号不准确对应(例如采样频率为1khz,分辨率为9hz,而1000 /9不是整数,这样频谱图上没有整数点可以对应1khz,那么数据就不会那么准确),这个好像叫频谱泄漏

您应该能够进行 ADC 采集。 。 。 需要注意的是adc采集f>tim2会触发f(更新中断),否则可能会出现问题。

FFT运算

/* Process the data through the CFFT/CIFFT module */
arm_cfft_f32(&arm_cfft_sR_f32_len4096, fft_Input_f32, ifftFlag, doBitReverse);
/* Process the data through the Complex Magnitude Module forcalculating the magnitude at each bin */
arm_cmplx_mag_f32(fft_Input_f32, fft_Output, fftSize);
/* Calculates maxValue and returns corresponding BIN value */
arm_max_f32(fft_Output, fftSize, &maxValue, &maxIndex);

直接使用官方库的例子在下载的库目录下:

.8.0//CMSIS//DSP/html/-.html

标签: 采样 频率 运算

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码