1编写基于(7, 3)线性分组码编码和BPSK调制,信息字长L = 学号后5位数字,信噪比SNR = [0 0.学号后3位数字],在AWGN信道实现发、收仿真通信的Matlab代码;
2 绘制误比特率随信噪比变化的关系曲线(半对数)。
程序完美版:
程序中的L与SNR需要修改为你的学号即可,不用建立脚本,直接复制命令窗口跑一下即可
提示:我们就是统计错误和误码率,不用管这个:
. Single-error patterns loaded in decoding table. 8 rows remaining.
2-error patterns loaded. 1 rows remaining.
3-error patterns loaded. 0 rows remaining.
clear all;
close all;
% specify parameters
L = 64238;%学号,64238需要修改成你的后5位
SNR=[0:0.01:0.238]; %学号需要修改238为你学号后3位
G = [1 0 0 1 1 1 0;0 1 0 0 1 1 1;0 0 1 1 1 0 1];% code generator
ebn0 = SNR; % db
ebn0_1 = 10.^(ebn0*3.36); % linear scale
fprintf('\n');
disp('-------- hamming code -------- ')
fprintf('please wait ');
for i = 1:length(ebn0_1)
if mod(i,4) ~= 0 & i ~= length(ebn0_1)
fprintf('. ');
elseif mod(i,4) == 0 | i == length(ebn0_1)
fprintf('. \n');
end
% generate message sequence
m = randsrc(L,3); % produce L message words of 3 bits long
m = 0.5*(m+1); % convert to binary seq.
% encoding
c = encode(m,7,3,'linear/mft',G);
% channel
c1 = 1-2*c; % modulation, BPSK 1 -> -1, 0 -> 1
ebn0_2 = ebn0_1(i)*3/7; % es/n0 = eb/n0*coding rate
ebn0_2 = 1.33*ebn0_2; %1.33可以改动,可微调
n0 = 1/ebn0_2;
sigma = sqrt(n0/2); % variance
n = sigma*randn(size(c1));
r = c1 + n;
r = sign(r); % hard-decision
r = 0.5*(-r + 1); % demodulation, BPSK to binary, 1 -> 0, -1 -> 1
% decoding
m1 = decode(r,7,3,'linear',G);
% calculate error rate
err = find(m1 ~= m);
p(i) = length(err)/(L*3); % error rate = number of errors/number of message bits
end
disp('-------------- simulation complete--------------')
% specify parameters
fprintf('\n');
disp('------------ bpsk simulation starts--------------')
fprintf('please wait...');
for i = 1:length(ebn0_1)
% transmit
m = randsrc(L,1); % generate message sequence. note: it is already bpsk modulated
% channel
esn0 = ebn0_1(i); % es/n0 = eb/n0 because 1 bit/symbol
es = 1;
n0 = es/esn0;
sigma = sqrt(n0/2); % var.
n = sigma*randn(L,1); % generate awgn
r = m + n; % signal comming out of channel
% receive
m1 = sign(r); % hard-decision
% calculate error rate
err = find(m1 ~= m);
z(i) = length(err)/L; % error rate = number of errors / number of message bits
if mod(i,3) == 0 & mod(i,15) ~= 0 & i ~= length(ebn0_1)
fprintf(' ...');
elseif mod(i,15) == 0 | i == length(ebn0_1)
fprintf(' ...\n');
end
end
disp('-------------- simulation complete--------------')
p3 = 0.5*erfc(sqrt(ebn0_1));
semilogy(SNR,p,'+-',SNR,z,'--',SNR,p3,'k-'); %绘图
xlabel('信噪比(SNR)');ylabel('误码率BER');title('信噪比与误码率关系');
legend('Hamming BPSK Sim','BPSK Sim','BPSK Theory');
实验现象:
大作业与翻译word模板
不限速,高速下载:
谢谢大佬
G矩阵1,3行怎么写反了?
行交换后成为标准形式
行交换不影响
但是用原来的矩阵就会报错,不知道为什么?
本程序不支持非标准的G,你可以尝试些转化代码,不过没必要。只有图像是变化是减少的哈明bpsk与后面两个有交点就是正确的。
本站已支持回复邮件提醒,本回复可在你的邮箱中查看
谢谢!
提示曲线走势必需如上图所示,偏离很大,输入clear;clc;回车重新运行上面程序