欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

BPSK调制与解调-MATLAB基带仿真

程序员文章站 2022-07-02 22:42:40
...

BPSK调制与解调-MATLAB基带仿真


原始发送数据:随机产生长度为L的0、1序列
BPSK调制方式
0 => -1
1 => 1

可以调换映射方式,相应地,解调的映射方式也需修改。
BPSK发送端星座图:
BPSK调制与解调-MATLAB基带仿真
BPSK相干解调
门限检测:若接收信号幅度大于0,判为1,否则判为0。
理论误比特率:

Pb=12erfc(EbN0)P_b=\frac{1}{2}erfc(\sqrt{\frac{E_b}{N_0}})

仿真结果
BPSK调制与解调-MATLAB基带仿真

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理论误比特率');    % 图例