侧边栏壁纸
    • 累计撰写 302 篇文章
    • 累计收到 527 条评论
    matlab实现(7,3)线性分组码编码和BPSK调制
    我的学记|刘航宇的博客

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

    刘航宇
    2021-06-02 / 8 评论 / 1,025 阅读 / 正在检测是否收录...


    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模板

    不限速,高速下载:

    7
    【超然/励志】李永乐老师:希望大家可以实现自己的价值【不想学习的时候记得看一下】
    « 上一篇 2021-06-02
    【高数】形心计算公式讲解大全
    下一篇 » 2021-06-02

    评论 (8)

    取消
    1. 头像
      我是代码搬运工
      Windows 10 · Google Chrome

      谢谢大佬表情

      回复
    2. 头像
      123
      Windows 10 · Google Chrome

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

      回复
      1. 头像
        刘航宇 作者
        Windows 10 · Google Chrome
        @ 123

        行交换后成为标准形式

        回复
      2. 头像
        刘航宇 作者
        Windows 10 · Google Chrome
        @ 123

        行交换不影响

        回复
        1. 头像
          123
          Windows 10 · Google Chrome
          @ 刘航宇

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

          回复
          1. 头像
            刘航宇 作者
            Windows 10 · Google Chrome
            @ 123

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

            回复
    3. 头像
      Pony
      Windows 10 · Google Chrome

      谢谢!

      回复
    4. 头像
      刘航宇 作者
      Windows 10 · Google Chrome

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

      回复