基于DSP的快速傅里叶(FFT)算法

合集下载

基于DSP的快速傅里叶变换算法

基于DSP的快速傅里叶变换算法

摘要采用高级C语言实现FFT算法。

利用DSP芯片特有的哈佛结构和专门的FFT指令。

在DSP上能够更快速的实现FFT。

从而促进DSP芯片的发展,同时加快基于DSP数字信号处理的速度。

通过对FFT的算法进行研究,从基础深入研究和学习,掌握FFT算法的关键。

研究DSP芯片如何加快蝶形计算以及如何有效地码位倒置的输出颠倒过来。

熟悉旋转因子的生成。

通过学习DSP芯片的工作原理,分析DSP控制的算法,在DSP芯片上实现快速傅里叶变换算法的设计。

通过对DSP开发环境的学习,掌握CCS的简单调试和软件仿真。

在CCS开发环境中观察正弦波输入波形、输出波形、PC机FFT 计算处理后的仿真波形图。

比较仿真图,验证设计和程序的正确性。

表明利用DSP 控制器特有的反序间接寻址使FFT的实现更加方便。

关键词:DSP;FFT;旋转因子AbstractUsing advanced C language to realize FFT algorithm. Using digital signal processor (DSP) endemic harvard structure and special FFT instructions. In more quickly on DSP can realize FFT. In order to promote the development of digital signal processor (DSP) based on DSP, accelerate the speed of digital signal processing.Base on the study of FFT, from basic research and study, the key to mastering FFT algorithm. Research on how to accelerate DSP and wing how effectively yards of a output upside down. Familiar with the rotation factor production. Through studying the working principle of DSP, analyzes the algorithm, realized the design of FFT algorithm in DSP. Based on studying DSP development environment, CCS simple commissioning and software simulation. CCS development environment in observing sine wave, the output waveform input, PC FFT calculation of wave graph with simulation. Comparative simulation diagram, verify the correctness of design and program. Use DSP controller that peculiar sequence indirect addressing the realization of FFT make more convenient.Key words:DSP; FFT; Rotation目录第1章概述 0课题研究的背景及意义 0本文主要研究内容 (1)第2章快速傅里叶变换及其算法 (3)快速傅里叶变换的原理 (3)快速傅里叶变换算法 (6)本章小结 (13)第3章软件设计 (14)算法设计和程序编写 (14)算法设计流程 (14)CCS开发环境的使用及软件仿真 (18)本章小结 (23)第4章DSP芯片的原理和FFT在DSP上的实现 (25)DSP芯片的原理、特点和结构 (25)FFT算法在DSP上的实现 (30)本章小结 (31)结论 (32)参考文献 (33)致谢 (34)附录 (35)第1章概述课题研究的背景及意义课题背景近十多年来数字信号处理技术同数字计算机、大规模集成电路等,有了突飞猛进的发展,日新月异,已经成为一门具有强大生命力的技术科学。

(完整word版)基于DSP的快速傅立叶变换(FFT)的实现(汇编语言)

(完整word版)基于DSP的快速傅立叶变换(FFT)的实现(汇编语言)

快速傅立叶变换(FFT )的实现一、实验目的1.了解FFT 的原理及算法;2.了解DSP 中FFT 的设计及编程方法;3.熟悉FFT 的调试方法;二、实验原理FFT 是一种高效实现离散付立叶变换的算法,把信号从时域变换到频域,在频域分析处理信息。

对于长度为N 的有限长序列x (n ),它的离散傅里叶变换为:(2/)j N nk N W e π-=,称为旋转因子,或蝶形因子。

在x (n )为复数序列的情况下,计算X (k ):对某个k 值,需要N 次复数乘法、(N -1)次复数加法;对所有N 个k 值,需要2N 次复数乘法和N (N -1)次复数加法。

对于N 相当大时(如1024)来说,直接计算它的DFT 所作的计算量是很大的,FFT 的基本思想在于: 利用2()j nk N N W e π-=的周期性即:k N k N N W W +=对称性:/2k k N N N W W +=-将原有的N 点序列分成两个较短的序列,这些序列的DFT 可以很简单的组合起来得到原序列的DFT 。

按时间抽取的FFT ——DIT FFT 信号流图如图5.1所示:图5.1 时间抽取的FFT —DIT FFT 信号流图FFT 算法主要分为以下四步。

第一步 输入数据的组合和位倒序∑=-=10)()(N n nk N W n x k X把输入序列作位倒序是为了在整个运算最后的输出中得到的序列是自然顺序。

第二步 实现N 点复数FFT第一级蝶形运算;第二级蝶形运算;第三级至log2N 级蝶形运算;FFT 运算中的旋转因子N W 是一个复数,可表示:为了实现旋转因子N W 的运算,在存储空间分别建立正弦表和余弦表,每个表对应从0度到180度,采用循环寻址来对正弦表和余弦表进行寻址。

第三步 功率谱的计算X (k )是由实部()R X k 和虚部()I X k 组成的复数:()()()R I X k X k jX k =+;计算功率谱时只需将FFT 变换好的数据,按照实部()R X k 和虚部()I X k 求它们的平方和,然后对平方和进行开平方运算。

快速傅立叶变换_FFT_在数字信号处理器_DSP_上的实现

快速傅立叶变换_FFT_在数字信号处理器_DSP_上的实现

器(DSP)TMS320C5402上实现中出现的计算溢出等问题进行了分析并提出了解决方法,同时对快速
傅立叶变换(FFT)的特点进行了研究和总结,据此在DSPC5402上实现了快速傅立叶变换(FFT)。
关键词:数字信号处理;快速傅立叶变换;反序
中图分类号:TN911.72
文献标识码:A
The Implementation of Fast Fourier Transform (FFT) in DSP
(1)
式中: X1(k) 和 X 2 (k ) 分别为 x1 (r) 和 x2 (r) 的 N / 2 点DFT,即:
X1 (k) = DFT[x1 (r)]
(2)
X 2 (k) = DFT[x2 (r)]
(3)
因此对于一个 N 点的DIT-FFT运算来说,可以表
示成如下的流程图(图1): 写成向量形式即为:
· 36 ·
舰船防化
2007 年第 1 期
图 1 N 点 DIT-FFT 运算流程图(N=8)
入序列进行适当的组合以形成N点复数序列;复数序 列的FFT;将FFT的N点复数输出序列进行适当的运算 组合,获得原实数输入的2N点FFT复数输出序列。通 过这种变换处理,FFT的运算量减少了一半,效率可 比一般的FFT提高一倍。
RM[0]=IM[0]=RM[N/2] =IM[N/2 ]=0
RP[N/2]=R[N/2];IP[N/2]=I[N/2 ]
对应于 2N 点实输入序列的 2N 点 FFT 复输出序列
的形成:
利用序列 RP[k],RM[k],IP[k]和 IM[k],按下
面等式计算实输入序列 a(n)FFT 的输出:
AR[k]:AR[2N-k]=RP[k]+cos(kπ/N)*IP[k]-sin(k

基于DSP用FFT变换进行频谱分析

基于DSP用FFT变换进行频谱分析

基于DSP用FFT变换进行频谱分析FFT(快速傅里叶变换)是数字信号处理(DSP)的一种重要技术,它可以将信号从时域转换到频域进行频谱分析。

在频谱分析中,FFT可以帮助我们了解信号的频率成分、频率强度和相位信息等,从而帮助我们更深入地了解信号的特性和行为。

FFT的基本原理是将一个连续时间域信号分解成一系列离散频率的正弦和余弦函数,其频率范围从0到信号采样率的一半。

为了进行FFT变换,需要先对信号进行采样,并将采样数据以时间序列的形式传入FFT算法中。

在实现上,FFT算法通常使用高效的快速傅里叶变换算法(Cooley-Tukey算法)来加速计算过程。

使用FFT进行频谱分析可以从以下几个方面获得有用信息:1.频率成分:FFT可以将信号分解为一系列频率成分,从低频到高频,每个频率成分都对应一个幅度和相位信息。

通过对FFT输出结果的解析,我们可以确定信号中主要的频率成分。

2.频率强度:FFT可以测量信号在不同频率上的强度,通过幅度谱可以获得每个频率成分的强度信息。

这对于分析信号的频率分布和特征很有帮助,比如确定信号中的谐波或噪声成分。

3.频率相位:通过FFT,我们还可以获取信号在不同频率点上的相位信息。

相位信息对于一些应用来说非常重要,比如音频合成和时频分析等。

在实际应用中,FFT可以用于各种领域,如音频处理、图像处理、通信系统等。

下面以音频处理为例,介绍如何使用FFT进行频谱分析。

以音频信号为例,首先需要从麦克风或音频文件中获取原始的音频信号。

接下来,对音频信号进行采样,在常见音频应用中通常以44.1kHz的采样率进行采样。

得到采样数据后,可以将其传入FFT算法中进行频谱分析。

在音频应用中,通常选择512或1024点的FFT长度以平衡频率分辨率和计算效率。

通过FFT计算,可以得到频率响应的幅度谱及相位谱。

通过分析幅度谱,可以了解音频信号的频率成分,找到主要频率成分和谐波。

通过观察频率成分的强度和分布,我们可以得到音频信号的音色特征,并对信号进行后续处理和调整。

基于DSP的FFT实现

基于DSP的FFT实现

基于DSP的FFT实现傅里叶变换(Fourier Transform)是一种将信号在时间和频率域之间进行转换的数学工具。

它可以将信号从时域转换为频域,使我们能够分析信号的频率成分。

离散傅里叶变换(Discrete Fourier Transform,DFT)是一种计算机算法,用于对离散信号进行傅里叶变换。

离散信号是由一系列采样点组成的,并且在实际应用中,离散信号更常见于数字信号处理(Digital Signal Processing,DSP)系统。

FFT(Fast Fourier Transform)是一种高效的算法,用于计算DFT。

它通过利用信号的对称性和周期性,以O(nlogn)的时间复杂度计算DFT,相比于直接计算的O(n^2)时间复杂度更为高效。

因此,FFT在数字信号处理中被广泛使用,并且是很多DSP系统中实现频谱分析的核心算法。

基于DSP的FFT实现通常采用固定点数格式进行计算,以适应数字信号的要求。

固定点数格式将浮点数表示为带有整数和小数部分的定点数,其中小数部分的位数是固定的。

这允许在硬件实现中使用更简单和更高效的运算器,并且减少了计算过程中的存储需求。

在前向变换中,基于DSP的FFT实现通常采用蝶形运算器结构,该结构通过并行计算减少了计算量。

蝶形运算器将复数乘法和加法运算相结合,以高效地计算傅里叶变换的结果。

在反向变换中,基于DSP的FFT实现使用相同的蝶形运算器结构,但需要调整一些参数来恢复时域信号。

这些参数通常是指数项,用于将频域信号的幅度和相位信息与原始时域信号进行组合。

由于DSP系统通常具有固定的计算能力和存储容量,基于DSP的FFT 实现需要考虑对资源的高效利用。

这可能包括通过流水线技术实现并行计算,使用分块技术减少存储需求,并使用低功耗算法来减少计算负载。

总结起来,基于DSP的FFT实现是一种高效的数字信号处理技术,用于将时域信号转换为频域信号。

它通过利用固定点数格式和蝶形运算器结构,以高效和准确的方式计算傅里叶变换。

基于DSP的快速傅里叶变换

基于DSP的快速傅里叶变换

基于DSP的快速傅里叶变换1.简介快速傅氏变换(FFT),是离散傅氏变换的快速算法,是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。

FFT是一种高效实现离散傅里叶变换(DFT)的快速算法,是数字信号处理中最为重要的工具之一,它在声学,语音,电信和信号处理等领域有着广泛的应用。

DSP是专门用来处理数字信号的处理器,用它来进行FFT信号处理可以大大缩短运算时间,从而保证系统有较好的实时性。

2.系统设计2.1 DSP采用TMS320F28335为核心的DSP开发板。

TMS320F28335可以用来做数字信号处理和一些简单的控制应用,其核心具有如下几个特点:(1)32位浮点处理器,高性能,高速度;(2)最高时钟频率150MHz,时钟周期6.67ns;(3)低功耗设计,核心电压1.9V,I/O电压3.3V;(4)哈佛总线架构;(5)快速中断响应和处理;(6)高效代码;(7)片内:RAM 34K FLASH 256K;(8)3个32为CPU定时器;(9)16通道12位AD转换:80ns快速转换时间,0~3V输入范围;(10)提供1路2.048V外部精准参考电压,ADCINA1~ADCINA8设计有信号预处理电路;(11)12路PWM输出信号;(12)4路CAP捕获信号;(13)2个QEP正交编码器输入通道;(14)1个SPI同步串口,2个SCI异步串口,1个CAN口,1个2I C口,1个McBSP同步串口,6通道DMA。

2.2 集成开发环境CCS3.3CCS(Code Composer Studio)是美国德州仪器公司(Texas Instrument,TI)出品的代码开发和调试套件,可用于DSP(数字信号处理器)和MCU(微处理器)的开发和调试。

CCS提供环境配置、源程序编辑、编译连接、跟踪分析等各个环节,以加速软件开发进程,提高工作效率。

它把软、硬件开发工具集成在其中,使程序的编写、汇编、软硬件仿真和调试等开发工作在同一的环境中进行,给DSP开发工作带来极大的方便。

dsp基于matlab的fft算法实现

dsp基于matlab的fft算法实现

dsp基于matlab的fft算法实现————————————————————————————————作者:————————————————————————————————日期:目录1 摘要 (1)2 设计目的和内容 (2)3 基2 DIT—FFT算法 (3)3.1 DIT—FFT算法的基本原理....................................错误!未定义书签。

3。

2 DIT—FFT算法的运算规律及编程思想.............错误!未定义书签。

3.3 原位计算 ..................................................................错误!未定义书签。

3.4 倒序计算 ..................................................................错误!未定义书签。

3.5 蝶形运算 (9)4 MATLAB运行界面图 (12)4。

1 fs=1000;n=2000时的原始的语音信号时域图 (12)4。

1 fs=1000;n=2000时的原始的语音信号频域图 (12)4。

3 原始语音信号FFT频谱图与原始语音信号自编FFT频谱图比较错误!未定义书签。

4。

4 原始语音信号FFT频谱图与原始语音信号自编FFT频谱图比较155 设计总结 (16)参考文献 (19)附录 (20)1 引言傅里叶变换在信号处理中具有十分重要的作用,但是基于离散时间的傅里叶变换具有很大的时间复杂度,根据傅里叶变换理论,对一个有限长度且长度为的离散信号,做傅里叶变换的时间复杂度为,当很大时,其实现的时间是相当惊人的(比如当为时,其完成时间为(为计算机的时钟周期)),故其实现难度是相当大的,同时也严重制约了DFT 在信号分析中的应用,故需要提出一种快速的且有效的算法来实现。

正是鉴于DFT 极其复杂的时间复杂度,1965 年和巧妙地利用因子的周期性和对称性,提出了一个DFT 的快速算法,即快速傅里叶变换(FFT),从而使得DFT 在信号处理中才得到真正的广泛应用。

快速傅立叶变换(FFT)的实现(DSP实验报告)

快速傅立叶变换(FFT)的实现(DSP实验报告)

快速傅立叶变换(FFT )的实现一、实验目的在数字信号处理系统中,FFT 作为一个非常重要的工具经常使用,甚至成为DSP 运算能力的一个考核因素。

FFT 是一种高效实现离散付氏变换的算法。

离散付氏变换的目的是把信号由时域变换到频域,从而可以在频域分析处理信息,得到的结果再由付氏逆变换到时域。

本实验的目的在于学习FFT 算法,及其在TMS320C54X 上的实现,并通过编程掌握C54X 的存储器管理、辅助寄存器的使用、位倒序寻址方式等技巧,同时练习使用CCS 的探针和图形工具。

另外在BIOS 子目录下是一个使用DSP/BIOS 工具实现FFT 的程序。

通过该程序,你可以使用DSP/BIOS 提供的分析工具评估FFT 代码执行情况。

二、实验原理1)基 2 按时间抽取FFT 算法对于有限长离散数字信号{x[n]} ,0 ≤n ≤-1 N,其离散谱{x[k]} 可以由离散付氏变换(DFT)求得。

DFT 的定义为:X(k) x[n]e N k 0,1,...,N 1 n0可以方便的把它改写为如下形式:N1nkX(k) x[n]W n N k k 0,1,..., N 1n0不难看出,WN 是周期性的,且周期为N,即( n mN )(k lN ) nkm,l 0, 1, 2...W N W NWN 的周期性是DFT 的关键性质之一。

为了强调起见,常用表达式WN 取代W 以便明确其周期是N。

2) 实数FFT 运算对于离散傅立叶变换( DFT)的数字计算,FFT 是一种有效的方法。

