2PSK 调制解调仿真:基于 PLL 的信号同步与解调
2PSK 调制解调仿真:基于 PLL 的信号同步与解调
本代码使用 MATLAB 模拟了 2PSK 调制信号通过高斯白噪声信道传输,并利用 PLL 实现接收端信号频率和相位的锁定,最终解调出原始二进制信号。代码包含信号生成、调制、加噪、PLL 锁定、解调等步骤,并绘制了各阶段信号波形对比。
由于题目中没有给出具体的信号生成方法和高斯白噪声信道参数,下面给出的代码中使用了一些默认值。如果需要更改,可以根据实际情况进行调整。
% 二进制信号产生
N = 1000; % 信号长度
s = randi([0,1],1,N);
% 2PSK 调制
fc = 2e9; % 载波频率
fs = 10*fc; % 采样频率
T = 1/fs; % 采样间隔
t = (0:N-1)*T;
x = exp(1j*(2*pi*fc*t+pi*s));
% 高斯白噪声
SNR = 10; % 信噪比
noise = awgn(x,SNR,'measured');
% PLL 锁定
Kp = 1; % 比例增益
Ki = 0.1; % 积分增益
Kd = 0.01; % 微分增益
f0 = fc+10e6; % 初始频率
theta0 = 0; % 初始相位
f = zeros(1,N); % 频率输出
theta = zeros(1,N); % 相位输出
e = zeros(1,N); % 相位差
I = 0; % 积分项
D = 0; % 微分项
for n = 2:N
% 相位差计算
e(n) = angle(noise(n)*conj(exp(1j*(2*pi*f0*(n-1)*T+theta0))));
% 频率和相位更新
f(n) = f0+Kp*e(n)/(2*pi*(n-1)*T)+Ki*I+Kd*D;
theta(n) = theta(n-1)+2*pi*f(n)*T+e(n);
% 积分项和微分项更新
I = I+e(n)*T;
D = e(n)-e(n-1);
% 频率和相位锁定
f0 = f(n);
theta0 = theta(n);
end
% 解调输出
y = sign(real(exp(-1j*theta)));
% 画图
figure;
subplot(5,1,1);
plot(s,'.-');
title('原始二进制信号');
ylim([-0.1,1.1]);
subplot(5,1,2);
plot(abs(x),'.-');
title('调制信号');
subplot(5,1,3);
plot(abs(noise),'.-');
title('高斯白噪声之后的信号');
subplot(5,1,4);
plot(f/1e6,'.-');
title('PLL 输出信号频率');
ylabel('频率/MHz');
subplot(5,1,5);
plot(y,'.-');
title('解调之后的二进制信号');
ylim([-1.1,1.1]);
运行结果如下图所示:

代码说明:
- 信号生成: 使用
randi函数生成随机的二进制信号,长度为 1000。 - 2PSK 调制: 使用
exp函数生成载波信号,并将二进制信号映射到载波信号的相位上。 - 高斯白噪声: 使用
awgn函数向调制信号添加高斯白噪声,信噪比为 10dB。 - PLL 锁定: 使用循环实现 PLL 锁定过程,根据接收信号和参考信号的相位差计算频率和相位更新量。
- 解调输出: 使用
sign函数对 PLL 输出信号进行解调,得到恢复的二进制信号。 - 绘图: 使用
subplot函数绘制原始二进制信号、调制信号、加噪信号、PLL 输出信号频率和解调信号的波形。
注意事项:
- 代码中的参数可以根据实际情况进行调整。
- PLL 的参数(Kp, Ki, Kd)需要根据信道条件进行优化。
- 该代码仅是一个简单的示例,实际应用中需要考虑更复杂的因素,例如多径效应、频率偏移等。
参考链接:
原文地址: https://www.cveoy.top/t/topic/oazZ 著作权归作者所有。请勿转载和采集!