在我們周圍有着各種各樣的模拟信号,比如,電流,電磁波,溫度,聲音等等。作為計算機系統來說,它隻認識0和1,意味着它隻能處理數字信息,但是,它是如何處理我們周圍的這些模拟信号的呢?要理解這個問題,我們需要理解在數字信号處理領域中一個非常重要的定理——采樣定理,它是模拟信号數字信号之間的一個基本橋梁,本文将和大家一起學習奈奎斯特-香農采樣定理。
采樣定理1928年由美國電信工程師奈奎斯特首先提出來的,因此稱為奈奎斯特采樣定理。1933年由蘇聯工程師科捷利尼科夫首次用公式嚴格地表述這一定理,因此在蘇聯文獻中稱為科捷利尼科夫采樣定理。1948年信息論的創始人香農對這一定理加以明确地說明并正式作為定理引用,因此在許多文獻中又稱為香農采樣定理。
我們先來看下面一個例子,對于一個正弦信号:
如果我們分别以0.5,0.25,0.1,0.01的間隔取點,然後再将每個點用直線連接起來。
從上面的圖中可以發現,時間間隔越小,記錄這個信号的點數也多,信号還原的就越精确。顯然,我們不可能無限多的點數去記錄這個信号,如何才能準确的表達信号,又能合理的使用計算機資源?
其實大佬們早就有研究,就是我們今天要學習的奈奎斯特-香農采樣定理。
采樣頻率要大于信号最高頻率的2倍,才能無失真的保留信号的完整信息。
即:
這裡,我們将這個信号頻率(這個臨界點)叫做奈奎斯特頻率。下面我們不妨先通過一個實驗來理解這個定理,假如有下面這樣一個信号:
令f=5 Hz, 再分别依次以5Hz,10Hz,20Hz,40Hz,100Hz的采樣率進行采樣,觀察不同采樣率情況下時域和頻域的信号還原情況,老規矩先上代碼。
importnumpyasnp
importmatplotlib.pyplotasplt
defsignalCreate(_fs,_N,_f0):
fs=_fs#采樣率
N=_N#數據點數
f0=_f0
n=np.linspace(0,N-1,N)
t=n/fs
yt=np.exp(1j*2*np.pi*f0*t)
f=n*fs/N-fs/2
yf=np.fft.fftshift(np.fft.fft(yt))
returnt,yt,f,yf
t,yt,f,yf=signalCreate(5,128,5)
plt.subplot(5,2,1)
plt.plot(t,yt)
plt.subplot(5,2,2)
plt.plot(f,np.abs(yf))
t,yt,f,yf=signalCreate(10,128,5)
plt.subplot(5,2,3)
plt.plot(t,yt)
plt.subplot(5,2,4)
plt.plot(f,np.abs(yf))
t,yt,f,yf=signalCreate(20,128,5)
plt.subplot(5,2,5)
plt.plot(t,yt)
plt.subplot(5,2,6)
plt.plot(f,np.abs(yf))
t,yt,f,yf=signalCreate(40,128,5)
plt.subplot(5,2,7)
plt.plot(t,yt)
plt.subplot(5,2,8)
plt.plot(f,np.abs(yf))
t,yt,f,yf=signalCreate(100,128,5)
plt.subplot(5,2,9)
plt.plot(t,yt)
plt.subplot(5,2,10)
plt.plot(f,np.abs(yf))
plt.show()
結果如下圖,左邊是時域右邊是頻域。當采樣頻率是5Hz時,還原出來的信号是一個頻率為0的直流信号,顯然,這裡當采樣頻率小于信号頻率的兩倍時是無法準确還原原信号的;當采樣頻率是10Hz時,還原出來的信号似乎也還是有些不對的地方,在頻域上很明顯信号不能完整的顯示出來;當采樣頻率是20Hz時,不管是時域還是頻域還原出來信号都已經很接近原始信号了;當然我們繼續增加采樣頻率,當采樣頻率是40Hz和100Hz時,還原出的信号更加接近真實信号了。
不同采樣率采樣
不過,我們對比采樣頻率40Hz和100Hz的頻域圖形可以發現,100Hz的明顯要“胖”一些。這是因為頻率分辨率變大了,采樣點數不變,采樣分辨率随着采樣頻域增加而增加,采樣分辨率可以用下面的公式計算:
顯然,采樣頻率如果太低就不能正确還原真實信号;但是如果采樣頻率太高,會有較大的頻率分辨率,同時又會有産生大量的數據。通常,在實際應用中采樣頻率會選擇比兩倍奈奎斯特頻率要大一些(比如3~5倍)。
另外,在采樣的過程中,對比采樣頻率和奈奎斯特頻率大小關系,我們還可以這樣來描述:
本文首發于公衆号【Will的大食堂】
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!