FFT在低功率微程序控制器中的应用
在以前,外围设备是更大的微处理器如特定用途集成电路和DSP中的内存。现在,低功率微处理器包括了外围设备,这样就有机会在低功耗的情况下进行复杂的运算。本文介绍了在低功率的微处理器中执行快速傅里叶变换(FFT),其中微处理器包括一周期的硬件乘法器。这个应用可以实时计算输入电压的频谱。
为了完成此任务,一个模数转换器对输入信号进行采样然后传输到微处理器。微处理器再对样本信号进行256点的FFT,这样就获得输入电压的频谱。为了测试其有效性,微处理器计算频谱的幅值然后实时地传输给示波器。
1 背景 绕行电感器
为了确定输入样本信号的频谱信息,需要计算输入样本的离散傅里叶变换(DFT)。离散傅里叶变换定义为:
式中:N是样本点数;X(k)是频谱,与x(n)代表输入样本。利用欧拉方程的一致性将这个求和公式中的输入样本与频谱分离为它们的实部与虚部,可得以下方程式:
因为输入样本只是考虑实部。式(2)与式(3)中的求和公式的第二项消失了,假设有N个样本,直接计算式(2)、式(3)需要2N2次乘法及2N(N-1)次加法。因此256点输入样本的DFT将要求131072次乘法和130560次加扁平型电感法。
已经出现了很多种FFT算法。普通的以基为2的算法连续将DFT分解成2个更小的DFT。为了使其变成可能,N必须分解为2的整数幂。转化为以2为基的FFT的步骤见图1的蝶形计算。从图1的蝶形计算中可观察到,获得基为2的FFT算法的解只需要(N/2)log2N次乘法与Nlog2N次加法。在图l中的值WH通常认为是旋转因子且能够在执行FFT前计算得到。
在图1中,FFT的输入具有特殊的形式。它是具有位倒置下标的原始顺序。因此,当计算基为2的N=8的FFT时,输入数据的记录顺序要求为O(000b),1(001b),…,0(000b),4(100b),…。
FFT是以正确的顺序作为输出。图1同样揭示了单一的蝶形计算的结果只是FFT的下一阶段的输入。因电感生产厂家为计算是在适当的位置中完成的,旧值可以代替新获得值且在计算N点的FFT只是需要2N个变量样本(需要2N个变量是因为每一个变量值都有一个实部与虚部)。
当完成FFT时,结果是以复数电感厂家为记法的。式(4)和式(5)将复数表示形式转变为以极坐标表示:
在DSP的文章里介绍了很多关于DFT/FFT的优化方法,使其计算速度更快且需要的计算量更少,其中一个比较重要的优化方法(也可能是最容易执行的)。
从观察DFT中可以获得,因为具有N点的实值信号的DFT是以X(N/2)为对称的,因此有:
2 执行要点
写代码实现DFT不是一件容易的事,因为用低功率电感厂家的微处理器实现DFT算法的实际情况是相当复杂的。例如,这些微处理器通常:
(1)有限的内存。选择的微处理器只有2 KB的RAM。从上面叙述可知实现FFT至少需要2N×16 B变量。微处理器不能执行样本点数N大于512的FFT。这是不现实的,因为别的固件同样需要一些字节的RAM。因此在实际执行的过程中,通常将样本点数局限在256点。使用16 B的变量表示每一个值的实部与虚部,这种情况下对于FFT的数据需要1024B的RAM。
(2)有限的速度。尽管低功率的微处理器具有高达每秒百万条指令的速度,仍然需要一些优化方法来减少在执行FFT过程中所用到的指令。所幸的是在应用过程中。C编译器包括很多优化的级别设置。小心使用芯片的硬件乘法同样可以使得代码优化到一个可以接受的水平。
(3)没有浮点数功能。所选择的微处理器特别是那些低功率的微处理器没有浮点数功能。因此所有的计算都需要定点算法。为了表示分数,固件将使用有符号的Q8.7标记。因此固件将假设:O~6 B表示每一数字的分数部分;7~14 B表示每一数字的整数部分;第15字节是这个数字的符号位。
这种形式对于加法和减法是没有影响的,但是对于乘法则必须注意,使所有数据排成Q8.7的形式。例如对于Q8.7的乘法如下:平面变压器厂家 | 平面电感厂家
请教输出二极管RC中R的功率取值?论坛有很多关于反激式开关电源的输出二极管RC电路的确定方法,但是好像没有看到R的功率计算,请问一下各位前辈这个电阻的功率一般取多大呢?直接用0805的贴片可以吗?还是要用1W线
将变频器改成不间断电源的可行性及应用摘要:介绍了将变频器改成不间断电源的工作原理和系统组成,指出了变频器改成普通UPS可能出现的问题及解决的办法,说明了该电源的选型和计算方法,并介绍了该电源在实际生产中的部分应用实例。关键词:变频器;不
请各位大神帮我看下代码那里问题电路是P0接的J12,P1接的J16.单片机采用STC90C516RC+,现在想实现0-60动态显示。现在显示出现8个数码管都会显示,但是前面2个数码管可以正常从0-60的增加再重复。现在想只要前面