通信系统概述与码间干扰简介
先把话说在前头——码间干扰,也就是 ISI,是数字通信里最容易忽视但又最要命的问题。你想想看,信号在信道里跑一圈,前后符号互相串扰,误码率一下子就上去了。我刚开始做通信系统设计时,就吃过这个亏。
通信系统的基本架构
一个典型的数字通信系统,说白了就是三段式:发端、信道、收端。我给你拆开看:
- 发端:信源编码 + 信道编码 + 调制。把比特变成适合在信道上跑的波形。
- 信道:物理介质。电缆、光纤、无线空间,都可以。信道有个毛病——带宽有限。
- 收端:解调 + 译码 + 信源解码。把波形还原成比特。
这三段里,最容易出问题的就是中间那段。信道带宽一受限,波形就展宽,前后符号就开始打架。这就叫码间干扰。
核心概念:ISI 是带宽受限信道对传输符号的时域扩展造成的。它让每个符号的能量泄漏到相邻符号的时隙里。
物理信道与 ISI 根源
你想想看,什么样的信道会产生 ISI?我个人习惯把它们分成三类:
| 信道类型 | 典型场景 | ISI 严重程度 |
|---|---|---|
| 带限信道 | 电话线、基带同轴 | 高(带宽是硬约束) |
| 多径信道 | 无线移动通信 | 极高(多条路径叠加) |
| 色散信道 | 光纤长距离传输 | 中等(随距离累积) |
我在项目中遇到过一种情况——明明信噪比很好,但误码率就是下不来。排查了大半天,最后发现是基带脉冲没做好成型滤波,造成了严重的 ISI。嗯,这个问题很隐蔽。
码间干扰的数学模型
从数学上说,接收端抽样点的信号可以写成:
r(kT) = a(k) · h(0) + Σ a(n) · h((k-n)T) + n(kT)
n ≠ k
看懂了吗?等号右边第一项是当前符号的贡献,后面那一堆求和项全是 ISI。每个过去和未来的符号都往当前符号的时隙里注了一脚。
判断准则:如果 h(t) 在抽样时刻 t = nT(n ≠ 0)处的值不为零,就存在 ISI。这就是奈奎斯特第一准则的反面。
仿真验证:ISI 的 Python 原型
理论说再多,不如跑一次仿真。下面这个脚本展示了带限信道如何让脉冲展宽:
import numpy as np
import matplotlib.pyplot as plt
fs = 1000
T = 0.1
t = np.arange(0, 1, 1/fs)
# 单个矩形脉冲
pulse = np.zeros_like(t)
pulse[0:int(fs*T)] = 1
# 低通滤波器模拟带限信道
b, a = signal.butter(6, 30, btype='low', fs=fs)
channel_out = signal.filtfilt(b, a, pulse)
# 绘制
plt.figure()
plt.plot(t, pulse, label='发送脉冲')
plt.plot(t, channel_out, label='接收脉冲(展宽)')
plt.legend()
你会看到,发送时一个干净利落的矩形脉冲,经过低通信道后拖起了长长的尾巴。尾巴就是 ISI 的物理来源。
曾经踩过的坑:我早期在做基带系统仿真时,忘了加成型滤波器,直接拿矩形脉冲去发。结果眼图闭合得跟纸糊一样,误码率根本压不下去。后来才明白,矩形脉冲的频域旁瓣太高,不满足奈奎斯特准则。
本章知识体系总览
下面这张图,把第一章的脉络理清楚了。你可以当作一个参考索引:
嗯,这张图把本章讲的东西串起来了。左边是通信系统三段式架构,中间标识出 ISI 产生的真正位置——信道,右边则列出了后续课程会用到的几种抑制手段。你后面学到均衡器、OFDM 的时候,可以随时回来看这张图,脉络会更清晰。