基于DSP与FPGA的实时功率谱分析系统设计

摘要: 设计了一套实时功率谱分析系统,主要用于信号的实时功率谱分析。采用dsp 浮点芯片tms32c6713 作为系统的主处理单元,负责进行功率谱分析; fpga 芯片spartan xc2s200 为主控制单元,并通过cy7c68013 usb 芯片与基于labview 的上位机进行通信。为了保证系统的实时性,在dsp 中使用了实时操作系统内核dsp/bios. 它提供了抢占式多线程、硬件抽象、与寄存器配置等功能。分别采用频率为25 hz、100 hz 的正弦信号对该系统进行标定。
0 引言 功率谱分析在现代工业中有着极为广泛的应用[1 - 3],如石油探测、噪声分析、机床故障判断等。针对许多应用中对功率谱分析的实时性要求,针对工业中常见信号的特征,设计了该系统,该系统在诸多工业应用的功率谱分析中是可以通用的。
以ti dsp 浮点芯片tms32c6713 为主处理单元,fpga 芯片spartan xc2s200 为控制单元,使用cy7c68013 usb 芯片与基于labview 的上位机进行通信。同时系统使用了实时操作系统内核dsp/bios. dsp/bios 是为集成开发环境ccs 开发的一个尺寸可伸缩的实时内核,是为需要实时调度与同步而设计的,提供了抢占式多线程,硬件抽象,与寄存器配置等功能[4]。
1 功率谱分析方法 系统的功率谱分析采用了非参量方法。具体流程是先使用汉明窗对信号截断为若干段长为l 的子信号段,然后对各子信号段分别进行功率谱估计,最后对各信号段的功率谱取算数平均值。对长为l 的子信号段 的周期图功率谱估计方法如下:
2 系统设计 2. 1 系统整体设计
系统整体设计如图1 所示,fpga 控制adc 芯片ad9240 进行采样,当adc 采满512 ×14 bit 数据之后通过通用i /o 口( gpio) 中断dsp 芯片,dsp 芯片通过增强型dma( edma) 将数据读入dsp进行功率谱估计,dsp 处理完数据后将数据交给fpga,fpga 再通过usb 芯片cy7c68013 将数据传输给上位机显示。
图1 系统结构
2. 2 滤波放大电路
系统放大滤波电路是由ada4004 - 4 组成的滤波放大电路,由四阶带通组成,通带范围为10 hz ~ 3 khz,放大倍数为1000倍,如图2 所示。
图2 带通滤波放大电路
2. 3 dsp 模块
dsp 模块是整个系统的处理核心。为了保证系统的时序,使用了实时操作系统内核dsp/bios 进行任务调度。在dsp/bios 中,编写了3 个线程: 读a/d 数据的线void ad( ) ,做fft的线程void fft( ) ,写usb 的线程void usb_write( ) 。3 个线程之间通过semaphore 通信。
下面以void usb_write( ) 线程为例说明:
void usb_write( )
{
while( 1)
{
sem_pend( &fftcomplish,sys_forever) ; / /等待fft 的完成
usbwrite( ( float* ) power,n > > 1) ; / /前面已经定义好的函数,将fft 后的数据传输走
sem_post( &usbwritecomplish) ; / /告诉其他线程fft 后的数据已经传输完成
}
}
adc 芯片由fpga 控制,并通过fpga 读取采样后的数据,当fpga 读满大小为512 × 14 bit 的buffer 后中断dsp,dsp 的线程void ad( ) 通过edma 从fpga 的buffer 读取512 × 14 bit数据,读取完成后触发fft 线程。
fft 运算线程void fft( ) 负责对void ad( ) 读入的512 ×14 bit数据进行fft 变换,并最后转化为功率谱。fft 模块是系统计算量最大的部分,考虑到系统的性能,使用库dsp67x. lib,调用它的库函数void dspf_sp_cfftr2_dit( float* x, float* w,short n) 进行基2 fft 计算。
当fft 线程完成后,会触发void usb_write( ) 线程,将功率谱分析的结果传输给fpga,fpga 再将数据传输给由fpga 控制的usb 芯片cy7c 68013。
2. 4 fpga 模块
fpga 模块使用verilog hdl ( hdl: hardware discription language) 语言编写。fpga 采用spartan2 系列xc2s200 芯片。该模块是系统的控制核心,控制着adc 芯片与usb 芯片,以及通过dsp 的emif 接口与dsp 进行通信。
对于adc 芯片,fpga 通过接受用户在上位机设定的采样频率,为adc 芯片提供该频率的时钟信号,使adc 芯片工作在该采样频率下; 同时在adc 时钟上升沿到来时读取一次数据adc 所采样的数据,并存放在fpga 内部,当fpga 采集完512× 14 bit 数据之后,中断dsp 芯片,dsp 芯片将数读走。fpga传输数据给dsp 的verilog 代码如下:
assign ext_int = ( data_addr = = 511) ; / /采完512 个数后fpga通过dsp 芯片的外部中断引脚中断dsp 芯片
reg[13: 0]ted_o;
always @ ( ce[2] or tea or dout)
if ( ~ ce[2]&& ( tea = = 4’b0000) )
ted_o = dout;
assign ted = ( ~ aoe) ? ted_o : 16’bz; / /dsp 芯片读取fpga内部数据
usb 芯片由fpga 芯片控制。当fpga 收到从dsp 芯片传输过来的功率谱分析数据后就会将数据交给usb 芯片的端点0 进行传输,usb 芯片将该数据传输给labview 上位机显示。
2. 5 usb 模块
usb 芯片采用了ez - usb fx2 系列芯片之中的cy7c68013,该芯片符合usb 2. 0 标准,可以工作在usb 2. 0 的最大速度下。系统中,usb 芯片工作在slave fifo 模式下。
2. 6 adc 模块
adc 芯片选择14 bit 芯片ad9240,由fpga 为其提供时钟。
2. 7 上位机模块
上位机软件采用labview 编写,对功率谱估计的结果实时显示。首先,需要安装ni-visa,ni-visa 是一个用来与各种仪器总线进行通讯的高级应用编程接口( api) [5 - 6]。安装完成之后,还需要安装usb 设备驱动程序。之后,就可以在lab-view 上实现与usb 设备的通信。
3 系统标定 使用spf20 信号发生器产生频率分别为25 hz、100 hz,幅度为0. 5 mv 的正弦波信号对该功率谱分析系统进行标定,在上位机上对adc 采样频率设定为512 hz.
图3 为使用该系统对上述正弦信号功率谱分析结果。谱线高度为0. 125 mw/hz 左右( 由于有噪声,所以略有浮动) ,这与正弦信号的理论功率谱是吻合的,由此完成系统的标定。
图3 labview 显示的正弦信号的功率谱分析结果
4 结束语 利用dsp 芯片与fpga 芯片设计了一套功率谱分析系统,并使用了实时操作系统内核dsp/bios,可以保证系统的实时性,完全可以满足对实时性要求很高的工业场合; 同时该系统使用方便,成本较低,配合各类传感器,在工业的许多领域具有很好的使用价值。

3D打印是什么?3D打印给生活带来了什么?
关于第二代0.18微米5V/40V BCD工艺平台的介绍和应用
百度AI开发者大会有什么内容
英特尔德国马格德堡厂1.5nm先进制程领跑芯片制造
特斯拉欲收购LG化学正计划分拆的电池业务10%的股份
基于DSP与FPGA的实时功率谱分析系统设计
关于MATLAB/Simulink技术研讨会—智能自主系统开发分析和介绍
长城最新发布的这款WEY-Pi4-VV7x霸气十足,跨界范不输宝马X6,预售价18万起
华为Mate30系列设计背后的故事
如何实现可穿戴设计的蓝牙连接
基于MSP430内嵌温度传感器的温度告警系统
有哪些已经融入到了生活中的物联网技术应用
智能快递时代来临!这个“双11”你的购物车清空了吗?
我国新能源设备制造业将进入“掘金时代”
什么是滤波电路 ?有源滤波电路和无源滤波的区别及识别方法
Oukitel投入了大量的金钱和精力来升级相机
对比CYT1000AE,为什么更多人愿意使用这款高压线性恒流icSM2082EGS?
protel上些常用的快捷键
变频控制系统单片机外围电路设计探讨
浅析储能电池多元化技术升级趋势