Skip to content

等效时间采样(欠采样导语)

设想一下一个 1 Hz 正弦波,周期 1 秒。每隔 1.1 秒对它采样一次,采样率 0.909 Hz,低于信号频率本身。按采样(二)的规则,这个采样率连 0.5 Hz 都恢复不了。

1 Hz 正弦与 1.1 s 间隔采样点
1 Hz 正弦与 1.1 s 间隔采样点

但图中的采样点,真的什么信息都没有了吗?

信号频率 1 Hz,采样间隔 1.1 s。两次采样之间,信号走过

1 Hz×1.1 s=1.1 个周期1\text{ Hz} \times 1.1\text{ s} = 1.1 \text{ 个周期}

整数部分(1 个周期)对正弦来说等于没走,有效的只是小数部分 0.1 个周期,对应相位前进 0.1×360°=36°0.1 \times 360° = 36°

列出 10 个点的等效相位:

nn采样时刻 (s)信号走过的总周期数等效相位(取小数部分 × 360°)
000
11.11.136°
22.22.272°
33.33.3108°
44.44.4144°
55.55.5180°
66.66.6216°
77.77.7252°
88.88.8288°
99.99.9324°

10 个点把一整圈等分成了 10 份。

10 个采样点在相位圆上的位置
10 个采样点在相位圆上的位置

每次采样跳过 36°36°,10 步正好走完一圈。把这些点按相位从小到大排列,就等于在一个周期内均匀放了 10 个点。你看,神奇的事情发生了,信号被恢复了出来。

采样点按相位重排为一个周期内的等效采样
采样点按相位重排为一个周期内的等效采样

实际采样率 0.909 Hz,等效采样率 10 Hz。

这种神奇的做法叫等效时间采样,用多个周期的慢速采样拼出一个周期的密集采样效果。

设信号周期 T0T_0,采样间隔 TsT_s,每次采样的相位步进是

Δϕ=TsmodT0T0×360°\Delta\phi = \frac{T_s \bmod T_0}{T_0} \times 360°

这里 TsmodT0T_s \bmod T_0TsT_s 除以 T0T_0 的余数。Ts=1.1 sT_s = 1.1\text{ s}, T0=1 sT_0 = 1\text{ s} 时,余数是 0.1 s,步进 36°36°

覆盖一整圈需要的采样次数是

N=360°Δϕ=T0TsmodT0N = \frac{360°}{\Delta\phi} = \frac{T_0}{T_s \bmod T_0}

等效采样率就是

feq=NT0=1TsT0f_{\text{eq}} = \frac{N}{T_0} = \frac{1}{T_s - T_0}

