从星座图到误码率:用Python动手画一画BPSK、QPSK和16QAM的差异
通信工程中,数字调制技术是信息传输的核心。但对于初学者而言,理论公式往往显得抽象难懂。本文将通过Python代码实践,带您直观理解BPSK、QPSK和16QAM这三种典型调制方式的差异,从星座图绘制到误码率分析,让抽象概念变得触手可及。
1. 数字调制基础与Python环境准备
数字调制本质上是用载波的不同状态来表示数字信息。在无线通信系统中,我们通常通过改变载波的幅度、频率或相位来实现调制。Python的科学计算生态为我们提供了完美的工具链:
python复制import numpy as np
import matplotlib.pyplot as plt
from scipy.special import erfc
关键参数设置需要考虑实际通信系统的要求:
- 载波频率:
fc = 2e6(2MHz) - 符号周期:
Ts = 1e-6(1μs) - 采样率:
Fs = 50e6(50MHz) - 信噪比范围:
SNR_dB = np.arange(0, 15)
提示:在实际工程中,采样率通常为载波频率的10-20倍,以确保波形重建质量。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. BPSK调制:最简单的相位调制
二进制相移键控(BPSK)是最基础的数字调制方式,用0°和180°两种相位状态表示二进制数据。其数学表达式为:
$$
s(t) = \sqrt{\frac{2E_b}{T_b}}\cos(2\pi f_c t + \theta_i), \quad \theta_i \in {0,\pi}
$$
Python实现BPSK调制和星座图绘制:
python复制def bpsk_mod(bits, fc, Ts, Fs):
t = np.arange(0, Ts, 1/Fs)
carrier = np.sqrt(2/Ts)*np.cos(2*np.pi*fc*t)
symbols = -2*bits + 1 # 0→1, 1→-1
modulated = np.outer(symbols, carrier)
return modulated
bits = np.random.randint(
