FPGA頻率測量算法

好久不更新這個blog了。。

今天接到一個小的任務就是用FPGA測頻率,大致需求如下,輸入信號爲一個方波信號(或者PWM),輸入頻率範圍2MHz-3MHz,頻率測量更新時間1ms左右,頻率測量誤差+-50Hz,用盡量少的資源來實現。

這裏首先考慮用脈衝計數的方式來進行頻率測量,或者頻率估計,找了一些資料找到了誤差最小的頻率測量方式。大致思路如下,首先脈衝計數的頻率測量方式核心思想就是用一個高頻率的時鐘來檢測輸入信號的上升沿,進而對輸入信號脈衝計數,只要在確定時間內得到一定的脈衝數就可以計算得到頻率。爲了令頻率誤差最小,要麼就是讓固定的時間誤差小,要麼就是讓所計的脈衝數誤差最小,由於輸入信號頻率一定小於測量時鐘主頻,那麼保證輸入信號脈衝數的準確性可以得到最小誤差。

因此算法如下,檢測輸入信號上升沿,然後時鐘計數器一直計數,而輸入信號計數器在每次輸入信號上升沿計數。在時間大概1ms左右檢測最後一個輸入信號上升沿停止計數,最後時鐘計數器計數值N0,輸入信號計數器計數值Nx。這時候輸入信號測量的頻率值爲:

fx=f0*Nx/N0

誤差計算如下:

dfx=-f0*Nx/N0^2*dN0
   =-f0^2/N0^2/f0*Nx/fx*fx*dN0
   =-f0/fx/T*dN0

dN0顯然等於+-1,即由於時鐘信號和輸入信號的相位不確定性,在輸入信號的整數脈衝個數時間內,時鐘計數值可能有+-1的偏差。所以:

dfx=-f0/fx/T

其中T即頻率測量累計時間(更新時間),也就是說,累計時間越長,測量時鐘主頻越高,被測信號頻率越低,所測頻率誤差越小(絕對誤差)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章