Matlab 阶跃函数的时域DFT

Matlab 阶跃函数的时域DFT,matlab,matlab-figure,Matlab,Matlab Figure,最近我一直在Matlab中研究DFT,下面是我在Matlab中的代码。我的代码的哪一部分有问题,我的采样是错误的???如果您能回答我的问题,我将不胜感激: 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

最近我一直在Matlab中研究DFT,下面是我在Matlab中的代码。我的代码的哪一部分有问题,我的采样是错误的???如果您能回答我的问题,我将不胜感激:

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]);
同时,我对该代码有两个问题: 1-我在0时的阶跃函数,其大小为1/2,但我希望我在0时的阶跃函数为0而不是1/2(例如矩形),但我不知道如何更正它??? 2-当我们进行DFT时,我们是否应该始终使用“移位FFT”????
如果您能就这段代码给我一些建议,我将非常感激。

Heaviside Step Function

MATLAB确实使用
1/2
x=0
定义了阶跃函数(请参见),如果您不希望,您可以定义自己的函数,也许像这里这样

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


不,你不必总是使用fftshift,这取决于你到底想做什么。原则上,fft不太适合像阶跃函数这样的信号(如果你想做一些频率分析,在这种特殊情况下,我建议做分析ft!)。有很多副作用(我现在不想进入这个领域),fftshift是帮助解决这些问题的工具之一。阅读文档(
doc fftshift
),了解有关金融时报的更多信息

请在正确的论坛(我想是堆栈交换数学?)中提出一般性的FT问题,这里我们应该只看编程和框架问题。不过,请看下面我的简短回答。