0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何实现FFT算法并通过CCS图形窗口查看结果?

冬至子 来源:创龙教仪-木江鹏 作者:创龙教仪-木江鹏 2023-09-21 14:38 次阅读

1、傅里叶变换

傅里叶变换可以将一个信号从时域变换到频域。时域信号在经过傅立叶变换的分解之后,变为了不同正弦波信号的叠加,我们再去分析这些正弦波的频率,可以将一个信号变换到频域。有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。这就是很多信号分析采用FFT变换的原因。

2、离散傅里叶变换

离散傅里叶变换作为信号处理中最基本和最常用的运算,在信号处理领域占有基础性的地位,如果直接按照离散傅里叶变换的公式进行计算,求出N点X(k)需要N^2次复数运算、N(N-1)次复数加法,当N很大时,运算量是非常大的,这对于实时处理是无法接受的。

image.png

3、FFT算法

傅里叶快速算法的提出,使傅里叶变换成为一种真正实用的算法。根据傅立叶变换的对称性和周期性,我们可以将DFT运算中有些项合并。 在计算机上进行的DFT,使用的输入值是时域的信号值,输入采样点的数量决定了转换的计算规模。变换后的频谱输出包含同样数量的采样点,但是其中有一半的值是冗余的,通常不会显示在频谱中,所以真正有用的信息是N/2+1个点。FFT算法的原理是通过许多小的更加容易进行的变换去实现大规模的变换,降低了运算要求,提高了与运算速度。FFT不是DFT的近似运算,它们完全是等效的,FFT的过程大大简化了在计算机中进行DFT的过程。

image.png

4、程序流程

程序流程设计中首先产生测试信号,接着确定FFT基和旋转因子,然后进行FFT和FFT逆变换运算,最后输出FFT结果

image.png

5、数字信号处理库

本实验中的FFT算法是基于TI提供的数字信号处理库完成的。 DSPLIB 包含优化的、C语言可调用的通用信号处理例程,用于计算密集型实时应用程序。 调用这些例程的运行速度比直接用C语言编写的等效代码快得多,可以缩短应用程序开发时间。实验中使用的是 dsplib_c674x_3_4_0_0

6、dsplib_c674x_3_4_0_0

在CCS5.5 的安装路径安装DSPLIB后,会有相应的文件夹出现,包含组件库、头文件、测试示例和源码等。

image.png

7、函数源码

FFT运算函数

程序使用DSPLIB 的库来进行FFT运算,调用的程序源码和使用说明可以安装DSPLIB后 查看。

调用的FFT函数中:

第一个参数是样本中FFT 的长度;

第二个参数是指向数据输入的指针;

第三个参数是指向复杂旋转因子的指针;

第四个参数是指向复杂输出数据的指针;

第五个参数是指向包含64 个条目的位反转表的指针。如果样本的FFT长度可以表示为 4 的幂;

第六个参数是4,否则 第六个参数是 2 ;

第五个参数是从主FFT开始的样本中的子 FFT偏移索引 。;

第六个参数是样本中主FFT的大小。

image.png

FFT逆变换函数

程序使用DSPLIB 的库来进行FFT逆变换,调用的程序源码和使用说明可以安装DSPLIB后查看。

调用的IFFT函数中:

第一个参数是样本中FFT 的长度;

第二个参数是指向数据输入的指针;

第三个参数是指向复杂旋转因子的指针;

第四个参数是指向复杂输出数据的指针;

第五个参数是指向包含64 个条目的位反转表的指针 ;

如果样本的FFT长度可以表示为 4 的幂,第六个参数是4,否则第六个参数是2 ;

第七个参数是从主FFT开始的复杂样本中的子FFT偏移索引 ;

第八个参数是样本中主FFT的大小。

image.png

8、二进制位翻转

FFT和FFT 逆变换函数中的第五个参数brev是指向包含64个表项的位反转表的指针,因此程序中需要提供64个表项,程序中的位反向表是计算出来的,可以通过代码提前转换的。 采用位反转的原因是因为FFT算法的蝶形内部两点交叉使数据以反转的方式输出而不是数字反转顺序。

image.png

二进制位翻转表的原理

首先确认二进制数的位数,64个数只需要有6位的二进制位数;

接着将二进制数分成两部分,前五位一部分,最后一位一部分;

最后进行二进制翻转,把最后一位放到最高位,剩下的五位进行翻转依次放入。

image.png

数组内存放的依次是0~63的二进制翻转结果,我们可以来看一个例子,

(点击鼠标)以数字5为例,(点击鼠标)转换为二进制数是000101

(点击鼠标)接着进行二进制翻转,将“00010”看为一个部分,“1”看为一个部分,那么将“1”放到第一位,然后将后面的数据翻转过来进行放置即可

(点击鼠标)最后进行十六进制转换得到0x28,所以在数组的第6个数字为0x28。

image.png

三、操作现象

导入工程,选择Demo文件夹下的对应工程

编译工程,生成可执行文件

将CCS连接实验箱并加载程序

程序加载完成后点击运行程序

运行程序后,程序执行完成后会在断点处停下。

点击"Tools->Graph->Single Time"选择单时域信号图,在弹出的界面设置相关参数,可查看DSP计算的FFT结果。

点击"Tools->Graph->FFT Magnitude",在弹出的界面设置相关参数,可查看CCS计算的FFT结果。

