当有理整数接近 1 时,插值 (interp1) 是否优于 FIR 滤波?

信息处理 matlab 插值 重采样 过滤
2022-01-29 21:49:29

问题
我一直在尝试在 MATLAB 中重新采样 GPS 信号。我已经使用fvatool手工制作的传递函数(用 HP-35s 打孔)构建了一些 FIR 滤波器。大多数是 kaiser 窗口 LPF,但有些是最小二乘 LPF。我构建的所有过滤器都具有标称响应,可以充分滤除插值中的混叠。我还构建了一个 FFT 重采样工具,可以很好且非常快速地重新采样。但是,至少在我看来,我遇到了一个奇怪的异常现象。一个简单的“最近”邻居插值interp1似乎我所做的任何 FFT 重采样或我使用的任何上采样、滤波器、抽取工具更准确地重采样我的信号,包括dsp.FIRRateConverterresampleupfirdn,甚至是直upsample的,filterdecimate. 为什么是这样?谁能解释为什么会发生这种情况?我的理论是,当采样率的有理整数非常接近 1 时,直接插值将提供更准确的结果,因为您可以减少振荡和/或其他噪声失真。

背景
我的信号是标准收集的 GPS 信号,从空中提取,以 25e6 sps 采样并使用带符号的 16 位整数保存在二进制文件中。当拉入 MATLAB(由于大小而必须分块完成)时,信号是一个复杂的行向量。

我上采样到 26.25e6 sps,因此我的有理整数pq分别是 21 和 20。要使用interp1,我只需构建两个时间向量:

 t0 = (0:1:numSamples - 1)*1/sampleRate;
 t1 = (0:1:numResamples - 1)*1/resampleRate;

在哪里

 sampleRate= 25e6;
 resampleRate = 26.25e6;
 samplingRatio = resampleRate/sampleRate;
 numSamples = length(s0) % length of my original signal, sampled at 25e6 samples
 numResamples = length(s0)*samplingRatio % length of my sampled signal; should equal length(s1)
 s1 = interp1(t0,s0,t1,'nearest','extrap');

在使用 FIR 滤波器时,我使用了很多方法。但最简单的方法是这样调用resample(resample 是一个最小二乘 FIR 滤波器,带有一个通过调用的 kaiser 窗口firls被推过upfirdn):

 s1 = resample(s0,p,q);

在哪里

 [p,q] = rat(resampleRate/sampleRate,1e-12);
2个回答

您正在查看“正确性”的错误指标。最近的邻居正在引入显着的不连续性,这些不连续性在结果中显示为大量的噪音。

问题是,如果您首先以 26.25MHz 进行采样,您应该将得到的结果与您进行比较。

让我们尝试一下(以 26 Hz 采样 12Hz 正弦波,持续 2 秒):

numResamples = 52;
resampleRate = 26;
t1 = (0:1:numResamples - 1) * 1/resampleRate;
s1correct = sin(t1 * 24 * pi);
plot(t1,s1correct);
plot(t1,abs(fft(s1correct)));

我们想要什么

行。现在让我们看看如果我们以 25Hz 对 12Hz 信号进行采样,然后使用 matlab 的线性插值插值到 26Hz 会发生什么。(实际上,我使用的是 Octave,因为我今天在没有 matlab 的机器上)

numSamples = 50;
sampleRate = 25;
t0 = (0:1:numSamples - 1) * 1/sampleRate;
s0 = sin(t0 * 24 * pi);
s1linear = interp1(t0, s0, t1, 'linear', 'extrap');
plot(t1,s1linear);
plot(t1,abs(fft(s1linear)));

线性插值

不错。现在让我们看看最近邻插值。

s1nearest = interp1(t0, s0, t1, 'nearest', 'extrap');
plot(t1,s1nearest);
plot(t1,abs(fft(s1nearest)));

在此处输入图像描述

它完全不同,并且充满了所有频率的噪音!!!(最近邻结果中的“节拍模式”是从 25Hz 而不是 26Hz 采样的节拍模式。)噪声是因为最近邻将 12Hz 信号压缩到 12.48Hz,然后每 26 个样本插入一个额外的样本以获得我们回到了 24 个山峰。额外的样本是产生所有额外噪音的不连续性。

我想你会发现三次插值比线性插值还要好。

我首先要说我对 GPS 一无所知,但我相信 WanderingLogic 已经正确回答了这个问题,我会看看我是否可以用一个简化的问题来说明这一点。

假设原始传输信号是一个简单的 1Hz 正弦波。这将类似于从 GPS 卫星传输的信号,顺便说一下,这是 WanderingLogic 所指的连续信号。

您有 2 个接收器,一个以 5Hz 采样传输信号,另一个以 6Hz 采样信号。这两个信号现在都是该连续 1Hz 信号的离散表示。

由于基本采样时序不同,您无法将 5Hz 离散样本与 6Hz 样本进行比较,它们都不是在同一时间点采集的,因此(除 0 外)5Hz 值都不是在 6Hz 数据中,反之亦然反之亦然。您可以将 5Hz 波形上采样到 6Hz,但由于 WL 在上面描述和显示的不连续性,重新采样的 5Hz 波形将比您刚刚以 6Hz 采样时更嘈杂。我知道那部分不是你问的,但这只是为了澄清一下。

您将 25MHz 信号上采样到 26.25 是正确的方法,但我认为您将 25 与上采样 26.25 波形进行比较是您被交叉的地方。传输的连续信号最终是您要匹配的,而不是原始的 25MHz 采样波形。