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

安稳与你 提交于 2020-01-20 19:05:49

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

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

0 => -1
1 => 1

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

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

仿真结果
BPSK调制仿真结果
MATLAB基带仿真程序

clc
clear
close all
% BPSK调制与解调 %
% 2019.3.26 %
% HIT_KXS %

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理论误比特率');    % 图例
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!