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')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent 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')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original, Resampled.

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

放大第一个脉冲的边沿:

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

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original, Resampled.

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

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])

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original, Resampled.

振荡显著减少。

对混叠进行滤波

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')

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Frequency (kHz) contains an object of type image.

接下来,使用 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')

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Frequency (kHz) contains an object of type image.

在此处,您可以看到原始信号以及不需要的频率成分。理想情况下,正弦波应从 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')

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Frequency (kHz) contains an object of type image.

请注意,混叠已去除。

延伸阅读

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

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

另请参阅

| |

相关主题