冀志軒
?
一種干涉合成孔徑聲納信號(hào)源系統(tǒng)的軟件設(shè)計(jì)
冀志軒
(海軍駐沈陽彈藥軍事代表室,沈陽 110045)
本文介紹了干涉合成孔徑聲納信號(hào)源系統(tǒng)的軟件設(shè)計(jì)過程,主要闡述了SOPC的系統(tǒng)設(shè)計(jì)過程、DMA數(shù)據(jù)傳輸方法、信號(hào)產(chǎn)生方法等。最后通過系統(tǒng)的部分測(cè)試結(jié)果表明能夠達(dá)到要求。
干涉合成孔徑聲納 信號(hào)源 軟件 設(shè)計(jì)
干涉合成孔徑聲納信號(hào)源系統(tǒng)分成信號(hào)傳感器數(shù)據(jù)采集子系統(tǒng)、發(fā)射信號(hào)產(chǎn)生子系統(tǒng)等。本文從SOPC的系統(tǒng)設(shè)計(jì)過程、DMA數(shù)據(jù)傳輸方法、信號(hào)產(chǎn)生方法等方面對(duì)該聲納信號(hào)源系統(tǒng)進(jìn)行了軟件設(shè)計(jì)。
在干涉合成孔徑聲納信號(hào)源系統(tǒng)的軟件設(shè)計(jì)中,絕大部分組件都是Altera公司提供的IP,可以很方便的集成到SOPC Builder中去。如NiosII軟核,LAN91C111網(wǎng)絡(luò)接口,SDRAM和Flash控制器等,都是直接可以應(yīng)用的。但也有一些自己開發(fā)的IP核,如DA的控制接口,通過按照Avalon總線接口標(biāo)準(zhǔn)設(shè)計(jì),同樣可以很容易的集成到SOPC系統(tǒng)中去。整個(gè)系統(tǒng)在SOPC Builder GUI下如圖1所示。
DMA控制器用于執(zhí)行從源地址空間到目的地址空間的直接存儲(chǔ)器訪問數(shù)據(jù)傳輸[2-3]。源和目的可以是Avalon從外設(shè)或是存儲(chǔ)器內(nèi)的一段地址范圍。DMA控制器可以同具有流控制的外設(shè)聯(lián)合使用,可以進(jìn)行有固定和可變長(zhǎng)度的數(shù)據(jù)處理。當(dāng)DMA傳輸結(jié)束,DMA控制器可以發(fā)一個(gè)中斷請(qǐng)求信號(hào)。
DMA數(shù)據(jù)傳輸定義為一個(gè)或多個(gè)由DMA控制器內(nèi)核發(fā)起的Avalon傳輸?shù)男蛄?。DMA控制器具有兩個(gè)Avalon主端口:一個(gè)主讀端口和一個(gè)主寫端口。一個(gè)Avalon從端口用于控制DMA,如圖2所示。
Nios II中的DMA傳輸有以下三種形式:
1)存儲(chǔ)器到存儲(chǔ)器
這種情況下需要同時(shí)打開發(fā)送通道和接收通道,而且源地址和目標(biāo)地址都是自增的。
2)存儲(chǔ)器到外設(shè)
這種情況下只要打開發(fā)送通道,而且源地址是自增的,目標(biāo)地址是固定的。
3)外設(shè)到存儲(chǔ)器
這種情況下只要打開接收通道,而且源地址是固定的,目標(biāo)地址是自增的。
在本設(shè)計(jì)中,由于是采集傳感器的數(shù)據(jù),屬于外設(shè)到存儲(chǔ)器這一類,源地址是固定的,目標(biāo)地址隨數(shù)據(jù)遞增。
進(jìn)行一次DMA傳輸?shù)幕静僮魇牵菏紫仍O(shè)定DMA要傳輸?shù)臄?shù)據(jù)量,當(dāng)DMA傳輸完成后,產(chǎn)生一個(gè)中斷,在中斷服務(wù)程序中可以再次發(fā)起傳輸,這樣可以對(duì)傳感器的數(shù)據(jù)進(jìn)行不斷采集。
采用定長(zhǎng)方式,對(duì)同樣是定長(zhǎng)數(shù)據(jù)包的傳感器可以很好的采集其數(shù)據(jù)。但對(duì)于數(shù)據(jù)包不是定長(zhǎng)的傳感器采用定長(zhǎng)數(shù)據(jù)傳輸?shù)脑?,在一次DMA傳輸結(jié)束與發(fā)起下一次傳輸之間,會(huì)有數(shù)據(jù)的丟失,在實(shí)際調(diào)試時(shí),也證實(shí)了這一點(diǎn)。
圖1 SOPC Builder GUI
圖2 DMA控制器內(nèi)核原理圖
由于采用Altera DMA控制器只定長(zhǎng)方式傳輸存在如上述所描述的問題,所以要對(duì)其進(jìn)行改善,以解決上述問題。
對(duì)數(shù)據(jù)丟失的原因進(jìn)行分析可知,造成數(shù)據(jù)丟失是因?yàn)樵谝淮蜠MA傳輸結(jié)束后,產(chǎn)生中斷,在中斷服務(wù)程序中發(fā)起新的傳輸。也就是說在系統(tǒng)響應(yīng)中斷服務(wù)函數(shù)的過程中,傳感器數(shù)據(jù)仍在發(fā)送,而此時(shí)DMA沒有在工作,所以造成了數(shù)據(jù)的丟失。
解決的方案是想辦法讓DMA在一次傳輸完成后,自動(dòng)加載初始目標(biāo)地址并啟動(dòng)新的傳輸,即讓DMA工作在一種循環(huán)模式。這樣就不會(huì)因?yàn)檐浖系那袚Q而造成數(shù)據(jù)丟失。同時(shí),還要產(chǎn)生一個(gè)半傳輸完成中斷,即在DMA傳輸完成設(shè)定數(shù)據(jù)的一半時(shí),產(chǎn)生一個(gè)中斷,此時(shí)軟件可以對(duì)這前一半的數(shù)據(jù)進(jìn)行處理,同時(shí)進(jìn)行后一半數(shù)據(jù)的DMA傳輸。當(dāng)傳輸完成時(shí)對(duì)后一半數(shù)據(jù)進(jìn)行處理,這樣相當(dāng)于是在進(jìn)行一個(gè)乒乓操作,而不會(huì)引起數(shù)據(jù)覆蓋問題。
具體操作也很簡(jiǎn)單,在SOPC Builder中加入DMA控制器后,會(huì)生成相應(yīng)的HDL描述文件,在工程目錄下找到這個(gè)文件并對(duì)其進(jìn)行修改,主要任務(wù)有:
1)增加幾個(gè)備份寄存器。
如:reg [23:0] half_length; 半長(zhǎng)度寄存器
reg [23:0] length_temp; 長(zhǎng)度備份寄存器
reg [23:0] writeaddress_temp; 初始目標(biāo)地址備份寄存器
reg hdone; 半長(zhǎng)傳輸完成標(biāo)志位
2)增加一個(gè)半完成中斷信號(hào)。
Assign dma_ctl_irq = i_en & (done || hdone);
3)當(dāng)傳輸完成時(shí)重新加載初始值。
//重新加載初始目標(biāo)地址
always @(posedge clk or negedge reset_n)
begin
if (reset_n == 0)
writeaddress <= 24'h0;
else if (clk_en)
if(done_transaction & ~d1_done_transaction) writeaddress <= writeaddress_temp;
else
writeaddress <= p1_writeaddress;
End
//重新加載初始長(zhǎng)度值
always @(posedge clk or negedge reset_n)
begin
if (reset_n == 0)
length <= 24'h0;
else if (clk_en)
if(done_transaction & ~d1_done_transaction) length <= length_temp;
else
length <= p1_length;
end
4)在NiosII中修改DMA的寄存器文件。
//狀態(tài)寄存器中半傳輸完成中斷位
#define ALTERA_AVALON_DMA_STATUS_HALFDONE_MSK (0x20)
#define ALTERA_AVALON_DMA_STATUS_HALFDONE_OFST
#define IOADDR_ALTERA_AVALON_DMA_HALFLENGTH(base) __IO_CALC_ADDRESS_NATIVE(base, 4)
#define IORD_ALTERA_AVALON_DMA_HALFLENGTH(base) IORD(base, 4)
#define IOWR_ALTERA_AVALON_DMA_HALFLENGTH(base, data) IOWR(base, 4, data)
通過實(shí)驗(yàn)證明,采用這種循環(huán)模式后,可以有效的解決在DMA切換時(shí)數(shù)據(jù)丟失的問題,提高了DMA傳輸效率。
在數(shù)據(jù)采集的過程中,需要對(duì)接收到的數(shù)據(jù)進(jìn)行打包,校驗(yàn)等工作,數(shù)據(jù)接收與發(fā)送的控制流程如圖3中(1)所示,數(shù)據(jù)處理過程如圖3中(2)所示。
圖3 數(shù)據(jù)采集工作流程
在顯示控制臺(tái)端(其控制界面如圖4所示),當(dāng)啟動(dòng)傳感器數(shù)據(jù)上傳后,網(wǎng)絡(luò)接將收到的數(shù)據(jù)寫入文件中,以O(shè)ctans數(shù)據(jù)文件為例,在Octans數(shù)據(jù)包中有時(shí)間信息,每一個(gè)數(shù)據(jù)包的時(shí)間間隔為200 ms。因此從時(shí)間信息可判斷有沒有丟數(shù)據(jù)包的情況。在數(shù)據(jù)包中的每一行數(shù)據(jù)信息結(jié)尾處,都有兩位數(shù)據(jù)信息校驗(yàn)位,可以通過這兩位對(duì)整行數(shù)據(jù)進(jìn)行校驗(yàn),這樣可驗(yàn)證數(shù)據(jù)是否出錯(cuò)。Octans兩個(gè)連續(xù)的數(shù)據(jù)包信息如下:
$HEHDT,269.15,T*16
$PHTRO,0.07,M,0.31,B*5B
$PHLIN,0.000,0.000,0.000*51
$PHSPD,0.000,0.000,0.000*5D
$PHROT,0.000,0.000,0.000*53
$PHHRP,-01,d,0F00002F*34
$PHZDA,000106.330,01,01,2006,00,00*5A
$HEHDT,269.16,T*15
$PHTRO,0.07,M,0.31,B*5B
$PHLIN,0.000,0.000,0.000*51
$PHSPD,0.000,0.000,0.000*5D
$PHROT,0.000,0.000,0.000*53
$PHHRP,-01,d,0F00002F*34
$PHZDA,000106.530,01,01,2006,00,00*5C
其中$PHZDA行為時(shí)間信息,分別是分.毫秒,日,月,年,最后兩位為檢驗(yàn)位。經(jīng)過長(zhǎng)時(shí)間上十萬數(shù)據(jù)包的測(cè)試,沒有出現(xiàn)丟包,錯(cuò)數(shù)據(jù)的情況。
圖4 系統(tǒng)控制界面
在合成孔徑聲納系統(tǒng)中,需要發(fā)射余弦信號(hào),線性調(diào)頻信號(hào)和余弦二相碼信號(hào),這三種信號(hào)都是采用直接數(shù)字頻率合成(DDS)技術(shù),其理論基礎(chǔ)是奈奎斯特采樣定理[4-6]。當(dāng)采樣頻率大于等于信號(hào)的最高頻率兩倍時(shí),采樣序列信號(hào)就保留了原始信號(hào)的全部信息。
產(chǎn)生余弦信號(hào)的方法有很多種,常見的有查表法,曲線擬合法等。其中查表法易于實(shí)現(xiàn),且精度高,速度快,所以在本設(shè)計(jì)中采用查表法實(shí)現(xiàn)。
由余弦信號(hào)函數(shù)表達(dá)式:
其中振幅=1;初始相位=0;偏移量=0;角頻率=2π,其中為輸出信號(hào)的頻率;所以余弦信號(hào)表達(dá)式可簡(jiǎn)化為:
首先建立余弦表,在Matlab下面可計(jì)算出0~2π對(duì)應(yīng)的余弦值,為了提高信號(hào)的精度,在表中存儲(chǔ)了0~2π對(duì)應(yīng)的65536個(gè)余弦值。其值從-1到1,均為小數(shù),無法直接作為DAC的輸入,需要進(jìn)一步處理。由DAC可知,當(dāng)DAC的輸入為全1,即65536時(shí),輸出信號(hào)為正的最大;當(dāng)DAC的輸入為全0時(shí),輸出信號(hào)為負(fù)的最大。DAC輸入為32767時(shí),輸出為零電平信號(hào)。所以將0~2π對(duì)應(yīng)的余弦值先乘以32767再加上32767,即可使得0~2π對(duì)應(yīng)的余弦值處在0~65536范圍內(nèi)。
先計(jì)算出每個(gè)點(diǎn)對(duì)應(yīng)的相位:
當(dāng)相位不在0~2π內(nèi)時(shí),根據(jù)余弦信號(hào)的周期性可知,對(duì)2π取模,使其處于0~2π范圍內(nèi),然后即可得出每個(gè)點(diǎn)對(duì)應(yīng)余弦表的偏移量:
得到每個(gè)點(diǎn)對(duì)應(yīng)的DAC轉(zhuǎn)換數(shù)據(jù)后,將其寫入SRAM中,當(dāng)信號(hào)產(chǎn)生的門控到達(dá)時(shí),DAC從SRAM讀取數(shù)據(jù),即可輸出余弦信號(hào)。
余弦脈沖二相碼信號(hào)是攜載二進(jìn)制數(shù)字信息的隨機(jī)脈沖序列,是一種數(shù)字基帶信號(hào)。
表征二進(jìn)制數(shù)字代碼最常見的數(shù)字基帶信號(hào)是矩形脈沖的單極性不歸零碼,如圖5(a)所示,該信號(hào)易于產(chǎn)生,但帶外輻射較大,且不含有同步信息,因而不便于直接在系統(tǒng)中傳輸。所謂余弦脈沖二相碼信號(hào)就是圖5(b)所示的余弦脈沖信號(hào),利用前后相鄰碼元的載波相對(duì)相位變化傳遞數(shù)字信息。假設(shè)當(dāng)前相位為,表征二進(jìn)制數(shù)字代碼“1”時(shí),用π的余弦脈沖表示;表征二進(jìn)制數(shù)字代碼“0”時(shí),用π的余弦脈沖表示,表示二進(jìn)制數(shù)字代碼“0110010” 的余弦脈沖二相碼信號(hào)波形如圖5所示。
余弦脈沖二相碼信號(hào)是數(shù)字基帶信號(hào),是隨機(jī)二進(jìn)制脈沖序列,它可表示為:
其中是余弦脈沖信號(hào),為碼元持續(xù)時(shí)間,表示信息代碼,當(dāng)表示“0”碼時(shí),其取值為-1,當(dāng)表示“1”碼時(shí),其取值為+1。
調(diào)頻信號(hào)是通過非線性相位調(diào)制獲得大的時(shí)寬帶寬乘積的典型例子,而線性調(diào)頻信號(hào)是其中研究最早、應(yīng)用最廣泛的一種脈壓信號(hào)。采用這種信號(hào)可以使聲納同時(shí)獲得更遠(yuǎn)的作用距離和更高的距離分辨率,在信號(hào)分析中有獨(dú)特的作用。其突出的特點(diǎn)是匹配濾波器對(duì)多普勒頻移不敏感,即使回波信號(hào)有較大的多普勒頻移,匹配濾波器仍能起到壓縮的作用。但是這類信號(hào)的主要缺點(diǎn)是匹配濾波輸出響應(yīng)的旁瓣高。這樣做的代價(jià)是:使輸出信號(hào)的主瓣降低、展寬,從而導(dǎo)致輸出信號(hào)信噪比損失及距離分辨力變差,在一定程度上降低了系統(tǒng)的靈敏度。
線性調(diào)頻信號(hào)的復(fù)數(shù)形式數(shù)學(xué)表達(dá)式如下:
式中:為信號(hào)幅度;0為載波中心頻率;為脈沖寬度;為信號(hào)帶寬;=/為信號(hào)的調(diào)頻斜;()為矩形信號(hào)包絡(luò)。線性調(diào)頻信號(hào)示意圖如圖6所示。
線性調(diào)頻信號(hào)的瞬時(shí)頻率為:
在Matlab下仿真結(jié)果如圖7所示,其中:A=1000,f0=100,K=400。
圖7 線性調(diào)頻信號(hào)在Matlab下仿真結(jié)果
本文主要介紹了干涉合成孔徑聲納信號(hào)源系統(tǒng)的軟件部分,詳細(xì)介紹了系統(tǒng)開發(fā)中的主要過程,給出了各主要過程的流程圖和部分例程,并給出了系統(tǒng)的部分測(cè)試結(jié)果,測(cè)試結(jié)果表明,系統(tǒng)達(dá)到要求。
[1] 陳欽樹,文愛軍.應(yīng)用SoPC Builder開發(fā)電子系統(tǒng)[J].電子設(shè)計(jì)應(yīng)用,2004,(09).
[2] 王靜爽,孫楹.DMA控制電路在單片機(jī)中的應(yīng)用設(shè)計(jì)[J].山東煤炭科技,2003,(03).
[3] 張曉明,王勇軍,張民選.網(wǎng)絡(luò)處理器中協(xié)處理器設(shè)計(jì)方法研究及實(shí)現(xiàn)[J].計(jì)算機(jī)工程與科學(xué),2007,(03).
[4] 侯錫立,靳鵬云.基于SOPC的任意波形發(fā)生器的設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2008,(12).
[5] 崔坤,張文明,王濱.基于NiosⅡ的UART與PC間的數(shù)據(jù)通信[J].電子技術(shù),2007,(Z1).
[6] 周亞鳳,李躍華,朱昊.基于FPGA的16階FIR濾波器的設(shè)計(jì)[J].南京工業(yè)大學(xué)學(xué)報(bào)(自然科學(xué)版),2005,(01).
Design of Software On Interferometric Synthetic Aperture Sonar
Ji Zhixuan
(Shenyang Naval Ammunition Millitary Office, Shenyang 110045, China)
TP319
A
1003-4862(2014)12-0009-05
2014-09-28
冀志軒(1989-),男,助理工程師。研究方向:彈藥工程。