一般假定输入序列是复数。

当实际输入是实数时,利用对称性质可以使计算DFT 非常有效。

一个优化的实数FFT 算法是一个组合以后的算法。

原始的2N 个点的实输入序列组合成一个N 点的复序列,之后对复序列进行N 点的FFT 运算,最后再由N 点的复数输出拆散成2N 点的复数序列,这2N点的复数序列与原始的2N点的实数输入序列的DFT 输出一致。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

哈尔滨商业大学DSP课程设计报告题目快速傅立叶变换(FFT)算法专业电子信息工程班级 08级02班姓名学号王玉辉200810930172李砚秋200810930062杨兴臻200810930292尤琳200810930052指导教师姜海涛日期2011年12月12日目录1.设计目的 .... 错误!未定义书签。

1.1. 设计目的..................................................................... 错误!未定义书签。

1.2. 使用设备..................................................................... 错误!未定义书签。

2.设计任务与要求错误!未定义书签。

3.原理与分析 .. 错误!未定义书签。

4.实验步骤 .... 错误!未定义书签。

5.软件设计 .... 错误!未定义书签。

6.系统仿真及调试错误!未定义书签。

7.完成结果或效果错误!未定义书签。

8.心得体会 .... 错误!未定义书签。

9.参考文献 .... 错误!未定义书签。