对比后,可发现CCS和DSP计算的FFT结果相同,

实验结束后,点击红色按钮退出CCS与实验箱的连接,最后实验箱断电即可。

image.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 正弦波
    +关注

    关注

    11

    文章

    636

    浏览量

    55255
  • 二进制
    +关注

    关注

    2

    文章

    793

    浏览量

    41593
  • DSP芯片
    +关注

    关注

    9

    文章

    144

    浏览量

    29939
  • 数字信号处理器

    关注

    5

    文章

    456

    浏览量

    27327
  • 傅里叶变换
    +关注

    关注

    6

    文章

    437

    浏览量

    42562
收藏 人收藏

    评论

    相关推荐

    基于FPGA的超高速FFT硬件实现

    是处理数字信号如图形、语音及图像等领域的重要变换工具。快速傅里叶变换(FFT)是DFT的快速算法FFT算法的硬件
    发表于 06-14 00:19

    【创龙TMS320C6748开发板试用】+ 官方FFT测试与CCS波形查看功能

    *150*(i/Fs))+15*sin(2*PI*350*(i/Fs));如上方法,再建一个窗口查看幅值。一定是与matlab的结果相同的。以上就是对官方FFT测试的
    发表于 10-14 23:10

    FFT 算法的一种 FPGA 实现

    FPGA实现FFT 处理器的硬件结构。接收单元采用乒乓RAM 结构, 扩大了数据吞吐量。中间数据缓存单元采用双口RAM , 减少了访问RAM 的时钟消耗。计算单元采用基 2 算法, 流水线结构, 可在
    发表于 11-21 15:55

    如何在FPGA上实现硬件上的FFT算法

    =64 点的基-4DIT信号流其输入数据序列是按自然顺序排列的,输出结果需经过整序。64点数据只需进行3次迭代运算,每次迭代运算含有N/4=16个蝶形单元。2 FFT算法的硬件实现2.
    发表于 06-17 09:01

    请问怎么利用TI提供的FFT的汇编算法

    小弟用ti提供的高度优化了的FFT汇编算法,一直用不好。 这样的:一个正弦函数,用数组离散化,256个点,通过黑匣子(汇编FFT算法,我不懂
    发表于 03-17 10:38

    DSP操作教程 4-7 快速傅立叶变换(FFT算法CCS显示)

    一、实验目的 了解FFT的作用,掌握FFT 算法算法原理、计算量和算法特点,实现
    发表于 09-20 11:13

    基于CCS的DSP算法仿真实验设计

    摘要:简要介绍了CCS软件的主要功能,利用CCS软件,设计数字信号处理实验课程,实现FFT算法的谱分析和FIR滤波器。
    发表于 11-09 16:07 104次下载

    利用FFT IP Core实现FFT算法

    利用FFT IP Core实现FFT算法 摘要:结合工程实践,介绍了一种利用FFT IP Core实现
    发表于 01-16 10:04 6894次阅读
    利用<b class='flag-5'>FFT</b> IP Core<b class='flag-5'>实现</b><b class='flag-5'>FFT</b><b class='flag-5'>算法</b>

    用FPGA实现FFT算法

    用FPGA实现FFT算法 引言  DFT(Discrete Fourier Transformation)是数字信号分析与处理如图形、语音及图像等领域的重
    发表于 10-30 13:39 1594次阅读
    用FPGA<b class='flag-5'>实现</b><b class='flag-5'>FFT</b><b class='flag-5'>算法</b>

    用C语言实现FFT算法

    用C语言实现FFT算法 /*****************fft programe*********************/#include "typedef.h" #inc
    发表于 10-30 13:39 6330次阅读

    存储深度对FFT结果的影响

    存储深度对FFT结果的影响     在DSO中,通过快速傅立叶变换(FFT)可以得到信号的
    发表于 08-25 08:06 881次阅读

    实数FFT算法的设计及其C语言实现

    首先分析实数FFT算法的推导过程,然后给出一种具体实现FFT算法的C语言程序,可以直接应用于需要FFT
    发表于 01-13 11:32 1.1w次阅读
    实数<b class='flag-5'>FFT</b><b class='flag-5'>算法</b>的设计及其C语言<b class='flag-5'>实现</b>

    浅谈FFT算法原理 基于FPGA的FFT算法的硬件实现

    FFT算法中,数据的宽度通常都是固定的宽度。然而,在FFT的运算过程中,特别是乘法运算中,运算的结果将不可避免地带来误差。因此,为了保证结果
    发表于 05-25 05:23 2.6w次阅读
    浅谈<b class='flag-5'>FFT</b><b class='flag-5'>算法</b>原理 基于FPGA的<b class='flag-5'>FFT</b><b class='flag-5'>算法</b>的硬件<b class='flag-5'>实现</b>

    用FPGA实现FFT算法的方法

    摘要:在对FFT(快速傅立叶变换)算法进行研究的基础上,描述了用FPGA实现FFT的方法,对其中的整体结构、蝶形单元及性能等进行了分析。
    的头像 发表于 04-12 19:28 5422次阅读

    基2FFT的verilog代码实现及仿真

    上文基2FFT算法推导及python仿真推导了基2FFT的公式,通过python做了算法验证
    的头像 发表于 06-02 12:38 1601次阅读
    基2<b class='flag-5'>FFT</b>的verilog代码<b class='flag-5'>实现</b>及仿真