《TigerSHARC处理器技术及其应用》课件第9章_第1页
《TigerSHARC处理器技术及其应用》课件第9章_第2页
《TigerSHARC处理器技术及其应用》课件第9章_第3页
《TigerSHARC处理器技术及其应用》课件第9章_第4页
《TigerSHARC处理器技术及其应用》课件第9章_第5页
已阅读5页,还剩138页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章TS系列DSP系统设计实例9.1通信信号参数估计的例子9.2脉冲分选的例子9.3通信信号监测系统设计实例9.4链路口耦合构成多处理器系统9.5多DSP系统的设计实例9.1.1基于高阶循环累积量的载频估计

在移动无线通信信道中,由于存在传播延时及多普勒效应,信号的载波会出现偏移。如果检测器是相干的,那么接收机就必须估计这种载波偏移。盲前向载波偏移估计方法对于解决突发模式传输和高效率调制中的同步问题是非常有潜力的,因为它不需要很长的捕获时间,而且不需要那些浪费带宽的训练序列。因此,盲前向载波偏移估计方法经常应用于广播网络的同步,以及那些匹配滤波器前面的粗载频偏差估计环节。9.1通信信号参数估计的例子这里利用接收序列的高阶循环统计量来完成数字通信信号的盲前向载波偏移估计。接收机接收的信号可以表示为(9.1-1)定义x(n)的四阶共轭时变相关为(9.1-2)其中。将x(n)带入上式可得(9.1-3)(9.1-4)9.1.2通信信号参数分析的硬件及软件实现

通信信号参数分析的硬件组成如图9.1-1所示。这是一个零中频接收机,接收的射频信号通过正交混频器下变频到直流,本振是一个固定的自由振荡器。由于没有使用锁相本振,因此接收信号和本振的频率与相位必然存在一定的偏差。IQ两路基带信号送到AD进行量化,经过FPGA缓存后,送给DSP进行后续处理,其中包括对残留的载波频率偏差估计等。图9.1-1通信信号参数分析硬件组成下面给出在VisualDSP++5.0环境中实现基于高阶循环累积量的载频估计算法。

在实际硬件实现中IQ数据由AD量化得到,在这里为了程序的完整,首先产生了一段模拟数据。程序如下所示:

#include<stdlib.h>

#include<stdio.h>

#include<math.h>

#include<complex.h>

#include"FFTDef.h"

#defineM1024 //数据长度

#defineRAND_RANGE2147483647.0 //rand函数产生随机数的范围

#definePI3.1415927

#defineSNR5 //信噪比dB

#defineN_FFT1024 //FFT的点数

#pragmaalign4096

complex_floatc40[M]; //四阶共轭时变相关

#pragmaalign4096

complex_floats[M]; //已调复信号

#pragmaalign16

floattwiddles[MAX_FFT_SIZE]={

#include"twid1k_m.dat" //FFT旋转因子

};

floatC40_Amp[M]; //循环四阶累积量幅度,为了方便绘图,将以下三个变量设为全局变量

floatalfa[N_FFT]; //循环频率

floatS_Amp[M]; //s的FFT幅度

externvoidFFT32(floatinbuf[],floatoutbuf[],intsize,intrealOrComplex);//FFT函数声明,参见VisualDSP++ 

//平台自带的例子

intmain(intargc,char*argv[])

{

intN;

int*sc; //二进制符号序列

floatfs; //采样率Hz

floatfc; //载频Hz

floatsr; //符号速率Hz

inti,j;

floattheta,rayleigh; //相位,Rayleigh噪声

complex_floatc20;

floatsigma; //高斯白噪声方差

intN_FFT_2;

complex_floatS[M]; //s的FFT结果

complex_floatC40[M]; //循环四阶累积量

floatfMax;

floatfe; //载频偏差的估计结果

fs=320; //采样率Hz

sr=45; //符号速率Hz

fc=20; //载频Hz

N=M*sr/fs+1; //计算二进制符号的个数

sc=malloc(N*sizeof(int)); //为二进制符号分配空间

if(sc==NULL) //为二进制符号分配空间失败则终止

{

return-1;

}

for(i=0;i<N;i++) //产生二进制符号序列

{

sc[i]=(rand()%2)*2-1;

}

for(i=0;i<M;i++) //过采样以及调制

{

j=(int)(i*sr/fs)+1;

theta=2*PI*fc*i/fs;

s[i].re=sc[j]*cos(theta);

s[i].im=sc[j]*sin(theta);

}

sigma=sqrt(0.5/powf(10.0,SNR/10.0));

for(i=0;i<M;i++) //叠加高斯白噪声

{

theta=-2*PI*rand()/RAND_RANGE;

rayleigh=sigma*sqrt(-2*log(rand()/RAND_RANGE));

s[i].re=s[i].re+rayleigh*cos(theta);

s[i].im=s[i].im+rayleigh*sin(theta);

}

//对s进行FFT

FFT32((float*)s,(float*)S,N_FFT,COMPLEX_DATA);

N_FFT_2=N_FFT>>1;

for(i=0;i<N_FFT_2;i++) //求频谱幅度,FFT结果平移

{

S_Amp[i]=cabsf(S[i+N_FFT_2]);

S_Amp[i+N_FFT_2]=cabsf(S[i]);

}

for(i=0;i<M;i++) //计算四阶共轭时变相关

{

c20=cmltf(s[i],s[i]);

c40[i]=cmltf(c20,c20);

}

//对四阶共轭时变相关进行FFT

FFT32((float*)c40,(float*)c40,N_FFT,COMPLEX_DATA);

for(i=0;i<N_FFT_2;i++)//求频谱幅度,FFT结果平移

{

C40_Amp[i]=cabsf(C40[i+N_FFT_2]);

C40_Amp[i+N_FFT_2]=cabsf(C40[i]);

}

for(i=0;i<N_FFT;i++) //循环频率

{

alfa[i]=(i-N_FFT_2)*fs/N_FFT;

}

fMax=0;

fe=0;

for(i=0;i<N_FFT;i++) //搜索频谱幅度最大的频点

{

if(C40_Amp[i]>fMax)

{

fMax=C40_Amp[i];

fe=i;

}

}

fe=0.25*(fe-N_FFT_2)*fs/N_FFT; //载频偏差估计

printf("fe=%f\nHz",fe); //打印载频偏差估计值

return0;

}首先,程序中产生了一个信噪比为5dB的BPSK信号,存放在数组s[]中,对其进行谱分析,结果存为S[]。BPSK信号频谱的幅度为S_Amp[],将其频谱用VisualDSP++5.0的绘图功能绘制出来。对图形进行配置的方法如图9.1-2所示,在PlotConfiguration中选择X-YPlot,X坐标选择变量alfa[],Y坐标选择变量S_Amp[]。最终绘制的结果如图9.1-3所示,可以看出从这里恢复其载频是不容易的。然后,程序中计算四阶共轭时变相关c40[];最后,程序调用函数FFT32()计算循环四阶累积量。FFT32( )是进行快速傅立叶变换的函数,是VisualDSP++5.0环境中的一个例子,可以在安装目录下找到,限于篇幅,不在这里写出。程序运行完成后,同样可以通过绘图功能将循环四阶累积量的幅度画出来,如图9.1-4所示。可以看到在5dB的信噪比下,BPSK信号的载频仍然可以清晰地出现在4fe的地方。

