频谱与功率谱的概念-FFT与相关系数的C++代码
傅里叶变换与频谱分析

傅里叶变换与频谱分析傅里叶变换是一种将时域信号转换为频域信号的数学工具,它是基于法国数学家傅里叶的研究成果而得名的。
频谱分析是利用傅里叶变换将信号分解为不同频率成分的过程。
通过傅里叶变换和频谱分析,我们可以理解信号的频域特性,以及从频域的角度对信号进行处理和解释。
傅里叶变换的基本原理是将一个周期为T的连续函数f(t)分解为一组基函数的线性组合。
这组基函数是正弦和余弦函数,它们的频率是f(t)中的频率成分。
在数学表达上,傅里叶变换是通过将一个信号f(t)与一个复指数函数e^(jωt)相乘,再对整个信号进行积分来实现的。
傅里叶变换公式如下所示:F(ω) = ∫f(t)e^(-jωt)dt其中,F(ω)是信号f(t)在频率ω处的振幅和相位信息。
通过傅里叶变换,我们可以将一个时域信号从时间域转换到频率域。
在频率域中,我们可以分析信号的频率特性,包括信号的频率成分以及它们在整个信号中所占的比例。
这些信息对于了解信号的谐波分量、周期性、滤波等操作非常重要。
频谱分析是基于傅里叶变换得到的频域信息进行的。
它可以将一个信号在频谱上进行可视化,以便我们更好地理解信号的频域特性。
频谱分析通常呈现为频谱图,横轴表示频率,纵轴表示振幅或功率。
在频谱图中,我们可以观察到信号的频率成分,它们以峰值的形式显示在不同的频率点上。
峰值的强度代表了该频率在信号中的强度或重要性。
通过观察频谱图,我们可以推断信号的频率含量、周期性、峰值频率等信息。
除了用于频域分析的信号处理外,傅里叶变换还在其他领域有广泛应用,例如图像处理、通信等。
在图像处理中,我们可以将图像转换为频域,通过分析图像的频谱特性来实现图像增强、压缩等操作。
在通信领域,傅里叶变换在调制、解调、滤波等过程中被广泛使用。
在实际应用中,由于傅里叶变换涉及到复杂的数学操作和积分运算,计算复杂度较高。
因此,为了提高计算效率,人们发展出了快速傅里叶变换(FFT)算法。
FFT算法通过巧妙地利用信号的对称性质,将傅里叶变换的计算量从O(N^2)降低到O(NlogN),大大提高了计算速度。
fft计算频谱和相位 c语言

一、概述快速傅里叶变换(FFT)是一种常用的计算频谱和相位的方法,广泛应用于信号处理、图像处理、语音识别等领域。
C语言作为一种高效、灵活的编程语言,被广泛应用于嵌入式系统、操作系统、网络编程等方面。
本文将介绍如何使用C语言编写FFT算法,计算信号的频谱和相位。
二、FFT算法原理1. 傅里叶变换的基本概念傅里叶分析是一种数学工具,用来将一个信号分解成不同频率的正弦和余弦函数的叠加。
对于一个离散的信号序列,可以使用快速傅里叶变换来高效地计算其频谱和相位。
2. 快速傅里叶变换的原理FFT是一种将离散信号的傅里叶变换分解为若干子变换的算法,其时间复杂度为O(NlogN),远优于普通的傅里叶变换算法。
FFT算法基于蝶形运算和分治策略,通过递归地将N个信号点划分为两个子序列,然后分别计算它们的傅里叶变换,最后再将结果合并得到整体的傅里叶变换。
三、C语言实现FFT算法1. 数据结构定义在C语言中,可以使用数组来存储信号序列,并且定义结构体来表示复数及其运算。
例如:```ctypedef struct {double real; // 实部double imag; // 虚部} Complex;```2. FFT算法实现以递归方式实现FFT算法,需要先实现蝶形运算和分治策略。
以下是一个简化的FFT实现代码示例:```cvoid fft(Complex *input, Complex *output, int N) {if (N == 1) {output[0] = input[0];} else {Complex *even = (Complex*)malloc(N/2 * sizeof(Complex)); Complex *odd = (Complex*)malloc(N/2 * sizeof(Complex)); for (int i = 0; i < N/2; ++i) {even[i] = input[2*i];odd[i] = input[2*i + 1];}fft(even, even, N/2);fft(odd, odd, N/2);for (int k = 0; k < N/2; ++k) {Complex t = {cos(2*PI*k/N), -sin(2*PI*k/N)};output[k] = add(even[k], mul(t, odd[k]));output[k + N/2] = sub(even[k], mul(t, odd[k]));}free(even);free(odd);}}```4. 主函数调用在主函数中可以定义输入序列,调用fft函数计算其傅里叶变换,并进一步计算频谱和相位。
功率谱和频谱的区别

