
基于Matlab的2DPSK调制解调系统仿真:采用模拟调制法与相干解调法的代码注释详
细附带文档
## 2DPSK调制解调:用Matlab手搓一个通信系统
最近在折腾数字通信仿真,发现2DPSK这个调制方式挺有意思的——既能抗载波相位模糊,实现起来
又不像QAM那么复杂。今天咱们直接用Matlab从零开始搭个仿真系统,顺便聊聊代码里那些容易踩坑的细
节。
先看调制部分。2DPSK的核心在于差分编码,这里有个小机关:用相邻码元的相位变化表示信息。比
如"1"对应180度相位跳变,"0"保持相位不变。来看代码:
```matlab
% 生成原始二进制序列
originalBits = randi([0 1], 1, 1000);
% 差分编码(初始参考位设为1)
diffBits = zeros(1, length(originalBits));
diffBits(1) = xor(1, originalBits(1)); % 第一个码元处理
for i = 2:length(originalBits)
diffBits(i) = xor(diffBits(i-1), originalBits(i));
end
```
这段差分逻辑有个易错点:初始参考位的处理。如果参考相位搞错了,整个解调都会翻车。这里用异
或运算实现模2加,比用if判断更简洁。实际调试时发现,当原始序列全0时,差分序列应该呈现0-1交替,这
个特性可以用来验证编码是否正确。
接下来是载波调制。这里采用模拟调制法,用连续相位变化实现:
```matlab
fc = 10e3; % 载波频率10kHz
fs = 100e3; % 采样率100kHz
t = (0:length(diffBits)*100-1)/fs; % 每个符号100个采样点
% 生成基带信号
baseband = repelem(diffBits, 100);
baseband = 2*baseband - 1; % 将[0,1]映射到[-1,1]
% 载波调制