首页 > 其他分享 >svd,BD,ZF,SLNR,MMSE线性预编码性能对比MATLAB仿真

svd,BD,ZF,SLNR,MMSE线性预编码性能对比MATLAB仿真

时间:2023-04-15 23:44:25浏览次数:47  
标签:BD 编码 Nri SLNR MMSE count temp 线性 Nt

1.算法仿真效果

matlab2022a仿真结果如下:

 

 

 

 

 

 

2.算法涉及理论知识概要

        线性预测编码(LPC)是主要用于音频信号处理与语音处理中根据线性预测模型的信息用压缩形式表示数字语音信号谱包络(en:spectral envelope)的工具。它是最有效的语音分析技术之一,也是低位速下编码方法高质量语音最有用的方法之一,它能够提供非常精确的语音参数预测。

 

       线性预测编码经常用来传输频谱包络信息,这样它就可以容忍传输误差。由于直接传输滤波器系数(参见线性预测中系数定义)对于误差非常敏感,所以人们不希望直接传输滤波器系数。换句话说,一个小的误差不会扭曲整个频谱或使整个频谱质量下降,但是一个小的误差可能使预测滤波器变得不稳定。有许多更加高级的表示方法,如对数面积比(en:log area ratio,LAR)、线谱对(en:line spectral pairs,LSP) 分解以及反射系数等。在这些方法中,LSP 由于它能够保证预测器的稳定性、并且小的系数偏差带来的谱误差也是局部的这些特性,所以得到了广泛应用。

 

2.1svd线性预编码

       单用户 SVD 预编码技术是一种点对点的 MIMO 系统,需要对发送端和接收端进行联合处理。 单用户 SVD 预编码技术利用了单用户 MIMO 信道的所有通道来传送信息,需要在发送端需要进行预编码,同时在接收端也要进行赋形处理。信道矩阵H的 SVD 分解为:

 

 

 

       其中 U 和 V 都是正交矩阵且Σ=diag(a1,a2,...)为对角矩阵。令发射信号x=Va,即发送预处理矩阵使用信道矩阵HSVD 分解后的右奇异矩阵V ,则处理机则用矩阵U来进行接收赋形,得:

 

 

 

2.2BD线性预编码

        块对角化预编码是在多用户MIMO系统下行链路中受到广泛认可的一种线性预编码,它将多用户MIMO系统的下行信道矩阵分解为块对角化形式,等效为多个互不干扰的单用户MIMO系统,完全消除了用户间干扰,通过合理的功率分配,能获得比迫零线性预编码更高的系统容量。块对角化预编码是对 ZF 预编码算法的改进,它在线性预编码矩阵前乘入了零空间矩阵,可以有效减小其他用户产生的干扰。.

 

 

 

2.3ZF线性预编码

       ZF预编码可以理解为把user自身因为多天线空间信道传输而产生的在同时同频的自干扰消掉(但没有考虑消去高斯分布的noise),从而最小化了真实信号和估计的误差平方和,而从统计来看就是Maximize likelihood这个模型

 

 

