?? send.m
字號:
function result = send(input,snr);
% Let the data symbol through the channel with JD in the receive side.
% Spreading, frame, channel, channel estimate, JD, despread,deframe.
% Note that in this function, many parameters should have been saved in
% the global variable 'sim_consts'.
global sim_consts;
cNumber = sim_consts.cNumber;
tsNumber = sim_consts.tsNumber;
ka=sim_consts.ka;
w = sim_consts.W ;
sim_consts.gu = zeros(ka,w);
result = [];
% s = 2*randint(1,44*cNumber*tsNumber)-1 + i * (2*randint(1,44*cNumber*tsNumber)-1);
% snr = 2 ;
s= input.';
for tsIdx = 1:tsNumber
ss = s((tsIdx-1)*cNumber*44+1:tsIdx*cNumber*44);
for kk = 1:cNumber
sc(kk,:) = ss((kk-1)*44+1:kk*44);
end
if sim_consts.cDisturb == 1
for kk = cNumber+1:sim_consts.cAvailable
sc(kk,:) = 2*randint(1,44)-1 + i * (2*randint(1,44)-1);
end
end
sp = zeros(cNumber,864);
for kk = 1:size(sc,1)
temp = sc(kk,:).'*ovsf(kk);
for idx = 1:22
sp(kk,(idx-1)*16+1:idx*16) = temp(idx,:);
end
for idx = 23:44
sp(kk,(idx-23)*16+1+496:(idx-22)*16+496) = temp(idx,:);
end
end
send((tsIdx-1)*864+1:tsIdx*864) = sum(sp)';
send((tsIdx-1)*864+353:(tsIdx-1)*864+480) = cNumber*midamble_1';
end
for kk = 1:ka
sim_consts.hsig(kk, :) = Rayleigh_Doppler_multiPath(...
sim_consts.fc, ...
sim_consts.v, ...
sim_consts.startT, ...
sim_consts.endT, ...
sim_consts.deltaT, ...
sim_consts.chipRate, ...
sim_consts.nsdelay, ...
sim_consts.averagePower ); % child function , type 'help Rayleigh_Doppler_multiPath' for detail
end
for idx = 1:ka
tt(idx,:) = send.*abs(sim_consts.hsig(idx,:));
for tsIdx = 1:tsNumber
power=0;
for kk=1:864
tempp=tt(idx,(tsIdx-1)*864+kk);
power=power+tempp*tempp';
end;
power_s = power/864;
tempp=10^(snr/10);
sigma=sqrt(power_s/tempp);
tt(idx,(tsIdx-1)*864+1:tsIdx*864) = tt(idx,(tsIdx-1)*864+1:tsIdx*864) + normrnd(0,sigma,1,864) + j*normrnd(0,sigma,1,864);
end
end
a_1 = a_mid_1;
b_1 = inv(a_1'*a_1)*a_1';
for tsIdx = 1:tsNumber
for idx = 1:ka
t(idx,:) = tt(idx,(tsIdx-1)*864+1:tsIdx*864);
end
for idx = 1:ka
rm(idx,:) = t(idx,353:(480+w-1));
end
ry1 = zeros(ka,352+w-1);
for idx = 1:ka
ry1(idx,:)=t(idx,1:352+w-1);
end
y1 = [];
for idx = 1:ka
y1 = [y1 ry1(idx,:)];
end
y1 = y1';
ry2 = zeros(ka,352+w-1);
for idx = 1:ka
ry2(idx,:)=t(idx,497:848+w-1);
end
y2 = [];
for idx = 1:ka
y2 = [y2 ry2(idx,:)];
end
y2 = y2';
for idx = 1:ka
sim_consts.gu(idx,:)=(b_1*rm(idx,:)')';
end
a= A_gen_1;
h=a'*a;
digh=diag(diag(h));
dighinv=inv(digh);
mt=chol(h);
hinv=inv(mt);
htinv=inv(mt');
s_zf1=hinv*htinv*digh*dighinv*a'*y1;
s_zf2=hinv*htinv*digh*dighinv*a'*y2;
rs = zeros(cNumber,44);
for kk = 1:22
for ii = 1:cNumber
rs(ii,kk) = s_zf1(cNumber*(kk-1)+ii);
rs(ii,kk+22) = s_zf2(cNumber*(kk-1)+ii);
end
end
for kk = 1:cNumber
result = [result rs(kk,:)];
end
clear t idx rm ry1 y1 ry2 y2 a h mt digh dighinv hinv htinv s_zf1 s_zf2 rs kk ii ;
end
result = 2*(real(result)>0)-1 + j*(2*(imag(result)>0)-1);
% sum((s-result)~=0)/size(s,2)
clear ka snr sp1 sp2 sp send sigma idx ss sc tt tsIdx temp ...
t rm ry1 ry2 a_1 b_1 a w h digh dighinv mt hinv htinv s_zf1...
rs1 rs2 ddss i kk power power_s s1 s2 x y1 y2 s_zf2 tempp cNumber tsNumber;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -