天天看點

雷達程式設計實戰之FFT的實體意義從模拟信号到數字信号模拟一個數字信号對FFT結果進行分析

目錄

從模拟信号到數字信号

模拟一個數字信号

對FFT結果進行分析

快速傅裡葉變換 (Fast Fourier Transform),即利用計算機對數字信号進行快速、高效的離散傅裡葉變換(DFT)計算方法的統稱,簡稱FFT,于1965年由J.W.庫利和T.W.圖基提出。公式我這裡就不貼了。當你在工作中用到了FFT,下面列出的兩種了解希望你能立刻回想起來。

  • 一般我們所看到的世界是時域的世界,但是可以通過FFT,傅裡葉級數進行轉換,将時域轉換為頻域。
  • 傅裡葉變化實質就是自動搜尋,調整相位,然後累加形成峰值。峰值對應的參數根據需要供後續處理用。

從模拟信号到數字信号

首先,我們介紹一下模拟和數字信号的橋梁-奈奎斯特采樣定理。具體定理含義是在進行模拟轉換數字信号的過程中。當采樣頻率fs大于模拟信号中最高頻率(對應雷達就是最大中頻信号)的二倍的時候,采樣之後的數字信号能完整保留原始模拟信号中的資訊。我們通過以轉輪為例來了解一下采樣周期和信号周期的關系。

雷達程式設計實戰之FFT的實體意義從模拟信号到數字信号模拟一個數字信号對FFT結果進行分析

 我們把轉輪分成8個等分的扇形,扇形的每個直邊都塗上不一樣的顔色,設輪子t時間正向旋轉一個周期。如果我們每t/8對輪子拍照,我們能清晰的看到輪子是在正向旋轉。如果我們每t/4對輪子拍照,我們也能分辨出輪子是在正轉。但是我t/2周期對輪子拍照,這時我們已經分不清輪子是在正向轉還是反向轉,如果我們以3t/4周期采樣,我們甚至會覺得輪子在反轉。由此,我們得到了一個非常重要的公式:

雷達程式設計實戰之FFT的實體意義從模拟信号到數字信号模拟一個數字信号對FFT結果進行分析

在雷達中,我們通過高速ADC對模拟信号采樣,如下:

雷達程式設計實戰之FFT的實體意義從模拟信号到數字信号模拟一個數字信号對FFT結果進行分析

在我們的毫米波雷達中,一般都需要将接收器的中頻輸出信号變換為正交的兩路基帶信号,即采用I、Q雙路采樣,這樣就能保留了信号的相位資訊,是以ADC的最高采樣率大于等于最大的中頻頻率即可,不用大于它的二倍。

模拟一個數字信号

假設我們有一個信号,它含有1V的直流分量,頻率為40Hz、相位為-20度、幅度為2V的交流信号,以及一個頻率為65Hz、相位為90度、幅度為3.5V的交流信号。用數學表達式就是如下(式中cos參數為弧度,是以-30度和90度要分别換算成弧度):

雷達程式設計實戰之FFT的實體意義從模拟信号到數字信号模拟一個數字信号對FFT結果進行分析

我們對這個信号進行采樣,就可以做FFT變換了。N個采樣點,經過FFT之後,就能得到N個點的FFT結果。我們使用256Hz的采樣率(Fs)進行采樣,總共采樣256個點,那麼FFT之後的結果就是一個N點的複數。原始信号如下:

雷達程式設計實戰之FFT的實體意義從模拟信号到數字信号模拟一個數字信号對FFT結果進行分析

 Matlab代碼如下:

close all; %先關閉所有圖檔
Adc=1; %直流分量幅度
A1=2;   %頻率F1信号的幅度
A2=3.5; %頻率F2信号的幅度
F1=40; %信号1頻率(Hz)
F2=65; %信号2頻率(Hz)
Fs=256; %采樣頻率(Hz)
P1=-20; %信号1相位(度)
P2=90; %信号相位(度)
N=256; %采樣點數
t=[0:1/Fs:N/Fs]; %采樣時刻

S=Adc+A1*cos(2*pi*F1*t+pi*P1/180)+A2*cos(2*pi*F2*t+pi*P2/180);
%顯示原始信号
plot(S);
title('原始信号');
           

對FFT結果進行分析

采樣點為N,則FFT之後的結果為一個N點的複數。針對FFT結果中的每一個點對應着一個頻率點,這個點的模值,就是該頻率值下的幅度特性,具體點說,假設原始信号中該頻率分量的峰值是A,那個FFT的每一個結果點(除了第一個0頻點)的模值就是A的N/2倍。而這個點的相位,反映的是這個頻率分量的初始相位。(對于0頻點,也就是直流分量,結果點的模值是A的N倍)

第一個點表示直流分量(即0Hz),而最後一個點N的再下一個點(實際上這個點是不存在的,這裡是假設的第N+1個點,也可以看做是将第一個點分做兩半分,另一半移到最後)則表示采樣頻率Fs,這中間被N-1個點平均分成N等份,每個點的頻率依次增加。則某點n所表示的頻率Fn=(n-1)*Fs/N。由此可以得出,Fn所能分辨到的頻率為Fs/N。按我們的例子來說,采樣頻率為256Hz,采樣點數為256個點,則可以分辨到1Hz。又因為采樣時長Tc=N/Fs,是以能夠得到頻率分辨率和采樣時間是倒數關系,這也是前文《毫米波傳感器介紹:測距》中提到的,觀測期(或者觀測視窗)越長,傅裡葉解析效果越好。

假設FFT之後某點n用複數a+bi表示,那麼這個複數的模為

雷達程式設計實戰之FFT的實體意義從模拟信号到數字信号模拟一個數字信号對FFT結果進行分析

,相位就是

雷達程式設計實戰之FFT的實體意義從模拟信号到數字信号模拟一個數字信号對FFT結果進行分析

,求的是坐标為(a,b)點的角度值,範圍是-pi到pi。根據以上的結果,就可以計算出n點(n≠1,且n<=N/2)對應的信号的表達式為:An/(N/2)*cos(2*pi*Fn*t+Pn),即2*An/N*cos(2*pi*Fn*t+Pn)。對于n=1點的信号,是直流分量,幅度即為A1/N。

現在我們對上一小節的數字信号做FFT運算,我們的信号有0Hz、50Hz、75Hz,按照我們之前分分析和采樣配置,我們應該在第1個點,第41個點和第66個點上出現峰值,程式如下:

figure;
Y = fft(S,N); %做FFT變換
Ayy = (abs(Y)); %取模
plot(Ayy(1:N)); %顯示原始的FFT模值結果
title('FFT 模值');
           

其結果也如我們所料如下:

雷達程式設計實戰之FFT的實體意義從模拟信号到數字信号模拟一個數字信号對FFT結果進行分析

這三個點的資料如下:

  • 第1個點: 256+0i
  • 第41個點:240-87i
  • 第66個點:1.058E-11+448

按照公式,可以計算出直流分量為:256/N=256/256=1;50Hz信号的幅度為:255/(N/2)=255/(256/2)=2;75Hz信号的幅度為448/(N/2)=448/(256/2)=3.5。可見,從頻譜分析出來的幅度是正确的。 

然後再來計算相位資訊。直流信号沒有相位可言,不用管它。先計算50Hz信号的相位,atan2(-87, 240)=-0.3478,結果是弧度,換算為角度就是180*(-0.3478)/pi=-19.9。再計算75Hz信号的相位,atan2(448, 1.058E-11)=1.5708弧度,換算成角度就是180*1.5708/pi=90.0002。可見,相位也是對的。根據FFT結果以及上面的分析計算,我們就可以寫出信号的表達式了,它與我們開始提供的信号一緻。

在實際的毫米波雷達的FFT加速核的使用過程中,我們還有一些地方需要我們注意。

  1. 我們需要針對參與運算的點數和窗函數将FFT的窗寫入到指定的記憶體空間來參與接下來FFT的運算。
  2. 在運算前還可以選擇補零的點數與補零的方式,在做速度維FFT之前一般會針對不同天線來采取不同補零的位置。
  3. 可以配置FFT輸出的起始和終止點,這個功能主要用于像是1DFFT輸出結果共轭時,我們隻需要前N/2個點的輸出,或者時2DFFT的時候,根據情況選擇有意義的頻段對應的點來輸出。

繼續閱讀