cmsis库里的fft,有点理解上的问题,请大神指点下
1)用于测试的采样数组,我是在matlab中生成的,用以下命令
512个点.t=0:1/6656:511/6656;%生成采样时间序列
s1=sin(54*2*pi*t);%生成采样点.
在matlab下测试这些采样点,用
fftsa1=fft(s1,512);%fft变换,
再取模,输出图形,如下:可见是正确的.

2)输出模值1--10,如下图.

只有对应频率的模为1,其他都为0,正确的.
3)把这个数组放到代码里,用cmsis的库函数进行fft变换.()
得到一个1024的数组.如下:

我的理解,这一步 求出的只是一个包括实部与虚部的数组,于是,对这个数组进行求模.
结果,得到一个 512的数组,每一项都为 1.
问题:
1)求模以后,不是应该 与第2步 相对应,即,只有对应频率 的模才为1,其他频率 的模 应该为零吧,这里为什么会512项都为1?看样子又不像出错..。。
2)我用另一个fft算法(非cmsis库)进行处理,得到的数组进行求模,也得到了一个同样都是1的数组..猜测,cmsis库的fft运算应该没有问题,而是我的理解哪里有问题...感觉 像是 一个圆,等分了512份,实部与虚部对应于每份半径的sin与cos值,这样求模就是1.但,如果我想取对应的频率 的幅值,肯定不能这样取,否则,每个分频率 求的模值 都是1,没道理..应该只有一个对应频率 的值 才是1(如第2 步图中的值)
相关推荐
STM32F103 FFT算法的实现
1024点的FFT算法实现
STM32 FFT库的波形生成应用实践
STM32微控制器是STMicroelectronics(意法半导体)生产的一系列高性能的32位微控制器,广泛应用于嵌入式系统。它们提供了丰富的外设接口和强大的处理能力,使得STM32成为工业、医疗、消费电子产品中的热门选择。快速傅里叶变换(FFT)是数字信号处理中的核心算法之一,用于将时域信号转换为频域信号,以便进行频谱分析等操作。它在STM32微控制器上的应用,不仅提高了数据处理的效率,还扩展了微控制器在信号处理领域的适用性。
STM32F407基于CMSIS-DSP的FFT频谱分析实战详解
FFT是数字信号处理的核心算法,能将时域信号转换到频域,揭示信号中的频率成分,在振动监测、音频分析等实时信号处理场景中不可或缺。其原理基于旋转因子的周期性和对称性,通过分治策略将DFT的计算复杂度从O(N²)降至O(N log N),使得嵌入式平台也能轻松完成上千点的频谱计算。STM32系列芯片,特别是带有Cortex-M4内核和单精度FPU的型号,借助ARM官方CMSIS-DSP库,无需手写繁琐的蝶形运算即可高效实现FFT。配合片内ADC采集模拟信号、DMA自动搬运数据,就能在单颗芯片上完成从信号输入到频
STM32F4 ADC采样FFT运算测试代码
模拟信号经过ADC采样后变成数字信号,数字信号可以进行FFT运算,在频域中更容易分析信号的特征。此代码用STM32F407的ADC-DMA模式采集4096个点的数据,利用DSP库里的FFT算法进行快速傅里叶变换,经实测可以使用。
stm32ADC采集正弦波并用stm32DSP库的FFT处理数据计算失真度
(1) 本资源基于正点原子stm32F103mini板,软件平台为keil5,其它类型的stm32只需修改相关配置即可兼容。 (2)本资源使用stm32自带的ADC采集外部输入的正弦信号(外加信号需要偏置,因为32自带ADC采集0~3.3V)。 (3)采用stm32官方DSP库的FFT算法处理数据(64,256,1024点处理) (4)计算正弦波失真度。 (5) 采样频率可自由配置,修改相关参数即可。 (6)具体操作详见README.md


单片机/工控
