我在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求解具有初始条件阶跃函数的 PDE 系统

MATLAB矩阵运算 MATLAB对数组运算在符号上做了不同的约定,运算 符形式为:.* , ./ , . , .^

matlab 作出信号频谱图

python 问题。。。 对一个波形文件做fft,然后怎么获取那些频率分量? numpy有这个函数

如何在matlab的powergui里面进行fft分析