一種FFT插值正弦波快速頻率估計算法

2021-01-09 電子產品世界

對被噪聲汙染的正弦波信號進行頻率估計是信號參數估計中的經典問題,目前國內外已提出不少方法。文獻給出了在高斯白噪聲中對正弦波信號頻率進行最大似然估計算法,該算法能夠達到卡拉美-羅限(CRB),但計算量大,實現困難。FFT頻率估計方法具有速度快、便於實時處理的特性而得到了廣泛應用。但FFT頻率估計方法得到的是離散頻率值,當信號頻率與FFT離散頻率不重合時,由於FFT的「柵欄」效應,信號的實際頻率應位於兩條譜線之間。顯然僅僅利用FFT幅度最大值估計信號頻率難以滿足精度要求,因此各種插值算法應運而生。文獻給出了Rife算法,在對輸入信號進行一次FFT運算後,利用最大譜線及其相鄰的一根次大譜線進行插值來確定真實頻率位置。當信號的真實頻率處於兩相鄰量化頻率之間的中心區域時,Rife算法精度很高,但是在FFT量化頻率附近的誤差卻較大。文獻提出了一種修正Rife算法,通過對信號進行頻移,使新信號的頻率位於兩個相鄰量化頻率點的中心區域,然後再利用Rife算法進行頻率估計。文獻提出了基於傅立葉係數插值迭代的頻率估計方法,該方法能夠有效提高精度,但需要多次串行迭代,不利於發揮FPGA並行處理的優勢。本文分析了以上3種算法的特點,並以之為基礎結合FPGA的並行處理優勢,提出了一種利用信號FFT插值係數的幅度和相位信息來構造頻率修正項的新算法。

本文引用地址:http://www.eepw.com.cn/article/201809/389153.htm

1 基於FFT插值的正弦波頻率估計法

1.1 算法原理

單一頻率正弦信號表示為:

式中:A,f0,θ分別為正弦信號的幅度、頻率和初相;fs為採樣頻率。目前基於FFT的正弦信號頻率估計分為2個過程來實現:粗測頻和精測頻。粗測頻通過直接觀察FFT幅譜最大值點m來完成,受觀測時長T的限制,誤差範圍為±l/(2T)。假設為信號頻率的真實值,δ為信號頻率與其FFT幅度最大處對應頻率的相對偏差,m,與δ的關係如式(2)所示:

考慮到FPGA並行計算的特點,利用流水線結構同時計算多個Xm+p,Xm+p-1值,將串行迭代變為並行迭代,其運算步驟歸納如下:

本文提出的算法分為粗測頻(步驟1)和精測頻(步驟2,3),頻率估計值為粗測結果與精測結果之和。

1.2 算法分析

本文算法與文獻提到的算法主要區別在於步驟3。算法將正弦波信號所在頻段[m-1,m+1]細化為5個子頻段,如圖1所示,並根據δ1值的大小判斷信號譜線位置,使信號的頻率位於某子頻段的中心區域再進行頻率估計。

該算法也可認為是對Rife算法的一種修正,通過適當增加運算量提高了估計精度。當p=O及p=1時,該算法退化為Rife算法。

與MRife算法相比:MRife算法是通過對原始信號進行平移,然後對平移後的信號做FFT,重新用Rife算法計算δ。從式(3)可以發現「信號平移+FFT」與Xm+p時域運算是一致的,所不同的是,由於計算單個Xm+p只需N次複數乘法和N次複數加法,運算量比「信號平移+FFT」小,因此本文算法可同時計算多個Xm+p,Xm+p-1,以提高估計精度。

2 算法硬體實現

本文算法充分利用了FPGA並行計算的優點,在FPGA實現時採用流水線模式,經過固有時間後,每個時鐘周期可以輸出一個指定操作的結果,提高了算法的運算速度。

從前面的分析可知,整個測頻算法主要包括粗測頻和精測頻2個部分:首先對信號作FFT運算並進行譜峰搜索得到峰值位置;再通過插值FFT運算得到頻率偏差δ1,δ2;粗測頻部分可以直接調用相關FPGA的FFT庫函數完成。從式(3)可知精測頻部分需要大量計算三角函數,本文採用查表法來實現。整個算法流程如圖2所示。

3 仿真分析

信噪比定義為:,σ為噪聲均方誤差。對正弦波信號,在相位、幅度和頻率3個參數均是未知的情況下,頻率估計的方差下限為:

式中N為樣本數。在仿真中設fs=167 MHz,N=512,因此兩條譜線間的頻率差為△f=fs/N。現取fi=45.5△f+(i-1)△f/20(i=l,2,…,21)的正弦波,即對應FFT後峰值位置與信號真實峰值偏差δ為[-0.5,0.5]。對每個頻率fi的取值分別作l 000次Monte Carlo試驗,計算δl,δ2的均方根誤差(RMSE),定義比率R=RMSE/CRB,仿真結果如圖3、圖4所示。RSN取-20 dB~0 dB,步長為0.5 dB,分別做1 000次Monte Carlo試驗,計算新算法的歸一化頻率估計均方誤差,仿真結果如圖5所示。

仿真結果表明δ2不隨被估計信號的頻率分布而產生波動;當RSN>-14 dB時,新算法頻率估計值的方差在整個頻段都接近卡拉美-羅限,具有穩定的性能。

4 結論

本文在分析Rife,MRife和傅立葉係數插值迭代3種算法的基礎上,將串行迭代變為並行迭代,由此得出了一種快速頻率估計算法,並分析了新算法與前3種算法的異同。計算機仿真結果證實新算法能夠快速、高精度估計單頻信號的頻率,便於工程實現,適合應用在雷達、電子對抗等對處理實時性要求非常高的領域。


