重采样算法
在音频领域,存在着多种采样频率。例如CD产品用的抽样率是 44.1kHz,而数字音频广播用的是 32kHz,通话(通信)方面也存在着从8k到16k的转变。
当两个不同采样频率的信号需要进行混合处理时,需要将两者的采样频率进行统一,统一过程中需要用到的算法就是重采样算法。
降采样
抽取(decimation)
降采样主要通过信号的抽取(decimation)来实现,如果要将信号
x
(
n
)
=
x
(
t
)
∣
t
=
n
T
s
x(n)=x(t)|_{t=nT_s}
x(n)=x(t)∣t=nTs的采样频率
f
s
f_s
fs减少
M
M
M倍,每隔
M
M
M个点抽取一个,得
y
(
n
)
=
x
(
M
n
)
,
n
=
(
−
∞
,
∞
)
y(n)=x(Mn), n=(-\infty,\infty)
y(n)=x(Mn),n=(−∞,∞)
可以证明
y
(
n
)
y(n)
y(n)和
x
(
n
)
x(n)
x(n)之间的DTFT有如下关系:
Y
(
e
j
w
)
=
∑
k
=
0
M
−
1
X
(
e
j
(
w
−
2
π
k
)
/
M
)
Y(e^{jw})=\sum_{k=0}^{M-1}X(e^{j(w-2\pi k)/M})
Y(ejw)=k=0∑M−1X(ej(w−2πk)/M)
公式的含义就是,抽取后的信号
y
(
n
)
y(n)
y(n)的频谱等于原先信号
x
(
n
)
x(n)
x(n)频谱先做M倍扩展
(
Y
(
e
j
w
)
(Y(e^{jw})
(Y(ejw)中
w
w
w对应
X
(
e
j
w
/
M
)
X(e^{jw/M})
X(ejw/M)中
w
/
M
)
w/M)
w/M),再平移
2
π
M
k
(
k
=
1
,
2
,
.
.
.
M
−
1
)
\frac{2\pi}{M}k(k=1,2,...M-1)
M2πk(k=1,2,...M−1)后的信号进行叠加。
影响比较大的是频谱扩展,由于信号是离散的,DTFT的频谱是周期的,在平移相加时会产生混叠,为了去除掉混叠的影响需要在抽取之前先做低通滤波,提前滤除掉高频后再进行抽取。
先滤波后抽取
令
h
(
n
)
h(n)
h(n)为一理想低通滤波器,频谱响应为:
H
(
w
)
=
{
1
,
∣
w
∣
≤
2
π
/
M
0
,
o
t
h
e
r
w
i
s
e
H(w) =\begin{cases} & 1 , |w| \leq 2\pi/M\\ & 0, otherwise \end{cases}
H(w)={1,∣w∣≤2π/M0,otherwise
滤波后的输出为
v
(
n
)
v(n)
v(n),则
v
(
n
)
=
∑
k
=
−
∞
∞
h
(
k
)
x
(
n
−
k
)
v(n)=\sum_{k=-\infty}^{\infty}h(k)x(n-k)
v(n)=k=−∞∑∞h(k)x(n−k)
对滤波后的序列进行抽取,则
y
(
n
)
=
v
(
M
n
)
=
∑
k
=
−
∞
∞
h
(
k
)
x
(
M
n
−
k
)
y(n)=v(Mn)=\sum_{k=-\infty}^{\infty}h(k)x(Mn-k)
y(n)=v(Mn)=k=−∞∑∞h(k)x(Mn−k)
升采样
插值(interpolation)
升采样主要通过信号的插值来实现,如果要将信号
x
(
n
)
=
x
(
t
)
∣
t
=
n
T
s
x(n)=x(t)|_{t=nT_s}
x(n)=x(t)∣t=nTs的采样频率
f
s
f_s
fs变为
M
f
s
Mf_s
Mfs,就每两个点直接插入
M
−
1
M-1
M−1个零,插零后的信号为
v
(
n
)
v(n)
v(n),
V
(
e
j
w
)
=
∑
n
=
−
∞
∞
v
(
n
)
e
−
j
w
n
=
∑
k
=
−
∞
∞
x
(
k
)
e
−
j
w
L
=
X
(
e
j
w
L
)
\begin{aligned}V(e^{jw})&=\sum_{n=-\infty}^{\infty}v(n)e^{-jwn}\\ &=\sum_{k=-\infty}^{\infty}x(k)e^{-jwL}\\ &=X(e^{jwL})\end{aligned}
V(ejw)=n=−∞∑∞v(n)e−jwn=k=−∞∑∞x(k)e−jwL=X(ejwL)
对
v
(
n
)
v(n)
v(n)做DTFT变换,则
V
(
e
j
w
)
=
∑
n
=
−
∞
∞
v
(
n
)
e
−
j
w
n
=
∑
k
=
−
∞
∞
x
(
k
)
e
−
j
w
L
=
X
(
e
j
w
L
)
V(e^{jw})=\sum_{n=-\infty}^{\infty}v(n)e^{-jwn}\\ =\sum_{k=-\infty}^{\infty}x(k)e^{-jwL}=X(e^{jwL})
V(ejw)=n=−∞∑∞v(n)e−jwn=k=−∞∑∞x(k)e−jwL=X(ejwL)
公式的含义是,插零后的信号进行了频谱的压缩 ( V ( e j w ) (V(e^{jw}) (V(ejw)中 w w w对应 X ( e j w L ) X(e^{jwL}) X(ejwL)中 w L ) wL) wL),根据圆周卷积理论,低频会镜像为多余的高频,因此需要插零后再做低通滤波把多余的镜像频率滤除掉。
先插零后滤波
令
h
(
n
)
h(n)
h(n)为一理想低通滤波器,频谱响应为:
H
(
w
)
=
{
c
,
∣
w
∣
≤
π
/
L
0
,
o
t
h
e
r
w
i
s
e
H(w) =\begin{cases} & c , |w| \leq \pi/L\\ & 0, otherwise \end{cases}
H(w)={c,∣w∣≤π/L0,otherwise
c
c
c为一个常数,后面会证明
c
=
L
c=L
c=L。
Y
(
e
j
w
)
=
H
(
e
j
w
)
V
(
e
j
w
)
=
c
X
(
e
j
w
L
)
,
∣
w
∣
≤
π
/
L
y
(
0
)
=
1
2
π
∫
−
π
π
Y
(
e
j
w
)
d
w
=
c
2
π
∫
−
π
/
L
π
/
L
X
(
e
j
w
L
)
d
w
=
c
L
x
(
0
)
\begin{aligned}Y(e^{jw})&=H(e^{jw})V(e^{jw})=cX(e^{jwL}),|w| \leq \pi/L \\ y(0)&=\frac{1}{2\pi}\int_{-\pi}^{\pi}Y(e^{jw})dw \\ &= \frac{c}{2\pi}\int_{-\pi/L}^{\pi/L}X(e^{jwL})dw \\ &=\frac{c}{L}x(0)\end{aligned}
Y(ejw)y(0)=H(ejw)V(ejw)=cX(ejwL),∣w∣≤π/L=2π1∫−ππY(ejw)dw=2πc∫−π/Lπ/LX(ejwL)dw=Lcx(0)
当
c
=
L
c=L
c=L时,可以保证直流分量一致。
确定低通滤波器响应后,分析时域关系,
y
(
n
)
=
v
(
n
)
∗
h
(
n
)
=
∑
k
=
−
∞
∞
v
(
k
)
h
(
n
−
k
)
=
∑
k
=
−
∞
∞
x
(
k
/
L
)
h
(
n
−
k
)
=
∑
k
=
−
∞
∞
x
(
k
)
h
(
n
−
k
L
)
\begin{aligned}y(n)&=v(n)*h(n)\\ &=\sum_{k=-\infty}^{\infty}v(k)h(n-k) \\ &=\sum_{k=-\infty}^{\infty}x(k/L)h(n-k)\\ &=\sum_{k=-\infty}^{\infty}x(k)h(n-kL)\end{aligned}
y(n)=v(n)∗h(n)=k=−∞∑∞v(k)h(n−k)=k=−∞∑∞x(k/L)h(n−k)=k=−∞∑∞x(k)h(n−kL)
采样率转换
如果希望输出信号的采样频率变为输入信号的 L / M L/M L/M倍,其中 L , M L,M L,M为正整数,则需要将升采样和降采样相结合。通常是先升采样 L L L倍,在降采样 M M M倍。
H ( w ) = { L , ∣ w ∣ ≤ m i n ( π / L , π / M ) 0 , o t h e r w i s e H(w) =\begin{cases} & L , |w| \leq min(\pi/L,\pi/M)\\ & 0, otherwise \end{cases} H(w)={L,∣w∣≤min(π/L,π/M)0,otherwise
结合升采样和降采样时的时域关系,可以得出,
y
(
n
)
=
∑
k
=
−
∞
∞
x
(
k
)
h
(
M
n
−
k
L
)
y(n)=\sum_{k=-\infty}^{\infty}x(k)h(Mn-kL)
y(n)=k=−∞∑∞x(k)h(Mn−kL)
因为
h
(
n
)
h(n)
h(n)是因果滤波器,所以
M
n
−
k
L
≥
0
Mn-kL \geq 0
Mn−kL≥0,令
k
=
⌊
M
n
L
⌋
−
m
k =\lfloor\frac{Mn}{L} \rfloor - m
k=⌊LMn⌋−m则,
M
n
−
k
L
=
M
n
−
⌊
M
n
L
⌋
L
+
m
L
=
m
o
d
(
M
n
,
L
)
+
m
L
=
⟨
M
n
⟩
L
+
m
L
\begin{aligned}Mn-kL &= Mn-\lfloor\frac{Mn}{L}\rfloor L + mL \\ &=mod(Mn,L)+mL \\ &=\left \langle Mn \right \rangle _L + mL\end{aligned}
Mn−kL=Mn−⌊LMn⌋L+mL=mod(Mn,L)+mL=⟨Mn⟩L+mL
带入到
y
(
n
)
y(n)
y(n)中,可得,
y
(
n
)
=
∑
m
=
−
∞
∞
x
(
⌊
M
n
L
⌋
−
m
)
h
(
m
L
+
⟨
M
n
⟩
L
)
y(n)=\sum_{m=-\infty}^{\infty}x(\lfloor\frac{Mn}{L} \rfloor - m)h(mL + \left \langle Mn \right \rangle _L)
y(n)=m=−∞∑∞x(⌊LMn⌋−m)h(mL+⟨Mn⟩L)
参考
https://ccrma.stanford.edu/~jos/resample/