数字信号处理 --- 信号的采样和奇妙的混叠(Aliasing) 壹
信號的采樣與混疊(時域)
? ? ?在一定條件下,一個連續的時間信號完全可以用該信號在等時間間隔上的樣本來表示,并且可以用這些樣本的值把該信號完全恢復出來。這一非常重要的發現被稱之為采樣定理。
? ?? 采樣定理在連續時間信號(一個是連續的波形)和離散時間信號(一個是數組)之間架起了一座橋梁!!!(就好像微積分基本定理一樣,把斜率和面積這兩個毫不相干的概念緊密的聯系在了一起。)
一維信號的采樣:
? ? ?通過一個固定周期的沖擊串來實現信號的采樣(即,連續信號的離散化)。如下圖,一個本來是連續的一維信號被分割成了很多小塊,這非常像黎曼積分(Riemann integral),定積分作黎曼和的極限!
上圖中原來是連續的數據通過等間隔(采樣周期為T)的采樣,被分割成了等間隔,具有不同幅度的沖擊串,見下圖。
附:下圖為黎曼和的極限,圖中矩形的寬度就好比是采樣間隔T!
二維信號的采樣:
? ? ?二維信號的采樣常被用于圖像的數字化,相對于一維采樣,他只是增加了采樣的維度。不僅在X方向采樣還在Y方向采樣,采樣后的結果是一個二維矩陣,矩陣中的每一個點代表了該位置的響應灰度。? ?
? ? ? 例如,在出版業里,一幅圖是由很多很小的采樣點構成的,如果這些采樣點的間距很小,小到你無法用肉眼分辨的話。(或者說,即便報紙上的采樣點間距不是很小,但是讀者眼睛距離報紙不是很近的話。)那么,報紙上的照片在我們看來就是一幅連續的圖片。但是,如果你拿著放大鏡或者眼睛靠著很近觀察的話,你就會發現報紙上的一幅圖像其實是由一個個等間隔的離散化的點拼出來的。
下面我們用Matlab軟件來仿真信號的采樣,以及如果采樣頻率(采樣周期的倒數)不能滿足一定要求是所帶來的混疊。
Tips : 本文的后面會有一個錄像說明,現在的MATLAB仿真和錄像說明有一個很大的不同就是。這里的仿真是保持原始信號的頻率Fo不變,不斷地改變采樣頻率Fs.
第一種情況 ------ 采樣頻率高于原始信號頻率最高頻的兩倍(Fs > 2*Fo)
下圖所繪的是一個頻率為60Hz的連續的余弦波,圖中的紅點為采樣點。當采樣沖擊串的頻率(2000Hz)遠高于原始信號時(原始信號的33.3倍),采樣點在曲線上的分布非常密集,重建后的效果也很好。如果采樣頻率(400Hz)只是略高于原始信號頻率
(原始信號的6.6倍),則原曲線上的采樣點明顯不足,但不用擔心,即便是這種看起來不太充足的采樣還是可以重建原始的連續信號的。
點擊圖片放大
Matlab代碼:
%% signal sampling and aliasing demo for CSDN % Created: Late spring, 2018. (2018/05/03) % Author: Z.Zhu, zzz0029@tigermail.auburn.edu % Copy Rights Reserved. % May not be copied, scanned, or duplicated, in whole or in part. % Reference of algorithm by: Steve Eddins's Aliasing and a sampled cosine % signal on his bolg "Steve on Image Processing"close all; clear all; %% Signals with same frequency were sampled with different sampling frequencies. Omega = 60; % freq. of continous Signal Phi = 0; % Phase A = 1; % Amplitude tmin = -pi/55; % lower limit of X axis tmax = pi/55; % uper limit of X axis Bins = 1000; % Number of Bins t = linspace(tmin, tmax, Bins); % Space vector% Form a signal containing a 60(Hz) sinusoid of amplitude 1 with phase of 0. CosineSignal = A.*cos(2.*pi.*Omega.*t + Phi);% Plot the signal in the Space domain. subplot(2,2,1) plot(t,CosineSignal,'-k','LineWidth',2); title(['A continuous-time cosine signal at ',num2str(Omega),'Hz',',sampled with 2000Hz sampling frequency.']) ylabel('Amplitude') xlabel('t (seconds)')% Let's sample it with a sampling frequency of 2000Hz. Fs = 2000; % Sampling Freq. T = 1/Fs; % Space vector nmin = ceil(tmin / T); nmax = floor(tmax / T); n = nmin:nmax; SampleSignal2000 = A.*cos(2.*pi.*Omega.*n.*T + Phi); hold on plot(n*T,SampleSignal2000,'o',...'MarkerSize',6.5,...'MarkerEdgeColor','r',...'MarkerFaceColor','r'); legend('Continuous-time signal','Samples','Location','northeast') hold off grid on% Rebuild discrete sampled signals subplot(2,2,3) stem(n*T,SampleSignal2000,'filled','LineWidth',2); title('Rebuild discrete sampled signals');% The sampling frequency of 2000 Hz is well above 120 Hz, which is twice the frequency % of the cosine. And you can see that the samples are clearly capturing the oscillation % of the continuous-time cosine.% Plot the signal in the Space domain. subplot(2,2,2) plot(t,CosineSignal,'-k','LineWidth',2); title(['A continuous-time cosine signal at ',num2str(Omega),'Hz',',sampled with 400Hz sampling frequency.']) ylabel('Amplitude') xlabel('t (seconds)')% Let's sample it with a sampling frequency of 400Hz. Fs = 400; % Sampling Freq. T = 1/Fs; % Space vector nmin = ceil(tmin / T); nmax = floor(tmax / T); n = nmin:nmax; SampleSignal400 = A.*cos(2.*pi.*Omega.*n.*T + Phi); hold on plot(n*T,SampleSignal400,'o',...'MarkerSize',6.5,...'MarkerEdgeColor','r',...'MarkerFaceColor','r'); legend('Continuous-time signal','Samples','Location','northeast') hold off grid on% Rebuild discrete sampled signals subplot(2,2,4) stem(n*T,SampleSignal400,'filled','LineWidth',2); title('Rebuild discrete sampled signals');第二種情況 ------ 采樣頻率小于原始信號頻率最高頻的兩倍,但大于原始信號的頻率(2*Fo >?Fs > Fo)
? ? 下面我們逐漸降低采樣率,看看會發生什么。
? ? 先是用正好兩倍于原始信號頻率的采樣頻率(120Hz)來采樣(原始信號的2倍),則采到的信號,正好是余弦波的波峰或者波谷即,1和-1。(注意:我這里所使用的是相位為0的余弦波,如果相位發生改變則采集到的點,不一定正好是波峰和波谷。)
? ? 接下來,我用小于原始信號頻率兩倍的采樣頻率(70Hz)來采時(原始信號的1.16倍),采集到的信號就會發生混疊,即采集到的是一個頻率低于原始信號的錯誤的離散信號,也無法利用該錯誤信號重建原始的連續信號。
點擊圖片放大
Matlab代碼:
% Let's sample it with a sampling frequency of 120Hz. Fs = 120; % Sampling Freq. T = 1/Fs; % Space vector nmin = ceil(tmin / T); nmax = floor(tmax / T); n = nmin:nmax; SampleSignal120 = A.*cos(2.*pi.*Omega.*n.*T + Phi); hold on plot(n*T,SampleSignal120,'o',...'MarkerSize',6.5,...'MarkerEdgeColor','r',...'MarkerFaceColor','r'); legend('Continuous-time signal','Samples','Location','northeast') hold off grid on% Rebuild discrete sampled signals subplot(2,2,3) stem(n*T,SampleSignal120,'filled','LineWidth',2); title('Rebuild discrete sampled signals');% The samples above are still adequately capturing the shape of the cosine.Now let's drop % the sampling frequency down to exactly 120 Hz, twice the frequency of the 60 Hz cosine. % Plot the signal in the Space domain. subplot(2,2,2) plot(t,CosineSignal,'-k','LineWidth',2); title(['A continuous-time cosine signal at ',num2str(Omega),'Hz',',sampled with 70Hz sampling frequency.']) ylabel('Amplitude') xlabel('t (seconds)')% Let's sample it with a sampling frequency of 70Hz. Fs = 70; % Sampling Freq. T = 1/Fs; % Space vector nmin = ceil(tmin / T); nmax = floor(tmax / T); n = nmin:nmax; SampleSignal70 = A.*cos(2.*pi.*Omega.*n.*T + Phi); hold on plot(n*T,SampleSignal70,'o',...'MarkerSize',6.5,...'MarkerEdgeColor','r',...'MarkerFaceColor','r'); legend('Continuous-time signal','Samples','Location','northeast') hold off grid on% Rebuild discrete sampled signals subplot(2,2,4) stem(n*T,SampleSignal70,'filled','LineWidth',2); title('Rebuild discrete sampled signals');? ?下圖是利用上圖中的采樣點重建后的離散信號,圖中我用紅色的箭頭大致的鏈接了一下圖像中的離散點(真實重建的時候,不會使用直線來連接他們的,而是使用的Sinc函數。),下圖的上半部分圖像中的起伏和波動的頻率和原始信號是相同的,而下半部分的圖像的波動就明顯慢了很多。
第三種情況 ------ 采樣頻率小于原始信號的頻率( Fs <?Fo)
? ? ?最后,當我用一個小于原始信號頻率的采樣信號去采樣時(原始信號的0.95倍),得到了一個非常明顯的“低頻”信號。下圖中紅色的虛線是采樣點的包絡,很明顯他要比圖中快速起伏的藍色曲線慢了很多。
點擊圖片放大
Matlab代碼:
% Plot the signal with a wider range. figure; plot(t,CosineSignal,'LineWidth',3); title(['A continuous-time cosine signal at ',num2str(Omega),'Hz',',sampled with 0.95times sampling frequency.']) ylabel('Amplitude') xlabel('t (seconds)')Fs = 0.95*Omega; % Sampling Freq. T = 1/Fs; % Space vector nmin = ceil(tmin / T); nmax = floor(tmax / T); n = nmin:nmax; SampleSignal = A.*cos(2.*pi.*Omega.*n.*T + Phi);hold on plot(n*T,SampleSignal,'ro', 'MarkerSize',10, 'MarkerFaceColor','r'); plot(n*T,SampleSignal,'--','LineWidth',3); legend('Continuous-time signal','Samples','Location','northeast') axis([ -0.3 0.3 -1.1 1.1]) hold off grid on奈奎斯特采樣定理:
? ? 上面的實驗揭示了采樣率Fs和所測信號頻率Fo之間的關系。 只有采樣率Fs必須大于被測信號最高頻率Fo的兩倍(采樣率的一半通常被稱為奈奎斯特頻率Fn)才不會發生混疊,這就是著名的奈奎斯特采樣定理。
Tips : 這里的錄像說明和上面的MATLAB仿真一個很大的不同。這里的仿真是保持采樣頻率Fs不變,不斷地改變原始信號的頻率Fo.
舉例:大家注意去看那個老式的電風扇,或者是汽車的輪子.你調1檔的時候你是可以分辨出風扇的旋轉速度,旋轉方向的。到了二檔,就有些費力了。到了三擋,你就會發現風扇還是有風,可是好像停住不轉了。到了四檔你又看見,風扇開始倒轉了,而且倒轉的速度很慢。
這也就是說高頻信息和低頻信息混合在一起了,撲所迷離,晦暗莫測,百轉千回,讓人難以捉摸(說明高轉速風扇的奈奎斯特頻率高于人眼所能企及的采樣頻率。)!
“天之蒼蒼,其正色耶?其遠而無法至極耶?”
80年代MIT錄像帶教程大放送:
? ?下面截取了我最喜歡的一個教學視頻中的一小段來說明信號的采樣與混疊。這是我好不容易找到又花了好多時間轉出來的,還望大家不要COPY。謝謝!
整個實驗要做的就是保持采樣頻率Fs不變,不斷地增加原始信號cos(Fo*t)的頻率Fo,最終必然會導致采樣不足,即而出現混疊!
Continuous signal?Part I? ?輸入信號及其傅里葉頻率
圖中第一行是輸入信號,第二行是準備重建的信號,第三行是駛入信號的頻譜。由于頻率是周期的所以下圖中在10Hz附近出現了一個對稱的頻段。
下面用CUTOFF頻率(Fc)為5Hz的低通濾波器來重建信號,采樣頻率(Fs)則是截止頻率的兩倍,即 Fs = 2*Fc = 10Hz 。這時大家看到的是上面我說的第一種情況(沒有混疊),即,輸入信號頻率的頻率(肯定小于截止頻率5Hz)小于采樣頻率(10Hz)的一半。(Fo < Fs/2)
Continuous signal Part II? ?輸入信號的重建
Continuous signal?Part III? ?輸入信號采樣充分,完美復現沖入信號
下面不斷的增加原始信號的頻率Fo,頻譜圖中的沖擊不斷地往高頻移動。重建的信號和輸入信號一模一樣,完美重建!請注意剛好出現混疊那個地方的臨界狀況。
Continuous signal?Part IV???輸入信號采樣不足,發生混疊,重建信號有誤
繼續增加輸入信號的頻率Fo直到原始頻率大于采樣頻率的一半(即截止頻率5Hz)。這就是我在上面所提到的第二種情況和第三種情況,輸入信號的頻率大于截止頻率Fo?>Fc(其中Fc=Fs/2)。重建信號的頻率明顯要小于輸入信號的頻率,而且隨著輸入信號的頻率越來越高(第一行信號),重建后的混疊信號(第二行信號)的頻率越來越低。
Continuous signal?Part V??混疊信號的回滾
逐漸降低信號的頻率,混疊最終消失,信號最終被完美重建。
下面我再展示一下離散信號的錄像。(由于上傳圖像最大不能超過10M,所以我這里分批上傳,還望見諒。)
Discrete signal?Part I? 無混疊部分
Discrete signal?Part II?混疊部分
? ? 混疊是需要避免的,可在采樣之前使用抗混疊濾波器。如若已經發生了混疊,那么混疊后的那個“偽裝信號”在哪?他的頻率又是多少呢?這一系列的第二講我來給大家說說。
(全文完)
作者 --- 松下J27
謝謝收看,下次再見!
鳴謝:
【1】Matlab博客里面的 Steve先生,以及他的博文:
【2】https://blogs.mathworks.com/steve/2010/03/03/aliasing-and-a-sampled-cosine-signal/?s_tid=srchtitle
【3】奧本海姆主講的MIT open course, signal and system.
《圣經》希伯來書13章8節??耶穌基督昨日今日一直到永遠,是一樣的。
*配圖和本文無關(圖為:掃羅的悔改)*
版權聲明:所有的筆記,可能來自很多不同的網站和說明,在此沒法一一列出,如有侵權,請告知,立即刪除。歡迎大家轉載,但是,如果有人引用或者COPY我的文章,必須在你的文章中注明你所使用的圖片或者文字來自于我的文章,否則,侵權必究。 ----松下J27
總結
以上是生活随笔為你收集整理的数字信号处理 --- 信号的采样和奇妙的混叠(Aliasing) 壹的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5分钟教你用GANs生成CryptoPu
- 下一篇: IPC摄像头增值服务详解,探寻新的增长点