【问题标题】:How to choose the value of nfft in Matlab? What is the effect of the window size?Matlab中如何选择nfft的值?窗口大小有什么影响?
【发布时间】:2015-04-06 21:35:43
【问题描述】:

问题 1
我有一个信号x,采样频率为1000
我想在 Matlab 中做X = fft(x,nfft);。问题是我不知道如何找到 nfft 的值。我看到有人可以通过nfft = 2^nextpow2(length(x));计算nfft,但我不知道它的含义,谁能解释一下?

问题 2
我有一个信号x,采样频率为1000
这次我想添加一个矩形窗口,然后做fft。
如 Matlab 中的X = fft(x(1:200),nfft);
假设我这次知道如何计算nfft,但我想问一下窗口大小和X之间的关系。
例如,如果我有一个大窗口,它将如何改变 X?
如果我有一个小窗口,它将如何改变 X?

【问题讨论】:

    标签: matlab fft


    【解决方案1】:

    问题 1

    要回答第一个问题,标准约定是选择 2 的幂次于您要输入的数据的大小。2 的幂次的原因是由于 fft 算法拆分数据的方式.虽然您可以使用 2 的幂以外的大小,但如果这样做会更慢,因此强烈建议使用 2 的幂。同时使用 length(x) 而不是 size(x)

    此外,您不希望使用小于您正在分析的数据大小的值,因为如果这样做,并非所有样本都会被使用,但是如果您使用更大的值,该函数只会将 0 附加到结束所以它是正确的大小,称为零填充。

    问题 2

    窗口化,尤其是使用矩形滤波器,不会真正影响 x,除了使样本量更小会导致 FFT 的准确性降低。当您修剪数据时,输出 X 的分辨率会降低。更多的数据通常意味着更好的分辨率/准确度

    注意

    StackOverflow 并不是这些问题的真正场所。请做好功课。在提出可以通过阅读 Wikipedia 文章或谷歌搜索 FFT 轻松回答的问题之前,请先阅读。

    更新 有关 FFT 算法的信息。 FFT

    对于正向 FFT,拆分数据的过程称为时间抽取,对于反向 FFT,称为频率抽取

    【讨论】:

    • 2的幂次的原因是由于fft算法分割数据的方式。 --- 你能提供更多关于这个的信息吗?或者我在哪里可以找到这些信息或者这个概念的关键词是什么? --- 非常感谢
    • 这里的解释会很冗长且不必要,谷歌它,或查看我发布的链接。这个概念称为时间或频率抽取
    • @sflee:如果你真的想知道两件事的力量,请阅读Cooley–Tukey radix-2 FFT algorithm。如今,借助硬件加速 FFT,除非您拥有大量数据或需要高速运行,否则 nfft 是什么通常并不重要。
    • 如果不写那个“注释”就可以回答了。无礼。你不拥有 StackOverFlow,你不规定其他用户可以提出什么样的问题。在这种情况下,这个问题是非常合理的。
    【解决方案2】:

    当我问自己同样的问题时,最好的答案是: nexpower 2 是为了更好地拟合 2^N 窗口中的 FFT。但是选择取决于您希望在 FFT 中获得的分辨率,因为具有较大窗口的 F​​FT 只是在 FFT 上附加了一些零。另外,如果要绘制信号,则必须选择正确的频率范围:

    对于 2*nextpowerof2,你应该使用从 0 到 N+1 的 f 对于 1*nextpowerof2,你应该使用从 0 到 N/2+1 的 f

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-19
      • 2014-04-11
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 2018-10-23
      • 1970-01-01
      相关资源
      最近更新 更多