?? mul.m
字號:
function[p1,p,jxg,mmse]=mul(snr_in_dB)
Lc=31;
snr=10^(snr_in_dB/10);
sgma=1;
Eb=sgma^2*snr;
E_chip=Eb/Lc;
A=[sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb)];
N=10000;
K=length(A);
connections1=[1 0 1 0 0];
connections2=[1 1 1 0 1];
gold_seq=get_gold(connections1,connections2);
user1code=(1/sqrt(Lc))*gold_seq(:,31);
p1num_of_err=0; %錯誤碼數先賦0
pnum_of_err=0;
jxgnum_of_err=0;
mmsenum_of_err=0;
S=zeros(31,K+1); %定義擴頻碼矩陣
S(:,K+1)=user1code;
for i=1:N,
b=zeros(K+1,1); %定義發送端發送的信息列
y=zeros(K+1,1); %定義經過匹配濾波器組相關處理后的信息列
% 產生新的數據位
temp=rand;
if (temp<0.5),
data=-1;
else
data=1;
end;
% 發送信號為
trans_sig=sqrt(Eb)*data*user1code; %與公式相比sqrt(Eb)相當于Ak data相當于bk user1code為sk sqrt(Eb)認為是期望用戶,
noise=sgma*randn(Lc,1); %產生一列31行的隨機噪聲
% 產生K個干擾用戶,dat是干擾用戶數據,真正的用戶為K+1個,期望用戶直接定義為sqrt(Eb)
inter_sig=zeros(31,1);
for k=1:K,
temp=rand;
if (temp<0.5),
dat=-1;
else
dat=1;
end;
inter_sig=inter_sig+A(k)*dat*(1/sqrt(Lc))*gold_seq(:,k); %干擾用戶數據的擴頻碼放在1到第K列,期望用戶的在第31列
S(:,k)=(1/sqrt(Lc))*gold_seq(:,k);
b(k)=dat;
end;
b(K+1)=data;
R=corrcoef(S); %擴頻碼的互相關矩陣
%接收信號
rec_sig=trans_sig+noise+inter_sig; %接收到的數據是31x1位的
% 從接收信號中產生判決變量
%單用戶
y1=rec_sig'*S(:,31);
%多用戶
for k=1:K+1,
y(k)=rec_sig'*S(:,k); %求出經過匹配濾波器組相關處理后的信息列
end
%單用戶
dec1=sign(y1);
if (dec1<=0)
bit1=-1;
else
bit1=1;
end;
if(bit1~=data),
num_of_err1=num_of_err1+1;
end;
%傳統多用戶
dec=sign(y(k));
if (dec<=0)
bit=-1;
else
bit=1;
end;
if(bit~=data),
num_of_err=num_of_err+1;
end;
% 解相關
M=inv(R)*y;
decjxg=sign(M(K+1));
if (decjxg<=0)
bitjxg=-1;
else
bitjxg=1;
end;
if (bitjxg~= data),
jxgnum_of_err=jxgnum_of_err+1;
end;
%MMSE
mmse=inv(R+inv(R)*inv(R));
decmmse=sign(M(K+1));
if (decmmse<=0);
bitmmse=-1;
else
bitmmse=-1;
end;
if (bitmmse~= data),
mmsenum_of_err=mmsenum_of_err+1;
end;
end; % 對應for i=1:N,
p1=num_of_err1/N;
p=num_of_err/N;
jxg=jxgnum_of_err/N;
mmse=mmsenum_of_err/N;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -