补零后的幅度校正以进行上采样

信息处理 fft 傅里叶变换 采样
2022-02-18 11:39:06

我有数据以 0.8 Hz 采样的时间序列。数据与色谱(化学分析)有关,这就是采样频率相对较低的原因。此时仪器无法更快地采样。

我在 MATLAB 中探索通过频域中的零填充进行上采样的想法,如下所示。

FFT_S=fft(Signal); % FFT of Signal of Interest

FFT_ZP=[FFT_S(1:length(t)/2,1); zeros(1000,1); FFT_S(length(t)/2+1:end,1)]; % Zero padding with 1000 zeros.

Signal_Up=real(ifft(FFT_ZP)); % Upsampled data

原始数据由 716 个点组成。上采样数据有 1716 个点,但幅度减小了——这是不希望的。

是否有一个简单的乘法因子可以根据上采样前后的点总数来校正 MATLAB 中的幅度?

编辑:

幸运的是,对于这种分析化学目的,零填充的权衡是不相关的。定性地说,为了保持幅度相同,我发现如果我们将采样率加倍,则反向 fft 后的幅度必须乘以 2,如果我们通过零填充将采样率增加三倍,则幅度必须乘以3.忽略权衡,必须有一个通用的方法来根据初始和最终数据点的数量来校正最终幅度?

谢谢。

2个回答

如果您使用 1/N 归一化 DFT,那么当您采用逆 DFT(没有归一化因子/因子 1)时,您的幅度应该不会有任何问题。考虑帧中具有整数个周期的纯音的情况。只有一个 bin 对将是非零的。无论您插入多少额外的零,逆 DFT 都会在相同的持续时间内重建相同的信号,只是进行适当的上采样。信号的幅度将是每个 bin 值幅度的两倍,与您的样本计数无关。


如果规范化因子已经在您的例程中硬编码为“1”正向、“1/N”反向,您可以简单地在反向角色中使用它们。取信号的“反向”,将其归零(分裂奈奎斯特),然后取“前向”。

或者,只需将您的最终结果乘以一个因子NnewNold,这证实了您在更新中的观察。

采样率转换是经过充分研究和记录的主题,并且有很多库,包括 Matlab 的resample()或者一世nerp()

这不是一个简单的过程,并且涉及相当多的权衡,包括相位失真、瞬态失真、最大可用频率、通带纹波、混叠抑制量、成本、延迟等。

您应该确保了解这些权衡并将它们映射到您的应用程序的特定需求。话虽如此,频域中的零填充是一种非常糟糕的方法。