DSP进行浮点快速傅立叶变换剖析

发布时间:2024-01-12  

前言

本文目的是演示如何使用STM32F30x 内部的DSP 进行浮点快速傅立叶变换(FFT),为联系实际应用,使用ADC 对波形发生器进行ADC 采样,然后对ADC 采样结果进行FFT, 与 Matlab 仿真结果进行比较察看最终结果的准确性。会使用到ARMDSP 库文件,以及STM32F30x 的浮点运算单元以及DSP指令等。


模拟ADC采样数据实现FFT

使用Matlab生成AM调制波形

波形公式为:AM_50= sin(2πfc)*(1+50%*sin(2πfm)), 其中fc 为载波频率,fm 为调制波频率,调制比50%。为了使用ADC 采样,将波形进行偏移处理,叠加1.5V 电压,最终波形展开公式如下:

AM_50 = sin(2πfc) + 50%*sin(2πfm))* sin(2πfc) + 1.5

Matlab 程序如下:

x =sin(2*pi*fm*t); % modulation wave

figure;plot(t,x);y =sin(2*pi*fc*t); % carrier wavefigure;plot(t,y);z1 =y.*(1+m1*x) + 1.5; % AM wave with 50% depthfigure; %figure 1plot(t,z1);xlabel('Time');ylabel('Amplitude');title('AM with50% depth');Z1 =z1*4096/3.3; % 12-bit ADC Value

产生波形如下:


图【一】

生成模拟ADC数据,使用STM32F30x进行FFT运算

生成数据存于AM_50_ADC_Data[]数组中,实数转换为复数,进行CFFT 的运算,调用arm_cfft_f32 库函数,1024 点FFT。

/* Real data to magnitudedata */

for(i=0; i {testInput_f32_10khz[i*2+1] =0;testInput_f32_10khz[i*2] = AM_50_ADC_Data[i];}

/* Process the data throughthe CFFT/CIFFT module */

arm_cfft_f32(&arm_cfft_sR_f32_len1024,testInput_f32_10khz, ifftFlag, doBitReverse);

/* Process the data throughthe Complex Magnitude Module forcalculating the magnitude ateach bin */

arm_cmplx_mag_f32(testInput_f32_10khz,testOutput, fftSize);

结果打印并和Matlab计算结果进行比较

为方便显示只取整数部分比较:图【二】为Matlab 输出,图【三】为经过STM32F30x计算后的结果.

图【二】

图【三】

从数据上看Matlab 仿真以及STM32F30x的FFT 两者非常吻合,数据可以直接使用。基于时间数据转换到频域上,理论上直流分量,频率fc处,以及频率fc-fm,fc+fm 处都会有波峰出现,实际看FFT 波形如下:

实际ADC采样并进行FFT操作

使用波形发生器产生50% 调幅波,载波10KHz,调制波1KHz,调制比50%,偏移1.5V。


使用STM32F30x进行ADC 采样,采样结果存于数组,数据导入到Matlab 显示波形如下:


根据ADC采样数据进行FFT 变换,分析结果如下面所示:

结论:

由STM32F30x 的ADC 采样的波形可以完整进行快速傅立叶变换,变化结果符合理论变化预期。并且利用STM32F30x 的FPU 以及DSP 模块方便快速进行变化,给实际应用带来很大便利性。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    可以通过LabVIEW的界面把数学函数和波形联系起来,使教学直观易懂。学生也可以通过LabVIEW更好地学习“信号与系统”这门课程。 4.1 离散傅里叶变换中的“频谱泄漏” 为了能对无限长的离散化序列进行离散傅里叶变换......
    是想在女儿(或者儿子)出生之前为她做点事情,以便能最终做出个东西送给她(或者他)。 在实践的过程中,遇到了傅里叶变换,作文以记之。最终我会导出一个很常用的变换-傅里叶变换 信号: 信号......
    从车载雷达认识傅里叶变换;遥想当年,与傅里叶变换(Fourier Transform)的第一次偶遇是学习信号与系统的时候,觉得她的数学表达很美,想进一步了解来着,但终究只可远观而不能领会其奥义,对她的理解仅仅限于一种数学变换......
    斯噪声img_f=fftshift(fft2(img_noise)); %傅里叶变换得到频谱 [m n]=size(img_f); m_mid=fix(m/2); %取整 n_mid=fix(n/2......
    傅里叶变换的精彩讲解(2024-10-30 16:08:07)
    傅里叶变换......
    方显示的分辨率与框里选择的 预置分辨率值相等时,测量完成。 改变函数信号发生器输出信号为三角波信号,再次测试。 小结: 虚拟频谱分析仪使用时无需接地; 因为FFT(快速傅里叶变换)需要时间,测量时可能等待时间较长。 ......
    施加阶跃电压测量了扬声器单位冲激响应信号。 通常情况下, 扬声器可以看成一个近似线性时不变系统。 它的单位冲激响应信号的傅里叶变换, 应该对应它的频率特性。 下面就利用实际测量的数据, 来分......
    时候还可以利用观测的波形进行故障诊断或干扰排除,实时波形属于时域分析。 3、谐波分析 谐波分析属于频域分析方法,是包含多种频率成分的变频电量的基本分析方法,通常采用傅里叶变换实现复杂信号的分解。 目前......
    频信号进行预加重处理主要作用是为了平衡频谱、避免在傅里叶变换操作过程中出现数值问题、改善信噪比、补偿语音信号受到发生系统所抑制的高频部分,突出高频共振峰。预加重处理实际意义是让音频信号通过一个高通滤滤波器。通过MATLAB......
    放弃这块知识。 我们来看解释: FFT,即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。 这一看,头都大了。 今天我们就带大家简单的了解下什么是傅里叶变换......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>