程序在最后进行载频偏差估计,结果保存在变量fe中,经printf函数打印出来。图9.1-2图形绘制设置图9.1-3信噪比为5dB的BPSK信号频谱图9.1-4信噪比为5dB的BPSK信号循环四阶累积量幅度 9.2脉冲分选的例子

9.2.1PRI变换

在对雷达信号的侦察中,脉冲到达时间(TOA)是一个比较可靠的描述脉冲特性的参数。与脉冲的频率和脉宽这两个参数不同,TOA无法直接用于雷达信号的分析,而是将一组脉冲联合起来估计脉冲的脉冲重复间隔(PRI)。真实的情况往往比较复杂,多部雷达的信号经常会在同一个观察周期内到达接收机,那么这些雷达脉冲的TOA就会交织在一起,这时候对PRI的估计就变得很困难,如图9.2-1所示。较早的方法是对TOA进行自相关分析,但是自相关分析会出现谐波。为了弥补这个缺陷,本文介绍一种PRI变换算法,该算法是将脉冲序列的TOA差值变换到一个谱上,由谱峰位置估计脉冲序列所对应的PRI值,该谱也称为“PRI谱”。

图9.2-1脉冲交织的示意图设脉冲的到达时间用脉冲前沿的时间来表示。令tn(n = 0,1,2,…,N-1)为脉冲的TOA,其中N为采样脉冲数。由于这里只考虑TOA这个单一参数,可以把脉冲序列模型化为单位冲激函数的和,即(9.2-1)然后对g(t)进行积分变换,即(9.2-2)其中,τ>0,这种算法称之为PRI变换算法。|D(τ)|给出了一种PRI的谱图,在代表真PRI值的地方将出现峰值。将式(9.2-1)代入式(9.2-2),得(9.2-3)9.2.2脉冲分选硬件和软件实现

在对雷达脉冲进行分选的设计中,主要包括以下硬件:脉冲描述字(PDW)形成FPGA、分选DSP等。其硬件框图如图9.2-2所示,输入信号为视频脉冲和瞬时频率,进入分选FPGA,在分选FPGA中把瞬时频率、TOA、脉冲宽度(PW)等形成PDW,分选FPGA将所形成的PDW通过DMR0发送给分选DSP,在DSP中进行信号的分选工作,生成分析结果。图9.2-2信号分选模块的构成下面给出在DSP中进行信号分选的部分代码。在VisualDSP++5.0环境中实现前面的PRI变换算法,在实际硬件实现中TOA数据由FPGA测量得到,通过DMA送给DSP。在这里为了程序的完整,程序首先用SignalSimu()函数产生了一段模拟数据。程序如下所示:#include<defTS101.h>#include<stdlib.h>#include<math.h>#include<stdio.h>

#defineMAX_PRI25000 //最大的PRI#defineHIST_BINS2000 //直方图格子的数量

#definePRI01300 //序列1的PRI

#definePRI1900 //序列2的PRI

#definePRI2700 //序列3的PRI

#definepi3.1415927

#defineRADAR_NUM3 //三个脉冲序列交织

#defineMAX_PRI_NUM10

#defineTOA_BUF_LEN512 //定义TOA缓冲区的长度

floatfPRISpecA[HIST_BINS]; //PRI谱的幅度,为了方便绘图,将这三个变量设为全局变量

intiAutoCorr[HIST_BINS]={0}; //自相关系数

floatfThr[HIST_BINS]; //合成门限

