在Matlab中信号处于rawData时,在频率轴上计算FFT

时间:2017-04-28 11:24:28

标签: c++ matlab signal-processing fft ifft

我有一个频率为10 MHz的信号,以100 MS / sec的速率采样。当我的信号在rawData中时,如何在matlab中计算FFT的频率(此rawData的长度为100000),

  1. NFFT的最佳长度应该是什么(即,NFFT所依赖的因素)
  2. 为什么我的幅度(Y轴)随NFFT变化
  3. NFFT,N和L之间的差异。如何计算信号长度
  4. 如何从单个信号(在rawData中)中分离噪声和信号
  5. 这是我的代码,

    t=(1:40);
    f=10e6;
    fs=100e6;
    
    NFFT=1024;
    
    y=abs(rawData(:1000,2));
    X=abs(fft(y,NFFT));
    f=[-fs/2:fs/NFFT:(fs/2-fs/NFFT)];
    
    subplot(1,1,1);
    semilogy(f(513:1024),X(513:1024));
    axis([0 10e6 0 10]);
    

1 个答案:

答案 0 :(得分:1)

您可以在another post找到相应的频率,我将回答您的其他问题:

  1. 包括所有数据在内的大部分时间都是最佳选择。 fft只是将输入数据截断为请求的长度,这可能不是您想要的。如果您知道单个输入的周期,则可以将其截断以包含整数个周期。如果你不知道,一个窗口(例如汉宁)可能会很有趣。

  2. 如果更改NFFT,则在fft计算中使用更多数据,这可能会略微改变给定频率的幅度。您还可以计算0Fs/2之间更多频率的幅度(采样频率的一半)。

  3. 问题不明确,请提供NL的定义。

  4. 这取决于您的申请。如果噪音与您的信号频率相同,则无法将其分开。否则,您可以使用过滤器(例如带通)来提取感兴趣的频率。