3.MATLAB核心程序

 

 %svd
            [W1,M1]=svdprecoding(H,K,S,P);
            [U,D,V]=svd(H);
            p1 = ones(1,K*S);
            % p1 = waterfilling(D,SNR,Nt,K,S);
           [count_temp] = receiver(H,Nt,S,K,Tc,P,n,W1,M1,s,q);
            count1=count1+count_temp;
            G=M1*H*W1;
            capacity1=capacity1+log2(det(eye(K*S,K*S)+P/(sigma2*Nt)*G*G'));       
  % BD
            [W2,D2 M2] = BD2(Nt,Nri,S,K,H,P);
            p2 = ones(1,K*S);
            [count_temp] = receiver(H,Nt,S,K,Tc,P,n,W2,M2,s,q);
            count2=count2+count_temp;
            capacity2=capacity2+sumrate(H,W2,M2,K,S,Nri,Nt,sigma2,P);        
  %ZF
           [W3]=ZF(H,P,K,S);
           [count_temp] = receiver(H,Nt,S,K,Tc,P,n,W3,eye(K*Nri),s,q);
            count3=count3+count_temp;
            capacity3=capacity3+sumrate(H,W3,eye(K*Nri),K,S,Nri,Nt,sigma2,P);          
%SLNR
       %[W5]  = SLNR(Nt,Nri,S,K,H,sigma2,P);
        [W5]=SLNR2(H,sigma2,P,K,Nri,S,Nt);
        [count_temp] = receiver(H,Nt,S,K,Tc,P,n,W5,eye(K*Nri),s,q);
            count5=count5+count_temp;
     
       capacity5=capacity5+sumrate(H,W5,eye(K*Nri),K,S,Nri,Nt,sigma2,P);
%MMSE
        [W6,M6]=MMSE(H,sigma2,P,K,Nri,S,Nt);
        [count_temp] = receiver(H,Nt,S,K,Tc,P,n,W6,M6,s,q);
            count6=count6+count_temp;
        
       capacity6=capacity6+sumrate(H,W6,M6,K,S,Nri,Nt,sigma2,P);

 

  

 

标签:BD,编码,Nri,SLNR,MMSE,count,temp,线性,Nt
From: https://www.cnblogs.com/51matlab/p/17322282.html

相关文章

  • Zotero 附件云同步(非 WebDAV 方法)
    1.说明适用范围更广,但是操作步骤较复杂。使用zotero仅同步题录信息,使用其他云同步程序同步文献的附件,此处以坚果云为例进行演示。准备:zotero和坚果云注册账号zotero的插件zotfile(国内汉化版)坚果云客户端Zotero插件集合2.操作流程2.1坚果云操作在网页端创......
  • Zotero 设置坚果云同步(使用 WebDAV 的方法)
    1.坚果云设置登录坚果云:官网,注册账号1.建立个人文件夹:zotero2.在网页打开右上角的账户信息,并选择安全选项在页面下方选择添加应用并输入与前面文件夹对应的名称zotero2.Zotero中设置选择编辑中的首选择项,打开同步将坚果云网站对应的信息依次填入zotero中,验......
  • BDC
    *&---------------------------------------------------------------------**&ReportZBDC1*&*&---------------------------------------------------------------------**&*&*&-----------------------------------------------------......
  • 人脸识别部分主机上提示无法加载DLL'DlibDotNetNative'的解决办法
    开发人脸识别系统,调用了DlibDotNet,系统在绝大部分主机上运行情况良好,而且DlibDotNet对系统的要求也不太高;测试过的主机,像工控主板I33代,J1800,J1900,D525均无压力,轻松胜任; 而在有些客户的系统上,提示System.DllNotFoundException:无法加载DLL'DlibDotNetNative'百度和必应搜了......
  • 当 Amazon Lambda 遇上 Apache APISIX 可以擦出什么火花?
    本文首先介绍了什么是Serverless,以及为什么需要Serverless;其次,讲述了一个好的网关在Serverless架构下的重要性,而APISIX就是这样的一个网关;最后,本文重点介绍了APISIX中的Serverless类型的插件aws-lambda,同时列举了ApacheAPISIX其它Serverless相关插件。作者程小......
  • RocksBD+ZenFS的安装及测试(Fedora 37)
    安装安装libzbd依赖库及libzbd://依赖yuminstallm4yuminstallautoconfyuminstalllibtoolyuminstallautomake//下载libzbd库gitclonehttps://github.com/westerndigitalcorporation/libzbd.git//编译sh./autogen.sh./configuremake//安装sudomakein......
  • 这样也行,在lambda表达式中优雅的处理checked exception
    简介最近发现很多小伙伴还不知道如何在lambda表达式中优雅的处理checkedexception,所以今天就重点和大家来探讨一下这个问题。lambda表达式本身是为了方便程序员书写方便的工具,使用lambda表达式可以让我们的代码更加简洁。可能大多数小伙伴在使用的过程中从来没有遇到过里面包含......
  • 在pycharm中使用Matplotlib的pyplot时报错MatplotlibDeprecationWarning
    本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/298在使用飞浆平台,练习平台上的demo:实践:手写数字识别任务,出现了下面的错误,demo地址: https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/beginner/quick_start_cn.html......
  • 使用lambda表达式来给函数传递参数
    self.combo_box2.Bind(wx.EVT_TEXT_ENTER,self.on_text_change)绑定了事件和on_text_change函数;怎么在这个绑定操作中给on_text_change函数传递一个参数呢?需要传递的参数就是这个控件本身(self.combo_box2)。在on_text_change函数中又该怎么取用呢?接下来举例说明如何处理:在绑......
  • jdk1.8中lambda表达式的理解
    惰性求值Stringmsg="打印一些日志:"+thislogger.fine(msg);//即使最后不打印日志,但字符串的拼接工作还是会执行logger.fine(()->"打印一些日志:"+this);//使用了lambda表达式之后,字符串的拼接放到一个函数里面,fine日志需要打印的时候才去调用这个方法才真正执行......