功率谱和频谱的区别功率谱和频谱是信号处理和频率分析中两个重要的概念。
尽管它们都与信号的频率特性有关,但功率谱和频谱之间存在一些区别。
本文将就功率谱和频谱的定义、计算方法以及其在实际应用中的区别进行详细介绍。
首先,我们来了解功率谱的概念。
功率谱是用来描述信号频率分布和能量分布的一种方法。
它可以通过将信号在频域上进行傅里叶变换来计算得到。
功率谱图能够展示出信号在不同频率上的功率或能量分布情况。
通常,功率谱表示信号的频率分量与其对应的功率之间的关系。
频谱则用来描述信号的频率构成。
它是信号在频域上的表示形式,能够展示出信号中不同频率分量的强度或幅度。
频谱的计算也使用了傅里叶变换,但它关注的是信号在不同频率上的幅度信息,而不是功率信息。
功率谱和频谱之间的区别在于它们关注的不同方面。
功率谱描述了信号在不同频率上的功率分布情况,即不同频率成分对信号的贡献程度。
而频谱则更加关注不同频率分量的幅度信息,即信号的频率构成。
在计算方法上,功率谱可以通过将信号进行傅里叶变换得到,然后将变换结果取模的平方。
这是因为功率谱表示的是信号在不同频率上的功率或能量分布。
而频谱的计算也可以通过傅里叶变换来实现,但一般只需要取变换结果的绝对值即可。
功率谱和频谱在实际应用中有着不同的用途。
功率谱主要用于分析信号的能量分布情况,从中可以得到信号的主要频率成分。
它在时序分析、振动分析、音频处理等领域有着广泛的应用。
而频谱则主要用于表示信号的频率构成,能够清晰展示信号中不同频率分量的强度信息。
频谱在调频广播、音频解码、通信工程等领域有着广泛的应用。
除了以上的区别,功率谱和频谱还有一个重要的概念是密度谱。
密度谱是对功率谱或频谱进行归一化处理得到的,用来表示单位频率或单位带宽上的功率或幅度信息。
密度谱能够更好地描述信号在不同频率或带宽上的分布情况,特别适用于宽带信号或窄带信号的频率分析。
综上所述,功率谱和频谱是描述信号频率特性的两个重要概念。
功率谱关注信号在不同频率上的功率分布,而频谱则关注信号的频率构成。
c实现快速傅里叶变换输出频谱

标题:C语言实现快速傅里叶变换输出频谱一、简介在信号处理和频域分析中,快速傅里叶变换(FFT)是一种常用的算法,用于将时域的信号转换为频域的频谱。
在C语言中实现快速傅里叶变换可以帮助我们对信号进行高效的频域分析。
本文将从基础开始,介绍C语言实现快速傅里叶变换并输出频谱的方法。
二、快速傅里叶变换概述快速傅里叶变换是一种将离散信号转换为频域表示的算法,它将N个离散时间域采样点转换成N个频域采样点。
快速傅里叶变换算法的核心是分治法,通过递归地将信号分解为奇偶部分,然后合并计算,从而实现高效的频谱分析。
三、C语言实现快速傅里叶变换1. 我们需要定义一个复数结构体,用于表示实部和虚部。
在C语言中,可以使用结构体来表示复数,例如:```ctypedef struct {double real; // 实部double imag; // 虚部} Complex;```2. 接下来,我们可以编写一个函数来实现快速傅里叶变换。
在函数中,我们可以按照快速傅里叶变换的递归算法,将信号分解为奇偶部分,并进行合并计算,最终得到频域表示的频谱。
```cvoid FFT(Complex* x, int N, int inv) {// 实现快速傅里叶变换的代码// ...}```3. 在实现快速傅里叶变换的过程中,我们还需要编写一些辅助函数,例如计算旋转因子和进行信号分解合并等操作。
四、输出频谱在C语言中实现快速傅里叶变换后,我们可以将得到的频域表示的频谱输出到文件或者直接在终端进行可视化。
通过频谱分析,我们可以了解信号的频域特性,包括频率成分、频谱密度等信息。
五、个人观点和理解C语言实现快速傅里叶变换需要深入理解算法的原理,同时对C语言的数据结构和递归算法有一定的掌握。
在实际应用中,我们可以将快速傅里叶变换应用于音频处理、图像处理、通信系统等领域,对信号的特性进行频域分析。
六、总结通过本文的介绍,我们了解了C语言实现快速傅里叶变换并输出频谱的方法。
傅里叶变换及C语言实现

