《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所示??梢钥吹皆?dB的信噪比下,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

提交評論