?? tx3.m
字號(hào):
function [E,G,T,L,Q]=tx3(TS_num,K,c)
Lm=144; %時(shí)隙中綴碼長度144。
P=128; %基本中綴碼長度128。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%初始化及變量賦值部分%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%BER=input('誤比特率的要求BER=');
%TS_num=floor(100/BER/88)+1; %%仿真的時(shí)隙數(shù),以時(shí)隙的最小比特?cái)?shù)88為參考。
TS_interval=136; %給一個(gè)合理的時(shí)隙間隔,使得在仿真的時(shí)間里信道變化可以忽略。
t=TS_num*(864+TS_interval)*675/864*0.000001; %仿真時(shí)間以秒為單位計(jì)算。
%K=zeros(1); %開辟存儲(chǔ)空間以便調(diào)試和性能估計(jì)時(shí)查找參照。
%c=zeros(1); %小區(qū)序號(hào),間接決定了擾碼組(4個(gè))和中綴碼組(4個(gè))序號(hào)。
l=zeros(1); %擾碼的序號(hào)--4個(gè)碼中的第幾個(gè),開辟內(nèi)存空間存以便調(diào)試和性能估計(jì)時(shí)查找參照。
m=zeros(1,128); %基本中綴碼集。
mid_num=zeros(1); %中綴碼的序號(hào)4個(gè)碼中的第幾個(gè),開辟內(nèi)存空間存以便調(diào)試和性能估計(jì)時(shí)查找參照。
%c=input('小區(qū)的序號(hào)(1-32)c=');
mid_num=(c-1)*4; %與小區(qū)序號(hào)相關(guān)的中綴碼組(四個(gè)基本中綴碼)。
l=(c-1)*4+1; %小區(qū)的序號(hào)與之有關(guān)的擾碼組(四個(gè)基本中綴碼)。
x=0; %針對(duì)TS_num個(gè)時(shí)隙desired_k用戶數(shù)據(jù)bit的存放數(shù)組的起始位置。
z=0; %針對(duì)TS_num個(gè)時(shí)隙desired_k用戶時(shí)隙碼片chip的存放數(shù)組的起始位置。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%基本中綴碼%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
m=remidable(mid_num);%找出需要的中綴碼;
L=scramble(l); %找出需要的擾碼;
%K=input('當(dāng)前時(shí)隙激活的用戶數(shù)(<=16)K=');
%desired_k=input('要做性能估計(jì)的用戶(<=K)=');
W=floor(128/K);%由K決定的用戶的無線信道沖激響應(yīng)抽頭數(shù)目W。
m_1=zeros(1,Lm+(K-1)*W); %產(chǎn)生復(fù)中綴碼的中間過程。
M=zeros(K,Lm); %K個(gè)用戶的復(fù)中綴碼集合,每一行為一個(gè)用戶所對(duì)應(yīng)的復(fù)中綴碼。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%擴(kuò)頻碼矩陣%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%if (K<=16) & (K>8) %第一步:由K決定的擴(kuò)頻因子Q的大小選擇。
% Q=16;
%elseif (K<=8) & (K>4) %有待升級(jí)優(yōu)化,根據(jù)擴(kuò)頻樹的使用原則。
% Q=randsrc(1,1,[16,8]);
%elseif (K<=4) & (K>2)
% Q=randsrc(1,1,[16,8,4]);
%elseif (K<=2) & (K>1)
% Q=randsrc(1,1,[16,8,4,2]);
%else
% Q=randsrc(1,1,[16,8,4,2]);
%end
Q=16;
A=[1];T=zeros(Q); %擴(kuò)頻碼矩陣。
data_symbol_num=352*2/Q; %兩部份數(shù)據(jù)段的符號(hào)數(shù)與擴(kuò)頻因子及碼片數(shù)352(*2)的關(guān)系。
data_bit_num=data_symbol_num*2; %2個(gè)比特產(chǎn)生一個(gè)符號(hào)。
E=zeros(K,(864+TS_interval)*TS_num); %記錄了K個(gè)用戶仿真時(shí)間內(nèi)的所有發(fā)送chip。
G=zeros(K,data_bit_num*TS_num); %紀(jì)錄了K個(gè)用戶仿真時(shí)間內(nèi)的所有源bit,初始化的容量以最大的可能bit數(shù)為參考。
for i=1:log2(Q)
A=[A A;
A -A];
end
if Q==1 %第二步:擴(kuò)頻碼矩陣。
C=[1];T=A*C;
elseif Q==2
C=[1;sqrt(-1)];
for j=1:2
T(j,:)=C(j,1).*A(j,:);
end
elseif Q==4
C=[-sqrt(-1);1;sqrt(-1);-1];
for j=1:4
T(j,:)=C(j,1).*A(j,:);
end
elseif Q==8
C=[1;sqrt(-1);sqrt(-1);-1;-sqrt(-1);-1;-sqrt(-1);1];
for j=1:8
T(j,:)=C(j,1).*A(j,:);
end
else
C=[-1;-sqrt(-1);1;1;sqrt(-1);-1;-1;1;-sqrt(-1);sqrt(-1);1;sqrt(-1);-sqrt(-1);-sqrt(-1);sqrt(-1);-1];
for j=1:16
T(j,:)=C(j,1).*A(j,:);
end
end
clear A C;
clear A C;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%當(dāng)前時(shí)隙K個(gè)用戶的復(fù)中綴碼矩陣M%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%通過調(diào)用basic_midamble_codes(mid_num)得到當(dāng)前時(shí)隙user_num個(gè)用戶應(yīng)使用的基本中綴碼集mp。
%由基本中綴碼集導(dǎo)出K個(gè)用戶的中綴碼集。
for n=1:Lm+(K-1)*W
if n<=P
m_1(n)=m(n);
else
m_1(n)=m_1(n-P);
end
end
%每個(gè)用戶的復(fù)中綴碼的分配情況。第K個(gè)用戶使用m_1(1)到m_1(144),第一個(gè)用戶使用到m(end)。
for n=1:K
for j=1:Lm
M(n,j)=(sqrt(-1))^j*m_1(j+(K-n)*W);
end
end
clear mp m m_1 n;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% TS_num個(gè)時(shí)隙的循環(huán) %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for f=1:TS_num
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 循環(huán)K次產(chǎn)生K個(gè)用戶的當(dāng)前時(shí)隙 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for k=1:K %產(chǎn)生一個(gè)時(shí)隙激活的K個(gè)不同用戶。
B=zeros(1,864); %初始化存放當(dāng)前時(shí)隙當(dāng)前用戶的數(shù)組。
S=zeros(1,704);
D_1=zeros(1,352);
D_2=zeros(1,352);
symbol=zeros(1,data_symbol_num);
data= randsrc(1,data_bit_num,[0 1]);%比特到復(fù)數(shù)符號(hào)的映射:(00 +j,01 +1,10 -1,11 -j)。///////改動(dòng)11月18日
for n=1:2:data_bit_num
if (data(n)==data(n+1))
if (data(n)==0)
symbol((n-1)/2+1)=+sqrt(-1);
else
symbol((n-1)/2+1)=-sqrt(-1);
end
elseif (data(n)==0)
symbol((n-1)/2+1)=+1;
else
symbol((n-1)/2+1)=-1;
end
end
%%%擴(kuò)頻部分
for n=1:data_symbol_num
for j=1:Q
S((n-1)*Q+j)=symbol(n)*T(Q-k+1,j); %每個(gè)符號(hào)乘以擴(kuò)頻碼。
end
end
clear symbol n;
%%%查找擾碼。
v=16; %擾碼的長度。如果704/v不為整數(shù)則需改動(dòng)程序!!!!
for n=1:352/v
for j=1:v
D_1((n-1)*v+j)=S((n-1)*v+j)*L(j); %以碼片為基本單位對(duì)齊進(jìn)行擾碼。
end
end
for n=352/v+1:704/v
for j=1:v
D_2((n-1)*v+j-352)=S((n-1)*v+j)*L(j); %以碼片為基本單位對(duì)齊進(jìn)行擾碼。S(n)由spreading.m得到。
end
end
clear S n;
%%%第k個(gè)用戶的時(shí)隙比特。
for n=1:864+TS_interval
if n<=352
B(n)=D_1(n); %第一部分?jǐn)?shù)據(jù),可以考慮用矩陣D_1表示。
elseif (n>352) & (n<=496)
B(n)=M(k,n-352); %第k個(gè)用戶的復(fù)中綴碼。:)
elseif (n>496) & (n<=848)
B(n)=D_2(n-496); %第二部分?jǐn)?shù)據(jù),可以考慮用矩陣D_2表示。
else
B(n)=0; %保護(hù)間隔。 :)
end
end
E(k,x+1:x+864+TS_interval)=B; %第k行存放第k個(gè)用戶TS_num*864個(gè)chip。
G(k,z+1:z+data_bit_num)=data; %第k行存放第k個(gè)用戶TS_num*data_bit_num個(gè)data(source)。
clear B data n;
end %一個(gè)時(shí)隙K個(gè)用戶循環(huán)完畢。
x=x+864+TS_interval; %%下個(gè)時(shí)隙E存放起始位置下標(biāo)變量。
z=z+data_bit_num; %%下個(gè)時(shí)隙G存放起始位置下標(biāo)變量
end
y1=E(1,:);y2=G(1,:);
clear W;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -