FFT的定点DSP实现
2048点FFT在定点DSP上的实现

新 用汇编语言编写, 但是在各子程序的入口和出口都考 虑了与 C 语言的兼容性, 使得各子程序能够直接被 C
语言调用。
1 汇编模块 fft_brev.asm, 此模块的功能是把 2048
点实数数据打包成为 1024 点复数数据 , 并把复数数
据进行倒位序排列。在 C 函数中, 通过 FFT_brev()来调
据, 并完成复数数据的位反转操作;
2 计算 1024 点基 2 复数 FFT;
3 劈分还原计算, 获得 2048 点实数 FFT 结果;
技
4 计算幅值的平方, 获得频谱的幅度谱。
术
根据实际需要, 还可以对数据进行加窗函数处理。 1.2 具体函数介绍
创
根据上面的程序流程, 介绍具体的函数模块。考
虑到 程序的效率 和代码的精 简, FFT 算法函数 全部 采
考虑到 CCD 是 2160 像元, 为了方便运用基 2 算
1 程序介绍与实现
1.1 程序流程 FFT 的计算量比傅 立叶变换的 计 算 量 减 少 了 , 但 是 FFT 要 做 到 大 点 数 , 实 时 运 算 , 对 于 普 通 的 单 片 机 来说还是一件比较困难的事。一方面, FFT 需要对原始 自然序列进行码位倒序排列; 另一方面, 蝶形运算是 复数运算, 需要多次查表相乘运算才能实现。DSP 控制 器就是针对这些需求而设计的专用芯片: 具有专为 FFT 算法而设计的反序间接寻址; 可实现增/减 1 或增/
DS P 开 发 与 应 用
204 8 点 F F T 在定点 DS P 上的实现
Acco m p lis h m e n t o f 2048 p o in ts FFT in TMS 320C240x fixe d - p o in t DS P
FFT算法的DSP实现

FFT 算法的DSP 实现对于离散傅里叶变换(DFT)的数字计算,FFT是一种有效的方法。
一般假定输入序列是复数。
当实际输入是实数时,利用对称性质可以使计算DFT 非常有效。
一个优化的实数FFT算法是一个组合以后的算法。
原始的2N个点的实输入序列组合成一个N 点的复序列,之后对复序列进行N 点的FFT 运算,最后再由N 点的复数输出拆散成2N点的复数序列,这 2 N点的复数序列与原始的2N点的实数输入序列的DFT输出一致。
使用这种方法,在组合输入和拆散输出的操作中,FFT 运算量减半。
这样利用实数FFT 算法来计算实输入序列的DFT的速度几乎是一般FFT算法的两倍。
下面用这种方法来实现一个256 点实数FFT(2N=256 )运算。
1. 实数FFT 运算序列的存储分配如何利用有限的DSP 系统资源,合理的安排好算法使用的存储器是一个比较重要的问题。
本文中,程序代码安排在0x3000 开始的存储器中,其中0x3000~0x3080 存放中断向量表,FFT程序使用的正弦表和余弦表数据(.data段)安排在OxcOO开始的地方,变量(.bss段定义)存放在0x80 开始的地址中。
另外,本文中256 点实数FFT 程序的数据缓冲位Ox23OO~Ox23ff , FFT 变换后功率谱的计算结果存放在Ox22OO~Ox22ff 中。
连续定位.cmd 文件程序如下:MEMORY {PAGE O: IPROG: origin = Ox3O8O,len=Ox1F8OVECT: lorigin=Ox3OOO,len=Ox8OEPROG: origin=Ox38OOO,len=Ox8OOOPAGE 1:USERREGS: origin=Ox6O,len=Ox1cBIOSREGS: origin=Ox7c,len=Ox4IDATA: origin=Ox8O,len=OxB8O}SECTIONS{EDATA: origin=OxCOO,len=Ox14OO{.vectors: { } > VECT PAGE O.sysregs:.trcinit:.gblinit: { } > BIOSREGS PAGE 1 { } > IPROG PAGE O { } > IPROG PAGE O.bios:frt:{ } > IPROG PAGE O { } > IPROG PAGE O.text: { } > IPROG PAGE O.cinit: { } > IPROG PAGE O.pinit: { } > IPROG PAGE O.sysinit: { } > IPROG PAGE O.data: .bss: .far:.const: { } > EDATA PAGE 1 { } > IDATA PAGE 1 { } > IDATA PAGE 1 { } > IDATA PAGE 1.switch: { } > IDATA PAGE 1 .sysmem: { } > IDATA PAGE1•cio:{ } > IDATA PAGE1.MEM$obj: { } > IDATA PAGE1.sysheap: { } > IDATA PAGE1}2.基2实数FFT运算的算法该算法主要分为以下四步进行:1)输入数据的组合和位排序首先,原始输入的2N=256个点的实数序列复制放到标记有“ d_input_addr "的相邻单元,当成N=128点的复数序列d[n],其中奇数地址是d[n]实部,偶数地址是d[n]的虚部,这个过程叫做组合(n为序列变量,N为常量)。
基于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实现FFT的基本原理是将N点的时间域信号转换为频域信号,其中N为2的幂。
FFT通过将DFT变换分解为递归处理的子问题,大大提高了计算效率。
下面将介绍FFT的DSP实现步骤。
第一步是将输入信号分解为偶数位和奇数位部分。
即将输入信号的下标为偶数和奇数的采样点分为两个序列。
第二步是对这两个序列分别进行FFT变换。
对于每个序列,不断递归地将其分解为更小的序列进行FFT变换。
第三步是将两个FFT变换的结果结合起来。
通过将奇数位序列的结果乘以旋转因子(Wn)与偶数位序列的结果相加,得到FFT的结果。
第四步是重复第二和第三步,直到最后得到完整的FFT结果。
在DSP实现FFT时,需要注意以下一些优化技巧。
首先是采用位逆序(bit-reversal)算法。
位逆序算法对输入序列进行重新排列,使得后续计算可以利用FFT的特殊结构进行高效处理。
其次是使用查表法计算旋转因子。
旋转因子是FFT中的关键部分,计算量很大。
通过将旋转因子预先计算并存储在查找表中,可以大大提高计算效率。
另外,可以采用并行计算的方法,同时处理多个子序列,以进一步提高计算速度。
此外,在实际应用中,还需要注意处理FFT的边界条件和溢出问题,以及对频谱结果进行解释和处理。
综上所述,FFT在DSP中的实现需要考虑算法的效率和优化技巧。
通过采用递归分解、位逆序、查表法和并行计算等方法,可以实现高效的FFT计算。
在实际应用中,还需要注意处理边界条件和溢出问题,以及对频谱结果的处理和解释。
希望本文的介绍能帮助读者更好地理解和应用FFT在DSP中的实现。
DSP实现FFT的代码

DSP实现FFT的代码FFT(快速傅里叶变换)是一种用于高效计算离散傅里叶变换(DFT)的算法。
在数字信号处理(DSP)中,FFT常被用来进行频域分析、滤波和信号压缩等操作。
下面是一个使用C语言实现FFT的代码示例:```c#include <stdio.h>#include <math.h>//基于蝴蝶算法的FFT实现if (N <= 1) return;for (int i = 0; i < N / 2; i++)even[i] = x[2*i];odd[i] = x[2*i+1];}fft(even, N / 2);fft(odd, N / 2);for (int k = 0; k < N / 2; k++)x[k] = even[k] + t;x[k + N/2] = even[k] - t;}free(even);free(odd);//对输入信号进行FFT变换fft(x, N);//打印复数数组for (int i = 0; i < N; i++)printf("(%f,%f) ", creal(arr[i]), cimag(arr[i]));}printf("\n");int maiint N = 8; // 信号长度printf("原始信号为:\n");fft_transform(x, N);printf("FFT变换后的结果为:\n");return 0;```在这个代码示例中,我们首先定义了一个基于蝴蝶算法的FFT实现函数,然后使用该函数对输入信号进行傅里叶变换。
最后,我们通过打印的方式输出了原始信号和经过FFT变换后的结果。
需要注意的是,FFT是一个复杂的算法,需要理解较多的数学知识和算法原理。
在实际应用中,可以使用现成的DSP库或者软件工具来进行FFT计算,以提高效率和准确性。
FFT的DSP实现

FFT的DSP实现FFT(快速傅里叶变换)是一种计算离散傅里叶变换(DFT)的高效算法。
它通过利用DFT的对称性质和递归分解将计算复杂度从O(n^2)减少到O(nlogn),其中n为信号的样本数。
DSP(数字信号处理)指的是用数字计算机或数字信号处理器对连续时间的信号进行采样、变换、滤波以及其他处理的技术和方法。
1.采样与量化:首先,将输入的模拟信号进行采样和量化。
采样将连续的模拟信号转换为离散的数字信号,量化将连续的信号幅值大小转换为离散的数值。
2. 窗函数:为了减少频谱泄漏的效应,通常在DFT之前应用窗函数对信号进行加权。
常用的窗函数有矩形窗、Hamming窗、Hanning窗等。
选择合适的窗函数可以达到有效减小频谱泄漏的目的。
3.数据流和缓冲:将经过窗函数加权的信号按照一定的时间顺序送入缓冲区。
4. 快速傅里叶变换(FFT):将缓冲区中的数据应用FFT算法进行处理。
FFT算法将信号分解为多个较小的子问题,并通过递归将计算复杂度从O(n^2)减少到O(nlogn)。
FFT算法可以分为迭代式FFT和递归式FFT 两种形式。
5.频谱计算:通过FFT算法计算得到的频谱表示信号在频率域的分布情况。
频谱是信号在各个频率上的振幅和相位信息。
可以通过对频谱进行幅度谱或相位谱的操作来进行进一步的分析和处理。
6.频谱处理:根据具体的需求,可以对频谱进行滤波、修正、分析等操作。
滤波可用于信号降噪、频域特定频率的提取等;修正可用于频谱校正、泄漏校正等;分析可用于频谱峰值检测、频谱关键特征提取等。
7.逆变换:如果需要将频率域上的信号恢复到时域,可以通过应用逆变换(IDFT)来实现。
逆变换将频谱中的振幅和相位信息转换为原始信号的样本值。
8.输出与显示:最后,将处理后的信号输出到需要的设备或显示器上。
可以将频谱可视化展示出来,也可以将逆变换后的信号还原为音频、图像等形式的数据。
以上是FFT的DSP实现的基本步骤。
FFT在数字信号处理中被广泛应用于音频处理、图像处理、通信系统等领域。
调用DSP库函数实现FFT的运算

