我在matlab上做了一个阶跃函数FFT,但只得到了光谱的一侧(0到无穷大)
Posted
技术标签:
【中文标题】我在matlab上做了一个阶跃函数FFT,但只得到了光谱的一侧(0到无穷大)【英文标题】:I did a step function FFT on matlab but only getting one side of the spectrum (0 to infinity) 【发布时间】:2013-10-31 22:37:18 【问题描述】:使用此代码,我只能得到从 0 到正无穷大的 fft 频谱的一半。我试图沿着 y 轴镜像这个,以获得与这个对称的另一半,从 0 到负无穷大。
Fs = 1000; %sampling rate
Ts = 1/Fs; %sampling time interval
t = -10:Ts:10-Ts; %sampling period
n = length(t); %number of samples
y = heaviside(t)-heaviside(t-4); %the step curve
matlabFFT = figure; %create a new figure
YfreqDomain = fft(y); %take the fft of our step funcion, y(t)
y=abs(YfreqDomain);
plot(y)
xlabel('Sample Number')
ylabel('Amplitude')
title('Using the Matlab fft command')
grid
axis([-100,100,0,5000])
【问题讨论】:
【参考方案1】:这是正常行为。 FFT 仅返回正频率(0 到 Fs 之间)的频谱。您可以使用fftshift
来纠正它。然后,零频率将位于 x 轴的中心。所以你应该使用
plot(fftshift(y))
axis([-100+1e4,100+1e4,0,5000])
【讨论】:
非常感谢您的成功。现在我怎样才能用 pi 而不是 from(-100+1e4,100+1e4) 来制作我的 x 轴(样本数)......你救了我的命这个项目明天到期!!fftshift
的 FFT 的完整频率轴应为 [-pi, pi]。所以使用plot(linspace(-pi,pi,length(y)),fftshift(y))
,然后使用axis([-.03,.03,0,5000])
谢谢 luis 我有最后一个问题:我想让我的代码依赖于我想要绘制的 FFT 点的数量,这样我就可以观察到当你有更多或更少的点时它所产生的差异。类似于他们在本文档中所做的:ele.uri.edu/~hansenj/projects/ele436/fft.pdf
我做了这个 'YfreqDomain = fft(y,n)' 其中 n 是样本数 'n = 200; %number of samples' 但我只看到一条直线你认为我在这里做错了什么?非常感谢
@neuronet 我现在没有太多时间,但看起来你从 Cris Luengo 那里得到了很好的答案,他对信号处理非常了解以上是关于我在matlab上做了一个阶跃函数FFT,但只得到了光谱的一侧(0到无穷大)的主要内容,如果未能解决你的问题,请参考以下文章
MATLAB矩阵运算 MATLAB对数组运算在符号上做了不同的约定,运算 符形式为:.* , ./ , . , .^