在之前的博文:【通信原理 入坑之路】—— 深入理解奈奎斯特第一准则与码间串扰中,我们详细地讨论了奈奎斯特第一准则:我们知道,理想的情况下,我们的码元速率最大可以到
R
s
=
2
W
R_s = 2W
Rs=2W,此时我们的频带利用率
η
η
η也可以达到最大:
η
=
R
s
W
=
2
(
B
a
u
d
/
H
z
)
η = \frac{R_s}{W} = 2(Baud/Hz)
η=WRs=2(Baud/Hz)
但是,由于奈奎斯特脉冲(也就是sinc函数)它在频域上是一个理想低通滤波器;这在物理上是非常难以实现的。所以后面我们就引入了升余弦滚降滤波器,他在频域没有理想低通滤波器那么陡峭,因此物理上易于实现,但是其频谱的带宽就是理想低通滤波器的
(
1
+
α
)
(1+α)
(1+α) 倍,因此,频带利用率就降低为:
η
=
R
s
(
1
+
α
)
W
=
2
1
+
α
η = \frac{R_s}{(1+α)W} = \frac{2}{1+α}
η=(1+α)WRs=1+α2
那么,善于思考的工程师们就在想啊—— 有没有这样一种方法:既可以使得频带利用率最高,且能够避免ISI;同时在物理上有便于实现呢?今天我们要讨论的,就是这样一种技术:部分响应
1. 部分响应系统的推导与理解
既然要使得频带利用率最大,那必然和奈奎斯特脉冲脱不了关系。我们先看一个奈奎斯特脉冲的函数表达式: s i n c ( t / T ) = s i n π t T π t T sinc(t/T) = \frac{sin\frac{πt}{T}}{\frac{πt}{T}} sinc(t/T)=TπtsinTπt
那么下面,我们考虑上面这个奈奎斯特脉冲和一个延时了T的奈奎斯特脉冲的合成波:
h
(
t
)
=
s
i
n
c
(
t
T
)
+
s
i
n
c
(
t
−
T
T
)
h(t) = sinc(\frac{t}{T}) + sinc(\frac{t-T}{T})
h(t)=sinc(Tt)+sinc(Tt−T)
这个就是“第Ⅰ类部分响应信号”。
也即是说:我们希望整个信号的频率响应
H
(
f
)
=
G
T
(
f
)
C
(
f
)
G
R
(
f
)
H(f) = G_T(f)C(f)G_R(f)
H(f)=GT(f)C(f)GR(f)的傅里叶变换就是这个第Ⅰ类部分响应信号。 其中,
h
(
t
)
h(t)
h(t) 和
H
(
f
)
H(f)
H(f) 如下图所示:
此时,我们可以看到, H ( f ) H(f) H(f)的频谱宽度仍然是 W ,但是由于其频谱具有平滑的滚降特性,所以是可以用实际的低通滤波器来实现的。
可是,细心的大家就会发现了 —— 奈奎斯特准则里面不是说: H ( f ) H(f) H(f) 以 2 k π T \frac{2kπ}{T} T2kπ 做周期延拓之后的叠加要是一个常数才不会出现码间串扰吗?可是你上图这个频谱完全不满足这个性质啊?那你怎么还能说部分响应没有 ISI 呢?
为什么是这个形式呢?一会儿你就知道了:
我们再来看一下所要传输的消息序列的表示:(如上图所示) ∑ n = − ∞ + ∞ a n δ ( t − n T ) \sum_{n=-∞}^{+∞}a_n δ(t - nT) n=−∞∑+∞anδ(t−nT)
那么这个信号经过红框所表示的整个系统( H ( f ) H(f) H(f))之后所得到的输出 y ( t ) y(t) y(t) 可以表示为: y ( t ) = ∑ n = − ∞ + ∞ a n h ( t − n T ) = ∑ n = − ∞ + ∞ a n ( s i n c ( t − n T T ) + s i n c ( t − ( n + 1 ) T T ) ) \begin{aligned} y(t)& =\sum_{n=-∞}^{+∞}a_n h(t - nT)\\ &=\sum_{n=-∞}^{+∞}a_n(sinc(\frac{t-nT}{T}) + sinc(\frac{t-(n+1)T}{T})) \end{aligned} y(t)=n=−∞∑+∞anh(t−nT)=n=−∞∑+∞an(sinc(Tt−nT)+sinc(Tt−(n+1)T))
接下来,我们把求和号里面的两项分别拆开来看: ∑ n = − ∞ + ∞ a n s i n c ( t − n T T ) + ∑ n = − ∞ + ∞ a n s i n c ( t − ( n + 1 ) T T ) \sum_{n=-∞}^{+∞}a_n sinc(\frac{t-nT}{T}) + \sum_{n=-∞}^{+∞}a_n sinc(\frac{t-(n+1)T}{T}) n=−∞∑+∞ansinc(Tt−nT)+n=−∞∑+∞ansinc(Tt−(n+1)T)
第一项没有问题,但是我们看第二项:既然 n n n 的取值范围都是从负无穷到正无穷了,那么其实我们可以令: n = n − 1 n = n-1 n=n−1,这样一来其实 n n n 的范围并不会因为你多减了一个1而变化。所以第二项就变成了: ∑ n = − ∞ + ∞ a n − 1 s i n c ( t − n T T ) \sum_{n=-∞}^{+∞}a_{n-1} sinc(\frac{t-nT}{T}) n=−∞∑+∞an−1sinc(Tt−nT)
所以 y ( t ) y(t) y(t) 就可以表示为: y ( t ) = ∑ n = − ∞ + ∞ ( a n + a n − 1 ) s i n c ( t − n T T ) y(t) = \sum_{n=-∞}^{+∞}(a_n + a_{n-1}) sinc(\frac{t-nT}{T}) y(t)=n=−∞∑+∞(an+an−1)sinc(Tt−nT)
我们令 c n = a n + a n − 1 c_n = a_n + a_{n-1} cn=an+an−1,所以最终真正的输出是: y ( t ) = ∑ n = − ∞ + ∞ c n s i n c ( t − n T T ) y(t) = \sum_{n=-∞}^{+∞}c_n sinc(\frac{t-nT}{T}) y(t)=n=−∞∑+∞cnsinc(Tt−nT)
也就是说,我们在
n
T
nT
nT 的抽样实技上得到的信号是
c
n
=
a
n
+
a
n
−
1
c_n = a_n + a_{n-1}
cn=an+an−1,同时明确的说,是一定存在串扰的,而且就是这个
a
n
−
1
a_{n-1}
an−1 造成了串扰。举个例子,接收到的信号波形如下图所示
但是,如果我们在接收端到
c
n
c_n
cn之前,就已经正确地接收到了上一个码元
a
n
−
1
a_{n-1}
an−1 ,那么,就有:
a
n
=
c
n
−
a
n
−
1
a_n = c_n - a_{n-1}
an=cn−an−1
这不就可以消除码间串扰了吗!
我们举一个例子:如果要发送的消息序列是:1 0 1 1 0 1 0 0 1 1 0 0 0 1
那么具体的接受步骤如下图示所示:
所以我们可以看到:即使接受波形是有串扰的,但是我们还是可以根据前一个时刻的码元来正确地解码当前抽样时刻的码元的!这就是部分响应系统。
当然,我们前面给出的,是由相距一个码元周期T的2个奈奎斯特脉冲所构成的部分响应信号。实际上,部分响应信号还可以由 N 个相距为 T 的奈奎斯特信号经过线性叠加构成。(他们叠加的权重分别是:
r
0
,
r
1
,
⋯
.
r
N
−
1
r_0, r_1, \cdots. r_{N-1}
r0,r1,⋯.rN−1),下面我们给出5类部分响应信号的叠加权重。
2. 部分相应系统的大敌人—— 误码扩散
一听到误码扩散这个词就能够猜到这个现象是有多么严重!那么,什么是误码扩散呢?
在上面的分析中,尤其是在解码 a n a_n an 时,我们用的是: a n = c n − a n − 1 a_n = c_n - a_{n-1} an=cn−an−1,上面的例子之所以可以正确解码,原因是我们假设所有的 c n ′ c_n' cn′ 都是正确接接收的。那么考虑下面的情况:假设由于信道恶化导致某几个 c n ′ c_n' cn′ 接受错误,我们看看会造成什么情况:
上图中的矩形框表示接收错误,那么我们可以看到:只要有一位错了,后面的所有都非常有可能会一个接着一个的判错。这是因为前后码元之间是存在关联的。这样的系统显然是不能用的,我们现在要做的就是想办法消除码元之间的联系。因此救星来了!—— 预编码和相关编码
3. 部分响应系统的预编码和相关编码技术
我们这里直接给出编码与解码的方法:
首先, 考虑一个 M 进制的系统,我们待预编码的码元序列是 { b n } \{b_n\} {bn},预编码之后输出的序列是 { d n } \{d_n\} {dn},我们选用的部分响应系统的权重是 r 0 , r 1 , ⋯ , r N − 1 r_0, r_1, \cdots, r_{N-1} r0,r1,⋯,rN−1。那么我们有下面的式子: b n = r 0 d n + r 1 d n − 1 + r 2 d n − 2 + ⋯ + r N − 1 d n − ( N − 1 ) ∣ m o d M b_n = r_0d_n + r_1d_{n-1} + r_2d_{n-2}+\cdots + r_{N-1}d_{n-(N-1)}|_{mod M} bn=r0dn+r1dn−1+r2dn−2+⋯+rN−1dn−(N−1)∣modM
那么,预编码之后的输出我们可以求出来: d n = 1 r 0 ( b n − r 1 d n − 1 − r 2 d n − 2 − ⋯ − r N − 1 d n − ( N − 1 ) ) ∣ m o d M d_n = \frac{1}{r_0}(b_n - r_1d_{n-1} - r_2d_{n-2} - \cdots - r_{N-1}d_{n-(N-1)})|_{mod M} dn=r01(bn−r1dn−1−r2dn−2−⋯−rN−1dn−(N−1))∣modM
上面的过程完成的就是预编码的操作,最后我们再进行一次相关编码,设输出序列是 { c n } \{c_n\} {cn}: c n = r 0 d n + r 1 d n − 1 + ⋯ + r N − 1 d n − ( N − 1 ) c_n = r_0d_n + r_1d_{n-1} + \cdots + r_{N-1}d_{n-(N-1)} cn=r0dn+r1dn−1+⋯+rN−1dn−(N−1)
在解码端,我们只需要对接收到的 { c n ′ } \{c_n'\} {cn′} 序列的每一位分别进行 m o d M mod M modM 的运算即可得到原本的 { b n } \{b_n\} {bn}
PS:一般所使用的部分相应系统,他的 r r r系数一般都不会很多,而且都不会很复杂,这时解 d n d_n dn 就非常简单。同时,对于 d d d 的初始值我们一般设置为0。