您现在的位置:首页 >> 编解码 >> 内容

基于汉明软译码和球型译码的通信链路误码率matlab仿真

时间:2022/12/9 20:16:09 点击:

  核心提示:A_101包含程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/Y5mWlZly

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览


3.算法概述

        明码是一种性能良好的码,它是在纠错编码的实践中较早发现的一类具有纠单个错误能力的纠错码,在通信和计算机工程中都有应用。例如:在“计算机组成原理”课程中,我们知道当计算机存储或移动数据时,可能会产生数据位错误,这时可以利用汉明码来检测并纠错。简单的说,汉明码是一个错误校验码码集,由Bell实验室的R.W.Hamming发明,因此定名为汉明码。如果对汉明码作进一步推广,就得出了能纠正多个错误的纠错码,其中最典型的是BCH码,而且汉明码是只纠1bit错误的BCH码,可将它们都归纳到循环码中。

4.部分源码

clc;

clear;

close all;

warning off;

addpath(genpath(pwd));

%% Demonstration of Soft-Hamming-Decoding based on Sphere-Decoding

Kc=5;           %Number of Parity bits

Nframes=3;      %Number of Frames

M=3;            %maximium bit error number M (Size of Sphere)

ExtHammCode=1;  % 1 for extended Hamming-Code

%K_loop for more runs at higher SNR

SNRdB=0:1:7; 

K_loop=round((SNRdB-min(SNRdB)+3).^4.8);

%% G: Generator Matrix, H: Paritycheck Matrix

G=bem_hammgen(Kc);

% Change Generator Matrix to extended Hamming Code

if ExtHammCode==1

    G=extHammG(G);

end

kc=size(G,1);               % Number of information bits

nc=size(G,2); Kc=nc-kc;     % Code word length

Rc=(kc)/(nc);               % Code rate Rc

EbN0=SNRdB-10*log10(Rc);    % Eb/N0

H = gen2par(G);             % generate H from G

HT=H.';                     % Transpose

%% Permutation of 1,2 and 3 bit errors

[e1, e2, e3]=permute_e(nc,M);

e=[e1;e2;e3];

%% syndrom calculation

syn=NaN(size(e,1),Kc);

for k=1:size(e,1)

    syn(k,:)=mod(e(k,:)*HT,2);

end

%% sort rows of syndroms associated error pattern e

[s_sort,s_idx] = sortrows(syn);     % sort syn to s_sort

e_sort=e(s_idx,:);                  % sort e to e_sort in the same way as syn

e_sort=e_sort(sum(s_sort,2)>0,:);   % delete zero rows

s_sort=s_sort(sum(s_sort,2)>0,:);   % delete zero rows

% s_de=bi2de(s_sort,[],'left-msb'); % Communication Toolbox function

s_de=bem_bi2de(s_sort);             % calculate decimal values from s_sort

s_pdf=hist(s_de,1:2^Kc-1);          % calculate which value occurs how often

%s_pdf(s_pdf==0)=[];

%% Loops for BER calculation

tic

sigma = sqrt(10.^(-SNRdB./10));         % standard diviation of noise

BER_dec_mean=zeros(1,length(SNRdB));    % mean of BER for coded system

BER_mean=zeros(1,length(SNRdB));        % mean of BER for uncoded system

for zzz=1:length(SNRdB)

    %disp(num2str(zzz))

    for kkk=1:K_loop(zzz)

        %% random bits

        x_msg=round(rand(Nframes,kc));

        %% channel coding

        x_code=mod(x_msg*G,2);

        %% Modulation and Noise

        x_mod = -(x_code-0.5)*2+1i*1E-99;

        noi=1/sqrt(2)*(randn(Nframes,nc)+1i*randn(Nframes,nc))*sigma(zzz);

        x_r=x_mod+noi;

        %% Demodulation

        x_llr = real(x_r)*4/sigma(zzz).^2;  % Calculate Log-Likelihood Ratios

        x_code_r=(sign(-x_llr)+1)/2;        % Received bit stream

        %% BER uncoded

        bit_err=abs(x_code-x_code_r);

        BER=sum(bit_err(:))/(Nframes*nc);

        BER_mean(zzz)=BER_mean(zzz)+BER;

        %% Decoding

        [x_decode,x_llr_new] = hamm_soft_out(HT,e_sort,s_pdf,x_llr);

        %[x_decode] = hamm_soft_really_fast(HT,e_sort,s_sort,x_llr,Kc);

        %% BER coded

        dec_err=abs(x_code-x_decode);

        BER_dec=sum(dec_err(:))/(Nframes*nc);

        BER_dec_mean(zzz)=BER_dec_mean(zzz)+BER_dec;

    end

    BER_mean(zzz)=BER_mean(zzz)/K_loop(zzz);

    BER_dec_mean(zzz)=BER_dec_mean(zzz)/K_loop(zzz);

    disp(['Eb/N0=' num2str(EbN0(zzz)) ...

        '; BER_uncoded=' num2str(BER_mean(zzz)) ...

        '; BER_coded=' num2str(BER_dec_mean(zzz))]);

end

toc

DN='displayname';

Co='Color';

Ma='Marker';

if length(SNRdB)>1

    figure(1);hold off

    semilogy(SNRdB,BER_mean,Co,[0 0 0],Ma,'o',DN,'uncoded');

    hold on; grid on;

    semilogy(EbN0,BER_dec_mean,Co,[0 0 0],Ma,'.',...

        DN,[num2str(nc) ',' num2str(kc) '-Hamming code, ' 'M=' num2str(M)]);

    xlabel('E_b/N_0 in dB')

    ylabel('BER')

    legend show

end

A_101

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
  • 没有相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168