唐聆韜
四川大學 電子信息學院 四川 成都 610065
當前主要的頻譜檢測方法有能量檢測法、匹配濾波器法和循環平穩特征檢測法等。匹配濾波器法能使接收信號的信噪比最大化,在短時間里獲得高處理增益,但是進行信號檢測必須具有傳輸信號的先驗信息,即要事先獲得所有子信道用戶的參數信息。所以匹配濾波器法不適用于多信號的盲檢測。循環平穩特征檢測法是利用調制后的信號的循環特征進行檢測。調制后信號的均值和自相關等特征具有循環平穩特性,而噪聲的統計特征不具有這一特性,利用這一特征可以有效地將噪聲和信號區分開來。但是其計算復雜度過高,檢測周期較長,也不適合大帶寬多子帶信號的頻譜檢測。與以上兩種方法相比,能量檢測法[1]就相對簡單,適合在硬件中實現。
能量檢測法中最常用的是雙門限法[2],工程實現中經常出現。相對于傳統的門限法,利用兩個門限對信號進行篩選,進而更加有效地對信號進行估計。在單門限檢測模型的基礎上再加一個門限,設置成雙門限檢測模型。通常設置為:

雙門限法的檢測效率雖然比單門限更精確,但也很容易受噪聲影響。如圖1所示,有些信號因為功率能量不能達到門限的要求,就會被算法判定是噪聲而排除掉。這樣檢測效率就大大降低了。針對這一問題,本文提出一種易于硬件實現,精確度較高的門限檢測算法,它能對每個信號設置單獨的門限檢測出信號,大大降低漏檢率。

圖1 信號頻譜圖
(2)進行第二次掃頻,將每個頻點的值與上步算出的底噪進行比較,如果大于底噪的范圍為有信號的區域。
(4)對頻域進行第三次掃頻,將信號區域的點與之對應的門限值進行比較,大于信號的部分就是精確估計的有效信號。如下為算法檢測出信號的結果。產生多個信號段,采樣頻率為10MHz,信號信噪比為6~12dB,信號調制種類有5種(2ASK,2FSK,4FSK,BPSK,QPSK)。在允許相對誤差小于4%的情況下統計出載波頻率和帶寬的精確度。

圖2 信號檢測結果圖

表1 檢測信號載波頻率和帶寬精確度
從圖2和表1中可以看出,該方法可以較好地檢測出各個信號,驗證了信號的可行性,接下來將介紹算法的FPGA設計。
信號主要分為兩大部分:頻域轉換部分和信號檢測部分。利用頻域轉換將時域數據轉換成頻域數據并計算出信號的功率譜數據,然后由信號檢測部分估計出載波頻率和帶寬[4]。

圖3 頻域轉換結構圖
首先,使能信號控制狀態機開始工作,輸出當前狀態送入判斷1、判斷2、判斷3模塊中進行判斷,以產生需要的標志信號。判斷2模塊與狀態機產生的狀態配合控制計數器1對FFT IP核轉換次數進行計數。當計數器1計數到設置的數值時會告訴判斷1模塊輸出結束變換的標志信號。判斷3模塊產生IP核開始轉換的標志信號,而計數器2告訴IP核當前輸入的是第幾個信號數據。IP核會計算出數據信號的頻域信息并依次輸出,最后通過乘法器求平方得到功率譜,同時配合計數器3依次將頻域數據存入存儲器中。最后由標志信號經判斷4模塊判斷數據是否完全存儲完畢。

圖4 信號檢測狀態圖
上圖為信號檢測模塊的狀態圖,在轉換完成時,calcu_p=1,狀態機進入ST_FIND_MIN狀態,此時會對頻譜進行掃描,找出頻譜中的最小值,用最小值設置頻譜的底噪并找出大于底噪的部分,將該部分視為信號區間。掃描完成后進入ST_FIND_MAX中進行第二次掃描。該次掃描主要用于找出信號區間中的最大值,利用最大值設置一個判斷門限,如果大于判斷門限的部分就認為是信號。第二次掃描完成后,進入ST_FIND_MAXSUB3DB狀態,在該狀態中,模塊會對每個信號區間的判斷門限與信號進行比較,精確估計出信號的載波頻率和帶寬,判斷完成后回到最開始的待機狀態ST_IDLE中[5]。
如圖5所示,狀態機負責狀態的轉換并將當前狀態輸入到其他模塊中進行運算,當狀態處于ST_FIND_MIN/ST_FIND_MAX/ST_FIND_MAXSUB3DB狀態時,系統都需要對頻譜數據進行掃描將信號數據從dpram存儲器中讀出來,其中判斷2模塊就是輸出NFFT個raddr讀地址信號,從存儲器中讀出當前需要的數據。當狀態處于ST_FIND_MIN時,尋找底噪模塊會找出頻譜中的最小值并設置一個最小的底噪值。當狀態為ST_FIND_MAX時,系統會將信號與底噪進行比較,將有信號的部分標志出來,標志信號由判斷1模塊中輸出。最大值模塊則會找出每個有信號區域的最大值,而設置門限模塊會利用最大值和其點數值位置生成每個有信號區域的門限值(用于檢測信號頻譜起始點和終止點)和標志信號(FIFO模塊的寫使能)。這里的門限是將最大值下降3dB。

圖5 信號檢測結構圖
上面已經產生了FIFO的數據輸入和寫使能。而FIFO模塊的讀使能由判斷3模塊輸出,在ST_FIND_MAXSUB3DB狀態下如果數據位置處于底噪左側臨界點處可以產生一個標志信號作為FIFO模塊的讀使能。FIFO讀出的門限數據輸入到判斷4中,如果信號數據大于門限數據則認為這是有效信號并記錄下起始點x1和終止點x2。通過這兩個坐標就可以計算出載波頻率和帶寬。
利用Matlab產生2PSK、4PSK、8PSK三個信號,它們的采樣頻率為12MHz,載波頻率分別為1.92MHz、4.32MHz、7.2MHz,符號速率為960kHz、1152kHz、768kHz,信噪比設置為8dB,采樣點數為4096。頻域如下:

圖6 信號頻域圖
將該信號數據送入模塊進行檢測得到下圖:

圖7 帶寬和載波數據
從圖中可以得到信號的載波頻率和帶寬,因為對頻譜數據進行存儲時是從頻段中間開始存儲的,所以得到的信號中心頻率大于2048的數據需要減去2048,小于2048的數據需要加上2048,得到三個信號的載波點數位置是675、1492、2476,信號帶寬點數是363、427、287。利用公式:

得到載波頻率分別為1.977MHz、4.371MHz、7.253MHz。信號帶寬分別為1063.47kHz、1250.97kHz、840.82kHz。其誤差在允許范圍內。
本文根據信號處理問題在硬件上難以實施的難點,通過對傳統方法進行改進,使算法能較好地檢測信號并且能夠在硬件中實現。首先通過軟件進行理論驗證,然后再設計出FPGA的硬件結構,最后通過仿真得到硬件計算的結果,驗證了方法的可行性。