voidSignalSimu(intiTOA[TOA_BUF_LEN]) //产生由三个序列交织在一起的脉冲序列

{

inti,k;

intiInd;

intiTimeMin;

intiTmpTOA[RADAR_NUM];

i=k=0;

iTmpTOA[0]=rand()%PRI0;//产生第一个序列的第一个脉冲TOA

iTmpTOA[1]=rand()%PRI1;//产生第二个序列的第一个脉冲TOA

iTmpTOA[2]=rand()%PRI2;//产生第三个序列的第一个脉冲TOA

while(k<TOA_BUF_LEN)

{

iTimeMin=iTmpTOA[0];

iInd=0;

for(i=1;i<RADAR_NUM;i++)//选出时间上最靠前的TOA

{

if(iTmpTOA[i]<iTimeMin)

{

iTimeMin=iTmpTOA[i];

iInd=i;

}

}

iTOA[k]=iTmpTOA[iInd];//把这个时间最靠前的TOA保存到TOA缓冲区

switch(iInd)

{

case0:

iTmpTOA[0]+=PRI0;//产生第一个序列的下一个脉冲TOA

break;

case1:

iTmpTOA[1]+=PRI1;//产生第二个序列的下一个脉冲TOA

break;

case2:

iTmpTOA[2]+=PRI2; //产生第三个序列的下一个脉冲TOA

break;

default:

break;

}

k++;

}

return;

}

intPRITrans(intiTOA[TOA_BUF_LEN],intN,intiPRIPot[MAX_PRI_NUM])

{

registerinti,j;

registerintiDiff,iBin;

registerfloatfPhase;

intiPRIPotNum; //序列个数估计

floatfPRISpecRe[HIST_BINS]; //PRI谱实部

floatfPRISpecIm[HIST_BINS]; //PRI谱虚部

floatfNoiseLevel; //噪声电平

fPRISpecRe[i]=0;

fPRISpecIm[i]=0;

}

for(j=1;j<N;j++) //PRI变换

{

for(i=j-1;i>0;i--)

{

iDiff=iTOA[j]-iTOA[i]; //脉冲序列的TOA差值

if(iDiff<MAX_PRI)

{

if(iDiff>0)

{

iBin=iDiff>>5;

fPhase=2*pi*iTOA[j]/iDiff;

fPRISpecRe[iBin]+=cos(fPhase);//计算PRI谱实部

fPRISpecIm[iBin]+=sin(fPhase);//计算PRI谱虚部

iAutoCorr[iBin]++; //计算自相关系数

}

}

else

{

break;

}

}

}

for(i=1;i<HIST_BINS;i++) //计算PRI谱的幅度

{

fPRISpecA[i]=sqrt(fPRISpecRe[i]*fPRISpecRe[i]+fPRISpecIm[i]*fPRISpecIm[i]);

}

fNoiseLevel=3.0*TOA_BUF_LEN*sqrt(32.0/iTOA[TOA_BUF_LEN-1]); //计算噪声电平

for(i=0;i<HIST_BINS;i++) //取三种门限的最大值

{

fThr[i]=0.8*iTOA[TOA_BUF_LEN-1]/(float)((i<<5)+16); //计算观测时间门限

if(fThr[i]<(iAutoCorr[i]*0.8))

{

fThr[i]=iAutoCorr[i]*0.8; //计算子谐波门限

}

if(fThr[i]<fNoiseLevel)

{

fThr[i]=fNoiseLevel;

}

}

iPRIPotNum=0;

for(i=1;i<HIST_BINS;i++) //与门限比较得出三个序列的PRI值

{

if(fPRISpecA[i]>fThr[i])

{

iPRIPot[iPRIPotNum]=(i<<5)+16;

iPRIPotNum++;

}

}

returniPRIPotNum;

}

intmain(intargc,char*argv[])

{

intiTOA[TOA_BUF_LEN];

intiRdNum;

intiPRI[MAX_PRI_NUM];

inti;

SignalSimu(iTOA); //产生由三个序列交织在一起的脉冲序列,结果放在iTOA数组中

iRdNum=PRITrans(iTOA,TOA_BUF_LEN,iPRI); //PRI变换,序列个数返回给

 //iRdNum,各PRI的值返回给iPRI数组

printf("Numberofsequences:%d\n",iRdNum); //打印序列个数的估计

for(i=0;i<iRdNum;i++)

{

printf("PRIofsequence%d:%d\n",i,iPRI[i]); //打印每个序列的PRI估计结果

}

}首先,程序中的SignalSimu()函数产生了一个由三个序列交织在一起的交织序列。然后,程序中PRITrans()进行PRI变换,计算PRI谱。作为比较,首先把序列的自相关函数(对应于全局数组iAutoCorr[])绘制在图9.2-3中,可以看到自相关函数会产生多个谐波;然后把PRI谱图(对应于全局数组fPRISpecA[])绘制在图9.2-4中,可以看到PRI变换后,PRI谱图只会在真实PRI的地方有谱线,而不会产生谐波。图中虚线为自适应门限,对应为全局数组fThr[]。图9.2-3脉冲序列的自相关系数图9.2-4脉冲序列的PRI谱和门限程序运行的最终结果如下:

Numberofsequences:3

PRIofsequence1:688

PRIofsequence2:912

PRIofsequence3:1296

可以看到算法最终估计出3个序列,并估计了每个序列的PRI值。但是,这些值与程序设置的真实值略有偏差,那是因为PRI变换的格子宽度设置较大,使得分辨率受到限制。9.3通信信号监测系统设计实例

