了解 matlab 中的归一化频率
Understanding normalized frequency in matlab
我正在尝试比较具有不同长度但相同采样率的两个信号在 Matlab 中的相干性和 Welch 传递函数估计。当我使用 mscohere 和 tfestimate 时,我得到了与归一化频率的关系图。知道频率的上限是奈奎斯特频率(采样率的一半),下限是直流信号,我是否需要对被采样的间隔进行归一化,使其长度相同?
换句话说,对于超过 100 秒采样的信号,.1 xpi rad/sample = .1 xpi rad/sample 对于超过 100000 秒采样的信号?
首先,我想向您推荐Paul R's wonderful post on the FFT with regards to what each bin means with respect to the frequency content of your signal - How do I obtain the frequencies of each value in a FFT?
本质上,信号有多长并不重要。重要的是您为 FFT 选择了多少点,并确保每个信号具有 相同 采样率。如果是这种情况,那么您将能够正确比较两个信号之间的频率分布。请记住,FFT 是一种 频率分解 算法。它将您的信号分解为正弦曲线的总和(或准确地说是复指数),因此我们正在测量该信号中包含的每个频率的多少。如果您以这种方式考虑 FFT,那么您可以再飞跃一下,说信号的长度无关紧要。
举一个相当简单的例子,如果我们以 1 kHz 播放一个音调 3 秒,然后以 1 kHz 播放另一个音调 10 秒,如果您考虑一下,这应该无关紧要 long 播放过的那个。我们可以肯定地知道该信号的频率分解将仅包含 1 个分量 - 即 1 kHz 的分量。因此,您当然可以比较两个信号,而不管信号之间的时间有多长——我们只看信号的频率内容。
更进一步,回顾一下 Paul R 的 post,假设我们有一个 1024 点 FFT,我们的采样率为 44.1 kHz。请注意,我们不关心信号有多长。这样,bin映射到哪个频率对应的FFT的bin号可以总结如下:
0: 0 * 44100 / 1024 = 0.0 Hz
1: 1 * 44100 / 1024 = 43.1 Hz
2: 2 * 44100 / 1024 = 86.1 Hz
3: 3 * 44100 / 1024 = 129.2 Hz
4: ...
5: ...
...
511: 511 * 44100 / 1024 = 22006.9 Hz
如您所见,在 N/2 - 1
,这对应于奈奎斯特频率。另请注意,您只需要一半的 FFT 即可重建数据。其他 bin (512 - 1023) 对应于负频率,这是 FFT 算法的结果(有关详细信息,请参阅 Cooley-Tukey FFT algorithm)。
之所以要指出这个bin到频率的映射是因为当我们把你的信号分解成它的频率分量时,只要采样频率和点数相同,你就会得到一个频率上面table之后的故障,不管信号有多长。因此,当您将信号分解为频域的频率时,我们只需测量我们在您的信号中看到的特定频率的多少,这与其长度无关。因此,当您将两个信号放在一起进行比较时,您将获得两个信号的频率分解,就像上面的信号一样,在同一个音符上,您可以自然地比较两个信号之间的频率内容。
tl;dr
如果您不想阅读以上内容,答案是否定的,您不需要对被测信号的长度进行归一化。您只需要确保采样频率以及用于分解每个信号的 FFT 点数在两个信号之间是相同的。
我正在尝试比较具有不同长度但相同采样率的两个信号在 Matlab 中的相干性和 Welch 传递函数估计。当我使用 mscohere 和 tfestimate 时,我得到了与归一化频率的关系图。知道频率的上限是奈奎斯特频率(采样率的一半),下限是直流信号,我是否需要对被采样的间隔进行归一化,使其长度相同?
换句话说,对于超过 100 秒采样的信号,.1 xpi rad/sample = .1 xpi rad/sample 对于超过 100000 秒采样的信号?
首先,我想向您推荐Paul R's wonderful post on the FFT with regards to what each bin means with respect to the frequency content of your signal - How do I obtain the frequencies of each value in a FFT?
本质上,信号有多长并不重要。重要的是您为 FFT 选择了多少点,并确保每个信号具有 相同 采样率。如果是这种情况,那么您将能够正确比较两个信号之间的频率分布。请记住,FFT 是一种 频率分解 算法。它将您的信号分解为正弦曲线的总和(或准确地说是复指数),因此我们正在测量该信号中包含的每个频率的多少。如果您以这种方式考虑 FFT,那么您可以再飞跃一下,说信号的长度无关紧要。
举一个相当简单的例子,如果我们以 1 kHz 播放一个音调 3 秒,然后以 1 kHz 播放另一个音调 10 秒,如果您考虑一下,这应该无关紧要 long 播放过的那个。我们可以肯定地知道该信号的频率分解将仅包含 1 个分量 - 即 1 kHz 的分量。因此,您当然可以比较两个信号,而不管信号之间的时间有多长——我们只看信号的频率内容。
更进一步,回顾一下 Paul R 的 post,假设我们有一个 1024 点 FFT,我们的采样率为 44.1 kHz。请注意,我们不关心信号有多长。这样,bin映射到哪个频率对应的FFT的bin号可以总结如下:
0: 0 * 44100 / 1024 = 0.0 Hz
1: 1 * 44100 / 1024 = 43.1 Hz
2: 2 * 44100 / 1024 = 86.1 Hz
3: 3 * 44100 / 1024 = 129.2 Hz
4: ...
5: ...
...
511: 511 * 44100 / 1024 = 22006.9 Hz
如您所见,在 N/2 - 1
,这对应于奈奎斯特频率。另请注意,您只需要一半的 FFT 即可重建数据。其他 bin (512 - 1023) 对应于负频率,这是 FFT 算法的结果(有关详细信息,请参阅 Cooley-Tukey FFT algorithm)。
之所以要指出这个bin到频率的映射是因为当我们把你的信号分解成它的频率分量时,只要采样频率和点数相同,你就会得到一个频率上面table之后的故障,不管信号有多长。因此,当您将信号分解为频域的频率时,我们只需测量我们在您的信号中看到的特定频率的多少,这与其长度无关。因此,当您将两个信号放在一起进行比较时,您将获得两个信号的频率分解,就像上面的信号一样,在同一个音符上,您可以自然地比较两个信号之间的频率内容。
tl;dr
如果您不想阅读以上内容,答案是否定的,您不需要对被测信号的长度进行归一化。您只需要确保采样频率以及用于分解每个信号的 FFT 点数在两个信号之间是相同的。