信号处理之插值、抽取与多项滤波
信号处理之插值、抽取与多项滤波
一、问题背景
插值(Interpolation)与抽取(Decimation)是数字信号处理中采样率转换的核心操作:
- 插值:在信号中插入新样本以提高采样率( L L L倍)
- 抽取:按比例
M
M
M降低采样率(需防混叠)
多项滤波通过多相分解优化计算效率,实现高效的多速率处理。
二、数学原理
1. 插值过程
- 数学模型:插值因子
L
L
L,插值后信号为:
x up [ n ] = { x [ n / L ] , n / L ∈ Z 0 , 其他 x_{\text{up}}[n] = \begin{cases} x[n/L], & n/L \in \mathbb{Z} \\ 0, & \text{其他} \end{cases} xup[n]={x[n/L],0,n/L∈Z其他 - 低通滤波:消除镜像频率分量,传递函数为 H ( z ) H(z) H(z)
2. 抽取过程
- 数学模型:抽取因子
M
M
M,抽取前需滤波防混叠:
y [ n ] = ∑ k = − ∞ ∞ h [ k ] ⋅ x [ n M − k ] y[n] = \sum_{k=-\infty}^{\infty} h[k] \cdot x[nM -k] y[n]=k=−∞∑∞h[k]⋅x[nM−k]
3. 多相分解(核心)
将滤波器
H
(
z
)
H(z)
H(z)分解为
L
L
L个(插值)或
M
M
M个(抽取)子滤波器:
H
(
z
)
=
∑
r
=
0
L
−
1
z
−
r
E
r
(
z
L
)
H(z) = \sum_{r=0}^{L-1} z^{-r} E_r(z^L)
H(z)=r=0∑L−1z−rEr(zL)
其中
E
r
(
z
)
E_r(z)
Er(z)为多相分量,对应不同相位延迟的子滤波器。
4、基本操作
-
插值与抽取的基本操作
-
插值(Interpolation):将信号采样率提高 L L L倍,分为两步:
- 插零:在原始信号 x ( n ) x(n) x(n)的相邻采样点间插入 L − 1 L-1 L−1个零值,得到 x ′ ( m ) x'(m) x′(m)。
- 滤波:通过低通滤波器
h
int
(
k
)
h_{\text{int}}(k)
hint(k)消除镜像频谱,补偿幅度损失。数学表达式为:
y int ( m ) = L ⋅ ∑ k x ′ ( k ) h int ( m − k ) y_{\text{int}}(m) = L \cdot \sum_{k} x'(k) h_{\text{int}}(m - k) yint(m)=L⋅k∑x′(k)hint(m−k)
其中增益因子 L L L用于恢复插值后信号的幅度。
-
抽取(Decimation):将信号采样率降低 D D D倍,分为两步:
- 抗混叠滤波:通过低通滤波器 h dec ( k ) h_{\text{dec}}(k) hdec(k)限制信号带宽,避免混叠。
- 抽取:保留每 D D D个采样点中的一个,输出 y dec ( n ) = ∑ k x ( k ) h dec ( n D − k ) y_{\text{dec}}(n) = \sum_{k} x(k) h_{\text{dec}}(nD - k) ydec(n)=∑kx(k)hdec(nD−k)。
-
-
多级滤波设计
-
CIC滤波器(级联积分梳状滤波器):常用于高效抽取,传输函数为:
H CIC ( z ) = ( 1 − z − D 1 − z − 1 ) L H_{\text{CIC}}(z) = \left( \frac{1 - z^{-D}}{1 - z^{-1}} \right)^L HCIC(z)=(1−z−11−z−D)L
其中 L L L为级数, D D D为抽取因子。CIC无需乘法运算,适合高速处理,但通带衰减较大,需后接补偿滤波器(如CFIR)。 -
半带滤波器(HB):适用于2倍抽取/插值,通带截止频率为 π / 2 \pi/2 π/2,半数系数为零,计算效率高。
-
-
频域分析
- 插值后信号频谱会压缩为原始带宽的 1 / L 1/L 1/L,并产生 L − 1 L-1 L−1个镜像,需通过低通滤波器(截止频率 π / L \pi/L π/L)抑制镜像。
- 抽取前需将信号带宽限制在 π / D \pi/D π/D内,否则会导致频谱混叠。
二、实现方法
-
插值抽取流程
- 插值实现步骤:
- 插入 L − 1 L-1 L−1个零值;
- 通过低通滤波器平滑信号;
- 乘以增益 L L L恢复幅度。
- 抽取实现步骤:
- 设计抗混叠滤波器;
- 滤波后按因子 D D D降采样。
- 插值实现步骤:
-
多级滤波优化
- CIC + CFIR组合:
- 第一级使用CIC进行粗抽取,降低数据速率;
- 第二级用CFIR补偿CIC的通带衰减。
- 多相滤波结构:
将滤波器分解为 L L L个子滤波器,并行处理插零后的信号,大幅减少计算量。
- CIC + CFIR组合:
-
代码示例(CIC滤波器实现)
def cic_filter(input_signal, D, L):
# 积分器部分
integral = np.cumsum(input_signal)
# 梳状滤波器部分
delay = np.zeros_like(integral)
delay[D:] = integral[:-D]
comb = integral - delay
# 级联L次
output = comb.copy()
for _ in range(L-1):
output = np.cumsum(output)
delay = np.zeros_like(output)
delay[D:] = output[:-D]
output = output - delay
return output[::D] # 抽取
三、多项滤波实现
1. 插值+滤波的高效结构
- 传统方法:上采样后滤波,计算效率低(含大量零乘)
- 多相优化:
- 将滤波器分解为 L L L个多相分支 E 0 ( z ) , E 1 ( z ) , . . . , E L − 1 ( z ) E_0(z), E_1(z), ..., E_{L-1}(z) E0(z),E1(z),...,EL−1(z)
- 输入信号直接进入对应分支,并行计算后交替输出
- 计算量降低为原来的 1 / L 1/L 1/L
2. 抽取+滤波的高效结构
- 传统方法:先滤波后下采样,计算冗余
- 多相优化:
- 分解滤波器为 M M M个分支 E 0 ( z ) , E 1 ( z ) , . . . , E M − 1 ( z ) E_0(z), E_1(z), ..., E_{M-1}(z) E0(z),E1(z),...,EM−1(z)
- 输入信号分块后分别通过分支,再下采样合并
- 计算量降低为原来的 1 / M 1/M 1/M
3. 插值抽取联合实现
当需要同时进行 L L L倍插值和 M M M倍抽取时:
- 级联结构:先插值后抽取,但需满足 gcd ( L , M ) = 1 \gcd(L,M)=1 gcd(L,M)=1避免重复采样
- 多相联合优化:直接设计分数倍采样率转换滤波器,避免冗余计算
四、多项滤波关键公式推导
多相分解表达式
滤波器冲激响应
h
[
n
]
h[n]
h[n]分解为:
h
[
n
]
=
∑
r
=
0
L
−
1
e
r
[
m
]
⋅
δ
[
n
−
r
−
m
L
]
h[n] = \sum_{r=0}^{L-1} e_r[m] \cdot \delta[n - r - mL]
h[n]=r=0∑L−1er[m]⋅δ[n−r−mL]
其中
e
r
[
m
]
=
h
[
r
+
m
L
]
e_r[m] = h[r + mL]
er[m]=h[r+mL],对应第
r
r
r个多相分支。
插值滤波输出
y [ n ] = ∑ r = 0 L − 1 e r [ m ] ⋅ x [ ⌊ n L ⌋ − m ] y[n] = \sum_{r=0}^{L-1} e_r[m] \cdot x\left[\left\lfloor \frac{n}{L} \right\rfloor - m \right] y[n]=r=0∑L−1er[m]⋅x[⌊Ln⌋−m]
五、多项滤波实现步骤
- 设计原型低通滤波器:满足插值/抽取的频响要求(如截止频率 π / max ( L , M ) \pi/\max(L,M) π/max(L,M))
- 多相分解:按 L L L或 M M M分解为子滤波器
- 并行滤波:输入信号分块送入多相分支
- 合并输出:插值时交替拼接结果,抽取时下采样合并
六、多项滤波应用场景
- 软件无线电(SDR)中的采样率转换
- 音频处理(如44.1kHz↔48kHz转换)
- 图像超分辨率与压缩
七、多项滤波MATLAB示例代码
% 设计插值多相滤波器
L = 4; % 插值因子
h = fir1(60, 1/L); % 原型低通滤波器
poly_phases = reshape(h, L, []); % 多相分解
% 输入信号
x = randn(1,100);
% 多相插值实现
output = zeros(1, L*length(x));
for i = 1:L
output(i:L:end) = filter(poly_phases(i,:), 1, x);
end
总结:插值抽取的多项滤波通过多相分解,将计算复杂度从
O
(
N
)
O(N)
O(N)降至
O
(
N
/
L
)
O(N/L)
O(N/L)或
O
(
N
/
M
)
O(N/M)
O(N/M),是实时信号处理系统的核心优化技术。附上其学习研究思维导图: