BPSK调制与解调-MATLAB基带仿真
程序员文章站
2022-07-02 22:42:40
...
BPSK调制与解调-MATLAB基带仿真
原始发送数据:随机产生长度为L的0、1序列
BPSK调制方式:
可以调换映射方式,相应地,解调的映射方式也需修改。
BPSK发送端星座图:
BPSK相干解调:
门限检测:若接收信号幅度大于0,判为1,否则判为0。
理论误比特率:
仿真结果:
MATLAB基带仿真程序:
clc
clear
close all
% BPSK调制与解调 %
% 2019.3.26 %
% HIT_K.X.Song %
L = 1000000; % 原始数据长度
data = round(rand(1,L)); % 原始数据
send = (data - 1/2) * 2; % BPSK调制
EbN0_dB = 0:12; % Eb/N0 dB形式
EbN0 = 10.^(EbN0_dB/10); % Eb/N0
Eb = 1; % 每比特能量
N0 = Eb ./ EbN0; % 噪声功率
error = zeros(1,length(EbN0_dB)); % 预置错误个数
ber = zeros(1,length(EbN0_dB)); % 预置仿真误比特率
tber = zeros(1,length(EbN0_dB)); % 预置理论误比特率
for q = 1:length(EbN0_dB)
noise = sqrt(N0(q)/2) * randn(1,L); % 高斯白噪声
receive = send + noise; % 接收信号
detect = zeros(1,L); % 预置检测信号
for w = 1:L
if (receive(w) >= 0)
detect(w) = 1; % 数轴右侧 -> 1
else
detect(w) = -1; % 数轴左侧 -> -1
end
if (detect(w) ~= send(w))
error(q) = error(q) + 1; % 错误个数
end
end
ber(q) = error(q) / L; % 仿真误比特率
tber(q) = erfc(sqrt(EbN0(q)))/2; % 理论误比特率
end
figure
semilogy(EbN0_dB,ber,'o',EbN0_dB,tber,'b'); % 画图
grid on; % 坐标轴开启
axis([0 10 10^-5 10^-1]) % 限制作图范围
xlabel('Eb/N0 (dB)'); % 横坐标
ylabel('BER'); % 纵坐标
legend('BPSK仿真误比特率','BPSK理论误比特率'); % 图例