基于汉明软译码和球型译码的通信链路误码率matlab仿真
目录
1.算法描述
2.仿真效果预览
3.MATLAB核心程序
4.完整MATLAB
1.算法描述
MIMO检测是简单假设检验中的经典问题[1]。 最大似然(ML)检测器涉及穷举搜索,并且在最小误差联合误差的意义上是最佳检测器,用于同时检测所有符号。 不幸的是,它具有指数级的运行时复杂性,这使其在大型实时系统中不切实际。
为了克服最大似然解码器的计算成本,人们对实现次优检测算法非常感兴趣,该算法提供了更好,更灵活的精度与复杂度的权衡。在高精度条件下,球面解码算法[2] [3],[4]贝提出,基于晶格搜索,并提供了更好的计算复杂度,相对于完整搜索而言,其准确性会降低。 在另一种情况下,最常见的次优检测器是线性接收器,即匹配滤波器(MF),解相关器或迫零检测器(ZF)和最小均方误差(MMSE)检测器。 更高级的检测器基于决策反馈均衡(DFE),近似消息传递(AMP)[5]和半确定松弛(SDR)[6],[7]。当前,在许多实际情况下,AMP和SDR均可提供接近最佳的精度。AMP在实践中实现起来简单且便宜,但是它是一种迭代方法,可能会在挑战性环境中产生差异。SDR更加健壮,具有多项式复杂性,但是它所解决的设置受到限制,并且在实践中要慢得多。
在BLAST检测中,目前采用的ZF(迫零) 算法,MMSE(最小均方误差) 算法, OSIC(排序连续干扰抵消) 或ML (最大似然)准则来进行译码。前三种算法,实现起来较简单,但是误码率性能较差;而使用ML检测能得到更好的性能,但是其复杂度较高,不易于实现。基于ML检测的SD(球形译码)算法是一种性能优化,复杂度适中的检测算法。已经证明,采用穷尽搜索的ML 检测算法的复杂度随天线数呈指数增长,而SD算法的复杂度在很大信噪比范围内与天线数呈多项式关系。故SD算法可以用较少的计算量来获得最大似然译码性能。
球形译码的基本思想是在以一个矢量x 为中心的半径为d的多维球内搜索格点,通过限制或者减少搜索半径从而减少搜索的点数,进而使得计算时间减少。球形译码算法带来的优点在于它不需要象传统的最大似然译码算法那样需要在整个格内对所有的格点进行搜索,而只需要在一个事先设定的有限球形区域进行搜索,如果该区域所包含的点数相对于整个格内的总点数是相当小的,搜索时间就会大大减少。
影响球形译码的关键问题有:(1) 怎样选择搜索半径d。如果d太大,则球内会包含太多的点,复杂度就会接近或者达到最大似然译码的指数级复杂度。如果d 太小,则球内可能一个格点都不包含,那么球形译码算法将得不到合理的解。(2) 怎样才能判断一个点是否在球内。如果这种判断需要借助每一个格点和矢量之间的距离来判断的话,那么这种方法就不太理想,因为我们需要考察所有的点,所产生的计算量也是指数级的。
球形译码解决了第2个问题,此处均考虑信号为实数,因为复数可以通过增加一倍的维数,将实部和虚部分开,要判断一个点是否在半径为d的m维球内比较困难。若将m变为1,则从球退化为一个间距,这个点就相当于某根天线发送信号的实部或虚部,这样操作就简单很多,可以知道这个点是否在这个距离内。多根发送天线上的信号的实部和虚部分成很多维,每一维上有可能取值。球形译码算法相当于构建了一棵树,树的第k层节点对应的是落在半径为d,维数为k的球内的格点。
————————————————
汉明码是一种性能良好的码,它是在纠错编码的实践中较早发现的一类具有纠单个错误能力的纠错码,在通信和计算机工程中都有应用。例如:在“计算机组成原理”课程中,我们知道当计算机存储或移动数据时,可能会产生数据位错误,这时可以利用汉明码来检测并纠错。简单的说,汉明码是一个错误校验码码集,由Bell实验室的R.W.Hamming发明,因此定名为汉明码。如果对汉明码作进一步推广,就得出了能纠正多个错误的纠错码,其中最典型的是BCH码,而且汉明码是只纠1bit错误的BCH码,可将它们都归纳到循环码中。
二进制n 维向量v ,这里n >k 。此n 维向量v 就叫做消息u 的码字(codeword )或码向量(code vector )。 因此,对应于2k 种不同的消息,也有2k 种码字。这2k 个码字的集合就叫一个分组码(block code )。若一个分组码可用,2k 个码字必须各不相同。因此,消息u 和码字v 存在一一对应关系。由于n 符号输出码字只取决于对应的k 比特输入消息,即每个消息是独立编码的,从而编码器是无记忆的,且可用组合逻辑电路来实现。
定义:一个长度为n ,有2k 个码字的分组码,当且仅当其2k 个码字构成域GF(2)上所有n 维向量组成的向量空间的一个K 维子空间时被称为线性(linear )(n, k)码。汉明码(n ,k ,d )就是线性分组(n, k)码的一种。其编码算法即为使用生成矩阵G :v = u ·G 。
2.仿真效果预览
matlab2022a仿真结果如下:
3.MATLAB核心程序
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==1G=extHammG(G);
endkc=size(G,1); % Number of information bits
nc=size(G,2); Kc=nc-kc; % Code word lengthRc=(kc)/(nc); % Code rate Rc
EbN0=SNRdB-10*log10(Rc); % Eb/N0H = 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 syne_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_sorts_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 bitsx_msg=round(rand(Nframes,kc));%% channel codingx_code=mod(x_msg*G,2);%% Modulation and Noisex_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;%% Demodulationx_llr = real(x_r)*4/sigma(zzz).^2; % Calculate Log-Likelihood Ratiosx_code_r=(sign(-x_llr)+1)/2; % Received bit stream%% BER uncodedbit_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 codeddec_err=abs(x_code-x_decode);BER_dec=sum(dec_err(:))/(Nframes*nc);BER_dec_mean(zzz)=BER_dec_mean(zzz)+BER_dec;endBER_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
tocDN='displayname';
Co='Color';
Ma='Marker';
if length(SNRdB)>1figure(1);hold offsemilogy(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
4.完整MATLAB
V
基于汉明软译码和球型译码的通信链路误码率matlab仿真相关推荐
- 基于LDPC+64QAM的通信链路误码率matlab仿真
up目录 一.理论基础 二.核心程序 三.测试结果 一.理论基础 信道编码是数字通信系统的重要组成部分.LDPC信道编码技术是编码界的重要成果之一.1/2码率的二元LDPC码在AWGN信道下的性能距信 ...
- 【机器人1】基于POE公式的UR5机械臂正运动学建模求解与matlab仿真
基于PoE公式的UR5机械臂正运动学建模求解与matlab仿真 基于PoE公式的UR5机械臂正运动学分析 1.1 运动旋量的螺旋释义(理论基础) 1.2 基于PoE公式的UR5机械臂正运动学模型 1. ...
- 基于64QAM调制解调的LDPC编译码算法误码率matlab仿真
目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 LDPC译码从译码算法的实现角度可以将译码类型分为硬判决译码和软判决译码两种类型.其中,硬判决译码方 ...
- m基于Berlekamp-Massey钱搜索算法的BCH译码误码率matlab仿真
目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件 1.算法仿真效果 matlab2022a仿真结果如下: 2.算法涉及理论知识概要 BCH编译码是一种纠 ...
- 码元速率 matlab,[转载]基于小波变换的移相键控信号符号速率估计(matlab仿真)...
西安电子科技大学 西电大宝 在电子技术迅猛发展的当代社会,空间中充满了各种各样不同频率.不同调制类型的通信信号.正 常通信条件下,发送方和接受方进行的是合作通信,即接受方预先知道发送信号的频率.调制类 ...
- matlab抢占时隙算法,基于汉明重分组的动态帧时隙ALOHA防碰撞算法
[1] 郭来功, 黄友锐, 蔡俊. 优化的动态帧时隙ALOHA 算法[J] . 计算机应用研究, 2011, 29(11):4141-4143. [2] 周晓光, 王晓华. 射频识别(RFID)技术原 ...
- m基于VDLL的矢量型GPS信号跟踪算法matlab仿真
目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 载波跟踪环是传统独立式GPS接收机最脆弱的环节,针对弱信号环境下其比伪码跟踪环路更容易失锁的 ...
- 基于代价函数小波脊相位的MFSK信号符号速率估计MATLAB仿真及代码(2020.12.14更新)
算法来源 王勇, 王李福, 邹辉,等. 一种小波脊相位提取方法: 中国专利. 仿真结果 引言 当前,脊点的选取较准确也较经典的方法是Liu等提出的里程碑式的基于代价函数的小波脊相位提取方法(即代价函数 ...
- m基于PSO粒子群优化的柔性制造系统AGV调度模型matlab仿真
目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 在PSO中,群中的每个粒子表示为向量.在投资组合优化的背景下,这是一个权重向量,表示每个资产的分配资 ...
最新文章
- 小程序云开发,订阅消息定时批量发送实现代码
- 百度股价一跌再跌,网友叹息:李彦宏没有狼性,缺乏战略眼光?
- java中的反射(一)
- Java IO流之随机读写流RandomAccessFile
- 禅道批量删除bug_写代码有这16个好习惯,可以减少80%非业务的bug
- 软考信息系统项目管理师_项目范围管理1---软考高级之信息系统项目管理师011
- javascript高级程序设计 Boolean类型
- 5G概念被热炒,运营商吃相不要太难看
- GO语言安装(windows)
- Jersey框架一:Jersey RESTful WebService框架简介
- VS2010/MFC编程入门教程之目录和总结(鸡啄米)
- .texi文件如何转成pdf
- 了解更多全国各地浴室5×8装修图片
- 用Python爬取股票数据,绘制K线和均线并用机器学习预测股价(来自我出的书)
- esp12f ESP8266芯片引脚
- AnyConnect苹果IOS系统Iphone手机的设置教程
- 电子音乐爱好者的舞台,电音遇上双12
- 手势识别的无线遥控小车
- C语言数值积分报告,c语言定积分报告
- 什么是POE交换机?