?? jce_4part.m
字號:
clc
clear all;
users=[4 2 4 8];
c1=clock
load ('D:\4M4K100slotscase3.mat')
for U_no=1:1
K=users(U_no)%用戶數(shù)
M=4;%天線數(shù)
TS_num=10;%時隙數(shù)
cell_num=2;%小區(qū)序號
Lm=144;
casething=3;
%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@可以改變
switch casething
case 1
paths=2;
delay_tapscase=[0 4]; % timedelay of multipath
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%case1
case 2
paths=3;
delay_tapscase=[0 4 15];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%case2
case 3
paths=4;
delay_tapscase=[0 1 2 3];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%case3
end
W=max(delay_tapscase)+1;
T_max=W-1;
[chip_tran,bit_source,w4,scram,Q]=tx3(TS_num,K,cell_num);%chip_tran矩陣是發(fā)送端發(fā)出的chip序列,bit_source是用戶的比特序列,w4是用戶的擴頻碼矩陣,
%scram是用戶的擾碼矩陣,Q是擴頻因子,tx1的第一個函數(shù)是時隙數(shù),第二個函數(shù)是用戶數(shù),第三個是小區(qū)數(shù);
%以下程序產(chǎn)生瑞利衰減信道對每個用戶的每一徑的平均衰減,以及進行聯(lián)合檢測的用戶數(shù)據(jù)
N=352/Q;%N是每段數(shù)據(jù)的字符數(shù)
N_1=2*N;%N1是兩段數(shù)據(jù)的字符總和
chip_1=chip_tran(:,1:1000);%
%%%%%%%%%%%%%%%%%%%%%產(chǎn)生信道估計用的G矩陣%%%%%%%%%%%
%%%%%%%截取K個用戶的中綴碼放入G_1中%%%%%%
for i=1:K
G_1(i,:)=chip_1(i,353:496);%%%%維數(shù):【K,144】
end
clear i;
%%%%%%%%%%%%%每個用戶因為多徑效應(yīng),中綴碼也有W徑,共K個用戶%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:K
G_2=G_1(i,:).';%%%取出第k個用戶的中綴碼轉(zhuǎn)置放入G_2中,以備后用
for j=1:W %%%%%%%%%%%%%%%產(chǎn)生第k個用戶的W個信道沖擊響應(yīng)的中綴碼矩陣
G_3(:,j)=G_2(W-j+1:Lm-j+1);
end
G_4(:,(i-1)*W+1:i*W)=G_3;%%%%%將第k個用戶的中綴碼多徑矩陣,放入G中
end %%%%%%%結(jié)束K個用戶循環(huán),維數(shù)是:【(L-W+1),KW】
G=KRON(eye(M),G_4); %%%%維數(shù)是:【M(L-W+1),MKW】
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
H_ZF=inv(G'*G)*G';%%%% MKW,M(Lm+W-1)
clear G_1 G_2 G_3 G_4 G;
%%%%%%%%%%%%%%%%%%%%%產(chǎn)生2個信道估計用的G矩陣%%%%%%%%%%%
%%%%%%%截取K個用戶的中綴碼放入G_1中%%%%%%
for i=1:K
G_1(i,:)=chip_1(i,353:424);%%%%維數(shù):【K,144】
end
clear i;
%%%%%%%%%%%%%每個用戶因為多徑效應(yīng),中綴碼也有W徑,共K個用戶%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:K
G_2=G_1(i,:).';%%%取出第k個用戶的中綴碼轉(zhuǎn)置放入G_2中,以備后用
for j=1:W %%%%%%%%%%%%%%%產(chǎn)生第k個用戶的W個信道沖擊響應(yīng)的中綴碼矩陣
G_3(:,j)=G_2(W-j+1:72-j+1);
end
G_4(:,(i-1)*W+1:i*W)=G_3;%%%%%將第k個用戶的中綴碼多徑矩陣,放入G中
end %%%%%%%結(jié)束K個用戶循環(huán),維數(shù)是:【(L-W+1),KW】
G=KRON(eye(M),G_4); %%%%維數(shù)是:【M(L-W+1),MKW】
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
H_ZF_1=inv(G'*G)*G';%%%% MKW,M(Lm+W-1)
clear G_1 G_2 G_3 G_4 G;
%%%%%%%截取K個用戶的中綴碼放入G_1中%%%%%%
for i=1:K
G_1(i,:)=chip_1(i,425:496);%%%%維數(shù):【K,144】
end
clear i;
%%%%%%%%%%%%%每個用戶因為多徑效應(yīng),中綴碼也有W徑,共K個用戶%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:K
G_2=G_1(i,:).';%%%取出第k個用戶的中綴碼轉(zhuǎn)置放入G_2中,以備后用
for j=1:W %%%%%%%%%%%%%%%產(chǎn)生第k個用戶的W個信道沖擊響應(yīng)的中綴碼矩陣
G_3(:,j)=G_2(W-j+1:72-j+1);
end
G_4(:,(i-1)*W+1:i*W)=G_3;%%%%%將第k個用戶的中綴碼多徑矩陣,放入G中
end %%%%%%%結(jié)束K個用戶循環(huán),維數(shù)是:【(L-W+1),KW】
G=KRON(eye(M),G_4); %%%%維數(shù)是:【M(L-W+1),MKW】
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
H_ZF_2=inv(G'*G)*G';%%%% MKW,M(72+W-1)
clear G_1 G_2 G_3 G_4 G;
clear chip_1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%% TS_num個時隙的循環(huán)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for p=1:TS_num
p
H_user=zeros(K*W,1000,M);
H_user(:,1:864,:)=H_all(:,(p-1)*864+1:p*864,:);
sinr=[5];
chip_1=chip_tran(:,(p-1)*1000+1:p*1000);%%%%%%調(diào)用不同時隙的符號序列,維數(shù)是[K,1000]
bit_source_1=bit_source(:,(p-1)*2*N_1+1:p*2*N_1);%%%%調(diào)用不同時隙的數(shù)據(jù)比特
H_multi=H_user(1:K*W,:,:);
H_delay=zeros(W,1000+W-1);
sum_channel=zeros(K*W,M);
r_delay=zeros(K*W,1000+W-1,M);
for m=1:M
H_page=H_multi(:,:,m);%%%【K×W,1000】
sum_channel(:,m)=sum(H_page,2);%對矩陣的每一行求和,即對每一徑進行求和,列向量,K*W,M
for k=1:K
H_single=H_multi((k-1)*W+1:k*W,:,m);
for w=1:W
A_delay(w,w:1000+w-1)=chip_1(k,:); % A_delay是每一徑經(jīng)延遲后的K個用戶的信號矩陣,對用戶各徑數(shù)據(jù)產(chǎn)生延遲,
%最大延遲為W-1(已把τ(max)歸一化為chip)
H_delay(w,w:1000+w-1)=H_single(w,:);
end
r_delay((k-1)*W+1:k*W,:,m)=A_delay.*H_delay;
end
end
h=sum_channel/1000;%%%維數(shù)是【K*W,M】,用于構(gòu)造系統(tǒng)矩陣
h=transpose(h);
%%%%%通過瑞利信道之后,再通過高斯信道
for n=1:length(sinr)
for m=1:M
B(m,:)=sum(r_delay(:,:,m));%%%%一根天線上所有用戶的數(shù)據(jù)
end
B_noise=awgn(B,sinr(n),'measured');%對每個天線上接收到的數(shù)據(jù)加高斯白噪聲
%對第p個時隙進行聯(lián)合檢測,程序知道QPSK解調(diào)前才結(jié)束;產(chǎn)生D_symbol矩陣
data_1=B_noise(:,1:352+T_max);%去復(fù)用,得到第一段數(shù)據(jù)
data_2=B_noise(:,497:848+T_max);%去復(fù)用,得到第二段數(shù)據(jù)
%%%% 分四段來做 %%%%
% chip_qian_1=chip_end(:,1:176+W-1);
% chip_qian_2=chip_end(:,177:352+W-1);
% chip_qian_3=chip_end(:,497:672+W-1);
% chip_qian_4=chip_end(:,673:848+W-1);
%%%%%%%%%%%%%%%%%%%中綴碼的截取,前面W-1個不要%%%%%%%%%%%%%%
midamble=B_noise(:,352+T_max+1:352+Lm).';% 混合多徑中綴碼數(shù)據(jù),維數(shù)是[(L-W+1),M]
x_midamble=midamble(:);
H_est2=H_ZF*x_midamble;%%% MK*W,1
%%%%% midi碼分2段來做信道估計
midamble_1=B_noise(:,352+T_max+1:352+72).';%
x_midamble_1=midamble_1(:);
midamble_2=B_noise(:,424+T_max+1:424+72).';%
x_midamble_2=midamble_2(:);
H_est_1=H_ZF_1*x_midamble_1;%%% { [MKW,M(72+W-1)] , [M(72+W-1),1] }
H_est_2=H_ZF_2*x_midamble_2;%%% MK*W,1
%%% 利用估計中綴碼得到的2段信道估計得值,線性延升到數(shù)據(jù)得2段上
% slope=(H_est_2-H_est_1)/72;
% slope_r=real(slope);
% slope_i=imag(slope);
% location_1=-248;
% location_2=320;
% H_1_r=real(H_est_1)+slope_r*location_1;
% H_1_i=imag(H_est_1)+slope_i*location_1;
% H_2_r=real(H_est_1)+slope_r*location_2;
% H_2_i=imag(H_est_1)+slope_i*location_2;
% H_1=H_1_r+sqrt(-1)*H_1_i;
% H_2=H_2_r+sqrt(-1)*H_2_i;
for i=1:M
H_est1(i,:)=H_est2((i-1)*K*W+1:i*K*W).';
H_est_11(i,:)=H_est_1((i-1)*K*W+1:i*K*W).';
H_est_22(i,:)=H_est_2((i-1)*K*W+1:i*K*W).';
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%下面的程序產(chǎn)生系統(tǒng)矩陣
%先進行信道估計和擴頻碼的卷積
con1=W+Q-1;
for m=1:M
for k=1:K
u=H_est_11(m,(k-1)*W+1:k*W);
v=w4(Q-k+1,:).*scram;
b(m,(k-1)*con1+1:k*con1)=conv(u,v);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -