DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 784|回复: 0
打印 上一主题 下一主题

一种A/D+FPGA+DSPs的FFT系统设计方案

  [复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 21:31:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  
         
    The Realization of FFT Based on UART and CCS
摘要:FFT是对实时采集的动态数据进行频域分析、处理的基本算法,本文针对DSP系统特点设计了一种高效的FFT的实现方法,以完成对动态信号的实时分析、处理。使用串口将DSP评估板与PC机相连,利用CCS作为开发平台来进行调试,分析了调试过程中遇到的问题给出了解决的方法,并利用MATLAB验证了该方法的正确性与可行性。
关键词:动态信号分析;数字信号处理器;代码调试器;快速傅立叶变换;串口
Abstract: FFT is the fundamental algorithm of frequency-domain analysis and processing of the real-time dynamic data acquisition. Directing at DSP system’s characteristic, the present paper designs an efficient realization of FFT in order to realize real-time analysis and processing of dynamic signal. Through connecting DSP evaluation board with PC by UART and debugging them based on CCS, this paper analyzes the problems happened in the process of debugging and provides the solution to these problems,and use MATLAB to prove the correctness and feasibility of the method.
Key word: Dynamic Signal Analysis; DSPs; CCS;FFT; UART
1. 引言
动态信号分析是现代机械系统、控制系统、电力系统等多领域的一种快速测试分析方法,它在设定的时间范围内,对被测信号采样、变换、数据处理,通过实时获取系统的动态参数,并利用DSP对参数进行实时处理,然后将处理结果以波形等形式显示出来,从而可以直观的反映系统的运行状态,方便故障的诊断处理。
针对上述的应用,设计了一种A/D+FPGA+DSPs的系统方案。在该方案中,A/D实现高速数据采集,FPGA实现对采集数据的缓冲、传输控制以及数据的预处理,DSPs实现对高速数据的处理,包括:谐波分析,相位分析等。而这些处理大多都是在频域进行的,需要把时域数据转换成频域数据,而FFT算法正是实现这一变换的快速算法。
TMS320C6416是高性能的32-位定点DSP,主频可达1GHz,处理性能高达8000MIPS,它采用多级流水结构,可以满足对实时数据的高速处理的要求 。本文使用UART接口实现TMS320C6416与PC的相连,通过PC机输入DSPs实时数据,DSPs对数据进行处理后再通过串口传送到PC机,实现DSP算法的调试。
2.FFT的原理及其在DSPs上的实现
傅立叶变换是一种将时域信号转变为频域信号的变换形式,是数字信号处理中对信号进行分析时经常采用的一种方法。但是如果采用常规的傅立叶变换,则该算法的运算量会特别大,不适于需要高速运行的嵌入式控制系统中采用,而通常方法是采用快速傅立叶变换( FFT) ,实现FFT 通常有两种方法:第一,按时间抽取(DIT) 的FFT 算法;第二,按频率抽取(DIF) 的FFT 算法。
2. 1  FFT 的原理[2]
对N 点序列x ( n) ,其DFT 变换定义为:


500)this.style.width=500;" border=0>
式中:X(k)是时间序列x(n)的频谱;WN为蝶形因子。蝶形因子具有对称性、周期性、可约性的特点,因此,利用旋转因子的这些特性,使DFT的有些项合并,将长序列的DFT合并为短序列的DFT。快速傅立叶变换正是基于这样的基本思路而发展起来的。
DIT―FFT的运算具有以下规律:1. 原位运算(同址运算),这种运算是很有规律的,其每级(每列)计算都是由N/2 个蝶形运算构成的,每一个蝶形结构完成下述基本迭代运算:


500)this.style.width=500;" border=0>  
式中,m表示第m列迭代,k, j为数据所在行数 。2. 序列的倒序,当运算完成后,FFT的输出X(k)按正常顺序排列在存储单元中,即按X(0…0),X(0…1),…,X(1…1)的顺序排列,但是这时输入x(n)却不是按自然顺序存储的,而是按x(0…0),x(1…0), …, x(1…1)的顺序即按k的倒序存入存储单元。
2.2 FFT在DSPs上的实现[3]
在快速算法中,为了避免重复计算和提高运算的速度,将旋转因子表以固定的数组的形式存放。其实部和虚部交替存储。FFT在DSPs上实现流程图如下:


500)this.style.width=500;" border=0>

图1.FFT在DSPs上实现的流程图

一开始,先是DSP、串口的初始化,判断是否接受够一次FFT的数据量,如果没有,进行等待;这时,如果串口的RX FIFO中接受到了数据,就会立即产生中断,RX 的数据首先存入short型的数组a中,之后,检查数组a中的数据是否达到进行FFT的要求,如果达到要求,将一次的数据量送入FFT函数,对其进行变换,再将计算的结果送入到TX FIFO中输出;如果没有达到要求,则等待RX FIFO接收新的数据而产生的中断,进而数组a继续接收RX FIFO中的数据,直到a中的数据达到要求。之所以采取两个数组的ping-pong Buffer结构是由DSP与串口结构的特点决定的。(假设作n点FFT)
一旦RX FIFO接受到一个字节,将导致DSP产生一个中断,那么就需要一个Buffer对其进行接收,当接收到2n个字节时,需要对其进行一次FFT(因为FFT的输入的各点是16bit的)。若n的数目较大,那么如果在n点FFT还未算完时,RX FIFO又接收到一个字节,这时将导致前面接收的字节覆盖后来接受的字节的后果,产生错误;为了避免上述情况,可以通过复杂的软件控制使FFT计算完后,再向Buffer中写新的数据,但这大大将降低数据的处理速度。所以,需要再开一个Buffer,形成ping-pong的结构,当一个Buffer中的数据进行FFT时,如果再有数据进来,可以放在另一个Buffer中,这样反复交替进行可以大大提高运算的效率和结果的准确性。
[1] [2]  下一页
         
          [/td]
        [/tr]
      
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-7-20 22:39 , 耗时 0.086392 秒, 16 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表