MIMO通信系统的信道估计与信号检测
- 格式:pdf
- 大小:371.25 KB
- 文档页数:31
MIMO_OFDM系统中稀疏信道估计算法研究MIMO-OFDM系统中的稀疏信道估计是一种关键技术,用于准确估计多
个天线之间的信道状况。
在MIMO-OFDM系统中,多个天线之间存在复杂的
信道传输环境,如多径效应和多用户干扰等,这使得信道估计成为系统性
能优化的一项重要内容。
在实际应用中,传统的全体信道估计算法由于计算复杂度高,延时长
以及对应频谱资源占用较大的缺点,使得研究者们逐渐开始关注采用稀疏
信号处理方法来进行信道估计。
稀疏信号处理方法通过利用信道的稀疏性质,可以显著减少计算量和信道估计所需的开销。
稀疏信道估计主要分为两个阶段:字典学习和稀疏系数估计。
接下来,稀疏系数估计阶段的目标是通过已经学习好的字典和观测到
的信道响应矩阵来估计信道的稀疏系数。
这一阶段采用最小二乘(Least Squares)方法进行优化,通过最小化信道响应与字典重构之间的误差来
获取稀疏系数。
此外,还有一些改进的稀疏信道估计算法,如基于低秩矩阵补偿的估
计方法、基于组稀疏表达的估计方法等。
这些方法通过进一步利用信道估
计矩阵的结构特点,以及压缩感知理论中的稀疏表达与低秩矩阵补偿理论,可以进一步提高信道估计的精度和效率。
总之,MIMO-OFDM系统中的稀疏信道估计算法通过利用信道的稀疏性质,可以显著减少计算量和信道估计所需的开销。
字典学习和稀疏系数估
计是稀疏信道估计的两个关键阶段,采用最小二乘优化等方法来提高信道
估计的准确性和效率。
同时,改进的稀疏信道估计算法也得到了广泛研究,并取得了一定的成果。
无线通信中的信道估计与信号检测无线通信中,信道估计和信号检测都是非常重要的环节。
信道估计主要是指根据接收到的信号,估计出信道的特性,如路径损耗、多径衰落、时延等。
而信号检测则是指根据估计出的信道特性和已知的信号,对接收信号进行解调和解码,从而得到原始的信息。
在无线通信中,信道估计和信号检测都是非常复杂的问题,需要应用许多高级技术和算法。
在本文中,我们将对其进行详细的介绍和分析。
一、信道估计无线通信中的信号会经过多个路径传播,其中可能存在多径效应,导致接收信号发生衰落、相移等变化。
为了恢复信号的原有特性,必须对信道进行估计和补偿。
在通信系统中,常用的信道估计方法有以下几种:1. 最小二乘法(LS)最小二乘法是最简单的线性估计方法之一。
在该方法中,通过最小化估计误差的平方和,得到最优的信道估计值。
该方法计算简单,但对于非线性信道,误差较大,对时间和空间复杂度的要求也较高。
2. 线性最小均方误差(LMMSE)LMMSE是一种比LS更精确的估计方法。
它先根据接收信号的统计特性估计出信道的协方差矩阵,再根据接收信号和估计信道之间的线性关系,推导出信道估计公式。
该方法精度高,但计算量较大,对硬件要求也较高。
3. 神经网络(NN)神经网络是一种模仿人脑神经系统工作原理的技术。
在信道估计中,神经网络可以通过样本数据的训练,自适应地学习出信道特征,从而实现信道估计。
该方法具有较高的估计精度和一定的泛化能力,但需要大量的样本数据进行训练。
二、信号检测信号检测是无线通信中最为关键的环节之一。
它的目的是将接收到的信号还原成原始信息。
为了实现这一目标,必须对信道进行准确的估计,并采用合适的解调和解码算法。
常用的信号检测方法有以下几种:1. 线性解调(LD)线性解调指根据信道的线性特性,采用线性的解调方法,对接收信号进行解调。
常用的线性解调方法有匹配滤波和相关方法。
优点是计算简单,但只适用于线性信道,对非线性信道效果较差。
《MIMO-OFDM系统中信道估计及信号检测算法的研究》篇一一、引言在现代无线通信系统中,多输入多输出(MIMO)技术和正交频分复用(OFDM)技术被广泛地应用。
MIMO技术通过在发射端和接收端配置多个天线,可以有效地提高系统的数据传输速率和通信质量。
而OFDM技术则通过将频带划分为多个子信道,并在每个子信道上独立地调制信号,能够抵抗多径干扰和频率选择性衰落的影响。
然而,这两种技术都面临着复杂的信道环境和噪声干扰等问题,因此需要研究和设计有效的信道估计和信号检测算法。
本文将针对MIMO-OFDM系统中的信道估计及信号检测算法进行研究。
二、MIMO-OFDM系统概述MIMO-OFDM系统结合了MIMO和OFDM两种技术的优势,能够提供更高的数据传输速率和更好的通信质量。
在MIMO-OFDM系统中,多个天线同时发送和接收信号,每个天线之间相互独立,从而提高了系统的空间复用能力和分集增益。
同时,OFDM技术将频带划分为多个子信道,使得每个子信道上的信号可以独立地进行调制和解调,从而有效地抵抗了多径干扰和频率选择性衰落的影响。
三、信道估计算法研究信道估计是MIMO-OFDM系统中的重要环节,其目的是通过对接收信号进行处理和分析,估计出信道的状态信息,为后续的信号检测和均衡提供依据。
常见的信道估计方法包括基于导频的信道估计方法和基于盲信道估计方法。
基于导频的信道估计方法是在发送端定期发送已知的导频信号,接收端通过接收到的导频信号和已知的导频信息进行比较,从而估计出信道的状态信息。
这种方法简单易行,但需要占用一定的频带资源。
基于盲信道估计方法则是利用接收到的数据信号进行信道估计,不需要额外的导频信号。
常见的盲信道估计方法包括最小二乘算法、最大似然算法、迭代软判决算法等。
这些方法可以通过对接收到的数据进行迭代和优化处理,从而更准确地估计出信道的状态信息。
四、信号检测算法研究信号检测是MIMO-OFDM系统中的另一个重要环节,其目的是从接收到的信号中检测出发送端发送的数据信息。
《毫米波大规模MIMO系统中信道估计研究》篇一一、引言随着无线通信技术的飞速发展,毫米波大规模MIMO (Multiple Input Multiple Output)系统因其高带宽、高数据传输速率和良好的频谱效率等优势,在5G及未来通信网络中扮演着重要角色。
然而,在毫米波大规模MIMO系统中,由于信号传播的复杂性以及高频段的特性,信道估计成为了一个重要的研究课题。
本文旨在研究毫米波大规模MIMO系统中的信道估计技术,为提高系统性能和可靠性提供理论支持。
二、毫米波大规模MIMO系统概述毫米波大规模MIMO系统利用毫米波频段的信号进行数据传输,通过在基站和移动设备上部署大量天线来实现多输入多输出的效果。
这种系统具有高带宽、高数据传输速率和良好的频谱效率等优点,可满足未来无线通信的高需求。
然而,由于毫米波信号的传播特性以及大规模MIMO系统的复杂性,信道估计成为了关键的技术挑战。
三、信道估计的重要性信道估计是毫米波大规模MIMO系统中的重要环节,它直接影响着系统的性能和可靠性。
信道估计的主要任务是通过接收到的信号估计出信道的特性,如信道冲激响应、多径传播等。
准确的信道估计有助于提高系统的频谱效率和数据传输速率,降低误码率,从而提高系统的整体性能。
四、信道估计技术研究针对毫米波大规模MIMO系统的信道估计,本文提出以下几种技术:1. 基于压缩感知的信道估计:压缩感知是一种有效的信号处理技术,可以在低信噪比环境下实现准确的信道估计。
通过利用毫米波信道的稀疏特性,将信道估计问题转化为稀疏信号恢复问题,从而提高信道估计的准确性。
2. 联合估计与均衡技术:在毫米波大规模MIMO系统中,由于多径传播和信号干扰等因素的影响,单纯的信道估计可能无法满足系统的需求。
因此,本文提出了一种联合估计与均衡技术,通过同时进行信道估计和信号均衡,提高系统的性能和可靠性。
3. 深度学习在信道估计中的应用:深度学习在无线通信领域具有广泛的应用前景。
《MIMO-OFDM系统中信道估计及信号检测算法的研究》篇一一、引言随着无线通信技术的飞速发展,多输入多输出(MIMO)技术和正交频分复用(OFDM)技术因其卓越的性能在无线通信系统中得到了广泛应用。
MIMO-OFDM系统结合了MIMO和OFDM的优点,具有高数据传输速率、频谱利用率高和抗多径干扰能力强等特点。
然而,在实际应用中,由于无线信道的复杂性和时变性,信道估计和信号检测成为了MIMO-OFDM系统中的关键技术。
本文将重点研究MIMO-OFDM系统中的信道估计及信号检测算法。
二、MIMO-OFDM系统概述MIMO-OFDM系统是一种高效的无线通信技术,通过在发送端使用多个天线发送信号,同时在接收端使用多个天线接收信号,实现了空间复用和分集增益。
OFDM技术则通过将频带划分为多个正交子载波,将高频信号转换为并行低频信号进行传输,从而提高了频谱利用率和抗多径干扰能力。
三、信道估计技术研究信道估计是MIMO-OFDM系统中的一项关键技术,其主要目的是通过对接收信号进行分析和处理,估计出信道的响应特性。
常见的信道估计方法包括最小均方误差(MMSE)估计、最大似然(ML)估计和基于导频的信道估计等。
(一)MMSE信道估计MMSE信道估计是一种基于最小均方误差准则的估计方法。
该方法通过最小化估计误差的均方值来求解信道参数。
在实际应用中,MMSE信道估计具有良好的性能和稳定性,适用于各种信道条件。
(二)最大似然(ML)信道估计ML信道估计是一种基于最大似然准则的估计方法。
该方法通过最大化接收信号与实际发送信号之间的似然函数来求解信道参数。
ML信道估计在信噪比较高的情况下具有较好的性能,但在低信噪比条件下性能较差。
(三)基于导频的信道估计基于导频的信道估计是一种常见的信道估计方法。
该方法通过在发送信号中插入已知的导频符号,接收端根据导频符号的接收情况来估计信道的响应特性。
基于导频的信道估计具有计算复杂度低、实现简单等优点,但需要额外的频谱资源。
无线MIMO系统中迭代检测与信道估计技术研究一、本文概述随着无线通信技术的飞速发展,多输入多输出(MIMO)系统以其能够显著提高系统容量和频谱效率的特性,已成为无线通信领域的研究热点。
MIMO系统通过利用多天线在发送端和接收端同时进行信号处理,可以在不增加带宽和发射功率的情况下,显著提升系统的数据传输速率和可靠性。
然而,MIMO系统的性能在很大程度上取决于接收端的信号处理技术,特别是迭代检测与信道估计技术。
本文旨在深入研究无线MIMO系统中的迭代检测与信道估计技术,探讨其在提高系统性能、降低误码率以及提升频谱效率方面的作用。
文章首先将对MIMO系统的基本原理和模型进行介绍,为后续研究奠定理论基础。
接着,重点分析迭代检测算法的原理和实现方法,包括常见的软输入软输出(SISO)算法、最大后验概率(MAP)算法等,并评估其在不同信道条件下的性能表现。
本文还将对信道估计技术在MIMO系统中的应用进行深入探讨。
信道估计是MIMO系统中的重要环节,它对于准确恢复发送信号、提高系统性能具有关键作用。
文章将介绍常见的信道估计方法,如基于导频的信道估计、盲信道估计等,并分析它们在不同场景下的优缺点。
本文将对迭代检测与信道估计技术的结合进行研究,探讨如何通过优化算法设计和参数调整,实现两者之间的协同工作,从而进一步提升MIMO系统的整体性能。
本文的研究成果将为无线MIMO系统的优化设计和实际应用提供有益的参考和指导。
二、无线MIMO系统基础无线多输入多输出(MIMO)系统是一种利用多个发射和接收天线进行无线通信的技术。
MIMO系统通过增加天线的数量,能够在不增加频谱带宽和发射功率的情况下,显著提高无线通信系统的容量和可靠性。
其理论基础源于香农信道容量公式,即在给定带宽和信噪比条件下,增加信道自由度(即天线数量)可以提升信道容量。
在MIMO系统中,发射端通过多个天线发送信号,接收端通过多个天线接收信号。
这些天线可以独立地发送和接收数据,从而形成多个并行子信道。
MIMO通信系统的信道估计与信号检测项目意义义一项目意多输入多输出(MIMO)技术由于能够在不增加传输带宽的条件下成倍的提高无线信道的信道容量,因而被认为是下一代移动通信系统4G的关键技术之一。
MIMO技术是未来无线通信系统中实现高数据速率传输、改善传输质量、提高系统容量的重要途径。
MIMO信道模型无论是在MIMO技术的理论研究阶段还是在MIMO系统的应用阶段都是必需的。
因此,MIMO信道的建模是MIMO理论研究中的重要内容。
多输入多输出(MIMO)衰落信道是迄今为止所考虑的单输入单输出(SISO)随机信道的多变量推广。
从SISO入手,逐步增加天线数,通过对MIMO 信道的建模和仿真,深刻理解MIMO的系统的内涵。
二项目内容1.MIMO信道的建模。
搭建1*1,2*2,4*4,8*8,MIMO-任一路的信道符合Rayleigh Fading。
2.在接收端基于导频的信道估计。
3.利用估计的信道分别进行MLD和Zero-forcing信号检测。
4.1×1,2×2,4×4,8×8,(理想信道)模型的传输性能比较。
5.1×1,2×2,4×4,8×8,(估计信道)模型的传输性能比较。
6.估计信道和理想信道(4×4)之间的传输性能比较。
三项目原理(1)MIMO系统模型以2×2MIMO为例:r1=H11*S1+H21*S2+n1n2r2=H12*S1+H22*S2+说明:H信道符合Rayleigh衰落。
n为信道的高斯白噪声。
S为发射信号,r为接收端接收信号。
(2)基于导频的信道估计在2×2MIMO信道模型中,导引信号的数量可以是2当导引信号时p1p2=[10],r1=H11*p1+H21*p2+n1(p1=0),不考虑噪声的影响n2(p1=0),不考虑噪声的影响。
r2=H12*S1+H22*S2+则有:H11=r1/p1;H12=r2/p1;当导引信号时p1p2=[01],r1=H11*p1+H21*p2+n1(p1=0),不考虑噪声的影响r2=H12*S1+H22*S2n2(p1=0),不考虑噪声的影响。
+则有:H21=r1/p2;H22=r2/p2;因此,采用导引结构,可以在接收端估计出信道H为:H=[H11H12H21H21](3)最大似然检测(MLD)这是理论最优的检测方法,能够完全获得接收分集增益。
由估计理论可知,对于Y=HX+Z中的H的估计,最大似然估计方法构造了一种代价函数p(H|Y,X),使该代价函数取得最大值的H为最终的估计值:本项目主要针对4×4的MIMO系统进行仿真,星座映射图选择QPSK,在接收端采用最大似然检测算法,主要是考察信道估计算法的性能,所以在检测时采用对发射信号空间进行了穷尽搜索的方法来进行最大似然检测,以充分展示信道估计算法的BER性能。
(4)迫零检测(ZF)迫零检测算法是给接收信号乘以信道矩阵的逆,其他用户对它的的干扰可以消除,但同时噪声也乘以信道矩阵的逆,一般来说,信道矩阵的系数都小于1,那么它的逆就是大于1的,也就是说给噪声乘了一个大于1的因子,必然是放大了噪声。
四项目分析图一图二图三图四结果分析:从图一图三中可以看出,在MLD检测中,当发射和接收的天线数越多,误码率越低,从而证明了MIMO通信系统可以克服多径衰落带来的不良影响,实现了信号传输的可靠性,而且还可以增加系统容量,提高频谱利用率。
从图二图四中可以看出,在ZF检测中,当发射和接收的天线数越多,误码率越高,迫零检测算法是给接收信号乘以信道矩阵的逆,其他用户对它的的干扰可以消除,但同时噪声也乘以信道矩阵的逆,一般来说,信道矩阵的系数都小于1,那么它的逆就是大于1的,也就是说给噪声乘了一个大于1的因子,必然是放大了噪声。
所以误码率会随着天线数的增多而增大。
图五图六结果分析从结果可以看出,使用MLD检测时,理想信道和估计信道误码率总体趋势一样,但理想信道的误码率比估计信道的误码率要低,说明基于导频进行信道估计在MIMO通信系统是可行的。
使用ZF检测时,理想信道和估计信道误码率总体趋势一样,但理想信道的误码率比估计信道的误码率要高,所以一般不建议在基于导频的信道估计中使用ZF检测算法。
图七图八结果分析从结果可以看出,使用理想信道时,MLD算法比ZF算法的误码率小,且总体趋势一样,但在高信噪比部分MLD算法误码率比ZF算法的误码率明显低了很多,说明MLD算法全局搜索的性能极佳。
使用估计信道时,MLD算法和ZF算法的误码率相差不大,其中MLD算法的信噪比稍低一些。
从运算量和运行时间来看,当num=256,loop=1000时,使用MLD算法一共大约1200s,而使用ZF算法一共需要时间大约180s。
MLD算法的运算量远大于ZF算法,所用时间也长于ZF算法。
五项目总结通过本课程的学习,我们知道MIMO将多径无线信道与发射、接收视为一个整体进行优化,从而实现高的通信容量和频谱利用率。
这是一种近于最优的空域时域联合的分集和干扰对消处理。
而本项目通过建立MIMO通信系统,并基于导频估计出信道H,再利用估计的信道分别进行MLD和Zero-forcing信号检测,最后应用MATLAB对本系统进行仿真,画图,观察图形,通过仿真结果进行误码率分析。
从上面进行到的项目过程,我们进一步了解到MIMO系统突出的性能优势,为未来学习4G通信打下基础。
六参考文献[1].樊昌信通信原理北京国防工业出版社2001[2].魏巍MATLAB信息工程工具箱技术手册北京国防工业出版社2004[3].陈永春MATLAB M语言高级编程北京清华大学出版社2004[4].肖扬MIMO多天线无线通信系统北京人民邮电出版社2009[5].章坚武移动通信陕西西安电子科技大学出版社2003七、附录%4x4天线MLD检测,理想信道与估计信道的MIMO系统误码率分析%clear all;close;Eb_N0=-10:1:10;tx=4;%发送天线数目%rx=4;%接收天线数目%num=256;loop=1000;%循环次数(100/BER=1000)%SNR_num=length(Eb_N0);%number of SNRerror=zeros(2,SNR_num);for p=1:SNR_numticfor w=1:loopSig=randint(1,num);%随机产生二进制序列modSig=modBaseBandQPSK(Sig);%QPSK调制%估计信道发送矩阵初始化%transmit_array_estimated=zeros(tx,num/tx/2+tx);transmit_array_estimated(:,1:tx)=eye(tx,tx);transmit_array_estimated(:,tx+1:num/tx/2+tx)=series2array(modSig,tx)./sqrt(tx);%将序列转换为数组,用于送给不同天线,有功率分配%%理想信道发送矩阵初始化%transmit_array_ideal=series2array(modSig,tx)./sqrt(tx);%4x4MIMO信道%Channel=zeros(tx,rx,num);for n=1:txfor m=1:rxChannel(n,m,:)=wgn(1,1,0,'complex');endendH=Channel;%通过MIMO理想信道%for n=1:num/tx/2recSig_ideal(:,n)=H(:,:,n)*transmit_array_ideal(:,n);endfor n=1:txrecSig_ideal(n,:)=awgn(recSig_ideal(n,:),Eb_N0(p));end%通过MIMO估计信道%for n=1:num/tx/2+txrecSig_estimated(:,n)=H(:,:,n)*transmit_array_estimated(:,n);%信号通过4x4MIMO信道end%加awgn噪声%for n=1:txrecSig_estimated(n,:)=awgn(recSig_estimated(n,:),Eb_N0(p));end%估计信道H_estimated=recSig_estimated(:,1:tx);%信道估计%receive=recSig_estimated(:,tx+1:num/tx/2+tx);%有用信息(去除信道估计用的信息后)%%最大似然检测%S_estimated=MLD1(receive,H_estimated);%估计信道%S_ideal=MLD1(recSig_ideal,H(:,:,num));%理想信道%%将数组转换为序列%x_estimated=conj(S_estimated(:)');%估计信道%x_ideal=conj(S_ideal(:)');%理想信道%%QPSK解调%demodSig_estimated=demodQPSK(x_estimated);%估计信道%demodSig_ideal=demodQPSK(x_ideal);%理想信道%%错误点数%error(1,p)=error(1,p)+length(find((demodSig_estimated-Sig)~=0));%估计信道%error(2,p)=error(2,p)+length(find((demodSig_ideal-Sig)~=0));%理想信道% enderror(:,p)=error(:,p)/loop/num%误码率%tocend%画误码率曲线semilogy(Eb_N0,error(1,:),'r*-',Eb_N0,error(2,:),'b*-');grid on;title('4×4天线,MLD检测,理想信道和估计信道的性能比较(11组)');xlabel('E_b/N_0(dB)');ylabel('误码率');legend('估计信道误码率曲线','理想信道误码率曲线');====================================================================== ===========================%4x4天线,理想信道vs估计信道,ZF检测%clear all;close;Eb_N0=-10:1:10;tx=4;%发送天线数目%rx=4;%接收天线数目%num=256;loop=1000;%循环次数(100/BER=1000)%SNR_num=length(Eb_N0);%number of SNRBER=zeros(2,SNR_num);for p=1:SNR_numticfor w=1:loopSig=randint(1,num);%随机产生二进制序列modSig=modBaseBandQPSK(Sig);%QPSK调制%估计信道发送矩阵初始化%transmit_array_estimated=zeros(tx,num/tx/2+tx);transmit_array_estimated(:,1:tx)=eye(tx,tx);transmit_array_estimated(:,tx+1:num/tx/2+tx)=series2array(modSig,tx)./sqrt(tx);%将序列转换为数组,用于送给不同天线,有功率分配%%理想信道发送矩阵初始化%transmit_array_ideal=series2array(modSig,tx)./sqrt(tx);%4x4MIMO信道%Channel=zeros(tx,rx,num);for n=1:txfor m=1:rxChannel(n,m,:)=wgn(1,1,0,'complex');endendH=Channel;h=(1/sqrt(2))*H(:,:,num)/(sqrt(tx));%对信道进行归一化处理%%通过MIMO理想信道%for n=1:num/tx/2recSig_ideal(:,n)=H(:,:,n)*transmit_array_ideal(:,n);endfor n=1:txrecSig_ideal(n,:)=awgn(recSig_ideal(n,:),Eb_N0(p));end%通过MIMO估计信道%for n=1:num/tx/2+txrecSig_estimated(:,n)=H(:,:,n)*transmit_array_estimated(:,n);%信号通过4x4MIMO信道end%加awgn噪声%for n=1:txrecSig_estimated(n,:)=awgn(recSig_estimated(n,:),Eb_N0(p));end%估计信道H_estimated=recSig_estimated(:,1:tx);%信道估计%receive=recSig_estimated(:,tx+1:num/tx/2+tx);%有用信息(去除信道估计用的信息后)%%迫零检测%%估计信道%y_estimated=pinv(h)*receive;x_estimated=conj(y_estimated(:)');demodSig_estimated_ZF=demodQPSK(x_estimated);%QPSK解调%%理想信道%y_ideal=pinv(h)*recSig_ideal;x_ideal=conj(y_ideal(:)');demodSig_ideal_ZF=demodQPSK(x_ideal);%QPSK解调%%错误点数%BER(1,p)=BER(1,p)+length(find((demodSig_estimated_ZF-Sig)~=0));%估计信道%BER(2,p)=BER(2,p)+length(find((demodSig_ideal_ZF-Sig)~=0));%理想信道%endBER(:,p)=BER(:,p)/loop/num%误码率%tocend%画误码率曲线semilogy(Eb_N0,BER(1,:),'r*-',Eb_N0,BER(2,:),'b*-');grid on;title('4×4天线,ZF检测,通过理想信道和估计信道的性能比较(11组)');xlabel('E_b/N_0(dB)');ylabel('误码率');legend('估计信道误码率曲线','理想信道误码率曲线');====================================================================== =========================%估计信道,MLD检测的1x1,2x2,4x4天线的MIMO系统误码率曲线比较分析%clear all;close;tx1=1;%发送天线数目为1%rx1=1;%接收天线数目为1%tx2=2;%发送天线数目为2%rx2=2;%接收天线数目为2%tx3=4;%发送天线数目为4%rx3=4;%接收天线数目为4%Eb_N0=-10:1:10;num=256;loop=1000;%循环次数%100/BER=1000SNR_num=length(Eb_N0);BER=zeros(3,SNR_num);for p=1:SNR_numticfor w=1:loopSig=randint(1,num);%随机产生二进制序列%modSig=modBaseBandQPSK(Sig);%QPSK调制%%发送信号矩阵初始化%transmit_array1=zeros(tx1,num/tx1/2+tx1);transmit_array1(:,1:tx1)=eye(tx1,tx1);transmit_array2=zeros(tx2,num/tx2/2+tx2);transmit_array2(:,1:tx2)=eye(tx2,tx2);transmit_array3=zeros(tx3,num/tx3/2+tx3);transmit_array3(:,1:tx3)=eye(tx3,tx3);%发送序列转换为数组,用于送给不同天线,有功率分配%transmit_array1(:,tx1+1:num/tx1/2+tx1)=series2array(modSig,tx1)./sqrt(tx1);transmit_array2(:,tx2+1:num/tx2/2+tx2)=series2array(modSig,tx2)./sqrt(tx2);transmit_array3(:,tx3+1:num/tx3/2+tx3)=series2array(modSig,tx3)./sqrt(tx3);%1x1MIMO信道%Channel=zeros(tx1,rx1,num);for n1=1:tx1for m1=1:rx1Channel(n1,m1,:)=wgn(1,1,0,'complex');endendH1=Channel;%2x2MIMO信道%Channel2=zeros(tx2,rx2,num);for n2=1:tx2for m2=1:rx2Channel2(n2,m2,:)=wgn(1,1,0,'complex');endendH2=Channel2;%4x4MIMO信道%Channel3=zeros(tx3,rx3,num);for n3=1:tx3for m3=1:rx3Channel3(n3,m3,:)=wgn(1,1,0,'complex');endendH3=Channel3;%信号通过MIMO信道%for n=1:num/tx1/2+tx1recSig1(:,n)=H1(:,:,n)*transmit_array1(:,n);%信号通过1x1MIMO信道endfor n=1:num/tx2/2+tx2recSig2(:,n)=H2(:,:,n)*transmit_array2(:,n);%信号通过2x2MIMO信道endfor n=1:num/tx3/2+tx3recSig3(:,n)=H3(:,:,n)*transmit_array3(:,n);end%加awgn噪声%for n=1:tx1%1x1recSig1(n,:)=awgn(recSig1(n,:),Eb_N0(p));endfor n=1:tx2%2x2recSig2(n,:)=awgn(recSig2(n,:),Eb_N0(p));endfor n=1:tx3recSig3(n,:)=awgn(recSig3(n,:),Eb_N0(p));end%信道估计%H_estimated1=recSig1(:,1:tx1);%1x1H_estimated2=recSig2(:,1:tx2);%2x2H_estimated3=recSig3(:,1:tx3);%4x4%有用信息(去除信道估计用的信息后)%receive1=recSig1(:,tx1+1:num/tx1/2+tx1);receive2=recSig2(:,tx2+1:num/tx2/2+tx2);receive3=recSig3(:,tx3+1:num/tx3/2+tx3);%最大似然检测%S1=MLD1(receive1,H_estimated1);%1x1S2=MLD1(receive2,H_estimated2);%2x2S3=MLD1(receive3,H_estimated3);%4x4%将数组转换为序列%x1=conj(S1(:)');x2=conj(S2(:)');x3=conj(S3(:)');%QPSK解调%demodSig1=demodQPSK(x1);demodSig2=demodQPSK(x2);demodSig3=demodQPSK(x3);BER(1,p)=BER(1,p)+length(find((demodSig1-Sig)~=0));%1x1错误点数BER(2,p)=BER(2,p)+length(find((demodSig2-Sig)~=0));%2x2错误点数BER(3,p)=BER(3,p)+length(find((demodSig3-Sig)~=0));%4x4错误点数endBER(:,p)=BER(:,p)/loop/num%误码率%tocend%画误码率曲线%semilogy(Eb_N0,BER(1,:),'r*-',Eb_N0,BER(2,:),'g*-',Eb_N0,BER(3,:),'b*-');grid on;title('导频估计信道,MLD检测,MIMO系统1x1,2x2,4x4天线性能比较(11组)');xlabel('E_b/N_0(dB)');ylabel('误码率');legend('1x1天线误码率曲线','2x2天线误码率曲线','4x4天线误码率曲线');====================================================================== ============================%估计信道,MLD和ZF检测下的4x4天线MIMO系统误码率曲线比较分析%clear all;close;tx=4;%发送天线数目为4%rx=4;%接收天线数目为4%Eb_N0=-10:1:10;num=256;loop=1000;%循环次数%100/BER=1000SNR_num=length(Eb_N0);BER=zeros(2,SNR_num);for p=1:SNR_numticfor w=1:loopSig=randint(1,num);%随机产生二进制序列%modSig=modBaseBandQPSK(Sig);%QPSK调制%transmit_array=zeros(tx,num/tx/2+tx);transmit_array(:,1:tx)=eye(tx,tx);%4x4天线导频信号%%将序列转换为数组,用于送给不同天线,有功率分配%transmit_array(:,tx+1:num/tx/2+tx)=series2array(modSig,tx)./sqrt(tx);%4x4MIMO信道%Channel=zeros(tx,rx,num);for n=1:txfor m=1:rxChannel(n,m,:)=wgn(1,1,0,'complex');endendH=Channel;%信号通过MIMO信道%for n=1:num/tx/2+txrecSig(:,n)=H(:,:,n)*transmit_array(:,n);end%加awgn噪声%for n=1:txrecSig(n,:)=awgn(recSig(n,:),Eb_N0(p));end%信道估计%H_estimated=recSig(:,1:tx);%4x4receive=recSig(:,tx+1:num/tx/2+tx);%有用信息(去除信道估计用的信息后)%%最大似然检测%S=MLD1(receive,H_estimated);%4x4x_MLD=conj(S(:)');%将数组转换为序列%demodSig_MLD=demodQPSK(x_MLD);%QPSK解调%BER(1,p)=BER(1,p)+length(find((demodSig_MLD-Sig)~=0));%错误点数%迫零检测%h=(1/sqrt(2))*H(:,:,num)/(sqrt(tx));%对信道进行归一化处理%y=pinv(h)*receive;x_ZF=conj(y(:)');demodSig_ZF=demodQPSK(x_ZF);BER(2,p)=BER(2,p)+length(find((demodSig_ZF-Sig)~=0));%错误点数endBER(:,p)=BER(:,p)/loop/num%误码率%tocend%画误码率曲线%semilogy(Eb_N0,BER(1,:),'r*-',Eb_N0,BER(2,:),'g*-');grid on;title('估计信道,MLD和ZF检测下的4x4天线MIMO系统误码率曲线比较分析(11组)'); xlabel('E_b/N_0(dB)');ylabel('误码率');legend('MLD检测天线误码率曲线','ZF检测天线误码率曲线');====================================================================== ================%导频序列估计信道,ZF检测下,MIMO系统1x1,2x2,4x4天线性能比较%clear all;close;tx1=1;%发送天线数目为1%rx1=1;%接收天线数目为1%tx2=2;%发送天线数目为2%rx2=2;%接收天线数目为2%tx3=4;%发送天线数目为4%rx3=4;%接收天线数目为4%Eb_N0=-10:1:10;num=256;loop=1000;%循环次数%100/BER=1000SNR_num=length(Eb_N0);BER=zeros(3,SNR_num);for p=1:SNR_numticfor w=1:loopSig=randint(1,num);%随机产生二进制序列%modSig=modBaseBandQPSK(Sig);%QPSK调制%transmit_array1=zeros(tx1,num/tx1/2+tx1);transmit_array1(:,1:tx1)=eye(tx1,tx1);%1x1天线导频信号%transmit_array2=zeros(tx2,num/tx2/2+tx2);transmit_array2(:,1:tx2)=eye(tx2,tx2);%2x2天线导频信号%transmit_array3=zeros(tx3,num/tx3/2+tx3);transmit_array3(:,1:tx3)=eye(tx3,tx3);%4x4天线导频信号%%将序列转换为数组,用于送给不同天线,有功率分配%transmit_array1(:,tx1+1:num/tx1/2+tx1)=series2array(modSig,tx1)./sqrt(tx1);transmit_array2(:,tx2+1:num/tx2/2+tx2)=series2array(modSig,tx2)./sqrt(tx2);transmit_array3(:,tx3+1:num/tx3/2+tx3)=series2array(modSig,tx3)./sqrt(tx3);%1x1MIMO信道%Channel=zeros(tx1,rx1,num);for n1=1:tx1for m1=1:rx1Channel(n1,m1,:)=wgn(1,1,0,'complex');endendH1=Channel;%2x2MIMO信道%Channel2=zeros(tx2,rx2,num);for n2=1:tx2for m2=1:rx2Channel2(n2,m2,:)=wgn(1,1,0,'complex');endendH2=Channel2;%4x4MIMO信道%Channel3=zeros(tx3,rx3,num);for n3=1:tx3for m3=1:rx3Channel3(n3,m3,:)=wgn(1,1,0,'complex');endendH3=Channel3;%信号通过MIMO信道%for n=1:num/tx1/2+tx1recSig1(:,n)=H1(:,:,n)*transmit_array1(:,n);%信号通过1x1MIMO信道endfor n=1:num/tx2/2+tx2recSig2(:,n)=H2(:,:,n)*transmit_array2(:,n);%信号通过2x2MIMO信道endfor n=1:num/tx3/2+tx3recSig3(:,n)=H3(:,:,n)*transmit_array3(:,n);%信号通过4x4MIMO信道end%加awgn噪声%for n=1:tx1%1x1recSig1(n,:)=awgn(recSig1(n,:),Eb_N0(p));endfor n=1:tx2%2x2recSig2(n,:)=awgn(recSig2(n,:),Eb_N0(p));endfor n=1:tx3%4x4recSig3(n,:)=awgn(recSig3(n,:),Eb_N0(p));end%信道估计%H_estimated1=recSig1(:,1:tx1);%1x1H_estimated2=recSig2(:,1:tx2);%2x2H_estimated3=recSig3(:,1:tx3);%4x4%有用信息(去除信道估计用的信息后)%receive1=recSig1(:,tx1+1:num/tx1/2+tx1);receive2=recSig2(:,tx2+1:num/tx2/2+tx2);receive3=recSig3(:,tx3+1:num/tx3/2+tx3);%迫零检测%h1=(1/sqrt(2))*H1(:,:,num)/(sqrt(tx1));h2=(1/sqrt(2))*H2(:,:,num)/(sqrt(tx2));h3=(1/sqrt(2))*H3(:,:,num)/(sqrt(tx3));y1=pinv(h1)*receive1;y2=pinv(h2)*receive2;y3=pinv(h3)*receive3;%将数组转换为序列%x1=conj(y1(:)');x2=conj(y2(:)');x3=conj(y3(:)');%QPSK解调%demodSig1=demodQPSK(x1);demodSig2=demodQPSK(x2);demodSig3=demodQPSK(x3);BER(1,p)=BER(1,p)+length(find((demodSig1-Sig)~=0));%1x1错误点数BER(2,p)=BER(2,p)+length(find((demodSig2-Sig)~=0));%2x2错误点数BER(3,p)=BER(3,p)+length(find((demodSig3-Sig)~=0));%4x4错误点数endBER(:,p)=BER(:,p)/loop/num%误码率%tocend%画误码率曲线%semilogy(Eb_N0,BER(1,:),'r*-',Eb_N0,BER(2,:),'g*-',Eb_N0,BER(3,:),'b*-');grid on;title('导频序列估计信道,ZF检测下,MIMO系统1x1,2x2,4x4天线性能比较(11组)');xlabel('E_b/N_0(dB)');ylabel('误码率');legend('1x1天线误码率曲线','2x2天线误码率曲线','4x4天线误码率曲线');====================================================================== ===============%理想信道,ZF检测的1x1,2x2,4x4天线的MIMO系统误码率比较%clear all;close;tx1=1;%发送天线数目为1%rx1=1;%接收天线数目为1%tx2=2;%发送天线数目为2%rx2=2;%接收天线数目为2%tx3=4;%发送天线数目为4%rx3=4;%接收天线数目为4%Eb_N0=-10:1:10;num=256;loop=1000;%循环次数(100/BER=1000)%SNR_num=length(Eb_N0);error=zeros(3,SNR_num);for p=1:SNR_numticfor w=1:loopSig=randint(1,num);%随机产生二进制序列%modSig=modBaseBandQPSK(Sig);%QPSK调制%%将序列转换为数组,用于送给不同天线,有功率分配%transmit_array1=series2array(modSig,tx1)./sqrt(tx1);transmit_array2=series2array(modSig,tx2)./sqrt(tx2);transmit_array3=series2array(modSig,tx3)./sqrt(tx3);%产生MIMO1x1信道%Channel1=zeros(tx1,rx1,num);for n1=1:tx1for m1=1:rx1Channel1(n1,m1,:)=wgn(1,1,0,'complex');endendH1=Channel1;h1=(1/sqrt(2))*H1(:,:,num)/(sqrt(tx1));%产生MIMO2x2信道%Channel2=zeros(tx2,rx2,num);for n2=1:tx2for m2=1:rx2Channel2(n2,m2,:)=wgn(1,1,0,'complex');endendH2=Channel2;h2=(1/sqrt(2))*H2(:,:,num)/(sqrt(tx2));%产生MIMO4x4信道%Channel3=zeros(tx3,rx3,num);for n3=1:tx3for m3=1:rx3Channel3(n3,m3,:)=wgn(1,1,0,'complex');endendH3=Channel3;h3=(1/sqrt(2))*H3(:,:,num)/(sqrt(tx3));%信号通过MIMO信道%for n=1:num/tx1/2recSig1(:,n)=H1(:,:,n)*transmit_array1(:,n);endfor n=1:num/tx2/2recSig2(:,n)=H2(:,:,n)*transmit_array2(:,n);endfor n=1:num/tx3/2recSig3(:,n)=H3(:,:,n)*transmit_array3(:,n);end%加噪声%for n=1:tx1recSig1(n,:)=awgn(recSig1(n,:),Eb_N0(p));endfor n=1:tx2recSig2(n,:)=awgn(recSig2(n,:),Eb_N0(p));endfor n=1:tx3recSig3(n,:)=awgn(recSig3(n,:),Eb_N0(p));end%迫零检测%y1=pinv(h1)*recSig1;y2=pinv(h2)*recSig2;y3=pinv(h3)*recSig3;%将数组转换为序列%x_ZF1=conj(y1(:)');x_ZF2=conj(y2(:)');x_ZF3=conj(y3(:)');%QPSK解调%demodSig_ZF1=demodQPSK(x_ZF1);demodSig_ZF2=demodQPSK(x_ZF2);demodSig_ZF3=demodQPSK(x_ZF3);%错误点数%error(1,p)=error(1,p)+length(find((demodSig_ZF1-Sig)~=0));error(2,p)=error(2,p)+length(find((demodSig_ZF2-Sig)~=0));error(3,p)=error(3,p)+length(find((demodSig_ZF3-Sig)~=0));enderror(:,p)=error(:,p)/loop/num%误码率%tocend%画误码率曲线%semilogy(Eb_N0,error(1,:),'r*-',Eb_N0,error(2,:),'g*-',Eb_N0,error(3,:),'b*-');grid on;title('理想信道下ZF检测,MIMO系统1x1,2x2,4x4天线性能(11组)');xlabel('E_b/N_0(dB)');ylabel('误码率');legend('1x1天线误码率曲线','2x2天线误码率曲线','4x4天线误码率曲线');====================================================================== ===============%理想信道MLD的1x1,2x2,4x4天线的MIMO系统误码率比较%clear all;close;tx1=1;%发送天线数目为1%rx1=1;%接收天线数目为1%tx2=2;%发送天线数目为2%rx2=2;%接收天线数目为2%tx3=4;%发送天线数目为4%rx3=4;%接收天线数目为4%Eb_N0=-10:1:10;num=256;loop=1000;%循环次数(100/BER=1000)%SNR_num=length(Eb_N0);error=zeros(3,SNR_num);for p=1:SNR_numticfor w=1:loopSig=randint(1,num);%随机产生二进制序列%modSig=modBaseBandQPSK(Sig);%QPSK调制%%将序列转换为数组,用于送给不同天线,有功率分配%transmit_array1=series2array(modSig,tx1)./sqrt(tx1);transmit_array2=series2array(modSig,tx2)./sqrt(tx2);transmit_array3=series2array(modSig,tx3)./sqrt(tx3);%产生MIMO1x1信道%Channel1=zeros(tx1,rx1,num);for n1=1:tx1for m1=1:rx1Channel1(n1,m1,:)=wgn(1,1,0,'complex');endendH1=Channel1;%产生MIMO2x2信道%Channel2=zeros(tx2,rx2,num);for n2=1:tx2for m2=1:rx2Channel2(n2,m2,:)=wgn(1,1,0,'complex');endendH2=Channel2;%产生MIMO4x4信道%Channel3=zeros(tx3,rx3,num);for n3=1:tx3for m3=1:rx3Channel3(n3,m3,:)=wgn(1,1,0,'complex');endendH3=Channel3;%信号通过MIMO信道%for n=1:num/tx1/2recSig1(:,n)=H1(:,:,n)*transmit_array1(:,n);endfor n=1:num/tx2/2recSig2(:,n)=H2(:,:,n)*transmit_array2(:,n);endfor n=1:num/tx3/2recSig3(:,n)=H3(:,:,n)*transmit_array3(:,n);end%加噪声%for n=1:tx1recSig1(n,:)=awgn(recSig1(n,:),Eb_N0(p));endfor n=1:tx2recSig2(n,:)=awgn(recSig2(n,:),Eb_N0(p));endfor n=1:tx3recSig3(n,:)=awgn(recSig3(n,:),Eb_N0(p));end%最大似然检测%S1=MLD1(recSig1,H1);S2=MLD1(recSig2,H2);S3=MLD1(recSig3,H3);%将数组转换为序列%x1=conj(S1(:)');x2=conj(S2(:)');x3=conj(S3(:)');%QPSK解调%demodSig1=demodQPSK(x1);demodSig2=demodQPSK(x2);demodSig3=demodQPSK(x3);%错误点数%error(1,p)=error(1,p)+length(find((demodSig1-Sig)~=0));error(2,p)=error(2,p)+length(find((demodSig2-Sig)~=0));error(3,p)=error(3,p)+length(find((demodSig3-Sig)~=0));enderror(:,p)=error(:,p)/loop/num%误码率%tocend%画误码率曲线%semilogy(Eb_N0,error(1,:),'r*-',Eb_N0,error(2,:),'g*-',Eb_N0,error(3,:),'b*-'); grid on;title('理想信道,MLD检测,MIMO系统1x1,2x2,4x4天线性能比较(11组)'); xlabel('E_b/N_0(dB)');ylabel('误码率');legend('1x1天线误码率曲线','2x2天线误码率曲线','4x4天线误码率曲线');====================================================================== ======%理想信道下,MIMO系统4x4天线MLD检测与ZF检测的性能比较%clear all;close;tx=4;%发送天线数目为4%rx=4;%接收天线数目为4%Eb_N0=-10:1:10;num=256;loop=1000;%循环次数(100/BER=1000)%SNR_num=length(Eb_N0);error=zeros(2,SNR_num);for p=1:SNR_numticfor w=1:loopSig=randint(1,num);%随机产生二进制序列%modSig=modBaseBandQPSK(Sig);%QPSK调制%%将序列转换为数组,用于送给不同天线,有功率分配%transmit_array=series2array(modSig,tx)./sqrt(tx);%产生MIMO4x4信道%Channel=zeros(tx,rx,num);for n=1:txfor m=1:rxChannel(n,m,:)=wgn(1,1,0,'complex');endendH=Channel;h=(1/sqrt(2))*H(:,:,num)/(sqrt(tx));%对信道进行归一化处理%%信号通过MIMO信道%for n=1:num/tx/2recSig(:,n)=H(:,:,n)*transmit_array(:,n);end%加噪声%for n=1:txrecSig(n,:)=awgn(recSig(n,:),Eb_N0(p));end%最大似然检测%S=MLD1(recSig,H);%将数组转换为序列%x_MLD=conj(S(:)');demodSig_MLD=demodQPSK(x_MLD);%QPSK解调%error(1,p)=error(1,p)+length(find((demodSig_MLD-Sig)~=0));%错误点数%%迫零检测%y=pinv(h)*recSig;%将数组转换为序列%x_ZF=conj(y(:)');%QPSK解调%demodSig_ZF=demodQPSK(x_ZF);error(2,p)=error(2,p)+length(find((demodSig_ZF-Sig)~=0));enderror(:,p)=error(:,p)/loop/num%误码率%tocend%画误码率曲线%semilogy(Eb_N0,error(1,:),'r*-',Eb_N0,error(2,:),'g*-');grid on;title('理想信道下,MIMO系统4x4天线MLD检测与ZF检测的性能比较(11组)');xlabel('E_b/N_0(dB)');ylabel('误码率');legend('MLD检测误码率曲线','ZF检测误码率曲线');====================================================================== =====function[array]=series2array(series,M)%This function is used to change series in to arrayL=length(series);array=zeros(M,L/M);for m=1:Mfor n=1:L/M;array(m,n)=series((n-1)*M+m);endend====================================================================== =======function[S]=MLD1(r,H)%This function is maximum likelihood detection function.%%r:Received signal%%H:Estimated channel or ideal channel%[N,len]=size(r);%len:length of Signal N:the num of antenna%S=zeros(N,len);%Each antenna sent p signal(Power allocation)%s=[exp(1j*pi*5/4)exp(1j*pi*3/4)exp(1j*pi*7/4)exp(1j*pi/4)]./sqrt(N); X=zeros(N,4^N);k=1;if N==1%antenna1x1X=s;else if N==2%antenna2x2for t=1:4for p=1:4X(1,k)=s(1,t);X(2,k)=s(1,p);k=k+1;endendelse if N==4%antenna4x4for t=1:4for p=1:4for u=1:4for q=1:4X(1,k)=s(1,t);X(2,k)=s(1,p);X(3,k)=s(1,u);X(4,k)=s(1,q);k=k+1;endendendendelse if N~=1&&N~=2&&N~=4disp('error');endendendend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% matrix=zeros(N,4^N);distance=zeros(1,length(X));for n=1:lenif(ndims(H)~=2)%H is not the estimated channel%H(:,:,1)=H(:,:,n);endmatrix=H(:,:,1)*X;%HS matrix%for m=1:length(X)distance(1,m)=norm(matrix(:,m)-r(:,n));end[~,index]=min(distance);%Returns the index of the minimum range%S(:,n)=X(:,index);end====================================================================== ========================function y=modBaseBandQPSK(sig)%mod BaseBandQPSK modulate the signal of basebank in QPSK method(carrrier%frequency is0Hz.%y=modBaseBandQPSK(sig)modulated the signals specified by sig.y is%modulated signals.%---change the signals from binary to quaternariant and modulate[signal_length_row,signal_length_col]=size(sig);%Qsig=zeros(signal_length_row,signal_length_col);y=zeros(signal_length_row,signal_length_col/2);%----initialfor n=1:signal_length_rowfor m=1:signal_length_col/2Qsig=2*sig(n,2*m-1)+sig(n,2*m);switch(Qsig)case0%------00-->pi/4y(n,m)=exp(1i*pi/4);case1%------01-->7pi/4y(n,m)=exp(1i*7*pi/4);case2%------10-->3pi/4y(n,m)=exp(1i*3*pi/4);case3%------11-->5pi/4y(n,m)=exp(1i*5*pi/4);end;endendend====================================================================== =========================function y=demodQPSK(rec_Sig)%This function is used for QPSK signal demodulation.%[signal_length_row,signal_length_col]=size(rec_Sig);y=zeros(signal_length_row,signal_length_col*2);for n=1:signal_length_rowfor m=1:signal_length_colif real(rec_Sig(n,m))>0%'00''01'-->R[x]>0%y(n,2*m-1)=0;else%'10''11'-->R[x]<0%y(n,2*m-1)=1;endif imag(rec_Sig(n,m))>0%'00''01'-->I[x]>0%y(n,2*m)=0;else%'10''11'-->I[x]<0%y(n,2*m)=1;endendendend31/31。