Main Content

对均匀采样信号进行重采样

此示例说明如何以新的均匀速率对均匀采样的信号进行重采样。它说明如何减少大瞬变的影响,以及如何去除不需要的高频成分。

按有理因子进行速率转换

resample 函数执行从一个采样率到另一个采样率的速率转换。resample 允许您按积分因子 p 进行上采样,然后按另一个积分因子 q 进行抽取。这样,您能够以原始采样率的有理倍数 (p/q) 进行重采样。

要对均匀采样使用 resample 函数,您必须提供此有理因子的分子和分母。要确定所需的整数,可以使用 rat 函数。

以下是从 48 kHz 转换为 44.1 kHz 时如何调用 rat 的示例:

originalFs = 48000;
desiredFs = 44100;

[p,q] = rat(desiredFs / originalFs)
p = 147
q = 160

rat 表示可以按 147 进行上采样,按 160 进行下采样。要验证这是否会产生所需的速率,请将 p/q 乘以原始采样率:

originalFs * p / q
ans = 44100

一旦您确定了新采样率和原始采样率之间的比率,您就可以调用 resample

例如,使用 48 kHz 的原始采样率创建一段 10 毫秒长的 500 Hz 正弦波,并将其转换为 44.1 kHz:

tEnd = 0.01;
Tx = 0:1/originalFs:tEnd;
f = 500;
x = sin(2*pi*f*Tx);

y = resample(x,p,q);
Ty = (0:numel(y)-1)/desiredFs;

plot(Tx,x,'. ')
hold on
plot(Ty,y,'o ')
hold off
legend('Original','Resampled')

对于上述正弦波等表现良好的信号,仅使用 resample 和精心选择的 pq 就足以正确重新构造信号。

对于具有瞬变或显著噪声的信号,您可能希望对 resample 中的多相抗混叠滤波器有更好的控制。

对瞬变进行滤波

resample 函数在执行速率转换时使用滤波器。这种滤波对信号中的大瞬变很敏感。

为了说明这一点,我们对矩形脉冲进行重采样:

x = [zeros(1,120) ones(1,241) zeros(1,120)];
y = resample(x,p,q);

plot(Tx,x,'-', Ty,y,'-')
legend('Original','Resampled')

该函数很好地重新构造了脉搏的平台区。然而,在脉冲的边沿存在尖峰。

放大第一个脉冲的边沿:

xlim([2e-3 3e-3])

在过渡区域中有阻尼振荡。您可以通过调整内部滤波器的设置来减小这种振荡。

resample 允许您控制应用于抗混叠滤波器的凯塞窗,以减轻某些边沿效果。

两个参数 nbeta 控制滤波器的相对长度和它尝试执行的平滑量。n 的较大值表示具有较大的滤波器长度。beta 为 0 表示没有额外的平滑处理。更大的 beta 值表示具有更大的平滑处理。默认情况下,n 为 10,beta 为 5。

一个可行的方法是从默认值开始,并根据需要进行调整。在此处,将 n 设置为 5,将 beta 设置为 20。

n = 5;
beta = 20;

y = resample(x,p,q,n,beta);

plot(Tx,x,'.-')
hold on
plot(Ty,y,'o-')
hold off
legend('Original','Resampled')
xlim([2e-3 3e-3])

振荡显著减少。

对混叠进行滤波

resample 函数旨在将采样率转换为更高或更低的速率。因此,抗混叠滤波器的截止频率设置为输入或输出采样率的奈奎斯特频率(以较低者为准)。此默认设置使得 resample 函数具有广泛的应用。

有时直接控制滤波器可能是有益的。

为了说明这一点,我们构造并查看一段以 96 kHz 采样的啁啾信号的频谱图。该啁啾信号由一个正弦波组成,其频率在整个奈奎斯特频率范围内从 0 Hz 到 48 kHz 呈二次变化,持续时间为 8 秒:

fs1 = 96000;
t1 = 0:1/fs1:8;
x = chirp(t1, 0, 8, fs1/2, 'quadratic');
spectrogram(x,kaiser(256,15),220,412,fs1,'yaxis')

接下来,使用 resample 的默认设置将啁啾信号转换为 44.1 kHz,并查看频谱图:

fs2 = 44100;

[p,q] = rat(fs2/fs1);
y = resample(x,p,q);

spectrogram(y,kaiser(256,15),220,412,fs2,'yaxis')

在此处,您可以看到原始信号以及不需要的频率成分。理想情况下,正弦波应从 0 Hz 开始,持续到在 5.422 秒时达到 22.05 kHz 的奈奎斯特频率。而实际上,由于在用于重采样的默认滤波器的边缘引入了小的不连续性,从而引入了伪影。为了防止这些伪影,您可以提供较长的滤波器,其截止频率略低,阻带抑制比默认滤波器更大。

为了获得适当的时序对齐,滤波器应具有奇数长度。长度应比 pq 大几倍(以较大者为准)。同样,将所需的归一化截止频率除以 pq 中的较大值。在任一情况下,都将生成的系数乘以 p

下面是一个滤波器示例,其截止频率为输出奈奎斯特频率的 98% (0.98),阶数为 256 乘以抽取因子,采用凯塞窗进行加窗且 beta 为 12。

normFc = .98 / max(p,q);
order = 256 * max(p,q);
beta = 12;

lpFilt = firls(order, [0 normFc normFc 1],[1 1 0 0]);
lpFilt = lpFilt .* kaiser(order+1,beta)';
lpFilt = lpFilt / sum(lpFilt);

% multiply by p
lpFilt = p * lpFilt;

% resample and plot the response
y = resample(x,p,q,lpFilt);
spectrogram(y,kaiser(256,15),220,412,fs2,'yaxis')

请注意,混叠已去除。

延伸阅读

有关重采样的详细信息,请参阅 Signal Processing Toolbox。

Reference: fredric j harris, "Multirate Signal Processing for Communications Systems", Prentice Hall, 2004.

另请参阅

| |

相关主题