Select 整数个周期

Select an integer number of periods

假设我们有频率为 100Hz 且采样频率为 1000Hz 的正弦波。这意味着我们的信号每秒有 100 个周期,我们每秒采集 1000 个样本。因此,为了 select 一个完整的时期,我将不得不采取 fs/f=10 个样本。正确的? 如果采样周期不是信号频率的倍数(如 550Hz)怎么办?我是否必须找到 ffs 的最小倍数 M,然后取 M 个样本? 我的目标是 select 整数个周期,以便能够在不更改的情况下复制它们。

你每秒有 f 个周期,每秒有 fs 个样本。

如果您采集 M 个样本,它将覆盖 M/fs 秒的一部分,或 P = f * (M/fs) 个周期。你希望这个数字是整数。

所以你需要采集 M = fs / gcd(f, fs) 个样本。

以你的例子为例P = 1000 / gcd(100, 1000) = 1000 / 100 = 10

如果你有 60 Hz 频率和 80 Hz 采样频率,它给出 P = 80 / gcd(60, 80) = 80 / 20 = 4 -- 4 个样本将覆盖 4 * 1/80 = 1/20 秒的一部分,这将是 3 个周期。

如果您有 113 Hz 频率和 512 Hz 采样频率,那您就不走运了,因为 gcd(113, 512) = 1 并且您需要 512 个样本,涵盖整个秒和 113 个周期。

一般来说,任意频率不会有整数个周期。不合理的频率永远不会重复。因此,除了串联一个周期的缓冲器之外,还需要一些其他方法来准确合成任意频率的周期性波形。通过分数相位偏移的插值近似是一种可能性。