BPSK调制系统MATLAB仿真实现(1)

BPSK调制系统MATLAB仿真实现(1)

1. 写在前面

不加载波进行调制。

2. 数字基带传输系统框图

2.1 基带脉冲的产生

基带脉冲即二进制01随机序列,可用randn函数产生

%%基带信号产生

data_source = round(rand(1,data_len)); % 二进制随机序列

data_len是数据长度(详细代码见后文) 图形如下:

2.2 BPSK信号形成

BPSK是双极性信号,即“1”表示正电平“+1”,“0”表示负电平“-1”

%%BPSK基带调制

send_signal = (ham_code - 1/2) * 2; % 双极性不归零序列

2.3 高斯白噪声

高斯白噪声的产生可用awgn()函数或wgn函数均可,具体参数可以在MATLAB中help查看

noise2 = sqrt(N0(z)/2) * randn(1,data_len); %高斯白噪声

2.4 基带解调

解调规则:接收到的信号大于0则判为1,小于0则判为0

%BPSK基带解调

for w = 1:code_len

if (receive_signal(w) >= 0)

demod_signal(w) = 1; % 接收信号大于0 则判1

else

demod_signal(w) = 0; % 接收信号小于0 则判0

end

end

2.5 计算误码率

仿真误码率 = 错误码元个数 / 总码元个数; 理论仿真误码率 = ;

%统计码元错误个数

for w = 1:data_len

if (decode_signal(w) ~= data_source(w))

error(q) = error(q) + 1; % 错误比特个数

end

end

%计算误码率

simu_ber_ham(q) = error(q)/data_len;

theory_ber_BPSK(q) = qfunc(sqrt(2*SNR(q))); % 理论误比特率

3 代码

clc

clear

close all;

%%初始化参数设置

data_len = 100000; % 原始数据长度

SNR_dB = 0:10; % 信噪比 dB形式

SNR = 10.^(SNR_dB/10); % Eb/N0

Eb = 1; % 每比特能量

N0 = Eb./SNR ; %噪声功率

error2 = zeros(1,length(SNR_dB)); % 码元错误个数

simu_ber_BPSK = zeros(1,length(SNR_dB)); % 仿真误误码率

theory_ber_BPSK = zeros(1,length(SNR_dB)); % BPSK理论误码率

demod2_signal= zeros(1,data_len); % 解调信号

%%基带信号产生

data_source = round(rand(1,data_len)); % 二进制随机序列

%%BPSK基带调制

send_signal2 = (data_source - 1/2)*2; % 双极性不归零序列

%%高斯信道无编码

for z = 1:length(SNR_dB)

noise2 = sqrt(N0(z)/2) * randn(1,data_len); %高斯白噪声

receive_signal2 = send_signal2 + noise2;

demod_signal2 = zeros(1,data_len);

for w = 1:data_len

if (receive_signal2(w) > 0)

demod_signal2(w) = 1; % 接收信号大于0 则判1

else

demod_signal2(w) = 0; % 接收信号小于0 则判0

end

end

%统计错误码元个数

for w = 1:data_len

if(demod_signal2(w) ~=data_source(w) )

error2(z) = error2(z) + 1; % 错误比特个数

end

end

%计算误码率

simu_ber_BPSK(z) = error2(z) / data_len; % 仿真误比特率

theory_ber_BPSK(z) = qfunc(sqrt(2*SNR(z))); % 理论误比特率

end

%%二进制序列、基带信号图像

figure(1);

stem(data_source);

title("二进制随机序列");

axis([0,50,0,1]);

figure(2);

stem(send_signal2);

title("BPSK基带调制--发送信号");

axis([0,50,-1.5,1.5]);

figure(4);

stem(noise2);

title("高斯白噪声");

axis([0,50,-0.5,0.5]);

figure(5)

stem(receive_signal2);

title("接收信号");

axis([0,50,-1.5,1.5]);

figure(7)

stem(demod_signal2);

title("解调信号");

axis([0,50,0,1]);

figure(8);

semilogy(SNR_dB,simu_ber_BPSK,'M-X',SNR_dB,theory_ber_BPSK,'k-s');

grid on;

axis([0 10 10^-5 10^-1])

xlabel('Eb/N0 (dB)');

ylabel('BER');

legend('BPSK仿真误码率','BPSK理论误码率');

%%画星座图

scatterplot(send_signal2);

title('发送信号星座图');

scatterplot(receive_signal2);

title('接收信号星座图');

scatterplot(demod_signal2);

title('解码信号星座图');

简化版

clc

close all

clear all

snr_dB=1:10; %信噪比范围

snr = 10.^(snr_dB/10); %单位换算

delt_fa = 10.^(-snr_dB/10); %白噪声的方差 即噪声功率

delt = sqrt(delt_fa); %噪声幅值(强度)

Pe = zeros(1,length(snr_dB)); %定义存放误码率的矩阵

for iter = 1:length(snr_dB)

N = 100000; %二进制序列长度

fa_bit = randi([0 1],[1 N]); %bit stream 产生二进制随机序列,长度为N

fa_key = randi([0 1],[1 N]); %密钥序列

fa_enc = bitxor(fa_bit,fa_key); %已加密钥序列

% m_s =2*fa_bit-1; %double polar

m_s =2*fa_enc-1; %double polar 加密钥后的双极性序列(BPSK信号)

me = mean(fa_key); %求均值

av = var(fa_key); %求方差

n =delt(iter)*(randn(1,N) + sqrt(-1)*randn(1,N))/sqrt(2); %复噪声

r = m_s + n; % BPSK信号加信道噪声

es_fa = sign(real(r)); %抽样判决

es_bit = (1+es_fa)/2; %二进制序列(解调)

de_enc = bitxor(es_bit,fa_key); %解密

% Pb(iter) = sum(fa_bit~=es_bit)/N;

Pe(iter) = sum(fa_bit~=de_enc)/N; %计算误码率

theory_Pe = erfc(sqrt(snr))/2; %计算理论误码率

end

figure

semilogy(snr_dB,Pe,'r-o',snr_dB,theory_Pe,'*-b');%画曲线

xlabel('信噪比SNR (dB) ');

ylabel('误码率BER');

title('误码率曲线 SNR/10dB')

legend('BPSK仿真误码率','BPSK理论误码率');

相关推荐

《九阴真经》全新绿色服新服规则
48365365

《九阴真经》全新绿色服新服规则

07-02 👁️ 4574
冒险岛2都有什么服务器
48365365

冒险岛2都有什么服务器

06-30 👁️ 2311
冒险岛2都有什么服务器
48365365

冒险岛2都有什么服务器

06-30 👁️ 2311
国足1-0巴林,彻底被淘汰,亚洲8.5个名额,中国队依然无缘世界杯