美文网首页
Matlab 对于fft作图 横坐标问题

Matlab 对于fft作图 横坐标问题

作者: 大飞哥 | 来源:发表于2016-06-17 08:26 被阅读2414次

    假设采样频率为Fs,信号频率F,采样点数为N。那么FFT之后结果就是一个为N点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。具体跟原始信号的幅度有什么关系呢?假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。而第一个点就是直流分量,它的模值就是直流分量的N倍。而每个点的相位呢,就是在该频率下的信号的相位。

    由于奈奎斯特(Nyquist)采样定理, 采样频率为Fs的采样信号, 只能重建原信号. 所以, 频谱横坐标的最大值只能是Fs/2. 即有效的点, 为前 N/2 个点, 后面 N/2 个点是前面一般的简单重复. 即模值的A/2的来源.

    而频率分辨率即:
    例如某点n所表示的频率为:Fn=(n-1)*Fs/N。由上面的公式可以看出,Fn所能分辨到频率为为Fs/N,如果采样频率Fs为1024Hz,采样点数为1024点,则可以分辨到1Hz。1024Hz的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2秒时间的信号并做FFT,则结果可以分析到0.5Hz。如果要提高频率分辨力,则必须增加采样点数,也即采样时间。频率分辨率和采样时间是倒数关系。

    附: fft_understand.m

    
    Fs = 15000;            % Sampling frequency
    T = 1/Fs;             % Sampling period
    L = 1024;             % Length of signal
    t = (0:L-1)*T;        % Time vector
    
    f1 = 1500;
    f2 = 2500;
    n = 0:L-1;
    S = 0.7*cos(2*pi*f1*t) + sin(2*pi*f2*t);
    
    Y = fft(S);
    P2 = abs(Y/L);
    P1 = P2(1:L/2+1);
    P1(2:end-1) = 2*P1(2:end-1);
    
    f = Fs*(0:(L/2))/L;   % Define the frequency domain f
    
    plot(f,P1)
    title('Single-Sided Amplitude Spectrum of S(t)')
    xlabel('f (Hz)')
    ylabel('|P1(f)|')
    
    

    相关文章

      网友评论

          本文标题:Matlab 对于fft作图 横坐标问题

          本文链接:https://www.haomeiwen.com/subject/vdqvdttx.html