9.3.1系统需求

1)频率扫描

按照管理终端设定的参数进行快速扫描,获取扫描的各个频率的场强值。频率扫描按频段扫描和频率表扫描两种方式进行。监测设备把各个频率的场强值输出到管理终端,由管理终端进行统计处理,显示频段时间占用瀑布图和频道占用率等。

2)信号参数测量和频谱分析

监测设备具有对电磁频谱进行分析、对已知/未知信号进行参数测试和分析的功能;提供对模拟调制信号电平、调制模式、频谱特性(如中心频率、带宽)等参数的测量值;提供数字信号电平、调制特性(如调制类别、符号速率、频移、调制星座图)、频谱特性(如中心频率、带宽)的测量值;对指定频率和分析带宽内的信号进行频谱分析。监测设备把各个信号参数的测量值输出到管理终端,由管理终端进行统计处理和显示;同时根据管理终端的指令,输出指定频带内信号谱分析数据。

3)信号解调

监测设备根据管理终端的指令,对指定信号进行解调,解调后的数据送管理终端进行监听或者存储。9.3.2设计思路

频谱监测系统由天线、监测处理设备、网络接口和控制单元、管理终端、电源等组成。

系统要求的监测范围为0.1MHz~18GHz,考虑到目前天线和微波器件的技术水平,将天线工作频段划分为4个频段,如表9.3-1所示。整个系统分为2个射频通道:一个通道为0.1~3000MHz,另一个为3~18GHz,其中0.1~30MHz、30~500MHz、0.5~3GHz共用一个射频通道,通过天线转换开关接入不同天线的信号,两个通道组合后共同覆盖的工作频率范围为0.1MHz~18GHz。监测设备的工作原理如下:天线完成对给定频谱范围的全频段、全向接收,并将接收到的信号传送给接收机;监测设备根据管理终端的指令,对指定频段进行频率扫描,完成对所监测的射频信号的变频和放大。监测设备采用中频数字接收机体制,对射频通道输出的中频信号首先进行A/D变换,进行频谱分析(FFT),得到信号频谱分布情况。信号处理器采用并行处理技术,完成对输入信号的频率、带宽、功率、工作时间等参数的测量、分析处理,同时实现对特定信号的数字化解调。图9.3-1天线及控制逻辑示意图9.3.3系统硬件设计

考虑到系统的结构及处理能力的要求,系统组成如下:

●电源模块;

●采样预处理单元;

●信号处理单元;

●网络接口和控制单元。

系统的组成和信号流向如图9.3-2所示。图9.3-2监测处理器模块构成下面根据具体的设计需求,首先给出电路的主要组成单元,然后给出器件选型。

监测处理器由单块板卡构成,主要完成信号的采样及预处理、信号处理、结果上传等功能。

具体包括以下几个功能:

(1)调理单元对中频信号进行调理,使之满足A/D变换器件的电平要求。

(2)采样单元利用A/D器件进行模/数变换,将中频信号变为数字信号,并在FPGA内对信号进行下变频、低通滤波等预处理。

(3)信号处理单元利用DSP对信号进行处理,完成频谱分析、参数估计、解调等工作,并将处理结果上传至管理单元。

(4)网络接口和控制单元负责命令的下发及处理结果的上传,以及天线和接收机的控制,协调整个系统的工作。

监测处理板包含两个通道,分别完成0.1~3000MHz和3~18GHz频段的信号采样和处理工作。下面对监测处理板核心器件的选型做一介绍。

1)高速采样单元

高速采样由信号调理放大器、高速ADC等单元组成。信号调理单元的作用是实现对模拟输入信号的放大、阻抗匹配和电平匹配,它是一个宽带放大器。系统中频频率为70MHz,最大中频带宽为BW=20MHz。信号调理单元由宽带差分放大器实现,采用ADI公司的AD8138放大器,高速ADC采用ADI公司的高速ADC芯片AD9244。由于系统最大中频带宽为20MHz,故选择采样频率为40MHz。

2)预处理单元

预处理单元利用高速FPGA实现,通过DSP总线接口送给DSP处理器,主要完成下变频、预滤波等处理。本单元集成在高速FPGA中,芯片为Altera公司的EP1C12Q208。选用该器件是因为所作的预处理运算量不大,且该系统的时钟基本都由专用的锁相环提供,所以不需要FPGA器件具有太高的性能。

3) DSP信号处理单元

监测信号处理器有两个通道,每个通道由两个DSP构成信号处理器。监测信号处理器完成对各种常见通信信号和各种非通信信号(如雷达信号)的频谱分析、频率测量、电平测量、调制类型识别处理等任务。

