2015-12-19 166 views
3

我想通過使用matlab的fft獲得gaussian curve。問題是,在一種情況下,我試圖通過除以F=dt.*F./exp(-1i.*nu.*T/2)來減少噪音是行不通的(img 1),而在第二種情況下,如果我試圖獲得fft結果的絕對值,我在圖中沒有像樣的比例(img 2)。用於高斯函數的Matlab FFT

N=512; 
T=10; 
dt=T/(N-1); 
t=linspace(-5,5,N); 
f=exp(-t.^2); 
F=fft(f); 

F1=F(1:N/2+1); 
F2=F(N/2+1:N); 
F=[F2,F1]; 

dnu=(N-1)/(N*T); 
nuNyq=1/(2*dt); 
nu=-nuNyq+dnu*(0:N); 
F=dt.*F; 
%F=dt.*F./exp(-1i.*nu.*T/2); 


y=linspace(-5,5,N); 
F2=pi.^(1/2).*exp(-y.^2/4); 

hold on 
plot(y,F2); 
%plot(nu,real(F),'r'); 
plot(nu,abs(F),'r'); 
legend('analiticFT','FFT') 
xlim([-5 5]) 
hold off 

圖1 img. 1

IMG2 img. 2

+1

剛一說明,這是很容易來幫助你,當你給你的變量有意義的名稱。 (注意2:爲了達到你用F1和F2所做的工作,你可以調用'fftshift(F)') – dangom

+0

你的意思是_is不工作? –

回答

3

看來你的公式解析傅立葉變換的比例是不太正確的。據this Fourier Transform table on Wikipedia,在連續的時域信號變換

y\left(t\right) = e^{-a t^2}

Y\left(f\right) = \sqrt{\frac{\pi}{a}} \cdot e^{-\frac{\left(\pi f\right)^2}{a}}

凡在你的情況下a=1。相應地,你應該比較時域信號

t=linspace(-5,5,N); 
f=exp(-t.^2); 

的FFT與分析傅立葉變換

F2 = sqrt(pi)*exp(-(pi*y).^2); 

因此,密謀與比較:

hold off; 
plot(y,F2); 
hold on; 
plot(nu,abs(F),'r'); 
legend('analiticFT','FFT') 
xlim([-5 5]) 

產量:

enter image description here

現在我們已經建立了比較的適當基礎,我們可以看看爲什麼你在img 1中獲得振盪。簡而言之,您生成的參考高斯脈衝f=exp(-t.^2);t=0處有一個峯值。離散時間瞬間的相應「零」自然是數組中的第一個索引(索引1)。但是在您的陣列中,此峯出現在索引N/2。在Shift theorem下,這會在頻域中導致額外的exp(-pi*j*k)項,從而導致您所看到的波動。爲了解決這個問題,你應該移回你的高斯脈衝ifftshift

F=fftshift(fft(ifftshift(f)));