相關焦點

  • 易於工程實現的脈衝信號實時測頻算法
    DFT 實現時採用的快速算法即是FFT,經FFT處理後,信號的頻率解析度為: 式中,fs為採樣率,設信號的時寬為T ,則信號的點數為T × fs,信號的頻率解析度可表示為: 可見,FFT 測頻的頻率解析度只與信
  • 用FPGA實現FFT算法(圖)
    當n較大時,因計算量太大,直接用dft算法進行譜分析和信號的實時處理是不切實際的。快速傅立葉變換(fast fourier transformation,簡稱fft)使dft運算效率提高1~2個數量級。其原因是當n較大時,對dft進行了基4和基2分解運算。fft算法除了必需的數據存儲器ram和旋轉因子rom外,仍需較複雜的運算和控制電路單元,即使現在,實現長點數的fft仍然是很困難。
  • 通俗易懂的講解FFT的讓你快速了解FFT
    當然這都是以前的事情了,經過了系統的學習+2個星期的研究,自製了一個FFT的算法,不敢說速度上的優勢,但是個人認為是一種通俗易懂的實現方法。經過實際的VC++模擬實驗、和STM32跑的也很成功。 首先,要會FFT,就必須要對DFT有所了解,因為兩者之間本質上是一樣的。
  • 數字與信號處理實驗3 用FFT進行譜分析
    ;熟悉FFT 算法原理和FFT 子程序的應 用;學習用FFT 對連續信號和時域離散信號進行譜分析的方法,以便在實際中正確應用FFT。用FFT對模擬信號作譜分析是一種近似的譜分析。首先一般模擬信號(除周期信號外)的頻譜是連續頻譜,而用FFT作譜分析得到的是數字譜,因此應該取FFT的點數多一些,用它的包絡作為模擬信號的近似譜。另外,如果模擬信號不是嚴格的帶限信號,會因為頻譜混疊現象引起譜分析的誤差,這種情況下可以預先將模擬信號進行預濾,或者儘量將採樣頻率取高一些。
  • 每日函數——fft
    fft快速傅立葉變換語法Y  = fft(X)Y  = fft(X
  • 基於DSP的FFT算法實現
    基於DSP的FFT算法實現1、FFT的原理快速傅氏變換(FFT)是離散傅氏變換的快速算法,它是根據離散傅氏變換的奇、偶、
  • 基於MSP430系列微控制器的FFT算法實現
    離散時間採樣的快速傅立葉變換FFT(fast Fouriertrans form)算法是目前最主要的諧波檢測和分析方法。FFT算法的實現可以採用專用晶片37—40、DSP晶片6—1141—44、FPGA晶片193— 207以及微控制器等。隨著集成電路製造技術和數字計算機技術的進步,微控制器晶片的功能和所能提供的邏輯資源越來越多。
  • matlab下實現FFT信號分析
    fs.max大於信號中最高頻率 fmax 的 2 倍時(fs.max > 2fmax),採樣之後的數位訊號完整地保留了原始信號中的信息,一般實際應用中保證採樣頻率為信號最高頻率的2.56~4倍;採樣定理又稱奈奎斯特定理或香農採樣定理。
  • 快速傅立葉變換FFT在MATLAB中的實現
    正弦信號的頻率保持性:輸入為正弦信號,輸出仍是正弦信號,幅度和相位可能發生變化,但頻率與原信號保持一致,只有正弦信號才擁有這樣的性質。FFT是DFT的快速算法可以節省大量的計算時間,其本質仍然是DFT。
  • FFT
    DFT的高效算法,稱為快速傅立葉變換(fast Fourier transform)。:Fn = (n - 1) * Fs / N幅度(n ¹ 1) = A(n) / (N / 2)幅度(n =    1) = A(n) / N     (直流分量0Hz)解析度 = Fs / N 例:假設現在有一個信號由三個波形組成,分別是幅度為2的直流信號、幅度為3頻率為50Hz相位為-30度的正弦波、幅度為1.5頻率為
  • 近乎完美的DDS正弦波信號音生成器
    最關鍵的元件就是正弦波生成器(單信號音或多信號音),其中基於軟體的直接數字頻率合成器(DDS)可以提供完全的靈活性、極高的頻率解析度和時鐘同步性能,利用數據採集系統來執行相干取樣,以避免洩漏和FFT窗口濾波。
  • 使用STM32 的DSP庫進行FFT變換
    //#define NPT_64 64#define NPT_256 256//#define NPT_1024 1024// N=64,Fs/N=50Hz,Max(Valid)=1600Hz// 64點FFt,採樣率3200Hz,頻率解析度50Hz,測量最大有效頻率1600Hz#ifdef NPT_64#define NPT 64
  • 史上最簡單的FFT(快速傅立葉變換)
    FFT1 簡述FFT是專門用來求解多項式乘法的一個高效算法。4 離散傅立葉變換樸素的傅立葉變換還是太慢了,所以我們要進行快速的傅立葉變換,藉助於分治的思想。(cp *a,int n,int inv){ if(n==1) return; int m=n/2; for(int i=0;i<m;i++){ tmp[i]=a[2*i]; tmp[i+m]=a[2*i+1]; } for(int i=0;i<n;i++) a[i]=tmp[i]; fft(a,
  • 基於FPGA和邊緣預測算法的顏色插值方法
    摘要:一種基於FPGA和邊緣預測算法的顏色插值方法,包括以下步驟:、使用4個FIFO存儲器緩存實時視頻數據,當第5行視頻圖像數據到來時,第5行視頻圖像數據和4個FIFO存儲器中的4行視頻圖像數據形成5×5鄰域模板;將5路數據採用流水線實時分別乘以各模板因數,通過判斷水平和垂直邊緣,選擇非邊緣方向的插值結果作為綠分量的結果;將三行不同的視頻圖像數據再緩存到
  • FFT相關原理及使用注意事項
    FFT(Fast Fourier Transform,快速傅立葉變換)可以將時域信號轉換至頻域,以獲得信號的頻率結構、幅度、相位等信息。該算法在理工科課程中都有介紹,眾多的儀器或軟體亦集成此功能。FFT實用且高效,相關原理與使用注意事項也值得好好學習。
  • 近乎完美的DDS正弦波信號音生成器 下
    最關鍵的元件就是正弦波生成器(單信號音或多信號音),其中基於軟體的直接數字頻率合成器(DDS)可以提供完全的靈活性、極高的頻率解析度和時鐘同步性能,利用數據採集系統來執行相干取樣,以避免洩漏和FFT窗口濾波。
  • 輕鬆理解圖像縮放算法!最鄰近插值&&雙線性內插值!
    那現在不妨想一想,這簡單效果背後,是怎樣的算法思想呢?今天,將以一種非常簡單、直接的方式,為大家描述圖像縮放算法的基本思想。我們首先需要大概理解一下圖像的概念:有一種圖形格式(位圖),是利用像素點的方式,表述該點的顏色,看下面的圖。4行,七列(阿拉伯數字表示行,漢語數字表示列),一共28位小朋友排成的隊伍,每個小朋友有不同的顏色。
  • 頻率可調的移相式正弦波發生器電路
    打開APP 頻率可調的移相式正弦波發生器電路 佚名 發表於 2010-12-29 11:46:31 本電路(見下圖)是一種頻率可調的移相式正弦波發生器電路
  • LTE信道估計擴展
    6.6.6 信道估計擴展下面的matlab函數顯示了三種算法,它們可以擴展僅在CSR信號上計算的信道矩陣,以在整個資源網格上生成函數輸出(y)、信道頻率響應。它執行基於頻域和時域插值的擴展算法。該算法涉及包含CSR信號的OFDM符號在頻域內的子載波之間的插值。在計算了這些符號上所有子載波的信道響應之後,該函數會及時進行內插,以在整個資源網格中找到信道響應。該算法與單天線情況下的算法的區別在於對兩個天線和四個天線情況分別進行處理。請注意,在四個天線盒的第三和第四個天線中,包含CSR信號的OFDM符號的數量只有兩個。
  • 可調頻率的正弦波振蕩電路圖分享
    打開APP 可調頻率的正弦波振蕩電路圖分享 發表於 2019-06-07 17:37:00 正弦波振蕩器是指不需要輸入信號控制就能自動地將直流電轉換為特定頻率和振幅的正弦交變電壓