傅里叶变换及C语言实现傅里叶变换(Fourier Transform)是一种将时域信号转换为频域信号的数学工具。
它是由法国数学家傅里叶(Joseph Fourier)在19世纪提出的,被广泛应用于信号处理、图像处理、通信等领域。
F(k)=∫[f(x)e^(-2πikx)]dx其中,F(k)是频域中的复数值表示,k表示频率,f(x)是时域信号。
在计算机中,我们通常使用离散傅里叶变换(Discrete Fourier Transform,简称DFT),用于处理离散的时域信号。
离散傅里叶变换可以表示为:X(k)=∑[x(n)e^(-2πikn/N)]其中,X(k)是频域中的复数值表示,k表示频率,x(n)是时域信号,N表示信号的长度。
C语言是一种广泛应用于嵌入式系统、操作系统、驱动程序等领域的编程语言。
在C语言中,我们可以通过编写代码来实现傅里叶变换。
以下是一个简单的C语言程序,用于实现离散傅里叶变换(DFT):```C#include <stdio.h>#include <math.h>#define N 8 // 信号长度typedef structdouble real;double imag;int k, n;double angle;for(k = 0; k < N; k++)output[k].real = 0;output[k].imag = 0;for(n = 0; n < N; n++)angle = 2 * M_PI * k * n / N;output[k].real += input[n].real * cos(angle) + input[n].imag * sin(angle);output[k].imag += input[n].imag * cos(angle) - input[n].real * sin(angle);}}int main(void)int k;dft(input, output);for(k = 0; k < N; k++)printf("X(%d) = %f + %fi\n", k, output[k].real,output[k].imag);}return 0;```该程序中的信号长度N为8,可以根据实际需求进行修改。
关于功率谱和频谱的区别

(1)信号通常分为两类:能量信号和功率信号;
(2)一般来讲,能量信号其傅氏变换收敛(即存在),而功率信号傅氏变换通常不收敛,当然,若信号存在周期性,可引入特殊数学函数(Delta)表征傅氏变换的这种非收敛性;(3)信号是信息的搭载工具,而信息与随机性紧密相关,所以实际信号多为随机信号,这类信号的特点是状态随机性随时间无限延伸,其样本能量无限。
换句话说,随机信号(样本)大多属于功率信号而非能量信号,它并不存在傅氏变换,亦即不存在频谱;
(4)若撇开搭载信息的有用与否,随机信号又称随机过程,很多噪声属于特殊的随机过程,它们的某些统计特性具有平稳性,其均值和自相关函数具有平稳性。
对于这样的随机过程,自相关函数蜕化为一维确定函数,前人证明该确定相关函数存在傅氏变换;
(5)能量信号频谱通常既含有幅度也含有相位信息;幅度谱的平方(二次量纲)又叫能量谱(密度),它描述了信号能量的频域分布;功率信号的功率谱(密度)描述了信号功率随频率的分布特点(密度:单位频率上的功率),业已证明,平稳信号功率谱密度恰好是其自相关函数的傅氏变换。
对于非平稳信号,其自相关函数的时间平均(对时间积分,随时变性消失而再次退变成一维函数)与功率谱密度仍是傅氏变换对;
(6)实际中我们获得的往往仅仅是信号的一段支撑,此时即使信号为功率信号,截断之后其傅氏变换收敛,但此变换结果严格来讲不属于任何“谱”(进一步分析可知它是样本真实频谱的平滑:卷积谱);
(7)对于(6)中所述变换若取其幅度平方,可作为平稳信号功率谱(密度)的近似,是为经典的“周期图法”;
(8)FFT是DFT的快速实现,DFT是DTFT的频域采样,DTFT是FT的频域延拓。
人们不得已才利用DFT近似完成本属于FT的任务。
若仅提FFT,是非常不专业的。
功率谱和频率谱

