FFT算法(查表法)
利用Excel进行FFT和Fourier分析的基本步骤

6
上面基于杭州人口密度数据的 FFT,实际上是一种空间自相关分析过程,属于 FT 的第 二类应用。这种过程不以寻找周期为目标,实际上也不存在任何周期。
不论目标是什么,都必须借助频谱图(频率-功率谱密度图)进行分析和解释。下面第 一步就是绘制频谱图。首先要计算频率,线频或角频都可以,因为二者相差常数倍(2π)。 一个简单的办法是,用 0 到 T=32 的自然数列除以 T=32(表 6)。
如果采用的频率变化范围 0~1,则绘制的频谱图是对称的(图 6)。实际上,另一半是多 余的,Mathcad2000 自动生成的频谱图就没有考虑另外一半儿(图 7)。因此,我们可以以对 称点 f=0.5 为界,截取前面一半的数据,在 Excel 上绘制频谱图(图 8)。
功率谱密度
1600000000
1400000000
9 6.238?06
10 8.908?06
11 1.073?07
12 1.042?07
13 9.42?06
14 6.494?06
15 4.79?06
16 4.697?06
第六步,功率谱分析 功率谱分析目前主要用于两个方面,一是侦测系统变化的某种周期或者节律,据此寻找
因果关系(解释)或者进行某种发展预测(应用);二是寻找周期以外的某些规律,据此对 系统的时空结构特征进行解释。
a
2
b 图 3 傅立叶分析(Fourier Analysis) 注意:如果“输入区域”设为“$B$2:$B$33”,则不选“标志位于第一行(L)”(图 3b)。
表 3 FFT 的结果
3
第四步,输出 FFT 结果 选项设置完毕以后,确定(OK),立即得到 FFT 结果(表 3)。 显然,表 3 给出的都是复数(complex numbers)。假定一个数据序列表为 f(t),则理论
数字预失真基本原理

17数字预失真基本原理马 进(西安电子科技大学 通信工程学院,陕西 西安 710071)摘 要 对高功率放大器的失真特性进行了数学分析,介绍了数字预失真的基本原理,总结了常用的几种预失真线性化方法,着重详细介绍了查找表数学模型的建模方法。
关键词 功率放大器;线性化;预失真中图分类号 TN722.7+5The Principle of Digital Pre-distortionMa Jin(School of Telecommunications Engineering, Xidian University, Xi ′ an 710071, China)Abstract This paper makes a mathematical analysis of the HPA's distortion characteristic and introduces the principle of digital pre-distortion. It also summarizes some common techniques for linearizing pre-distortion with emphasis on the LUT mathematical model's modeling method.Keywords PA; linearization; pre-distortion; LUT1 数字预失真的实测图表数字预失真的目的是改善功放的线性度,而对功放线性度评估是用ACPR 这个指标进行评估的,因此数字预失真目的就是改善功放的ACPR 指标。
预失真效果见表1所示。
2 功放的非线性特性分析功放的各种失真特性[1]如下:(1)AM-AM 失真特性:就是放大器的增益压缩现象,即AM-AM 失真,可以采用非线性的多项式来表征放大器的这种特性,其数值由输入信号的幅度(AM )决定。
DSP常见算法的实现

DSP常见算法的实现3.6常见的算法实现在实际应用中虽然信号处理的方式多种多样,但其算法的基本要素却大多相同,在本节中介绍几种较为典型的算法实现,希望通过对这些例子(单精度,16bit)的分析,能够让大家熟悉DSP编程中的一些技巧,在以后的工作中可以借鉴,达到举一反三的效果。
1.函数的产生在高级语言的编程中,如果要使用诸如正弦、余弦、对数等数学函数,都可以直接调用运行库中的函数来实现,而在DSP编程中操作就不会这样简单了。
虽然TI公司提供的实时运行库中有一些数学函数,但它们所耗费的时间大多太长,而且对于大多数定点程序使用双精度浮点数的返回结果有点“大材小用”的感觉,因此需要编程人员根据自身的要求“定制”数学函数。
实现数学函数的方法主要有查表法、迭代法和级数逼近法等,它们各有特点,适合于不同的应用。
查表法是最直接的一种方法,程序员可以根据运算的需要预先计算好所有可能出现的函数值,将这些结果编排成数据表,在使用时只需要根据输入查出表中对应的函数值即可。
它的特点是速度快,但需要占用大量的存储空间,且灵活度低。
当然,可以对上述查表法作些变通,仅仅将一些关键的函数值放置在表中,对任意一个输入,可根据和它最接近的数据采用插值方法来求得。
这样占用的存储空间有所节约,但数值的准确度有所下降。
迭代法是一种非常有用的方法,在自适应信号处理中发挥着重要的作用。
作为函数产生的一种方法,它利用了自变量取值临近的函数值之间存在的关系,如时间序列分析中的AR、MA、ARMA等模型,刻画出了信号内部的特征。
因为它只需要存储信号模型的参量和相关的状态变量,所以所占用的存储空间相对较少,运算时间也较短。
但它存在一个致命的弱点,由于新的数值的产生利用了之前的函数值,所以它容易产生误差累积,适合精度要求不高的场合。
级数逼近法是用级数的方法在某一自变量取值范围内去逼近数学函数,而将自变量取值在此范围外的函数值利用一些数学关系,用该范围内的数值来表示。
基4FFT算法的FPGA实现

基-4算法原理
我们也同样采用按时间抽取的方式讲解基-4算 法的蝶形单元。 设A、B 、C 、D 为时间序列,A’、B’、C’、D’ rk 为频率序列, WN r = 0 , 1 , 2 , 3 为旋转因子,则蝶形 单元运算表达式为式1-3: A' B' C' D'
= ( A + CW 2k ) + ( BW k + DW 3k ) = ( A - CW 2k ) - j ( BW k - DW 3k ) 3k k = ( A + CW 2k + ) ( BW k DW ) 2k = ( A - CW ) + j ( BW - DW 3k )
(1-3)
基-4蝶形单元信号流图如下: A B
0k WN k WN
A’ B’
C’ D’
图 1-2 基-4单元信号流图
W
2k
N
C
W
3k
N
D
由 1-3 式可以看出 ,基 -4 蝶形单元需要三个复数 乘法器及十二个复数加法(减)器,而且对于 N= 4M 有 log 4 N = M 次迭代运算,每次迭代运算 包含 N/4 次蝶形运算,每个基 -4 的蝶形单元与四个 基-2 蝶形相比较,减少一次复数乘法,在相同 N点 的 FFT运算过程中,基 -4 运算的迭代运算和每次迭 代包含的蝶形单元要少于基 -2FFT算法,可以看出 基-4 算法的研究可以大大提高 FFT运算的速度,更 加 发 挥 F F T 运 算 快 的 优 势 。
0k N
- BW
k N
(1-1)
图 1-1 基2按时间抽取单元蝶形图
设 A = a + jb (1-1)式得:
数字信号处理主要知识点整理复习总结

求出对应
的各种可能的序列的表达式。
解: 有两个极点,因为收敛域总是以极点为界,因此收敛域有以下三种情况: 三种收敛域对应三种不同的原序列。
时,
(1)当收敛域
令
,因为c内无极点,x(n)=0;
,C内有极点0,但z=0是一个n阶极点,改为求圆外极点留数,圆外极点有
数字信号处理课程 知识点概要
第1章 数字信号处理概念知识点
1、掌握连续信号、模拟信号、离散时间信号、数字信号的特点及相互关系(时间和幅度的连续性考量) 2、数字信号的产生; 3、典型数字信号处理系统的主要构成。
量化、编码 ——————
采样 ————
模拟信号
离散时间信号
数字信号
5、部分分式法进行逆Z变换 求极点 将X(z)分解成部分分式形式 通过查表,对每个分式分别进行逆Z变换 注:左边序列、右边序列对应不同收敛域 将部分分式逆Z变换结果相加得到完整的x(n)序列 6、Z变换的性质 移位、反向、乘指数序列、卷积
常用序列z变换(可直接使用)
7、DTFT与Z变换的关系
(a) 边界条件 时,是线性的但不是移不变的。
(b) 边界条件 时,是线性移不变的。
令
….
所以:
….
所以:
可见 是移一位的关系, 亦是移一位的关系。因此是移不变系统。
代入差分方程,得:
……..
所以:
因此为线性系统。
3. 判断系统是否是因果稳定系统。
Causal and Noncausal System(因果系统) causal system: (1) 响应不出现于激励之前 (2) h(n)=0, n<0 (线性、时不变系统) Stable System (稳定系统) (1) 有界输入导致有界输出 (2) (线性、时不变系统) (3) H(z)的极点均位于Z平面单位圆内(因果系统)
通信课程设计——双音多频信号检测

通信技术方向课程设计题目:双音多频信号检测物联网工程学院电子信息工程专业学号0703070106学生姓名时雅茹二〇一〇年六月一、原理介绍双音多频(Dual Tone Multi Frequency, DTMF )信号是音频电话中的拨号信号,由美国AT&T 贝尔公司实验室研制,并用于电话网络中。
这种信号制式具有很高的拨号速度,且容易自动监测识别,很快就代替了原有的用脉冲计数方式的拨号制式。
这种双音多频信号制式不仅用在电话网络中,还可以用于传输十进制数据的其它通信系统中,用于电子邮件和银行系统中。
这些系统中用户可以用电话发送DTMF 信号选择语音菜单进行操作。
DTMF 信号系统是一个典型的小型信号处理系统,它要用数字方法产生模拟信号并进行传输,其中还用到了D/A 变换器;在接收端用A/D 变换器将其转换成数字信号,并进行数字信号处理与识别。
为了系统的检测速度并降低成本,还开发一种特殊的DFT 算法,称为戈泽尔(Goertzel)算法,这种算法既可以用硬件(专用芯片)实现,也可以用软件实现。
下面首先介绍双音多频信号的产生方法和检测方法,包括戈泽尔算法,最后进行模拟实验。
二、内容及结论1、双音多频(DTMF )信号的组成在电话中,数字0~9的中每一个都用两个不同的单音频传输,所用的8个频率分成高频带和低频带两组,低频带有四个频率:679Hz,770Hz,852Hz 和941Hz ;高频带也有四个频率:1209Hz,1336Hz,1477Hz 和1633Hz.。
每一个数字均由高、低频带中各一个频率构成,例如1用697Hz 和1209Hz 两个频率,信号用)2sin()2sin(21t f t f ππ+表示,其中Hz f 6791=,Hz f 12092=。
这样8个频率形成16种不同的双频信号。
具体号码以及符号对应的频率如表1所示。
表中最后一列在电话中暂时未用。
表1 双频拨号的频率分配列 行 1209Hz1336Hz1477Hz 633Hz 697Hz 1 2 3 A 770Hz 4 5 6 B852Hz 7 8 9 C 942Hz*#DDTMF 信号在电话中有两种作用,一个是用拨号信号去控制交换机接通被叫的用户电话机,另一个作用是控制电话机的各种动作,如播放留言、语音信箱等。
DSP课程设计参考题目

DSP课程设计任务书钱满义高海林编北京交通大学电工电子教学基地2006年1月目录一、综合设计性实验题目 (2)二、《DSP应用课程设计》教学大纲 (16)三、实验报告格式 (19)四、评分标准格式 (21)一、综合设计参考题目1.DSP系统定时及其应用2.DSP系统的自举设计3.任意信号发生器的设计4.DTMF信号的产生及检测5.信号的调制与解调6.语音压缩、存储与回放7.语音噪声滤波8.语音识别9.利用DSP实现信号滤波10.利用DSP实现自适应滤波11.实时信号的谱分析12.DCT离散余弦变换的DSP实现1. D SP系统定时及其应用定时器是DSP处理器最基本的片上外设,使用定时器可以构建系统程序基本的定时单元,为周期性执行某些程序提供时间基准,或者为片外有时钟要求的电路,如A/D和D/A电路提供定时时钟。
本设计要求采用DSP的片内定时器实现应用程序的周期性运行。
1.设计要求及目标基本部分:(1)对定时器进行初始化(2)编写定时服务程序实现3个LED指示灯分别以1秒、2秒、4秒的周期进行闪烁(3)编写定时服务程序实现3个LED指示灯以流水灯的形式进行闪烁,流水周期在0.6秒~6秒之间进行循环改变发挥部分:使用定时器在Tout输出引脚产生频率为10K~100KHz连续可调的方波信号,实现方波信号发生器的功能。
2.设计思路首先使用DSP的定时器实现最基本的定时功能,例如当DSP的系统时钟为100MHZ时,基本定时时间可确定为10ms。
然后可使用查询方式或中断方式编写定时器的定时服务程序,在服务程序中设置定时变量进一步计算时间。
根据设计要求编写定时服务程序。
Tout引脚即XTOUT引脚,已连接到扩展板接口上,可以使用示波器来测量所产生的信号波形,如果要求产生方波信号,还要增加一点附加电路。
3.要求完成的任务(1)编写C语言程序,并在CCS集成开发环境下调试通过。
(2)实现设计所要求的各项功能。
(3)按要求撰写设计报告。
数字控制振荡器NCO

本文设计的 NCO 工作时钟为 100MHz,相位累加器的位数为 16 位,输入的频率控制字为 4CCCH,根据公式:
因此在实际设计中,采用的是图 2 所示的由 16 级 CORDIC 运算单元组成的流水线结构, 正常工作时只需 1 个时钟周期就能输出 1 个数据,为数据实现高速实时处理提供了前提。每 一级实现的功能是根据式(5)进行一次迭代,移位的位数等于当前的迭代级数,加减法选择 由该级中 Z 的最高位(符号位)决定,得到下一级的 X 、Y 和 Z 的值。经过 16 级流水线运 算后,Z 的值变为 0,X 和 Y 的值则为初始值 z0 的余弦和正弦值。每一级电路结构主要包 括 2 个移位器和 3 个加(减)法器,级与级之间直接相连,不需要额外的寄存器。θi 的值为 arctan(2-i),可将该小数转换为二进制数后,存储于存储单元中,为每一级流水线提供查 找表。若对于 16 级的流水线结构,则的范围是 0~15。
数控振荡器的 FPGA 实现
图 1 是数控振荡器的顶层电路。由图可见,频率控制字寄存器将接收到的的频率控制字 送入相位累加器,相位累加器对系统时钟进行计数,每到达输入频率控制字的值即对相位进 行累加,随后将累加值送入相位相加器,与相位控制字寄存器接收到的初始相位进行相加, 得到当前的相位值。其中,相位累加器是决定 NCO 性能的一个关键模块,可以利用 FPGA 器 件的进位链实现快速、高效的电路结构。然而,由于进位链必须位于临近的逻辑阵列块 CLB 和逻辑单元 LC 内,所以长的进位链会减少其它逻辑使用的布线资源;同时,过长的进位链 也会制约整个系统速度的提高。因此,设计中采用进位链和流水线技术相结合的办法。所谓 流水线技术,即把在一个时钟内要完成的逻辑操作分成几步较小的操作,并插入几个时钟周 期来提高系统的数据吞吐率。采用以上做法实现的相位累加器既能保证具有较高的资源利用 率,又能大幅提高系统的性能和速度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ARM或单片机用的FFT算法,用于信号处理。
经过愚昧的本人优化,提高了计算效率(在aduc7026 @41MHz FFT256点环境下运算时间为0.06s左右)PS:以下有两部分(fft.h和fft.c)【复制以下内容改名为fft.h】#ifndef __FFT_H__#define __FFT_H__#include<math.h>#ifdef FFT_GLOBALS#define FFT_EXT#else#define FFT_EXT extern#endif#define PI 3.1415926#define FFT_POINT 8 //设置点数(此值变,下面的也要变)(0~11)#define SAMPLE_NUM 256 //可设256或512两种数//count[n]//count[]={1,2,4,8,16,32,64,128,256,512,1024,2048}FFT_EXT float dataR[SAMPLE_NUM];FFT_EXT float dataI[SAMPLE_NUM];FFT_EXT void SetData(float data,unsigned int i); //采集数据到第i个点(0~SAMPLE_NUM)FFT_EXT void FFT(void);//采样来的数据放在dataR[ ]数组中//***************FFT结果数值处理*******************************************************//计算和返回峰(模)值,k表示第几个值(0~SAMPLE_NUM-1),type为0返回峰值,1返回模值,2返回有效值FFT_EXT float GetPeak(unsigned int k,unsigned int type);//FFT_EXT float GetPhase(unsigned int k,unsigned int type); //计算和返回相位,k同上//type为0返回角度,1返回弧度//speed为采样速率,返回第k(0~SAMPLE_NUM)个点代表的频率FFT_EXT float GetStepF(float speed,unsigned int k);FFT_EXT float GetPower1(unsigned int k); //返回功率谱的第k点FFT_EXT float GetPower2(unsigned int k,float total); // 返回k点所占的功率百分比(单位是%) total为总功率FFT_EXT float GetTotalPower(void); //计算功率谱总和FFT_EXT float GetTHD(void); //计算失真度#endif///////////////////////////////////////////////////////////////////////////////【复制以下内容改名为fft.c】//查表式FFT算法#define FFT_GLOBALS#include "fft.h"#if SAMPLE_NUM==256const float sin_tab[256]={0.000000,0.024541,0.049068,0.073565,0.098017,0.122411,0.146730,0.170962,0.1 95090,0.219101,0.242980,0.266713,0.290285,0.313682,0.336890,0.359895,0.382683,0.405241,0.427555,0.449611,0.471397,0.492898,0.514103,0.534998,0.555570,0.575808,0.5 95699,0.615232,0.634393,0.653173,0.671559,0.689541,0.707107,0.724247,0.740951,0.757209,0.773010,0.788346,0.803208,0.817585,0.831470,0.844854,0.8 57729,0.870087,0.881921,0.893224,0.903989,0.914210,0.923880,0.932993,0.941544,0.949528,0.956940,0.963776,0.970031,0.975702,0.980785,0.985278,0.9 89177,0.992480,0.995185,0.997290,0.998795,0.999699,1.000000,0.999699,0.998795,0.997290,0.995185,0.992480,0.989177,0.985278,0.980785,0.975702,0.9 70031,0.963776,0.956940,0.949528,0.941544,0.932993,0.923880,0.914210,0.903989,0.893224,0.881921,0.870087,0.857729,0.844854,0.831470,0.817585,0. 803208,0.788346,0.773010,0.757209,0.740951,0.724247,0.707107,0.689541,0.671559,0.653173,0.634393,0.615232,0.595699,0.575808,0.555570,0.534998,0. 514103,0.492898,0.471397,0.449611,0.427555,0.405241,0.382683,0.359895,0.336890,0.313682,0.290285,0.266713,0.242980,0.219101,0.195090,0.170962,0. 146730,0.122411,0.098017,0.073565,0.049068,0.024541,0.000000,-0.024541,-0.049068,-0.073565,-0.098017,-0.122411,-0.146730,-0.170962,-0.195090,-0.219 101,-0.242980,-0.266713,-0.290285,-0.313682,-0.336890,-0.359895,-0.382683,-0.405241,-0.427555,-0.449611,-0.471397,-0.492898,-0.514103,-0.534998,-0.555570,-0.575 808,-0.595699,-0.615232,-0.634393,-0.653173,-0.671559,-0.689541,-0.707107,-0.724247,-0.740951,-0.757209,-0.773010,-0.788346,-0.803208,-0.817585,-0.831470,-0.844 854,-0.857729,-0.870087,-0.881921,-0.893224,-0.903989,-0.914210,-0.923880,-0.932993,-0.941544,-0.949528,-0.956940,-0.963776,-0.970031,-0.975702,-0.980785,-0.985 278,-0.989177,-0.992480,-0.995185,-0.997290,-0.998795,-0.999699,-1.000000,-0.999699,-0.998795,-0.997290,-0.995185,-0.992480,-0.989177,-0.985278,-0.980785,-0.975 702,-0.970031,-0.963776,-0.956940,-0.949528,-0.941544,-0.932993,-0.923880,-0.914210,-0.903989,-0.893224,-0.881921,-0.870087,-0.857729,-0.844854,-0.831470,-0.817 585,-0.803208,-0.788346,-0.773010,-0.757209,-0.740951,-0.724247,-0.707107,-0.689541,-0.671559,-0.653173,-0.634393,-0.615232,-0.595699,-0.575808,-0.555570,-0.534 998,-0.514103,-0.492898,-0.471397,-0.449611,-0.427555,-0.405241,-0.382683,-0.359895,-0.336890,-0.313682,-0.290285,-0.266713,-0.242980,-0.219101,-0.195090,-0.170 962,-0.146730,-0.122411,-0.098017,-0.073565,-0.049068,-0.024541};#endif#if SAMPLE_NUM==512const float sin_tab[512]={0.000000,0.012272,0.024541,0.036807,0.049068,0.061321,0.073565,0.085797,0.0 98017,0.110222,0.122411,0.134581,0.146730,0.158858,0.170962,0.183040,0.195090,0.207111, 0.219101,0.231058,0.242980,0.254866,0.266713,0.278520,0.290285,0.302006,0.313682,0.3253 10,0.336890,0.348419,0.359895,0.371317,0.382683,0.393992,0.405241,0.416430,0.427555,0.438616,0.449611,0.460539,0.471397,0.482184,0. 492898,0.503538,0.514103,0.524590,0.534998,0.545325,0.555570,0.565732,0.575808,0.585798 ,0.595699,0.605511,0.615232,0.624859,0.634393,0.643832,0.653173,0.662416,0.671559,0.6806 01,0.689541,0.698376,0.707107,0.715731,0.724247,0.732654,0.740951,0.749136,0.757209,0.765167,0.773010,0.780737,0.7 88346,0.795837,0.803208,0.810457,0.817585,0.824589,0.831470,0.838225,0.844854,0.851355, 0.857729,0.863973,0.870087,0.876070,0.881921,0.887640,0.893224,0.898674,0.903989,0.90916 8,0.914210,0.919114,0.923880,0.928506,0.932993,0.937339,0.941544,0.945607,0.949528,0.953306,0.956940,0.960431,0. 963776,0.966976,0.970031,0.972940,0.975702,0.978317,0.980785,0.983105,0.985278,0.987301, 0.989177,0.990903,0.992480,0.993907,0.995185,0.996313,0.997290,0.998118,0.998795,0.9993 22,0.999699,0.999925,1.000000,0.999925,0.999699,0.999322,0.998795,0.998118,0.997290,0.996313,0.995185,0.993907,0. 992480,0.990903,0.989177,0.987301,0.985278,0.983105,0.980785,0.978317,0.975702,0.972940, 0.970031,0.966976,0.963776,0.960431,0.956940,0.953306,0.949528,0.945607,0.941544,0.9373 39,0.932993,0.928506,0.923880,0.919114,0.914210,0.909168,0.903989,0.898674,0.893224,0.887640,0.881921,0.876070,0.8 70087,0.863973,0.857729,0.851355,0.844854,0.838225,0.831470,0.824589,0.817585,0.810457, 0.803208,0.795837,0.788346,0.780737,0.773010,0.765167,0.757209,0.749136,0.740951,0.732654,0.724247,0.715731,0.707107,0.698376,0.689541,0.680601,0.671559,0.662416,0.653173,0.643832,0.634393,0.624859,0. 615232,0.605511,0.595699,0.585798,0.575808,0.565732,0.555570,0.545325,0.534998,0.524590 ,0.514103,0.503538,0.492898,0.482184,0.471397,0.460539,0.449611,0.438616,0.427555,0.4164 30,0.405241,0.393992,0.382683,0.371317,0.359895,0.348419,0.336890,0.325310,0.313682,0.302006,0.290285,0.278520,0. 266713,0.254866,0.242980,0.231058,0.219101,0.207111,0.195090,0.183040,0.170962,0.158858 ,0.146730,0.134581,0.122411,0.110222,0.098017,0.085797,0.073565,0.061321,0.049068,0.0368 07,0.024541,0.012272,0.000000,-0.012272,-0.024541,-0.036807,-0.049068,-0.061321,-0.073565,-0.085797,-0.098017,-0.110 222,-0.122411,-0.134581,-0.146730,-0.158858,-0.170962,-0.183040,-0.195090,-0.207111,-0.219 101,-0.231058,-0.242980,-0.254866,-0.266713,-0.278520,-0.290285,-0.302006,-0.313682,-0.325 310,-0.336890,-0.348419,-0.359895,-0.371317,-0.382683,-0.393992,-0.405241,-0.416430,-0.427555,-0.438616,-0.449611,-0.460539,-0.471397,-0.482 184,-0.492898,-0.503538,-0.514103,-0.524590,-0.534998,-0.545325,-0.555570,-0.565732,-0.575 808,-0.585798,-0.595699,-0.605511,-0.615232,-0.624859,-0.634393,-0.643832,-0.653173,-0.662 416,-0.671559,-0.680601,-0.689541,-0.698376,-0.707107,-0.715731,-0.724247,-0.732654,-0.740951,-0.749136,-0.757209,-0.765167,-0.773010,-0.780 737,-0.788346,-0.795837,-0.803208,-0.810457,-0.817585,-0.824589,-0.831470,-0.838225,-0.844 854,-0.851355,-0.857729,-0.863973,-0.870087,-0.876070,-0.881921,-0.887640,-0.893224,-0.8986 74,-0.903989,-0.909168,-0.914210,-0.919114,-0.923880,-0.928506,-0.932993,-0.937339,-0.941544,-0.945607,-0.949528,-0.953306,-0.956940,-0.960 431,-0.963776,-0.966976,-0.970031,-0.972940,-0.975702,-0.978317,-0.980785,-0.983105,-0.9852 78,-0.987301,-0.989177,-0.990903,-0.992480,-0.993907,-0.995185,-0.996313,-0.997290,-0.9981 18,-0.998795,-0.999322,-0.999699,-0.999925,-1.000000,-0.999925,-0.999699,-0.999322,-0.998795,-0.998118,-0.997290,-0.996313,-0.995185,-0.993 907,-0.992480,-0.990903,-0.989177,-0.987301,-0.985278,-0.983105,-0.980785,-0.978317,-0.9757 02,-0.972940,-0.970031,-0.966976,-0.963776,-0.960431,-0.956940,-0.953306,-0.949528,-0.94560 7,-0.941544,-0.937339,-0.932993,-0.928506,-0.923880,-0.919114,-0.914210,-0.909168,-0.903989,-0.898674,-0.893224,-0.887640,-0.881921,-0.876 070,-0.870087,-0.863973,-0.857729,-0.851355,-0.844854,-0.838225,-0.831470,-0.824589,-0.8175 85,-0.810457,-0.803208,-0.795837,-0.788346,-0.780737,-0.773010,-0.765167,-0.757209,-0.74913 6,-0.740951,-0.732654,-0.724247,-0.715731,-0.707107,-0.698376,-0.689541,-0.680601,-0.671559,-0.662416,-0.653173,-0.643832,-0.634393,-0.624 859,-0.615232,-0.605511,-0.595699,-0.585798,-0.575808,-0.565732,-0.555570,-0.545325,-0.534998,-0.524590,-0.514103,-0.503538,-0.492898,-0.482184,-0.471397,-0.460539,-0.449611,-0.4386 16,-0.427555,-0.416430,-0.405241,-0.393992,-0.382683,-0.371317,-0.359895,-0.348419,-0.336890,-0.325310,-0.313682,-0.302006,-0.290285,-0.278 520,-0.266713,-0.254866,-0.242980,-0.231058,-0.219101,-0.207111,-0.195090,-0.183040,-0.170 962,-0.158858,-0.146730,-0.134581,-0.122411,-0.110222,-0.098017,-0.085797,-0.073565,-0.061 321,-0.049068,-0.036807,-0.024541,-0.012272};#endifvoid SetData(float data,unsigned int i){dataR[i]=data;}/* 采样来的数据放在dataR[ ]数组中,运算前dataI[ ]数组初始化为0 */void FFT(void){const int count[]={1,2,4,8,16,32,64,128,256,512,1024,2048};int i,xx,n;int L,j,k,b;float TR,TI,temp,Tsin,Tcos;//,p;long m;int x[11]={0};n=FFT_POINT;/********** following code invert sequence ************/for(i=0;i<count[n];i++){xx=0;for(j=0;j<n;j++) {x[j]=0;}for(j=0;j<n;j++) {x[j]=(i/count[j])&0x01;}for(j=0;j<n;j++) {xx=xx+x[j]*count[n-j-1];}dataI[xx]=dataR[i];}for(i=0;i<count[n];i++){dataR[i]=dataI[i];dataI[i]=0;}/************** following code FFT *******************/for(L=1;L<=n;L++) /* for(1) */{b=1; // i=L-1;b<<=(L-1); //整型2的n次方简化运算(加快计算速度)m=SAMPLE_NUM/count[L];for(j=0;j<=b-1;j++) /* for (2) */{Tsin=sin_tab[(m*j)%SAMPLE_NUM];Tcos=sin_tab[(m*j+SAMPLE_NUM/4)%SAMPLE_NUM];for(k=j;k<count[n];k=k+2*b) /* for (3) */{TR=dataR[k];TI=dataI[k];temp=dataR[k+b];dataR[k] = dataR[k]+dataR[k+b]*Tcos+dataI[k+b]*Tsin;dataI[k] = dataI[k]-dataR[k+b]*Tsin+dataI[k+b]*Tcos;dataR[k+b] = TR-dataR[k+b]*Tcos-dataI[k+b]*Tsin;dataI[k+b] = TI+temp*Tsin-dataI[k+b]*Tcos;} /* END for (3) */} /* END for (2) */} /* END for (1) */}/**********************FFT数值计算处理(可自行增删)**********************/float GetPeak(unsigned int k,unsigned int type) //计算峰(模,有效)值{float result;result=sqrt(dataR[k]*dataR[k]+dataI[k]*dataI[k]);switch(type){case 1:return result;case 0:case 2:if(k==0) result=result/SAMPLE_NUM;else result=result/(SAMPLE_NUM/2);if(type==2) result=result/1.41421356; //峰值除以根号2return result;default:return result;}}float GetPower1(unsigned int k) //返回功率谱的一点{float temp;temp=GetPeak(k,2);temp*=temp;return temp;}float GetPower2(unsigned int k,float total) //返回比例{float temp;temp=GetPeak(k,2);temp*=temp;return 100.0*temp/total;}float GetTotalPower(void){unsigned int i;float total=0;for(i=0;i<SAMPLE_NUM/2;i++){total+=GetPower1(i);}return total;}/*float GetPhase(unsigned int k,unsigned int type) //计算相位{if(type) return atan2(dataI[k],dataR[k]);else return(180.0*atan2(dataI[k],dataR[k])/PI);}*/float GetStepF(float speed,unsigned int k){return k*speed/(SAMPLE_NUM*1.0);}float GetTHD(void) //计算失真度{float total,temp1=0,temp2=0;unsigned int i,n=0;total=GetTotalPower();for(i=0;i<(SAMPLE_NUM/2);i++){temp2=GetPeak(i,2);if(temp2>temp1) {temp1=temp2;n=i;}}temp1=GetPower1(n);temp2=sqrt((total-temp1)/temp1);return temp2;}。