2015-04-05 41 views
-1

我試圖瞭解結果我得到用Matlab FFT,特別是與功能fftshiftMatlab的FFT - 結果不理解

予先計算一個簡單的信號的FFT(Y = COS(2 * PI * f_signal * t)和逆變換,試圖找到原始信號。

我比較結果有和沒有「零填充」通過執行FFT之前,在開始信號加入高100點。

這裏是代碼:

% Frequency input signal and time vector 
f_signal=10; 
nb_points = 100; 
f_sampling=nb_points*f_signal; 
step_time=1/f_sampling; 
t=linspace(0,1/f_signal,nb_points); 


%% Original signal with 100 points 
y=cos(2*pi*f_signal*t); 

%% Adding 100 more points for y 
n_zero_padding=100; 
y_f=padarray(y,[0 n_zero_padding],'post'); 

% Plot Input Signal 
figure(1); 
plot(y); 
title('Input Signal'); 

% Perform Forward FFT 
z=real(fft(y_f)); 

% Center FFT 
z_centered=fftshift(z); 
figure(2); 
plot(z_centered); 
title('FFT centrered with zero padding'); 

% Without centering 
figure(3); 
plot(z); 
title('FFT with zero padding'); 

% Perform Inverse FFT 
z_inv=ifft(z); 
figure(4); 
plot(z_inv); 
title('Inverse FFT with zero padding'); 

% Inverse FFT with centered spectrum 
z_inv_centered=ifft(z_centered); 
figure(5); 
plot(z_inv_centered); 
title('Inverse FFT centered with zero padding'); 

我不理解圖5的結果(反變換與fftshift移位的頻譜)

這裏是所獲得的第一頻譜(不移動)(圖(3)):

enter image description here

這裏是第一移位譜fftshift(圖(2)):

enter image description here

和逆FT上述移位光譜(圖(5)):

enter image description here

我不理解後面的數字。如果我接受這個理論,用fftshift移動頻譜的事實導致獲得以f_sampling/2爲中心的兩個Dirac,更確切地說,在f_sampling/2-f_signal和f_sampling/2 + f_signal上。

所以我有這兩個狄拉克的總和,我做這個總和的逆FFT:所以我應該得到逆FFT 2餘弦頻率非常封閉:似乎我得到的數字(5)的產品兩個餘弦信號,但我不明白我的誤解在哪裏......

如果有人能解釋這個結果?

預先感謝您

+2

這正是你所得到的。請參閱https://en.m.wikipedia.org/wiki/List_of_trigonometric_identities#Product-to-sum_and_sum-to-product_identities。 – 2015-04-05 22:44:45

+0

好的謝謝,我忘了這個公式。我繪製了:t = linspace(0,2/f_signal-2 /(f_signal * 2 * nb_points),2 * nb_points); y2 = 0.5 * cos(2 * pi *(f_sampling/2-f_signal)* t); y2 = 0.5 * cos(2 * pi *(f_sampling/2 + f_signal)* t); sum_y = y1 + y1; 圖(6); plot(sum_y);但是就上面的圖5而言,我錯過了這個情節的一個因子2。你知道它來自哪裏?問候 – youpilat13 2015-04-06 00:12:57

回答

0

因爲一個真正的信號的頻譜是關於原點對稱,我們更願意看到這樣的頻譜,即零頻率的中心。然而,當通過FFT計算頻譜時,中心處的是高頻,因此使用fftshift()將零頻譜移到中心。 由於fftshift()用於視覺問題,因此無法直接對經過移位的光譜執行ifft()。另一方面,移位後的頻譜是原始信號的調製版本,您可以獲得圖5中的調製信號。