matlab实现(7,3)线性分组码编码和BPSK调制
我的学记|刘航宇的博客

matlab实现(7,3)线性分组码编码和BPSK调制

刘航宇
4年前发布 /正在检测是否收录...
温馨提示:
本文最后更新于2021年06月06日,已超过1388天没有更新,若内容或图片失效,请留言反馈。

图片[1] - matlab实现(7,3)线性分组码编码和BPSK调制 - 我的学记|刘航宇的博客
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');

实验现象:

图片[2] - matlab实现(7,3)线性分组码编码和BPSK调制 - 我的学记|刘航宇的博客

大作业与翻译word模板

不限速,高速下载:

© 版权声明
THE END
喜欢就支持一下吧
点赞 7 分享 赞赏
评论 共8条
取消
  1. 头像
    我是代码搬运工
     · 
    回复

    谢谢大佬::(吐舌)

  2. 头像
    123
     · 
    回复

    G矩阵1,3行怎么写反了?

    1. 头像
      刘航宇 作者
       · 
      回复

      @123

      行交换后成为标准形式

    2. 头像
      刘航宇 作者
       · 
      回复

      @123

      行交换不影响

      1. 头像
        123
         · 
        回复

        @刘航宇

        但是用原来的矩阵就会报错,不知道为什么?

        1. 头像
          刘航宇 作者
           · 
          回复

          @123

          本程序不支持非标准的G,你可以尝试些转化代码,不过没必要。只有图像是变化是减少的哈明bpsk与后面两个有交点就是正确的。
          本站已支持回复邮件提醒,本回复可在你的邮箱中查看

  3. 头像
    Pony
     · 
    回复

    谢谢!

  4. 头像
    刘航宇 作者
     · 
    回复

    提示曲线走势必需如上图所示,偏离很大,输入clear;clc;回车重新运行上面程序