用MATLAB2020a编程实现2DPSK信号的调制解调 实现模块:调制、信道(高斯白噪声)、解调(要求用相干检测+码反变换) 选做:比较码反变换器前后的误码率性能曲线(要求用Ne/N总方式计算,信噪比范围至少-5~20dB)码元速率为18KBaud,载波频率为90KBaud,传输信息的内容:2222037 2000200617 laihengchang
时间: 2023-11-27 16:50:21 浏览: 87
好的,下面我将为您提供实现2DPSK信号调制解调的MATLAB代码。
调制部分:
```matlab
clear all;
close all;
%% 参数设置
fc = 90e3; % 载波频率
Rs = 18e3; % 码元速率
fs = 10*fc; % 采样频率
T = 1/Rs; % 码元时间
SNR = 10; % 信噪比
N = 1e5; % 仿真的码元数量
M = 2; % 2DPSK调制方式
%% 生成信息序列
data = ['2','2','2','2','0','3','7','2','0','0','0','2','0','0','6','1','7','l','a','i','h','e','n','g','c','h','a','n','g'];
data = double(data); % 转换为ASCII码
data_bin = de2bi(data,8,'left-msb'); % 转换为二进制矩阵
data_bin = reshape(data_bin',numel(data_bin),1); % 转换为列向量
N_data = length(data_bin); % 信息比特数
%% 2DPSK调制
% 生成载波信号
t = (0:1/fs:(N_data/Rs-1/fs))';
carrier = sqrt(2)*cos(2*pi*fc*t);
% 将信息序列映射为符号序列
sym = bi2de(reshape(data_bin,log2(M),N_data/log2(M))','left-msb');
sym = pskmod(sym,M,0,'gray');
% 2DPSK调制
x = zeros(length(sym),1);
x(1) = sym(1);
for i = 2:length(sym)
if sym(i) == -1
x(i) = -x(i-1);
else
x(i) = x(i-1);
end
end
x = x.*carrier;
%% 加入高斯白噪声
Psignal = mean(abs(x).^2); % 信号功率
Pnoise = Psignal/10^(SNR/10); % 噪声功率
noise = sqrt(Pnoise)*randn(length(x),1); % 高斯白噪声
y = x + noise;
%% 2DPSK解调
% 相干检测
y = y./carrier;
% 码元恢复
sym_hat = zeros(length(sym),1);
sym_hat(1) = y(1)/abs(y(1));
for i = 2:length(sym)
if sign(real(y(i))) == sign(real(y(i-1)))
if sign(imag(y(i))) ~= sign(imag(y(i-1)))
sym_hat(i) = -sym_hat(i-1);
else
sym_hat(i) = sym_hat(i-1);
end
else
sym_hat(i) = -sym_hat(i-1);
end
end
% 解调后的信号转换为比特流
data_hat = de2bi(pskdemod(sym_hat,M,0,'gray'),'left-msb')';
data_hat = reshape(data_hat,numel(data_hat),1);
%% 绘制调制前后的信号图像
figure;
subplot(2,1,1);
plot(t(1:1000),x(1:1000));
title('调制前信号');
xlabel('时间(s)');
ylabel('幅度(V)');
subplot(2,1,2);
plot(t(1:1000),y(1:1000));
title('调制后信号');
xlabel('时间(s)');
ylabel('幅度(V)');
%% 计算误码率
err = sum(data_bin ~= data_hat);
BER = err/N_data;
fprintf('误码率为 %e\n',BER);
```
解调部分的代码已经在调制部分中给出,这里不再重复。在代码中,我们首先生成信息序列,并将其转换为二进制矩阵。然后,我们采用2DPSK调制方式对信息进行调制,加入高斯白噪声,最后进行2DPSK解调并恢复出原始信息序列。最后,我们计算误码率并输出结果。
需要注意的是,这里使用了相干检测方式进行解调,因此需要知道载波频率。如果无法获得正确的载波频率,就无法进行解调。
阅读全文