通信信号的模拟调制方式主要有AM、FM、CW、USB、LSB、ISB等,数字调制方式主要有ASK、FSK、MSK、PSK、QPSK、QAM等,通过调制识别、测定各项调制参数后,引导数字化解调器,恢复模拟基带信号。由于处理任务较为繁重,且通信信号的动态范围较大,因此有必要采用具有较高运算速度的专用浮点处理器,而且整个系统是一个多处理器系统,处理器之间要有高速、便捷的数据传输能力,而ADI公司的TS101对以上要求而言是一款理想的处理器。监测处理板在每个FPGA后连接两片DSP,完成信号处理工作,二者的连接通过DSP的总线完成,DSP之间则通过链路口互连。另外,为了使系统在掉电后仍能保留程序,需要外接存储器件,用于程序的存储和DSP的启动。这里选用Atmel公司的AT49BV322,其地址线宽度为21位,数据宽度为8/16可选,存储容量为4MB,作为程序存储器容量是足够的。这里需要注意的是,BMS#信号和MS0#信号与Flash的连接,需要通过跳线帽或零欧姆电阻连接到Flash的片选,在MS0#连接到片选时可对Flash进行擦除、读写操作,而在程序烧制完成后,要将BMS#连接到片选,再次上电时,DSP将从Flash启动,完成自动加载。其中直接连接Flash的DSP采用从Flash加载的模式,而剩余三片DSP则采用链路口加载的模式。四片TS101S的具体连接关系如图9.3-3所示。图9.3-3四片TS101S的加载方式

4)网络接口和管理控制单元

管理控制单元完成对整个处理系统的管理、命令下发、数据上传等任务,并要求有网络接口,而该单元的主要任务集中在管理控制而非运算上,因此选用ADI公司的BF537作为该部分的核心芯片。BF537内部集成有MAC控制器,外接一个物理层芯片即可进行网络传输,物理层芯片采用SMSC公司的LAN83C185。

由于采用了网络接口,需要在BF537内加入网络的驱动,因此需要利用ADI公司的VDK模块。VDK是一个简化的嵌入式操作系统,支持多线程处理。但该模块程序量较大,而BF537的内存只有132KB,因此除需连接存储程序用的Flash芯片以外,还需要给BF537连接SDRAM,为VDK的运行提供足够的空间。

5)时钟接口

ADC、FPGA和DSP使用40MHz时钟作为输入,利用时钟分配驱动芯片CDCF2310输出3路时钟,其中两路C40M-FPGA和C40M-DSP分别连接到FPGA和DSP的时钟输入,其余1路作为采样时钟连接ADC。

电路板中设置时钟选择开关(跳线),当单板调试工作时,使用内部40MHz晶体振荡器输出;当系统工作时,使用外部40MHz输入本振信号。此时跳线开关断开晶振输出和电源,将外部40MHz输入本振信号送给CDCF2310。

6)电源模块

电源模块为机箱内的板卡提供稳定的供电,机箱的供电电源为24VDC。需要输出的电源为:

●数字电源:+5V;

●数字电源:+3.3V;

●模拟电源:+5V;

●模拟电源:-5V。以上电源的输出采用专用的DC-DC模块实现电源的变换。注意,选用的模块要能够提供足够的功率并具有一定裕量,以保证系统稳定的工作及延长电源的工作寿命。板内需要的其他电源利用各种电源转换芯片完成,以TS101S的供电为例。TS101S需要的电源有两种:3.3V的I/O电源和1.2V的内核电源,分别采用TI公司的TPS75933和TPS78601进行电源变换,为板内的四片TS101供电。电源变换关系如图9.3-4所示。图9.3-4电源变换示意图图9.3-5系统构成及信号流向图整个系统的工作流程如下:

(1)由管理单元的BF537接收到上位机的命令后,利用工作模式字通知各个单元下一步要进行的工作,用BF537的UART口发送要监测的信号的中心频率、带宽,并用GPIO口发送用于天线切换的码字。

(2)射频信号通过天线到达接收机,通过接收机将待监测频段的射频信号转化为70MHz的中频信号,中频信号经过信号调理放大器AD8138后,完成信号的放大、阻抗匹配和电平匹配。

(3)调理后的中频信号进入AD9244以后,进行A/D变换,将模拟信号变为数字信号。

(4)FPGA接收AD9244的数字信号,进行预处理,如下变频、滤波、采样率变换等处理,并将处理结果通过TS101的总线发送至TS101。

(5)第一片TS101通过32位宽的数据总线与FPGA连接,在系统时钟为40MHz时,数据的吞吐量最大可以达到40M × 32bit。TS101接收到一次完整采样数据,如4096个采样数据后,就可进行FFT变换、求模等运算,并将结果通过链路口传至下一片TS101。

(6)第二片TS101通过链路口接收中间处理结果,进行后续的处理,如调制类型识别、信号参数提取、信号解调等。整个处理完成后,通过总线将处理结果发送至双口RAM,并通过与FLAG信号相连的GPIO口通知BF537该通道处理结果已送至双口RAM。

(7) BF537接到通知后通过总线读取双口RAM内的处理结果,并按照协议打包后将处理结果通过以太网上传至上位机。至此,一条命令执行结束。

上述流程是典型的串行工作模式,为了提高工作效率,最大限度地利用系统的处理资源,通常采用流水线式的工作模式,具体可参考8.8.3节。9.3.4系统软件设计

1.调幅信号解调

调幅信号的表达式为(9.3-1)其中:为信号振幅,m(t)为调制信号,ma为调幅系数。采用的解调算法为平方法,首先对信号进行平方,得到(9.3-2)经过低通滤波滤除高频分量,然后开方,就可输出信号的包络。

AM信号解调子程序:

AM_demodulation_m:

j10=Orig_sig;; //存放待解调数据

j11=j10+1;;

j13=AM_FM_mode+31;; //前面要补31个数,以适应低通滤波器子程序的要求

lc0=2048;;

_Loop_AM_mode:

xr0=[j10+=2];;yr0=[j11+=2];;

fr0=r0*r0;;

xr1=yr0;;

xfr2=r0+r1;;

[j13+=1]=xr2;;

ifnlc0e,jump_Loop_AM_mode(abs)(np);;

//低通滤波

j0=AM_FM_mode;;

j2=Fft_orig_mode;;

k1=k31+coeffs_am_LPF+(L1-2);;

kb1=k31+coeffs_am_LPF;;

callFir_lp(abs)(np);; //调用低通滤波器子程序

//将前一次后31个原始数据补在下一次的开头

j0=AM_FM_mode+2048;;

j1=AM_FM_mode;;

lc0=31;;

_Loop_fir_fill_AM:

xr1=[j0+=1];;

[j1+=1]=xr1;;

ifnlc0e,jump_Loop_fir_fill_AM(abs)(np);;

//开方、乘放大系数,调整输出值至一合理值

xr1=AM_parametre;;

j1=Fft_orig_mode;;

j2=Fft_orig_mode;;

lc0=2048;;

_Loop_multi_AM_parametre:

xr2=[j1+=1];;

xfr3=RSQRTSr2;;

xfr2=r2*r3;;

xfr2=r2*r1;;

xsr2=fixxfr2;;

[j2+=1]=xr2;;

ifnlc0e,jump_Loop_multi_AM_parametre(abs)(np);;

2.调频信号解调

调频信号的一般表达式为(9.3-3)这里采用的算法是首先求出接收信号的相位信息,然后对相位进行解缠绕处理,最后对解缠绕后的相位信息进行差分,即可得到调制信息。

FM解调子程序:

FM_demodulation_m:

j10=Orig_sig;;

j11=Fft_lp_mode;;

j12=Fft_sig;;

j13=Fft_orig_mode;;

j14=Fft_lp_mode;;

xr21=pi;;

xfr22=r21+r21;;///2*pi

xr30=0.0;;//c(i)

xr31=0.0;;//c(i-1)

xr29=0.0;;//ip(i-1)

//解缠绕

lc0=2048;;

_Loop_atan2f:

xr5=[j10+=1];;//x

xr4=[j10+=1];;//y

call_atan2f(abs)(np);;//atan(y,x)

xr30=xr31;;///c(i)=c(i-1);

[j12+=1]=xr8;;

xfr10=r8-r29;;///ip(i)-ip(i-1)

xfcomp(r10,r21);;

ifnxale;do,xfr30=r31-r22;;

xfr10=r29-r8;;

xfcomp(r10,r21);;

ifnxale;do,xfr30=r31+r22;;

xr31=xr30;;

xr29=xr8;;

xfr8=r8+r31;;//d(i)

[j11+=1]=xr8;;

ifnlc0e,jump_Loop_atan2f(abs)(np);;

//计算解缠绕后的差分

j12=Fft_lp_mode;;

j13=j12+1;;

j14=AM_FM_mode+31;; //前面补了19(N1-1)个数

lc0=2047;;

_Loop_diff:

xr0=[j12+=1];;

xr1=[j13+=1];;

xfr1=r1-r0;;

[j14+=1]=xr1;;

ifnlc0e,jump_Loop_diff(abs)(np);;

[j14+0]=xr1;;

//低通滤波

j0=AM_FM_mode;;

j2=Fft_orig_mode;;

k1=k31+coeffs_am_LPF+(L1-2);;

kb1=k31+coeffs_am_LPF;;

callFir_lp(abs)(np);;

//将前一次后19个原始数据补在下一次的开头

j0=AM_FM_mode+2048;;

j1=AM_FM_mode;;

lc0=31;;

_Loop_fir_fill:

xr1=[j0+=1];;

[j1+=1]=xr1;;

ifnlc0e,jump_Loop_fir_fill(abs)(np);;

//乘放大系数

xr1=FM_parametre;;

j1=Fft_orig_mode;;

j2=Fft_orig_mode;;

j3=Fft_mode;;

lc0=2048;;

_Loop_multi_FM_parametre:

xr2=[j1+=1];;

[j3+=1]=xr2;;

xfr2=r2*r1;;

xsr2=fixxfr2;;

[j2+=1]=xr2;;

ifnlc0e,jump_Loop_multi_FM_parametre(abs)(np);;9.4链路口耦合构成多处理器系统

TS处理器片上有四个链路口,每个链路口都由8位双向数据线和另外三根控制线构成。DSP的链路口可以实现整个系统中多个DSP之间的点对点通信。这样,除了外部总线外,系统中的DSP之间提供了另外一个通信通道。链路口也可以实现DSP与外围其他设备的通信,如FPGA等,只要其通信协议与链路口的通信协议相同。通常认为,采用链路口连接数据传输率较低,不太适合于高速信号处理机。但实际上,TS系列处理器提供的链路口传输数据率与外部总线的数据传输速率很高,足以满足雷达信号处理机、声纳信号处理机等高速信号处理的要求。TS101S每个链路口的数据传输率可高达250MB/s(核时钟为250MHz),四个链路口总的数据吞吐率可达1GB/s。采用链路口连接的多处理器系统,大大降低了硬件设计的难度,PCB布线也更容易实现。采用链路口连接的多处理器系统,其特点是:

(1)仅需链路口实现DSP片间通信。

(2)实现无缝连接。

(3)单链路口通道数据传输速率较共享总线方式低,总的传输速率高于共享总线方式。

(4)无总线仲裁问题,各DSP程序可以独立设计。

(5)片间引线少,PCB板设计容易,PCB板层数可以大为减少。9.4.1处理器系统组成

下面以一个链路口耦合的多处理器雷达信号处理机作为实例,详细说明链路口构成的多处理器的设计过程。

系统硬件框图如图9.4-1所示。图9.4-1

信号处理机硬件框图为了简化系统硬件,减少DSP片间连线,系统的6个DSP以松耦合的链路方式进行连接。DSP1通过外部DMA方式读入中频解调后的I、Q两路数据,DSP1对读入数据进行脉冲压缩(匹配滤波),脉冲压缩后再进行二次对消,消除固定杂波。DSP1将处理后的数据按距离单元通过链路口0、1分别发送给DSP2、DSP4。DSP2、DSP4进行动目标检测(MTD),采用滑窗加权FFT实现窄带多谱勒滤波器组。DSP2、DSP4完成MTD后,将对应每个距离单元的16个输出数据通过链路口分别送到DSP3和DSP5。DSP3、DSP5先进行求模运算,再进行恒虚警计算。DSP3、DSP5处理后的数据经链路口传输到DSP6,DSP6先对距离单元内的16个输出进行门限处理,选择其中最小杂波剩余值作本单元的输出。门限处理后,DSP6还应完成视频积累。视频积累采用简单累加求平均方式,以避免反馈积累的拖尾现象。视频数据以DMA方式通过外部口送出,输出到显示单元进行显示。9.4.2脉冲压缩和固定杂波对消处理

图9.4-2脉冲压缩滤波器算法框图总距离单元数为1200,需要做2048点复数FFT。2048点复数FFT完成后,它必须和预先存储好的匹配滤波器系数H(k)相乘,需要做2048个复数乘法,相乘结果还需做2048点复数IFFT以获得脉压结果。TS101S完成2048点复数FFT(IFFT)大约需要100

s(工作在250MHz)。我们可以充分利用TS101S的双运算模块、单指令多数据(SIMD)的特点,同时进行两个距离单元的复数乘法,完成2048个复数乘法仅需25

s。固定杂波对消采用二次对消器,其差分方程为y(n) = x(n)-2x(n-1)+x(n-2)(9.4-1)对每个距离单元,它需要取三个数,做两个减法、一个加法,存储一个数,完成1200个距离单元的二次对消大约需要25

s。故脉冲压缩和固定杂波二次对消只需要一片DSP便可完成,且还有较多时间富裕。9.4.3动目标检测(MTD)

用FFT实现窄带多普勒滤波器组时,为了降低旁瓣,系统采用滑窗加权FFT,权系数为海明权,即(9.4-2)其中S(n)为雷达回波序列,(9.4-3)

TS101S完成16点加权复数FFT大约需要80个指令周期(0.32

s),距离单元数为1200,所以共需384

s。部分参考程序代码如下:

//J0—数据起始地址,K3—窗函数首地址,K0—中间结果地址

//J1—蝶形系数地址,K2—最后FFT结果地址,K1—第三级蝶形运算后最后6点首地址

#include"defts101.h"

#defineUsingTimer0//1=使用定时器,0=使用外部同步

#defineN32

#defineLENGTH2//距离单元间隔

//_____________________________________________

.sectiondata1;

.align4;

.VARDATAIN[64]="e:\DATAIN.DAT";

.VARTWINDES[20]="e:\twindes.dat";

//________________________________________________

.sectiondata2;

.VARINTERBUFF[32]; //FFT中间结果

.VARWINDOWS[16]="e:\windows.dat"; //窗系数

.VARRESULT[64]; //FFT最后结果

//________________________________________________

.sectionprogram;

//_____________________InitializeDSP_______________________

xr0=_RtiDirectly;;

ivdma0=xr0;; //SetDma0interruptvector=_SimDmaIrq.

ivdma1=xr0;; //SetDma1interruptvector=_SimDmaIrq.

ivdma4=xr0;; //SetDMAchannel4interruptvector=_SimDmaIrq.

ivdma9=xr0;; //SetDMAchannel9interruptvector=_SimDmaIrq.

ivsw=xr0;; //Setsoftwareexceptioninterruptvector=_RtiDirectly.

ivhw=xr0;; //Sethardwareerrorinterruptvector=_RtiDirectly.

ivbuslk=xr0;; //Setbuslockinterruptvector=_RtiDirectly.

virpt=xr0;; //Setvectorinterruptvector=_RtiDirectly.

ivtimer1hp=xr0;; //Settimer1high-priorityinterruptvector=_RtiDirectly.

ivtimer0hp=xr0;; //Settimer0high-priorityinterruptvector=_RtiDirectly.

ivirq3=xr0;; //Set/IRQ3interruptvector=_RtiDirectly.

ivirq2=xr0;; //Set/IRQ2interruptvector=_RtiDirectly.

ivirq1=xr0;; //Set/IRQ1interruptvector=_RtiDirectly.

ivirq0=xr0;; //Set/IRQ0interruptvector=_RtiDirectly.

ivdma2=xr0;; //SetDMAchannel2interruptvector=_RtiDirectly.

ivdma3=xr0;; //SetDMAchannel3interruptvector=_RtiDirectly.

ivdma5=xr0;; //SetDMAchannel5interruptvector=_RtiDirectly.

ivdma6=xr0;; //SetDMAchannel6interruptvector=_RtiDirectly.

ivdma7=xr0;; //SetDMAchannel7interruptvector=_RtiDirectly.

