2015-06-15 44 views
0

我最近在Matlab中一直在研究DFT,這裏是我在Matlab中的代碼。哪部分代碼有問題,我的採樣是錯誤的?如果你回答我的問題,我會感激:步進函數的時域DFT

dt = 0.01;  %sampling time interval 
Fs = 1/dt;  %sampling rate 
t = 0:dt:45;  %Time vector 
t0 = 5;   %duration of applied stress 
N = length(t); %number of sample points 
y_timedomain = heaviside(t)-heaviside(t-t0);  %the step function 
figure (1) 
plot(y_timedomain) 
axis([-100,1000,-0.2,1.2]); 
y_freqDomain=abs(fft(y_timedomain));  % fft of step funcion, y(t) 
z = fftshift(y_freqDomain);    % DFT and shift center to zero 
figure (2) 
plot(linspace(-10,10,length(y_freqDomain)),z) 
xlabel('Sample Number') 
ylabel('Amplitude') 
title('Using the Matlab fft command') 
grid 
axis([-.3,.3,0,1000]); 

同時,我對這個代碼2問題: 1 0時我的階躍函數,有1/2的大小,但我想我的步函數在0時是0而不是1/2(如矩形形狀),但我不知道如何糾正它? 2-當我們做DFT時,我們是否應該總是使用「shift FFT」? 如果你給我關於這段代碼的建議,我將非常感激。

+0

請問在正確的論壇(Stack Exchange Math我猜?)一般的FT問題,在這裏,我們只應該看看編程和框架問題。儘管如此,請參閱下面的簡短答案。 – rst

回答

0

單位階躍函數

MATLAB確實定義與1/2x=0(見http://de.mathworks.com/help/symbolic/heaviside.html?refresh=true)階躍函數,如果你願意,否則你可以定義自己的功能,也許是這樣嗎?

mystep = @(x) sign(max(x, 0)); 

fftshift

不,你不必總是使用fftshift,這實際上取決於正是你想做的事。原則上,fft不適用於像step函數這樣的信號(如果你想做一些頻率分析,在這種特殊情況下,我建議做分析ft!)。有很多副作用(我現在不想進入這個領域),fftshift是幫助處理這些問題的工具之一。閱讀文檔(doc fftshift)並瞭解有關ft的更多信息。