调用DSP库函数实现FFT的运算傅里叶变换(Fourier Transform)是一种将信号从时域(时间域)转换到频域(频率域)的数学运算。
傅里叶变换可以将信号分解为不同频率的成分,使得信号在频域中的特征更容易识别和分析。
在计算机领域,为了实现傅里叶变换,通常会使用一种叫做FFT(Fast Fourier Transform)的算法。
FFT算法是一种高效的计算傅里叶变换的方法,能够显著提升计算速度。
为了调用DSP库函数实现FFT的运算,我们可以利用MATLAB、Python等常用的数学工具库。
这些库已经包含了对FFT的实现,只需调用相应的函数即可完成FFT运算。
以下是具体的实现过程和相关代码示例。
1.MATLAB实现FFT运算:MATLAB是一种常用的科学计算和数据分析软件,内置了对信号处理和傅里叶变换的支持。
要使用MATLAB进行FFT运算,我们只需调用fft(函数。
```matlab%生成输入信号t=0:0.1:10;%时间范围f=2;%信号频率x = sin(2*pi*f*t); % 输入信号为正弦波%进行FFT运算X = fft(x); % 对输入信号x进行FFT%绘制频谱图frequencies = (0:length(X)-1)*(1/(t(2)-t(1)))/length(X); % 计算频率范围plot(frequencies, abs(X)); % 绘制频谱图title('FFT Spectrum'); % 图标题```以上代码首先生成了一个简单的输入信号x,接着调用fft(函数对x 进行FFT运算。
最后通过plot(函数绘制了频谱图。
运行以上代码,我们可以得到信号x在频域中的频谱图。
2. Python实现FFT运算:Python是一种功能强大的编程语言,它有着众多优秀的科学计算库和信号处理库,如NumPy和SciPy。
这些库提供了对FFT的底层封装,可以非常方便地实现FFT运算。
FFT算法在定点DSP芯片上的实现

因为片 外存储的数 据需要先取到内部存储器才能处理, 所以当 数据和程序都放在片内时, FT算法的 F 执行速度 最快。而当 程序放在片外存储器时, F 算法性能有大幅的下降。解决 FT 这 一问 题的 有效途径 是使用 C h 模式,即将内部程序存储器 c a e 作为一个数据缓冲区,可以使 性能 达 到与片内 存储相 似的 水平。 将数据放在片外, F 算法的性能同 如果 FT 样会大幅 下降。 事实上, 在 大多 数包含 FT的信号处理应用中, F 装载的 程序大小一般不会超 过内部程 序存储器的容量。 但所需 处理的数据往 往是海量的, 如果 F 算法 r F 一次所要处 理数据序列不能 完全被放入内 部 存储器, 就需要在算法执行时频繁访问片外存储器。因为 FT算法的 F 特殊性,即每次 迭代均 要访问 序列中所有的 数据点,因 此必须找到一 种新的内 存访问机制来解决片外数 据访问问 题。 FT 特点是同 F 算法的 址运算。 算法的过程是 N点D 先分成 N2 D , 将 r F /点 F 进而再 T 次分 为四个N 点D 4 / 盯,再八个 N 点 D , 8 / T F 直至N 瓜个两点D 。 r ’ F 每分一次, 称为一 “ 运 级” 算。 在每级运算中, 数据被取出 后运算,其结果 仍被 放回原 地址空间。因此每级运算都 要对数 据序列访问两次, 如果序列中 包含 N个点,则总共需要完成N次读和 N次写。当序列 放在片 外 存储器时,完成 一级运算需要 耗费大量时间 在数 据的 访问中 。 为了 提高算法的执行性能, 本文将内部 数据存储器作为 缓冲区, 数据的 替换由 D P芯 S 片 上的专用 管理算法实现。这种替 换算法是针对 F 程序的 T F 访问方式设计的,即将每级中最 先 需要访问的 一部分数 据用D MA方式取出 放入缓冲区, 计算完 后在 D A方式写回片外存 M 储器. 替换的次数 与序列长度和内部数据存储器的 大小有关。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 引言CCS(Code Composer Studio)是TI公司的DSP集成开发环境。
它提供了环境配置、源文件编辑、程序调试、跟踪和分析等工具,帮助用户在一个软件环境下完成编辑、编译链接、调试和数据分析等工作。
与TI提供的早期软件开发工具相比,利用CCS能够加快软件开发进程,提高工作效率。
CCS一般工作在两种模式下:软件仿真器和与硬件开发板相结合的在线编程。
前者可以脱离DSP芯片,在PC机上模拟DSP指令集与工作机制,主要用于前期算法实现和调试。
后者实时运行在DSP芯片上,可以在线编制和调试应用程序。
2 C语言和汇编语言的混合编程TMS320 C5000系列的软件设计通常有三种方法:(1) 用C语言开发;(2) 用汇编语言开发;(3) C和汇编的混合开发。
其中用C语言开发具有兼容性和可移植的优点,有利于缩短开发周期和减少开发难度,但是在运算量较大的情况下,C代码的效率还是无法和手工编写的汇编代码的效率相比,比如FFT运算,用汇编语言开发的效率高,程序执行速度快,而且可以合理利用芯片的硬件资源,但是开发难度较大,开发周期长,而且可读性和可移植性差。
C和汇编的混合编程则可以充分利用前两者的优点,以达到最佳利用DSP资源的目的。
但是,采用C和汇编语言混合编程必须遵循相关函数调用规则和寄存器调用规则,否则会给程序的开发带来意想不到的问题。
2.1 C语言和汇编语言混合编程的四种方法(1) 独立编写汇编程序和C程序,分开编译或汇编成各自的目标代码模块,再用链接器将二者链接起来。
这种方法比较灵活,但是设计者必须自己维护各汇编模块的入口和出口代码,自己计算传递的参数在堆栈中的偏移量,工作量较大,但是能做到对程序的绝对控制。
(2) 在C程序中使用汇编程序中定义的变量和常数。
(3) 在C程序中内嵌汇编语句。
这种方法可以实现C语言无法实现的一些硬件控制功能,如修改中断控制寄存器。
(4) 将C语言编译生成相应的汇编代码,手工修改和优化C编译器生成的汇编代码。
采用这种方法可以控制C编译器,从而产生具有交叉列表的汇编程序,而设计者可以对其中的汇编语句进行修改,然后对汇编程序进行编译,产生目标文件。
后3种方法由于在C中直接嵌入了汇编语言,易造成程序混乱,破坏C环境,甚至导致程序崩溃,而开发者又很难对不良结果进行预期和有效控制。
而如果采用第一种方法,只要遵循有关C语言函数调用规则和寄存器规则,就能预见到程序运行的结果,保证程序正确。
2.2 编程注意事项C编译器对函数调用制定了一组严格的规则。
除了特殊的运行时间支持库函数外,任何调用函数和被C函数调用的函数都必须遵守这些规则。
结合作者在编程中的实际情况和切身体会,提出在编程时要注意以下几点:(1) 必须保护任何被函数修正的专用寄存器。
这些专用寄存器包括:AR1,AR6,AR72和堆栈指针(SP)。
其中,如果对SP正常使用,则不必明显的保存。
换句话说,只要汇编函数在调用返回时弹出压入的对象,实际上就已经保护了SP。
(2) 中断函数必须保存其使用的所有寄存器。
(3) 从汇编函数中调用C函数时,第一个参数(最左边的)必须放入累加器A中,剩下的参数按照自右向左的顺序压入堆栈。
(4) 如果函数有返回值,则返回值存放在累加器A中。
(5) 调用C函数时,注意C函数只保护了几个特定的寄存器,对于其他寄存器C函数是可以自由使用的。
(6) 长整数和浮点数存储在存储器中的方法是最高有效字在低位地址。
(7) 汇编语言模块不能改变由C模块产生的.cinit段,如果改变其中的内容将会引起不可预测的后果。
(8) 在汇编语言模块中,对可以从C中访问的变量和函数名需加上前缀“_”。
对于仅用于汇编语言模块中的标识符,不用加下划线。
而且如果仅在汇编中使用,只要不加下划线,即使与C程序中定义的对象名相同,也不会造成冲突。
(9) 任何在汇编语言模块中声明的将要从C访问或调用的对象或函数,都必须在汇编语言中用.global伪指令声明为全局变量。
同样,任何在C程序中定义而将在汇编中访问或调用的对象或函数,在汇编中也必须用.global声明。
(10) 在默认的情况下,编译器总是认为CPL为1。
因此,若在汇编程序中将CPL清0,则在返回C环境时,必须将其恢复为1;在默认的情况下,编译器总是认为 OVM为0。
因此,若在汇编程序中将OVM置为1,则返回C环境时,必须将其恢复为0;ARP在函数进入和返回时,必须为0,即当前辅助寄存器为AR0。
函数执行时可以为其他值。
3 编程实例3.1 FFT算法简介FFT是一种高效实现离散傅立叶变换的算法,在数字信号处理系统中,FFT 作为一个非常重要的工具,甚至成为DSP运算能力的一个考核因素。
如何将FFT 算法很好的应用到DSP系统中对于DSP系统的设计具有重要的意义。
一个优化的实数FFT算法是一个组合以后的算法。
该算法主要分为以下几步,首先将输入的2N点实序列进行位倒序组合成一个N点的复序列,之后对复序列进行N 点的FFT运算,最后再由N点的复数输出拆散成2N点的复数序列,这2N点的复数序列与原始的2N点的实数输入序列的DFT输出一致。
(详细的算法介绍可参考相关信号处理书籍)。
3.2 C主程序#include "stdlib.h"extern void fft(); // FFT运算函数int DisData[256]; // 输出结果int SimData[256]={0,6270,11585,15137, 16384, 15137, 11585,6270,0, -6270, -11585,-15137,-16384,-15137,-11585,-6270,……0,6270,11585,15137,16384,15137,11585,6270,0,-6270,-11585,-15137,-16384,-15137,-11585,-6270};// 输入数据int main(){rfft();// 调用FFT函数while(1) ;}本程序中FFT运算所用到的数据是通过matlab仿真产生的,然后通过全局数组进行传值,这种方式的优点是数据的通用性强,方便对数据进行其他相关处理; 也可通过其他C程序产生然后保存到一个文本文件中,再由汇编程序将该数据文件拷到数据存储器中参与FFT运算。
这种方式的优点是程序的可读性强,缺点是当输入数据修改后,必须进行重新编译、汇编和链接。
3.3 汇编程序.mmregs.global sav_sin,sav_idx,sav_grp,_rFFT,_DisData.dataDATA .space 1024 ;数据缓冲区INPUT .set 0x9000 ;输入数据起始地址N .set 128 ;复数点数LOGN .set 7 ;碟形运算级数sav_grp .usect "tempv",3 ;定义组变量值sav_sin .set sav_grp+1 ;定义旋转因子表sav_idx .set sav_grp+2.copy "twiddle1.inc" ;正弦表系数.copy "twiddle2.inc" ;余弦表系数.text_rfft:SSBX TCSSBX CRSBX OVARSBX OVBLD #0,DPRSBX CPLSSBX XFSSBX SXMLD #00,ASMSSBX FRCT……本程序主要是对输入的256点实数作FFT运算,通过修改N和LOGN可以完成16-1024点的FFT运算。
在编写汇编程序的时候要注意以下几个方面:(1) 由于采用循环寻址来对旋转因子表寻址,因此每张表的开始地址必须是10个LSB位为0的地址。
如:正弦表系数可以放在0400h开始的地址,余弦表系数可以放在0800h开始的地址;(2) 在汇编程序的入口处要注意设置好汇编程序所需要的运行环境(见前述程序),如果此处按照编译器默认的环境将得不到正确的结果。
详细的汇编程序可参考TI公司提供的例程。
3.4 运算结果输入正弦信号的频率为f=16Hz,幅值为1(单位),采样长度为2N=256点,采样频率为fs=256Hz。
CCS提供了很多方法将程序产生的数据画图显示,包括时域/频域波形显示等。
可通过查看相关图像来检验FFT运算的正确性。
由链接命令文件可以知道输入信号存储在程序存储区0900h开始的256 个单元中,经程序计算得到的信号幅值谱存放在数据存储区0200h开始的256个单元中。
在CCS中选择View——>Graph——> Time/Frequency命令,相关设置可参考图1:图1 FFT运算结果查看选项设置参考输入信号的时域波形见图2。
点击看原图图2 输入信号的时域波形; 经FFT运算后得到的信号幅值谱图见图3。
点击看原图图3 信号幅值谱图将输入信号通过Matlab仿真进行验证。
输入信号的时域波形见图4。
点击看原图图4 输入信号的时域波形经FFT运算后得到的信号幅值谱图见图5。
点击看原图图5 信号幅值谱图通过比较CCS中的输出图形和Matlab中的仿真输出图形, 可以看到二者是一致的,说明本程序的结果是正确的。
4 结束语本文通过实例,说明了TMS320 C5000系列DSP芯片的混合编程方法,利用混合编程达到了提高程序的可读性与编程效率的目的,是开发DSP软件的常用方法。
本文介绍的混合编程方法不但适用于TI C5000系列DSP芯片,同样也适用于TI其他系列的DSP芯片,如C2000系列、C6000系列,甚至对其他芯片,如51系列单片机等,实现混合编程也有很大参考价值。