功率谱和频率谱
功率谱和频率谱都是信号分析中常用的工具,用于研究信号的频域特性。
它们在不同的上下文中有不同的定义和用途:
功率谱:
1.定义:功率谱是一个信号在频域上的能量分布,表示信号在各个频率上的功率强度。
2.表示:通常用单位频率的功率密度函数来表示,即信号在单位频率范围内的功率。
3.应用:功率谱广泛应用于通信、信号处理、无线通信等领域,用于分析信号的频谱特性,识别信号中的频率成分。
频率谱:
1.定义:频率谱描述了信号在频域上的频率分布情况,表示信号中各个频率成分的相对强度。
2.表示:通常以振幅-频率图或相位-频率图的形式呈现,显示信号在不同频率上的振幅或相位信息。
3.应用:频率谱常用于音频处理、音乐分析、振动分析等领域,帮助了解信号的频率特性。
在某些情况下,功率谱和频率谱可以通过傅立叶变换来相互转换。
傅立叶变换可以将一个信号从时域(时间域)转换到频域(频率域),提供了信号在频域上的全面信息。
总的来说,功率谱和频率谱是频域分析的两个重要工具,用于深入了解信号的频率特性,从而在不同应用领域中发挥作用。
功率谱和频谱

频谱分析(也称频率分析),是对动态信号在频率域内进行分析,分析的结果是以频率为横坐标的各种物理量的谱线和曲线,即各种幅值以频率为变量的频谱函数F(ω)。
频谱分析中可求得幅值谱、相位谱、功率谱和各种谱密度等等。
频谱分析过程较为复杂,它是以傅里叶级数和傅里叶积分为基础的。
一般我们讲的功率谱密度都是针对平稳随机过程的,由于平稳随机过程的样本函数一般不是绝对可积的,因此不能直接对它进行傅立叶分析。
功率谱是一个时间平均(time average)概念;功率谱的概念是针对功率有限信号的(能量有限信号可用能量谱分析),所表现的是单位频带内信号功率随频率的变换情况。
保留频谱的幅度信息,但是丢掉了相位信息,所以频谱不同的信号其功率谱是可能相同的。
有两个重要区别:1. 功率谱是随机过程的统计平均概念,平稳随机过程的功率谱是一个确定函数;而频谱是随机过程样本的Fourier变换,对于一个随机过程而言,频谱也是一个“随机过程”。
(随机的频域序列)2. 功率概念和幅度概念的差别。
此外,只能对宽平稳的各态历经的二阶矩过程谈功率谱,其存在性取决于二阶矩是否存在,并且二阶矩的Fourier变换收敛;而频谱的存在性仅仅取决于该随机过程的该样本的Fourier变换是否收敛。
功率谱密度是信号功率在信号持续频谱带宽上的密度,也就是说功率谱密度对频谱的积分就是功率,也就是相关函数在零点的取值。
随机信号是时域无限信号且不收敛,不具备可积分条件,因此不能直接进行傅氏变换,因此一般采用具有统计特性的功率谱来作为谱分析的依据。
●功率谱与自相关函数是一个傅氏变换对。
●功率谱具有单位频率的平均功率量纲,所以标准叫法是功率谱密度。
●通过功率谱密度函数,可以看出随机信号的能量随着频率的分布情况。
像白噪声就是平一般我们讲的功率谱密度都是针对平稳随机过程的,由于平稳随机过程的样本函数一般不是绝对可积的,因此不能直接对它进行傅立叶分析。
可以有三种办法来重新定义谱密度,来克服上述困难:一是用相关函数的傅立叶变换来定义谱密度;二是用随机过程的有限时间傅立叶变换来定义谱密度;三是用平稳随机过程的谱分解来定义谱密度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
频谱和功率谱有什么区别与联系谱是个很不严格的东西,常常指信号的Fourier变换,是一个时间平均(time average)概念功率谱的概念是针对功率有限信号的(能量有限信号可用能量谱分析),所表现的是单位频带内信号功率随频率的变换情况。
保留频谱的幅度信息,但是丢掉了相位信息,所以频谱不同的信号其功率谱是可能相同的。
有两个重要区别:1.功率谱是随机过程的统计平均概念,平稳随机过程的功率谱是一个确定函数;而频谱是随机过程样本的Fourier 变换,对于一个随机过程而言,频谱也是一个“随机过程”。
(随机的频域序列)2.功率概念和幅度概念的差别。
此外,只能对宽平稳的各态历经的二阶矩过程谈功率谱,其存在性取决于二阶局是否存在并且二阶矩的Fourier变换收敛;而频谱的存在性仅仅取决于该随机过程的该样本的Fourier变换是否收敛。
频谱分析(也称频率分析),是对动态信号在频率域内进行分析,分析的结果是以频率为坐标的各种物理量的谱线和曲线,可得到各种幅值以频率为变量的频谱函数F(ω)。
频谱分析中可求得幅值谱、相位谱、功率谱和各种谱密度等等。
频谱分析过程较为复杂,它是以傅里叶级数和傅里叶积分为基础的。
功率谱功率谱是个什么概念?它有单位吗?随机信号是时域无限信号,不具备可积分条件,因此不能直接进行傅氏变换。
一般用具有统计特性的功率谱来作为谱分析的依据。
功率谱与自相关函数是一个傅氏变换对。
功率谱具有单位频率的平均功率量纲。
所以标准叫法是功率谱密度。
通过功率谱密度函数,可以看出随机信号的能量随着频率的分布情况。
像白噪声就是平行于w轴,在w 轴上方的一条直线。
功率谱密度,从名字分解来看就是说,观察对象是功率,观察域是谱域,通常指频域,密度,就是指观察对象在观察域上的分布情况。
一般我们讲的功率谱密度都是针对平稳随机过程的,由于平稳随机过程的样本函数一般不是绝对可积的,因此不能直接对它进行傅立叶分析。
可以有三种办法来重新定义谱密度,来克服上述困难。
一是用相关函数的傅立叶变换来定义谱密度;二是用随机过程的有限时间傅立叶变换来定义谱密度;三是用平稳随机过程的谱分解来定义谱密度。
三种定义方式对应于不同的用处,首先第一种方式前提是平稳随机过程不包含周期分量并且均值为零,这样才能保证相关函数在时差趋向于无穷时衰减,所以lonelystar说的不全对,光靠相关函数解决不了许多问题,要求太严格了;对于第二种方式,虽然一个平稳随机过程在无限时间上不能进行傅立叶变换,但是对于有限区间,傅立叶变换总是存在的,可以先架构有限时间区间上的变换,在对时间区间取极限,这个定义方式就是当前快速傅立叶变换(FFT)估计谱密度的依据;第三种方式是根据维纳的广义谐和分析理论:Generalized harmonic analysis, Acta Math, 55(1930), 117-258,利用傅立叶-斯蒂吉斯积分,对均方连续的零均值平稳随机过程进行重构,在依靠正交性来建立的。
另外,对于非平稳随机过程,也有三种谱密度建立方法,由于字数限制,功率谱密度的单位是G的平方/频率。
就是就是函数幅值的均方根值与频率之比。
是对随机振动进行分析的重要参数。
功率谱密度的国际单位是什么?如果是加速度功率谱密度,加速度的单位是m/s^2,那么,加速度功率谱密度的单位就是(m/s^2)^2/Hz,而Hz的单位是1/s,经过换算得到加速度功率谱密度的单位是m^2/s^3.同理,如果是位移功率谱密度,它的单位就是m^2*s,如果是弯矩功率谱密度,单位就是(N*m)^2*s位移功率谱——m^2*s速度功率谱——m^2/s加速度功率谱——m^2/s^3求FFT实现的C++算法#include<iostream.h>#include "math.h"class complex//复数类声明{private:double real;double image;public:complex(double r=0.0,double i=0.0)//构造函数{real=r;image=i;}complex operator+(complex c2);//+重载为成员函数complex operator-(complex c2);//-重载为成员函数complex operator*(const complex& other);//重载乘法//complex operator/(const complex& other);//重载除法void display();};complex complex::operator +(complex c2)//重载的实现{complex c;c.real=c2.real+real;c.image=c2.image+image;return complex(c.real,c.image);}complex complex::operator -(complex c2)//重载的实现{complex c;c.real=real-c2.real;c.image=image-c2.image;return complex(c.real,c.image);}complex complex::operator*(const complex& other){complex temp;temp.real=real*other.real-image*other.image;temp.image=image*other.real+real*other.image;return temp;}void complex::display(){cout<<"("<<real<<","<<image<<")"<<endl;}int fft(complex *a,int l)//此处的l是级数数{const double pai=3.141592653589793;complex u,w,t;int n=1,nv2,nm1,k,le,lei,ip;int i,j,m;double tmp;//n<<l表示n左移l位即系列的长度n<<=l;nv2=n>>1;nm1=n-1;i=0;j=0;for(i=0;i<nm1;i++) //.....{if(i<j) //'''变址运算{t=a[j];a[j]=a[i];a[i]=t;}k=nv2; //求下一个倒位序数while(k<=j){ //原理是从高位加1,向低位进位j-=k;k>>=1;}j+=k;}//基2的输入倒位序,输出自然顺序的时间抽取FFT运算le=1;for(m=1;m<=l;m++) //当前运算的是第m级{lei=le;le<<=1;u=complex (1,0);tmp=pai/lei;w=complex (cos(tmp),-sin(tmp));//第m级中的不同系数的蝶形运算for(j=0;j<lei;j++){//第m级中的相同系数的蝶形int aa=1;for(i=j;i<n;i+=le){ip=i+lei;t=a[ip]*u;a[ip]=a[i]-t;a[i]=a[i]+t;}//每级的旋转因子,由j和w来控制u=u*w;}}for(i=0;i<nm1+1;i++){cout<<i<<endl;a[i].display();}return 0;}实例:void main(){complex A[64];for (int i=1;i<=64;i++){A[i-1]=complex(cos(i*0.1),cos(i*0.1+1));}fft(A,6);for(int ii=0;ii<64;ii++){cout<<ii<<endl;A[ii].display();}}本例与matlab中的FFT对比过,运算结果无误。
=======================================================================1.#include <math.h>2.#define DOUBLE_PI 6.2831853071795864769252867665593.4.// 快速傅里叶变换5.// data 长度为 (2 * 2^n), data 的偶位为实数部分, data 的奇位为虚数部分6.// isInverse表示是否为逆变换7.void FFT(double * data, int n, bool isInverse = false)8.{9.int mmax, m, j, step, i;10.double temp;11.double theta, sin_htheta, sin_theta, pwr, wr, wi, tempr, tempi;12. n = 2 * (1 < n);13.int nn = n >> 1;14.// 长度为1的傅里叶变换, 位置交换过程15. j = 1;16.for(i = 1; i n; i += 2)17. {18.if(j > i)19. {20. temp = data[j - 1];21. data[j - 1] = data[i - 1];22. data[i - 1] = temp;23. data[j] = temp;24. data[j] = data[i];25. data[i] = temp;26. }27.// 相反的二进制加法28. m = nn;29.while(m >= 2 && j > m)30. {31. j -= m;32. m >>= 1;33. }34. j += m;35. }36.// Danielson - Lanczos 引理应用37. mmax = 2;38.while(n > mmax)39. {40. step = mmax < 1;41. theta = DOUBLE_PI / mmax;42.if(isInverse)43. {44. theta = -theta;45. }46. sin_htheta = sin(0.5 * theta);47. sin_theta = sin(theta);48. pwr = -2.0 * sin_htheta * sin_htheta;49. wr = 1.0;50. wi = 0.0;51.for(m = 1; m mmax; m += 2)52. {53.for(i = m; i = n; i += step)54. {55. j = i + mmax;56. tempr = wr * data[j - 1] - wi * data[j];57. tempi = wr * data[j] + wi * data[j - 1];58. data[j - 1] = data[i - 1] - tempr;59. data[j] = data[i] - tempi;60. data[i - 1] += tempr;61. data[i] += tempi;62. }63. sin_htheta = wr;64. wr = sin_htheta * pwr - wi * sin_theta + wr;65. wi = wi * pwr + sin_htheta * sin_theta + wi;66. }67. mmax = step;68. }69.}70.71./* 输入数据为data,data是一组复数,偶数位存储的是复数的实数部分,奇数位存储的是复数的虚数部分。