B.3 分数倍率变换
前两节各处理一种情况:8 kHz 到 16 kHz,先插零再低通;16 kHz 到 8 kHz,先低通再抽取。实际系统里,目标采样率往往不是原来的整数倍,也不是整除关系。
比如 CD 常见采样率是 44.1 kHz,很多音频设备内部用 48 kHz。两套采样时刻对不上:44.1 kHz 每秒 44100 个点,48 kHz 每秒 48000 个点,大部分时刻都错开了,不能把 44.1 kHz 的样本原样搬到 48 kHz 的位置上。
中间采样时刻
Section titled “中间采样时刻”把 44.1 kHz 转成 48 kHz,采样率之比是
也就是说目标采样率是原来的 倍。把一秒画成一条时间轴:44.1 kHz 在上面标出 44100 个采样时刻,48 kHz 标出 48000 个,除了少数重合点,目标时刻大多落在原样本之间。
解决办法是先建立一套更密的中间采样时刻。原样本先放到这套时刻上,低通滤波器补出中间位置的值,再从中取出目标采样率需要的那些。对 倍这种分数倍率变换,流程如图B.3-1。

插零 倍之后,中间采样率变成 。再抽取 倍,输出采样率变成
这套中间时刻同时容纳了原采样率和目标采样率的位置:升采样把原样本放到足够密的格子上,降采样再从里面取出目标位置的样本。

滤波器的截止频率
Section titled “滤波器的截止频率”转换里的低通滤波器要同时做两件事:去掉插零带来的镜像,以及防止后续抽取产生混叠。
插零 倍之后,镜像从 附近开始出现。为了抗镜像,截止频率不能超过
接下来还要抽取 倍,为了防混叠,中间序列在抽取前也得限制在
以内。
两个条件都要满足,截止频率取较小的那个:
用 MATLAB 的 fir1 时,截止频率按 Nyquist 归一化,写法是
升采样低通的通带增益还要乘以 。
| 约束来源 | 限制 | 含义 |
|---|---|---|
| 插零 倍 | 截止频率不高于 | 去除升采样镜像 |
| 抽取 倍 | 截止频率不高于 | 防止降采样混叠 |
| 二者合并 | 同时满足抗镜像和抗混叠 |
一个小数值例子
Section titled “一个小数值例子”先用小比例把流程走一遍。假设要把采样率变成原来的 倍,即 。输入采样率为 100 Hz,输出就是
完整流程:先插零 3 倍,把 100 Hz 的样本放到 300 Hz 的中间时刻上;低通滤波;再每 2 个样本取 1 个,得到 150 Hz。
L = 3;M = 2;
x_up = zeros(1, L*length(x));x_up(1:L:end) = x;
h = fir1(60, min(1/L, 1/M));h = L * h;
v = conv(x_up, h, 'same');y = v(1:M:end);代码里 x_up(1:L:end) = x 是插零,fir1(60, min(1/L, 1/M)) 设计合并后的低通滤波器,h = L * h 补偿插零带来的幅度稀释,最后 v(1:M:end) 完成抽取。

44.1 kHz 到 48 kHz
Section titled “44.1 kHz 到 48 kHz”回到音频转换。44.1 kHz 到 48 kHz 的比例是
所以取
系统流程如图B.3-4。

低通滤波器的归一化截止频率是
取 ,是因为插零 160 倍后镜像间隔更窄,抗镜像的约束更严。滤波器通带增益还要乘以 160。
这个例子插了 159 个零,计算量很大。工程上不会真把所有零都算出来,而是用多相滤波器等结构减少计算。本节只要掌握原理流程:先升到更密的中间时刻,低通保留输入和输出都能表达的频带,再抽取到目标采样率。
顺序不能反过来
Section titled “顺序不能反过来”转换里一般先升采样,再滤波,再降采样。要是先降采样,原信号中高于降采样后 Nyquist 边界的部分可能已经混叠;再升采样,只是把已经混叠的结果搬到更密的位置上,折回的高频信息回不来了。
以 44.1 kHz 到 48 kHz 为例:先升到更密的中间时刻不会丢信息;低通再决定保留哪些频率;最后抽取只是在已限带的信号上取目标样本。
在 MATLAB 里,resample(x, L, M) 可以做同样的事。看懂手写流程之后,就不会把 resample 当黑箱了:它内部做的还是升采样、低通滤波和降采样,只是实现更高效。