ivdma8=xr0;; //SetDMAchannel8interruptvector=_RtiDirectly.

ivdma10=xr0;; //SetDMAchannel10interruptvector=_RtiDirectly.

ivdma11=xr0;; //SetDMAchannel11interruptvector=_RtiDirectly.

ivdma12=xr0;; //SetDMAchannel12interruptvector=_RtiDirectly.

ivdma13=xr0;; //SetDMAchannel13interruptvector=_RtiDirectly.

ivlink0=xr0;; //Setlinkport0interruptvector=_RtiDirectly.

ivlink1=xr0;; //Setlinkport1interruptvector=_RtiDirectly.

ivlink2=xr0;; //Setlinkport2interruptvector=_RtiDirectly.

ivlink3=xr0;; //Setlinkport3interruptvector=_RtiDirectly.

ivtimer0lp=xr0;;//Settimer0low-priorityinterruptvector=_RtiDirectly.

ivtimer1lp=xr0;;//Settimer1low-priorityinterruptvector=_RtiDirectly.

//================主程序=================//

K30=1;; //清0标志位

LC0=LENGTH;; //距离单元数

COMP(K30,1);; //判断是否进行清0操作

XR8=0X0;; //数据清0所用寄存器

XR9=0X0;; //数据清0所用寄存器

IFKEQ,JUMPCLEARPROCESS(abs);;

IDLE;;

MTDPROCESS:CALLFFT16;; //16点复数FFT

J0=J0+2;; //下一距离单元FFT首地址

IFNLC0E,JUMPMTDPROCESS;;

CLEARPROCESS:J0=J31+DATAIN;;

L[J0+2*LENGTH]=XR9:8;;L[J0+4*LENGTH]=XR9:8;;

L[J0+6*LENGTH]=XR9:8;;L[J0+8*LENGTH]=XR9:8;;

L[J0+10*LENGTH]=XR9:8;;L[J0+12*LENGTH]=XR9:8;;

L[J0+14*LENGTH]=XR9:8;;L[J0+16*LENGTH]=XR9:8;;

L[J0+18*LENGTH]=XR9:8;;L[J0+20*LENGTH]=XR9:8;;

L[J0+22*LENGTH]=XR9:8;;L[J0+24*LENGTH]=XR9:8;;

L[J0+26*LENGTH]=XR9:8;;L[J0+28*LENGTH]=XR9:8;;

L[J0+30*LENGTH]=XR9:8;;

CALLFFT16;;

J0=J0+2;; //下一距离单元FFT首地址

IFNLC0E,JUMPCLEARPROCESS;;

IDLE;;9.4.4恒虚警处理

图9.4-3恒虚警算法框图充分利用TS101S的双运算模块,同时并行处理两个距离单元的两个通道,完成1200个距离单元的16个通道的恒虚警计算共需500

s,可由DSP3和DSP4并行处理完成。部分程序代码如下:

J0=SOURCE;; //通道一数据源

J1=SOURCE1;; //通道二数据源

J2=J0;; J3=J0+1;;J4=J1;;J5=J1+1;;

K0=DESTINATION;; //通道一数据目的

K1=DESTINATION1;; //通道二数据目的

XYR0=0;; XYR1=0;; XYR2=0;; XYR3=0;;

XYR4=8.0;; XYR5=0.797885;; //系数

XYR6=0;; XYR7=0;; XYR8=8.0;; XYR9=1.0;;

XYR10=0;;XYR11=0;; XYR14=0; XYR15=0;;

XYR16=0;; XYR17=0;; XYR18=0; XYR19=0;;

XYR20=8.0;; XYR21=0.797885;;

XYR22=0;; XYR23=0;; XYR24=0;; XYR25=0;;

XR15:14=L[J2+=2];; YR15:14=L[J4+=2];;

XR3=[J2+(-1)];; YR3=[J4+(-1)];;

XR0=[J2+0];; YR0=[J4+0];;

XFR3=R3+R0;XR0=[J2+1];;

XFR6=R14*R4;YFR3=R3+R0;YR0=[J4+1];;

XFR3=R3+R0;XR0=[J2+2];YFR6=R14*R4;;

XFR8=R8+R9;YFR3=R3+R0;YR0=[J4+2];;

YFR8=R8+R9;XFR3=R3+R0;XR0=[J2+3];;

YFR3=R3+R0;YR0=[J4+3];; XFR3=R3+R0;XR0=[J2+4];;

YFR3=R3+R0;YR0=[J4+4];; XFR3=R3+R0;XR0=[J2+5];;

YFR3=R3+R0;YR0=[J4+5];; XFR3=R3+R0;XR0=[J2+6];;

YFR3=R3+R0;YR0=[J4+6];; XFR3=R3+R0;XR0=[J2+7];;

YFR3=R3+R0;YR0=[J4+7];;

//****通道一和通道二的第一和第二点****//

XFR19=R3+R0;XFR7=R3*R5;XR18=XR14;;

YFR19=R3+R0;YFR7=R3*R5;YR18=YR14;;

XFR19=R19-R15;XFR22=R15*R8;; YFR19=R19-R15;YFR22=R15*R8;;

XFR7=RECIPSR7;; XFR24=R19+R18;YFR7=RECIPSR7;;

XFR6=R6*R7;YFR24=R19+R18;;

XFR24=R24*R21;YFR6=R6*R7;XYFR8=R8+R9;;

XFR2=R14+R15;[K0+=1]

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论