基于子空间的OFDM系统盲信道估计附matlab代码

简介: 基于子空间的OFDM系统盲信道估计附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

OFDM是一种无线环境下的高速传输技术,该技术的基本原理是将高速的串行数据分解成多路低速率的并行数据,并针对不同的载波分别进行调制.因此通过各个子载波的联合编码,OFDM系统可以具有良好的抗多径衰落和时延弥散的能力,并且保持较高的传输速率.

⛄ 完整代码

%OFDM系统基于子空间的盲信道估计

 

clear all

close all

clc

Mt=2;Mr=4;%the number of transmit and received antennas  

N=64;   %the number of subcarrier, M

% nos=2000;%number of symbol

P1=[3 4];   %length of CP

% Q=N+P;  %the totle length of an OFDM symbol, K

J=2;    %collect J consecutively received OFDM symbols

L=3;    %the order of channel

SNR=25;

Nm=1;

NRMSE=zeros(2,10);

a=[];

j=sqrt(-1);

 

mh1 = [ -1.4128-0.0914i 1.3527 - 0.0492i -0.01 - 0.2925i 0.0356 + 0.318i;

   1.3521 - 0.5077i -1.2663 + 0.593i 0.1068 + 0.3369i -0.1314 - 0.3654i ;

   -1.1205 + 0.2211i 1.1264 - 0.3101i 0.4627 - 0.0793i -0.485 + 0.1372i;

   0.417+j*0.030  1  0.873+j*0.145 0.285+j*0.309 ];

mh2 = [ -0.3258 + 0.1603i 0.3012 - 0.2012i 0.0052 + 0.0095i -0.0094 + 0.0158i ;

   0.3909 + 0.0212i -0.3892 + 0.0123i -0.068 + 0.266i -0.0342 - 0.2695i ;

   -0.1579 + 0.0661i 0.1398 - 0.079i -0.0337 + 0.1259i -0.0227 - 0.0938i;

    -0.221-j*0.322 -0.199+j*0.918 1 -0.284-j*0.524 ];  

% mh1=[-0.049+j*0.359  0.482-j*0.569  -0.556+j*0.587 1 ;               %h11

%     0.443-j*0.0364  1              0.921-j*0.194  0.189-j*0.208  ];  %h12

% mh2=[ -0.221-j*0.322  -0.199+j*0.918 1              -0.284-j*0.524 ;    %h13

%     0.417+j*0.030   1              0.873+j*0.145  0.285+j*0.309  ]; %h14

h0=[mh1(:,1) mh2(:,1)];

h1=[mh1(:,2) mh2(:,2)];

h2=[mh1(:,3) mh2(:,3)];

h3=[mh1(:,4) mh2(:,4)];%%%公式(17),每个子信道

H1=[h0,h1,h2,h3];

h11=[mh1(:,1).',mh1(:,2).',mh1(:,3).',mh1(:,4).'].';

h22=[mh2(:,1).',mh2(:,2).',mh2(:,3).',mh2(:,4).'].';%%公式(29)

h=[h11,h22];%%公式(30),实际信道

% h=norm(h);

%构造W矩阵

for i6=1:1:2

   P=P1(i6)

   Q=N+P;  %the totle length of an OFDM symbol, K

 

   

%-----------------------go through the channel-----------------%

H=zeros((J*Q-L)*Mr,J*Q*Mt);  

for i=1:J*Q-L

   H((i-1)*Mr+1:i*Mr,(i-1)*Mt+1:(L+i)*Mt)=H1;%%公式(25),构造H矩阵

end  

W1=zeros(N,N);

for i1=1:N

   for j1=1:N

      W1(i1,j1)=exp(j*2*pi*(i1-1)*(j1-1)/N)/sqrt(N);  

   end

end

W=[W1(N-P+1:N,:);W1];

IJ=eye(J);

IMt=eye(Mt);

W2=kron(IJ,W);

W3=kron(W2,IMt); %%公式(12)

W4=conj(W)*(W.');

A=kron(IJ,W4); %%公式(35)中的带括号部分


%------------------------进行子空间估计--------------------------------%



for nos=500:500:5000;  

   for i1=1:Nm

       %------------------产生OFDM符号-----------------------%

      b0=round(rand(1,2*Mt*N*nos));

       %QPSK modulation

       b1=reshape(b0,2,Mt*N*nos).';

       b2=bi2de(b1,2,'left-msb'); %%二进制向十进制转换

       b3=[1+j 1-j -1+j -1-j];

       b=b3(b2+1)/sqrt(2);

       %串并变换

       d1=b(:);

       

       for i=1:nos-J+1

           d4(:,i)=d1((i-1)*N*Mt+1:(i+J-1)*N*Mt);%连取J个符号

       end

       s=W3*d4;

       %信号经过信道

       r1=H*s;

       r=awgn(r1,SNR);

       %对r求自相关矩阵

       Rr=r*r'/(nos-J+1);  

       %特征值分解

       [U,S,V]=svd(Rr);

       %[U,V]=eigs(Rr,(J*Q-L)*Mr-J*N*Mt,'sm');

       %构造C矩阵

       C=zeros((L+1)*Mr,(L+1)*Mr);

       %for k=1:(J*Q-L)*Mr-J*N*Mt

       for k=J*N*Mt+1:(J*Q-L)*Mr

           uk=U(:,k);

           vk1=reshape(uk,Mr,J*Q-L);

           vk=zeros((L+1)*Mr,J*Q);

           vk(1:Mr,:)=[vk1 zeros(Mr,L)];

           for i3=1:L

               vktmp=vk((i3-1)*Mr+1:i3*Mr,:);

               vk(i3*Mr+1:(i3+1)*Mr,:)=[vktmp(:,J*Q) vktmp(:,1:J*Q-1)];

           end

           C=C+vk*A*vk';

       end

% %             vk2=zeros(Mr,2*(J*Q-L));

% %             for i=1:J*Q-L

% %                 vk2(:,(i-1)*2+1)=vk1(:,i);

% %                 vk2(:,i*2)=zeros(Mr,0);

% %             end

% %             vk2=vk2(:,1:2*(J*Q-L)-1);

% %               vk=zeros((L+1)*Mr,J*Q*Mt);  

% %                 for i3=1:L+1

% %                      vk((i3-1)*Mr+1:i3*Mr,i3:i3+2*(J*Q-L)-1)=vk;

% %                 end

% %                 C=C+vk*vk';  

       [UC SC VC]=svd(C);

       %[UC VC]=eigs(C,Mt,'sm');

       hr0=UC(:,(L+1)*Mr-Mt+1:(L+1)*Mr);     %最小的Mt个发射天线对应的特征向量

%         a=lscov(hr0,h);

%         Hr=hr0*a;

       

%         Herr1=h-Hr

%          Herr=Herr+(norm(Herr1)^2/(norm(h)^2));

%         for i4=1:Mt

%             NRMSE(i6,nos/500)=NRMSE(i6,nos/500)+(norm(Herr1(:,i4)))^2/(norm(h(:,i4)))^2;

%         end      

hb_h=zeros(1*Mt);

for i4=1:Mt

   hb_h(i4)=mean(hr0(:,i4)./h(:,i4));  

   hb1(:,i4)=hr0(:,i4)/hb_h(i4);

   NRMSE(i6,nos/500)=sqrt((h(:,i4)-hb1(:,i4))'*(h(:,i4)-hb1(:,i4)))/sqrt(h(:,i4)'*h(:,i4));

end

%        

%             Herr=Herr+sqrt((h-hr0)'*(h-hr0))/sqrt(h'*h);

%        

   end

 NRMSE(i6,nos/500)=sqrt( NRMSE(i6,nos/500)/(Nm*Mt*Mr*(L+1)));

 

end

end

figure(1)

semilogy(500:500:5000,NRMSE(1,:),'-or',500:500:5000,NRMSE(2,:),'-^r');xlabel('nos');ylabel('NMSE');title('The NMSE of the Channel Estimation');grid  

% axis([100 2000 10^-3 10^-1]);

⛄ 运行结果

⛄ 参考文献

[1] 刘玉珍, 闫兴玉. 基于VC的MIMO-OFDM系统的子空间半盲信道估计[J]. 计算机工程与应用, 2014(18).

[2] 兰海燕, 赵旦峰. 基于子空间的OFDM系统半盲信道估计研究[J]. 应用科技, 2007, 34(1):4.

[3] 刘强, 陈西宏, 胡茂凯. OFDM中基于子空间分解的半盲信道估计[J]. 现代电子技术, 2010(3):3.


⛳️ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料



相关文章
|
2月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
126 0
|
2月前
|
算法 机器人 计算机视觉
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
110 0
|
2月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
171 8
|
2月前
|
机器学习/深度学习 编解码 算法
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
162 8
|
2月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
249 0
|
2月前
|
新能源 Java Go
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
126 0
|
2月前
|
机器学习/深度学习 数据采集 测试技术
基于CEEMDAN-VMD-BiLSTM的多变量输入单步时序预测研究(Matlab代码实现)
基于CEEMDAN-VMD-BiLSTM的多变量输入单步时序预测研究(Matlab代码实现)
|
2月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
178 8
|
2月前
|
编解码 运维 算法
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
169 12
|
2月前
|
人工智能 数据可视化 网络性能优化
【顶级SCI复现】虚拟电厂的多时间尺度调度:在考虑储能系统容量衰减的同时,整合发电与多用户负荷的灵活性研究(Matlab代码实现)
【顶级SCI复现】虚拟电厂的多时间尺度调度:在考虑储能系统容量衰减的同时,整合发电与多用户负荷的灵活性研究(Matlab代码实现)
122 9

热门文章

最新文章