(当 TsT_s 略大于 T0T_0 时,TsmodT0=TsT0T_s \bmod T_0 = T_s - T_0

feq=11.11=10.1=10 Hzf_{\text{eq}} = \frac{1}{1.1 - 1} = \frac{1}{0.1} = 10\text{ Hz}

采样间隔越接近信号周期,相位步进越小,需要的采样次数越多,等效采样率越高,但总观测时间也越长。

不同采样间隔的等效采样率与观测时间
不同采样间隔的等效采样率与观测时间
采样间隔 TsT_s相位步进覆盖一圈的次数 NN等效采样率总观测时间
1.1 s36°1010 Hz11 s
1.01 s3.6°100100 Hz101 s
1.001 s0.36°10001000 Hz1001 s

两者乘积近似为常数 T0/(TsT0)2×TsT_0 / (T_s - T_0)^2 \times T_s

我们从采样后的信号角度看下。设信号 x(t)=sin(2πf0t)x(t) = \sin(2\pi f_0 t),第 nn 个样本

x[n]=sin(2πf0nTs)x[n] = \sin(2\pi f_0 n T_s)

f0=1 Hzf_0 = 1\text{ Hz}, Ts=1.1 sT_s = 1.1\text{ s}

x[n]=sin(2π×1.1n)=sin(2πn+2π×0.1n)x[n] = \sin(2\pi \times 1.1 \, n) = \sin(2\pi n + 2\pi \times 0.1 \, n)

sin\sin 的周期性让 2πn2\pi n 消失

x[n]=sin(2π×0.1n)x[n] = \sin(2\pi \times 0.1 \, n)

数字系统看到的是归一化频率 0.10.1 周期/样本的正弦序列。这个序列和 0.091 Hz0.091\text{ Hz} 信号以 0.909 Hz0.909\text{ Hz} 采样的结果数值相同(0.091/0.9090.10.091 / 0.909 \approx 0.1)。

0.909 Hz 采样让频谱按 0.909 Hz 间隔复制。1 Hz 的谱线原本在 ±1 Hz\pm 1\text{ Hz},复制后出现在

f=1+k×0.909 Hz,k=0,±1,±2,f = 1 + k \times 0.909\text{ Hz}, \quad k = 0, \pm1, \pm2, \ldots

k=1k = -1

f=10.909=0.091 Hzf = 1 - 0.909 = 0.091\text{ Hz}
频谱副本分布
频谱副本分布

已知信号在 1 Hz 附近,k=1k = -1,反推

fsignal=falias+kfs=0.091+1×0.909=1 Hzf_{\text{signal}} = f_{\text{alias}} + |k| \cdot f_s = 0.091 + 1 \times 0.909 = 1\text{ Hz}

欠采样把高频谱线折到低频位置,只要目标频率已知,就能从折回位置反推回去。

我们现在换一个信号,频率 1/110.091 Hz1/11 \approx 0.091\text{ Hz},周期 11 秒。用 0.909 Hz 采样时奈奎斯特准则满足(0.909>2×0.0910.909 > 2 \times 0.091),采样后频谱仍在 0.091 Hz,没有折回。

1 Hz 欠采样折回到 0.091 Hz,0.091 Hz 常规采样也在 0.091 Hz。两个信号的采样序列数值相同。

1 Hz 与 0.091 Hz 产生相同的采样序列
1 Hz 与 0.091 Hz 产生相同的采样序列

写出两个信号的序列:

x1[n]=sin(2π×1×1.1n)=sin(2π×0.1n)x_1[n] = \sin(2\pi \times 1 \times 1.1 \, n) = \sin(2\pi \times 0.1 \, n) x2[n]=sin(2π×0.091×1.1n)=sin(2π×0.1n)x_2[n] = \sin(2\pi \times 0.091 \times 1.1 \, n) = \sin(2\pi \times 0.1 \, n)

完全相同。数字系统面对的只是 sin(2π×0.1n)\sin(2\pi \times 0.1 \, n) 这串数字,无法判断它来自 1 Hz 还是 0.091 Hz。

输入信号采样率数字频率能否区分
1 Hz0.909 Hz0.1 周期/样本不能
0.091 Hz0.909 Hz0.1 周期/样本不能

如果这两个信号同时存在,它们的能量在 0.091 Hz 处叠加,无法分离。欠采样只在提前知道目标频率范围的前提下才能用,采样率设计时得保证目标频率折回后的位置不和其他可能存在的频率重合。

等效时间采样把来自不同周期的样本拼到一个周期里,前提是每个周期的波形都一样。

如果信号在第 5 个周期发生了形变(比如幅度变了、频率漂了),那么第 5 次采样取到的值就不再代表”第 0 个周期在 180° 处的值”。拼出来的波形既不属于第 0 个周期,也不属于第 5 个周期,是个不存在的波形。

周期波形发生变化时,等效时间采样会拼出不存在的波形
周期波形发生变化时,等效时间采样会拼出不存在的波形

所以等效时间采样只适用于严格周期信号或重复触发信号。

高带宽示波器经常用这个方法。被测信号重复频率 1 GHz(周期 1 ns),ADC 最高采样率只有 100 MHz(间隔 10 ns)。

每次触发时,让采样时刻相对触发沿偏移一个固定的小量 Δt\Delta t。第一次触发采在触发沿后 0 ns,第二次采在触发沿后 0.01 ns,第三次在 0.02 ns……

100 次触发后,1 ns 内的 100 个采样点就都覆盖到了,等效采样率 100 GHz。

示波器等效时间采样原理
示波器等效时间采样原理

不过这要花时间,100 次触发、每次间隔至少一个信号周期,总时间至少 100 ns。如果信号在这 100 ns 内形状发生了变化,比如抖动、漂移,拼出来的波形就会失真。

示波器规格表上的”等效采样率”和”实时采样率”不是一回事。实时采样率是一次触发内 ADC 能跑多快,等效采样率是多次触发拼接后的有效点密度。

我们实操可以实际非常简单,本人本科电赛的时候,经常用stm32玩这个。可以看下我本科时候写的教程。实际操作过程中,受限于定时器的触发准确性与ADC的采样保持时间,并不能实现短时间精准的时间偏移和采样,所以这个办法实施受限。

‍☠️stm32Cubemx欠采样(等效采样)原理讲解与实现 采集高频信号_stm32之tim+adc+dma采集50hz交流信号-CSDN博客