1. 设计目的1.1. 设计目的1.掌握用窗函数法设计FFT 快速傅里叶的原理和方法; 2.熟悉FFT 快速傅里叶特性;3.了解各种窗函数对快速傅里叶特性的影响。

1.2. 使用设备PC 兼容机一台,操作系统为Windows2000(或Windows98,WindowsXP ,以下默认为Windows2000),安装Code Composer Studio 2.0 软件。

2. 设计任务与要求按原程序仿真完成后,修改参数,观察波形变化。

3. 原理与分析1. FFT 的原理和参数生成公式)()()()()(2121222121k X W k X W r x W W r x k x k N rk N N r kN rk N Nr +=+=∑∑-=-=公式(1)FFT 运算公式FFT 并不是一种新的变换,它是离散傅立叶变换(DFT )的一种快速算法。

由于我们在计算DFT 时一次复数乘法需用四次实数乘法和二次实数加法;一次复数加法则需二次实数加法。

每运算一个X (k )需要4N 次复数乘法及2N+2(N-1)=2(2N-1)次实数加法。

所以整个DFT 运算总共需要4N^2 次实数乘法和N*2(2N-1)=2N(2N-1)次实数加法。

如此一来,计算时乘法次数和加法次数都是和N^2 成正比的,当N 很大时,运算量是可观的,因而需要改进对DFT 的算法减少运算速度。

根据傅立叶变换的对称性和周期性,我们可以将DFT 运算中有些项合并。

我们先设序列长度为N=2^L ,L 为整数。

将N=2^L 的序列x(n)(n=0,1,……,N-1),按N 的奇偶分成两组,也就是说我们将一个N 点的DFT 分解成两个N/2 点的DFT ,他们又重新组合成一个如下式所表达的N 点DFT :一般来说,输入被假定为连续的。

当输入为纯粹的实数的时候,我们就可以利用左右对称的特性更好的计算DFT 。

我们称这样的RFFT 优化算法是包装算法:首先2N 点实数的连续输入称为“进包”。

其次N 点的FFT 被连续被运行。

最后作为结果产生的N 点的合成输出是“打开”成为最初的与DFT 相符合的2N 点输入。

使用这战略,我们可以划分FFT 的大小,它有一半花费在包装输入O (N )的操作和打开输出上。

这样的RFFT 算法和一般的FFT 算法同样迅速,计算速度几乎都达到了两次DFT 的连续输入。

下列一部分将描述更多的在TMS320C54x 上算法和运行的细节。

2. 程序流程图4. 实验步骤1.实验准备-设置软件仿真模式。

-启动CCS 。

2.打开工程,浏览程序,工程目录为C:\ICETEK-F2812-AG-EDUlab\DSP281x_examples\lab0503-FFT 3.编译并下载程序 Project->Rebuilt allFile->Load Program->fft.out 4.打开观察窗口:选择菜单View->Graph->Time/Frequency …进行如下图所示设置。

图2-25-1 观察窗口设置1图2-25-2 观察窗口设置2图2-25-3 观察窗口设置35.清除显示:在以上打开的窗口中单击鼠标右键,选择弹出式菜单中“Clear Display”功能。

6.设置断点:在程序FFT.c 中有注释“break point ”的语句上设置软件断点。

7.运行并观察结果⑴选择“Debug”菜单的“Animate ”项,或按F12 键运行程序。

⑵观察“FFT”窗口中时域和频域图形。

8.退出CCS5.软件设计#include "DSP281x_Device.h" // DSP281x Headerfile Include File#include "DSP281x_Examples.h" // DSP281x Examples Include File#include "f2812a.h"#include"math.h"#define PI 3.1415926#define SAMPLENUMBER 128void InitForFFT();void MakeWave();//void FFT(float dataR[SAMPLENUMBER],float dataI[SAMPLENUMBER]);int INPUT[SAMPLENUMBER],DATA[SAMPLENUMBER];float fWaveR[SAMPLENUMBER],fWaveI[SAMPLENUMBER],w[SAMPLENUMBER];float sin_tab[SAMPLENUMBER],cos_tab[SAMPLENUMBER];void FFT(float dataR[SAMPLENUMBER],float dataI[SAMPLENUMBER]){int x0,x1,x2,x3,x4,x5,x6,xx;int i,j,k,b,p,L;float TR,TI,temp;/********** following code invert sequence ************/for ( i=0;i<SAMPLENUMBER;i++ ){x0=x1=x2=x3=x4=x5=x6=0;x0=i&0x01; x1=(i/2)&0x01; x2=(i/4)&0x01; x3=(i/8)&0x01;x4=(i/16)&0x01;x5=(i/32)&0x01; x6=(i/64)&0x01;xx=x0*64+x1*32+x2*16+x3*8+x4*4+x5*2+x6;dataI[xx]=dataR[i];}for ( i=0;i<SAMPLENUMBER;i++ ){dataR[i]=dataI[i]; dataI[i]=0;}/************** following code FFT *******************/for ( L=1;L<=7;L++ ){ /* for(1) */b=1; i=L-1;while ( i>0 ){b=b*2; i--;} /* b= 2^(L-1) */for ( j=0;j<=b-1;j++ ) /* for (2) */{p=1; i=7-L;while ( i>0 ) /* p=pow(2,7-L)*j; */{p=p*2; i--;}p=p*j;for ( k=j;k<128;k=k+2*b ) /* for (3) */{TR=dataR[k]; TI=dataI[k]; temp=dataR[k+b];dataR[k]=dataR[k]+dataR[k+b]*cos_tab[p]+dataI[k+b]*sin_tab[p];dataI[k]=dataI[k]-dataR[k+b]*sin_tab[p]+dataI[k+b]*cos_tab[p];dataR[k+b]=TR-dataR[k+b]*cos_tab[p]-dataI[k+b]*sin_tab[p];dataI[k+b]=TI+temp*sin_tab[p]-dataI[k+b]*cos_tab[p];} /* END for (3) */} /* END for (2) */} /* END for (1) */for ( i=0;i<SAMPLENUMBER/2;i++ ){w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);}} /* END FFT */main(){int i;InitForFFT();MakeWave();for ( i=0;i<SAMPLENUMBER;i++ ){fWaveR[i]=INPUT[i];fWaveI[i]=0.0f;w[i]=0.0f;}FFT(fWaveR,fWaveI);for ( i=0;i<SAMPLENUMBER;i++ ){DATA[i]=w[i];}while ( 1 ); // break point}void InitForFFT(){int i;for ( i=0;i<SAMPLENUMBER;i++ ){sin_tab[i]=sin(PI*2*i/SAMPLENUMBER);cos_tab[i]=cos(PI*2*i/SAMPLENUMBER);}}void MakeWave(){int i;for ( i=0;i<SAMPLENUMBER;i++ ){INPUT[i]=sin(PI*2*i/SAMPLENUMBER*3)*1024;}}6.系统仿真及调试通过观察频域和时域图,程序计算出了测试波形的功率谱,与CCS 计算的FFT 结果相近。

7.完成结果或效果1.当“#define SAMPLENUMBER 128”时运行结果为:2.当“#define SAMPLENUMBER 64”时将程序修改为:……int x0,x1,x2,x3,x4,x5,xx;……x0=x1=x2=x3=x4=x5=0;x0=i&0x01; x1=(i/2)&0x01; x2=(i/4)&0x01;x3=(i/8)&0x01; x4=(i/16)&0x01; x5=(i/32)&0x01; xx=x0*32+x1*16+x2*8+x3*4+x4*2+x5;……for ( k=j;k<64;k=k+2*b )……修改设置运行结果为:3.当“#define SAMPLENUMBER 32”时将程序修改为:……int x0,x1,x2,x3,x4,xx;……x0=x1=x2=x3=x4=0;x0=i&0x01; x1=(i/2)&0x01; x2=(i/4)&0x01; x3=(i/8)&0x01; x4=(i/16)&0x01;xx=x0*16+x1*8+x2*4+x3*2+x4;……for ( k=j;k<32;k=k+2*b )……修改设置运行结果为:4.当“#define SAMPLENUMBER 16”时将程序修改为:……int x0,x1,x2,x3,xx;……x0=x1=x2=x3 =0;x0=i&0x01; x1=(i/2)&0x01; x2=(i/4)&0x01; x3=(i/8)&0x01;xx=x0*8+x1*4+x2*2+x3;……for ( k=j;k<16;k=k+2*b )……修改设置运行结果为:5.当“#define SAMPLENUMBER 256”时将程序修改为:……int x0,x1,x2,x3,x4,x5,x6,x7,xx;……x0=x1=x2=x3=x4=x5=x6=x7=0;x0=i&0x01; x1=(i/2)&0x01; x2=(i/4)&0x01;x3=(i/8)&0x01; x4=(i/16)&0x01; x5=(i/32)&0x01;x6=(i/64)&0x01; x7=(i/128)&0x01;xx=x0*128+x1*64+x2*32+x3*16+x4*8+x5*4+x6*2+x7;……for ( k=j;k<256;k=k+2*b )……运行结果为:6.当“#define SAMPLENUMBER 512”时将程序修改为:……int x0,x1,x2,x3,x4,x5,x6,x7,x8,xx;……x0=x1=x2=x3=x4=x5=x6=x7=x8=0;x0=i&0x01; x1=(i/2)&0x01; x2=(i/4)&0x01;x3=(i/8)&0x01; x4=(i/16)&0x01; x5=(i/32)&0x01;x6=(i/64)&0x01; x7=(i/128)&0x01; x8=(i/256)&0x01;xx=x0*256+x1*128+x2*64+x3*32+x4*16+x5*8+x6*4+x7*2+x8; ……for ( k=j;k<512;k=k+2*b )……修改设置运行结果为:7.当“#define SAMPLENUMBER 620”时将程序修改为:……int x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,xx;……x0=x1=x2=x3=x4=x5=x6=x7=x8=x9=0;x0=i&0x01; x1=(i/2)&0x01; x2=(i/4)&0x01;x3=(i/8)&0x01; x4=(i/16)&0x01; x5=(i/32)&0x01;x6=(i/64)&0x01; x7=(i/128)&0x01; x8=(i/256)&0x01; x9=(i/512)&0x01;xx=x0*512+x1*256+x2*128+x3*64+x4*32+x5*16+x6*8+x7*4+x8*2+x9;……for ( k=j;k<620;k=k+2*b )……修改设置运行结果:结论:经试验当SAMPLENUMBER超过650时,运算超出内存范围,不能编译。

相关文档
最新文档