📄 find_e_h.m
字号:
%********************************************
%函数功能:求接收符号向量e和仿真信道矩阵h
%函数功能说明:接收从主程序得到的莱斯因子、信噪比和用户数信息,
% 得接收符号向量e和仿真信道矩阵h
%*******************************************
function [h,e]=find_e_h(K,SNR,K_user)
%********************************************
%变量初始化
%********************************************
Lm=144;
P_dB=[0 -1 -9 -10 -15 -20];
Delay=[0,310,710,1090,1730,2510];
Delay=Delay*10^-9;
P_w=10.^(P_dB./10);
sigma2=1/SNR;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%读取文件内容
fidin=fopen('mp0.txt'); % 打开文件
%while ~feof(fidin) % 判断是否为文件末尾
mp0=fgets(fidin); %获取文件内容,mp0 中存放
%**************************
%将路径功率P_w归一化
%************************
p=0;
for i=1:length(P_w)
p=p+P_w(i);
end
Pk=P_w/p;
%*********************************************************************
%定义冲激响应信号的带宽B,窗长W’,将实际的路径功率分化到1/B整数倍的时延点上
%*********************************************************************
B=1.28*10^6;
W=ceil(Delay(length(Delay))*B)+1;
Pn=zeros(1,W);
%n=0;
for i=1:length(Delay)
n=floor(Delay(i)*B);
Pn(n+1)=((n+1)-Delay(i)*B)*P_w(i)+Pn(n+1);
Pn(n+2)=(Delay(i)*B-n)*P_w(i)+Pn(n+2);
end
%*******************************************
%按照幅度服从莱斯分布,相角服从均匀分布,定义h
%*******************************************
h=zeros(K_user,W);
for k=1:K_user
s=Pn*K/(1+K);
sigma2=Pn/(1+K);
x=sqrt(sigma2/2).*randn(1,W)+sqrt(s/2);
y=sqrt(sigma2/2).*randn(1,W)+sqrt(s/2);
h_app=sqrt(x.*x+y.*y);
h_phase=2*pi*rand(1,W);
h(k,:)=h_app.*exp(-2*j*h_phase);
end
h=h';
%********************************************************************
%调用Midamble函数求出每个用户的Midamble码,将每个用户的Midamble码作为
%训练序列,经过与各自信道的卷积,得出响应,并求和,由噪声进一步得出接收信号
%********************************************************************
G=midamble(mp0,16,K_user);
e=zeros(Lm+W-1,1);
for k=1:K_user
e=e+conv(G(:,k),h(:,k));
end
%根据已知的信噪比,求出噪声,再与上面得出的信号响应求和,
noise=sqrt(sigma2)*randn(W,Lm+W-1);
e=e+noise';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -