首页 > 其他分享 >基于LS最小二乘法的OFDM信道估计误码率matlab仿真

基于LS最小二乘法的OFDM信道估计误码率matlab仿真

时间:2023-03-12 12:13:43浏览次数:39  
标签:误码率 training OFDM 导频 symbols 信道 估计 LS

1.算法描述

ofdm基本结构如下所示:

 

 

 

 

        信道估计是使用接收信号表现出来的各种状态来对信道的特性进行估计的过程。信道估计是信道对输入信号影响的一种数学表示。信道估计可以定义为描述物理信道对输入信号的影响而进行定性研究的过程,是信道对输入信号影响的一种数学表示。如果信道是线性的,那么信道估计就是对系统冲激响应进行估计。信道估计的目标就是使某种估计误差最小化,同时还要尽量降低算法的复杂度,并具有可实现性。为了在接收端能够准确地恢复发射信号,需要对信道的冲激响应进行估计,这就是信道估计。

       OFDM系统常常使用插入导频的方法来进行信道估计。我们都知道OFDM系统是在同一个时刻同时发送多个不同频率的子载波,一次性发送若干个子载波算是发送了一个OFDM符号,然后再隔一定的时间再发送下一个OFDM符号。根据导频插入的不同方式我们可以分为块状导频和梳状导频。

 

LS:Least Square

         该算法计算简单、复杂度低,不需要信道的任何先验统计特性。该方法导频处信道频域响应(CFR)通过LS算法估计得到,数据符号处CFR通过插值方法获得。然而,由于LS估计方法不能消除导频处噪声的影响,并且插值类信道估计方法不能有效消除由于多径引起的频域选择兴衰落信道的影响,导致数据处CFR获取不准确,因此LS算法的估计性能较差。

假设发射信号是X(i),信道传输函数是H(i),接收端接收到的信号是Y(i),那么就有这个等式Y(i)=X(i)H(i)。

       信道估计中的LS算法是最基本且常用的算法,用最朴实的话说就是忽略噪声,直接除。其公式表示为H(i)=Y(i)/X(i)。频域接收信号导频位置Y,本地已知导频X。两者简单相除,就可以得到导频位置的信道估计值H(i)。

       在硬件实现时,除了在均衡时可以考虑用除法器,其他位置(包括此处的LS算法)都不要使用除法器,除法器占用的资源太多,将除法表示为乘法即可避免,而大部分的乘法可以用移位相加来实现,这样可以大大降低复杂度。

 

2.仿真效果预览

matlab2022a仿真结果如下:

 

 

 

 

3.MATLAB核心程序

 

%加高斯白噪声
Error_ber=[];%误比特率
Error_ber1=[];
Error_ber2=[];%误比特率
Error_ber3=[];
%Error_ser=[];%误符号率
for snr_db=0:snr:N_snr
 
    code_power=0;
    code_power=[norm(Tx_data)]^2/(length(Tx_data));%信号的符号功率
    %bit_power=var(Tx_data);
    bit_power=code_power/bits_per_symbol;%比特功率 
    noise_power=10*log10((bit_power/(10^(snr_db/10))));%噪声功率
    noise=wgn(1,length(Tx_data),noise_power,'complex');%产生GAUSS白噪声信号
    
    Y7=Tx_data+noise;
 
%-------------------------------------------------------
  %串并变换
   Y6=reshape(Y7,IFFT_bin_length+GI,symbols_per_carrier).';
   
  %去保护间隔
    for k=1:symbols_per_carrier;
       for i=1:IFFT_bin_length;
           Y5(k,i)=Y6(k,i+GI);
       end
    end
    %FFT,傅立叶变换
     Y4=fft(Y5,IFFT_bin_length,2);
     Y3=Y4(:,carriers);
 %-------------------------------------------------------------   
 %LS信道估计,%信道估计准则:最小均方误差(MMSE)最大似然估计(MLE) 最小平方(LS)
  H=[];
  Y2=Y3(:,signal);
  Rx_training_symbols=Y3(:,pilot);
  Rx_training_symbols0=reshape(Rx_training_symbols,symbols_per_carrier*Np,1);
  
  training_symbol0=reshape(training_symbols,1,symbols_per_carrier*Np);
  training_symbol1=diag(training_symbol0);
  %disp(training_symbols)
  training_symbol2=inv(training_symbol1);
  Hls=training_symbol2*Rx_training_symbols0;
  Hls1=reshape(Hls,symbols_per_carrier,Np);
  HLs=[];
  HLs1=[];

 

  

 

标签:误码率,training,OFDM,导频,symbols,信道,估计,LS
From: https://www.cnblogs.com/51matlab/p/17207925.html

相关文章

  • 通过matlab对比规则LDPC和非规则LDPC的误码率
    1.算法描述       LDPC码是麻省理工学院RobertGallager于1963年在博士论文中提出的一种具有稀疏校验矩阵的分组纠错码。几乎适用于所有的信道,因此成为编码界近年......
  • OFDM信道估计matlab仿真,对比LS,MMSE, TD-LMMSE,TDD-LMMSE,TD-Qabs-LMMSE
    1.算法描述        信道估计器是接收机一个很重要的组成部分。在OFDM系统中,信道估计器的设计上要有两个问题:**一是导频信息的选择,由于无线信道的时变特性,需要接......
  • C#中怎样在ToolStripMenuItem下再添加子级菜单
    场景在右键菜单ContextMenuStrip下添加子菜单选项可以通过ContextMenuStripmenuStripToolStripMenuItemmnuChartOption=newToolStripMenuItem();//新建菜单项对象......
  • Java 分支结构——if-else(一)
    基本语法结构1:单分支条件判断:if格式:if(条件表达式){语句块;}说明:条件表达式必须是布尔表达式(关系表达式或逻辑表达式)或布尔变量。执行流程:首先判断条件表......
  • 1_sqlSession查询的三种方式
    ​ SqlSession对象本身的API中就有三个查询方法,分别能够实现如下查询方式1返回单个对象selectOne2返回对象List集合selectList3返回对象Map集合selectMap接下来......
  • OpenGL入门1.3:着色器 GLSL
     前言#经过之前一段时间的学习(渲染管线简介)我们已经知道了着色器(Shader)是运行在GPU上的程序,这些小程序为图形渲染管线的某个特定部分而运行,着色器只是一种把输入转化......
  • OpenGL-GLSL语言入门教程(1)
    目录GLSL简介GLSL的内建变量顶点着色器变量gl_PointSizegl_VertexID片段着色器变量gl_FragCoordgl_FragDepth参考网站:LearnOpenGL参考书籍:OpenGL编程指南第九版......
  • OpenGL学习(十)-- 着色语言 GLSL 语法介绍
    我的OpenGL专题学习目录,希望和大家一起学习交流进步!OpenGL学习(一)--术语了解OpenGL学习(二)--Xcode搭建OpenGL环境OpenGL学习(三)--OpenGL基础渲染OpenGL学习(......
  • 高级GLSL
    这一小节并不会向你展示非常先进非常酷的新特性,也不会对场景的视觉质量有显著的提高。但是,这一节会或多或少涉及GLSL的一些有趣的地方以及一些很棒的技巧,它们可能在今后会......
  • OpenGL笔记十四:GLSL语法
    前言期待您移步上篇:OpenGL笔记十三:GLSL加载纹理颠倒六种方案概述GLSL全称OpenGLShadingLanguage,是用来在OpenGL中着色编程的语言,即开发人员写的自定义程序代码......