📄 threshold_test.m
字号:
%% Initialization
function [BER Opt_Threshold_Indicate]=Threshold_test(Q,L,N_bit,N_user,SNRindB)
% Q=8; % Number of MFSK levels (Hopping Frequencies)
% L=4; % Number of hops per symbol
%
% N_bit=3000;
%
N_sym=N_bit/log2(Q);
BER=[];
%
% % for SNRindB=1:10;
% SNRindB=10;
% for snr=1:length(SNRindB)
EbNo=10.^(SNRindB./10);
EsNo=log2(Q).*EbNo;
sigma=sqrt(L./(2*EsNo));
% nI=randn(N_user,N_sym*L);
% nQ=randn(N_user,N_sym*L);
t_length=0;
for threshold=0:0.02:1
t_length=t_length+1;
clear A;
% optimum address
if Q==8
A(1,:) = [0 0 0 0 0 0 0];
A(2,:) = [1 2 4 3 6 7 5];
A(3,:) = [2 4 3 6 7 5 1];
A(4,:) = [3 6 7 5 1 2 4];
A(5,:) = [4 3 6 7 5 1 2];
A(6,:) = [5 1 2 4 3 6 7];
A(7,:) = [6 7 5 1 2 4 3];
A(8,:) = [7 5 1 2 4 3 6];
end;
if Q==16
A= [0 0 0 0 0 0;
1 2 4 8 3 6;
2 4 8 3 6 12;
3 6 12 11 5 10;
4 8 3 6 12 11;
5 10 7 14 15 13;
6 12 11 5 10 7;
7 14 15 13 9 1;
8 3 6 12 11 5;
9 1 2 4 8 3;
10 7 14 15 13 9;
11 5 10 7 14 15;
12 11 5 10 7 14;
13 9 1 2 4 8;
14 15 13 9 1 2;
15 13 9 1 2 4;];
end;
if Q==32
A= [0 0 0 0 0 0;
1 2 4 8 16 5;
2 4 8 16 5 10;
3 6 12 24 21 15;
4 8 16 5 10 20;
5 10 20 13 26 17;
6 12 24 21 15 30;
7 14 28 29 31 27;
8 16 5 10 20 13;
9 18 1 2 4 8;
10 20 13 26 17 7;
11 22 9 18 1 2;
12 24 21 15 30 25;
13 26 17 7 14 28;
14 28 29 31 27 19;
15 30 25 23 11 22;
16 5 10 20 13 26;
17 7 14 28 29 31;
18 1 2 4 8 16;
19 3 6 12 24 21;
20 13 26 17 7 14;
21 15 30 25 23 11;
22 9 18 1 2 4;
23 11 22 9 18 1;
24 21 15 30 25 23;
25 23 11 22 9 18;
26 17 7 14 28 29;
27 19 3 6 12 24;
28 29 31 27 19 3;
29 31 27 19 3 6;
30 25 23 11 22 9;
31 27 19 3 6 12;];
end
if Q==64
A= [0 0 0 0 0 0;
1 2 4 8 16 32;
2 4 8 16 32 3;
3 6 12 24 48 35;
4 8 16 32 3 6;
5 10 20 40 19 38;
6 12 24 48 35 5;
7 14 28 56 51 37;
8 16 32 3 6 12;
9 18 36 11 22 44;
10 20 40 19 38 15;
11 22 44 27 54 47;
12 24 48 35 5 10;
13 26 52 43 21 42;
14 28 56 51 37 9;
15 30 60 59 53 41;
16 32 3 6 12 24;
17 34 7 14 28 56;
18 36 11 22 44 27;
19 38 15 30 60 59;
20 40 19 38 15 30;
21 42 23 46 31 62;
22 44 27 54 47 29;
23 46 31 62 63 61;
24 48 35 5 10 20;
25 50 39 13 26 52;
26 52 43 21 42 23;
27 54 47 29 58 55;
28 56 51 37 9 18;
29 58 55 45 25 50;
30 60 59 53 41 17;
31 62 63 61 57 49;
32 3 6 12 24 48;
33 1 2 4 8 16;
34 7 14 28 56 51;
35 5 10 20 40 19;
36 11 22 44 27 54;
37 9 18 36 11 22;
38 15 30 60 59 53;
39 13 26 52 43 21;
40 19 38 15 30 60;
41 17 34 7 14 28;
42 23 46 31 62 63;
43 21 42 23 46 31;
44 27 54 47 29 58;
45 25 50 39 13 26;
46 31 62 63 61 57;
47 29 58 55 45 25;
48 35 5 10 20 40;
49 33 1 2 4 8;
50 39 13 26 52 43;
51 37 9 18 36 11;
52 43 21 42 23 46;
53 41 17 34 7 14;
54 47 29 58 55 45;
55 45 25 50 39 13;
56 51 37 9 18 36;
57 49 33 1 2 4;
58 55 45 25 50 39;
59 53 41 17 34 7;
60 59 53 41 17 34;
61 57 49 33 1 2;
62 63 61 57 49 33;
63 61 57 49 33 1;];
end
A = A(1:N_user,1:L);
%% Address Matrix Generating
X_rec=[];
% Random address & Bits Generation
for m=1:N_user
% A(m,:) = round(rand(1,L)*(Q-1));
B(m,:) = BitStreamGen(N_bit);
X(m,:) = BitStreamToSymbol(B(m,:),Q); % Mapping
end
%%
% for snr=1:length(SNRindB)
for n=1:N_sym
% Address Assigning Y=X+A
Y=FFH(X(:,n),Q,A);
% M=zeros(Q,L);
M=[];
for i=1:N_user
M(:,:,i)=zeros(Q,L);
end
% Generate R Matrix
for i=1:L
for j=1:N_user
M(Y(j,i)+1,i,j)=1;
end
end
Chip=sum(M,3);
% R=M1+M2+M3+M4+M5+M6+M7+M8;
%% Signal Pass Though AWGN Channel
r=[];
for i=1:Q
for j=1:L
nI=randn(1);
nQ=randn(1);
if Chip(i,j)==0
r(i,j)=(nI*sigma).^2+(nQ*sigma).^2;
else
phi=2*pi*rand(1,Chip(i,j));
r(i,j)=(sum(cos(phi))+nI*sigma).^2+(sum(sin(phi))+nQ*sigma).^2;
end
end
end
R=r;
% R((n-1)*L+1:n*L,snr)=r;
% end
%% Detection
for i=1:N_user
Z(:,:,i)=zeros(Q,L);
end
for j=1:L
F=find(R(:,j)>threshold)-1;
c=[];
if length(F)>0
for i=1:N_user
c(i,:)=deFFH(F,A(i,j),Q)+1;
end
else
c=[];
end
for i=1:N_user
if length(c)>0
Z(c(i,:),j,i)=1;
else
Z(:,j,i)=zeros(1,Q);
end
end
end
sumz=[];
for i=1:N_user
sumz(i,:)=sum(Z(:,:,i),2);
end
D=[];
for i=1:N_user
% D(i,:)=find(sumz(i,:)==max(sumz(i,:)));
D_temp=find(sumz(i,:)==max(sumz(i,:)));
D_temp_length=length(D_temp);
if D_temp_length<Q
ZERO=zeros(1,Q-D_temp_length);
D_temp=[D_temp ZERO];
end
D(i,:)=D_temp;
end
D_length=[];
for i=1:N_user
D_length(i)=length(find(D(i,:)>0));
end
for i=1:N_user
X_rec(i,n)=D(i,ceil(rand(1)*D_length(i)))-1;
end
end
%% Received BitStream
B_rec=SymbolToBitStream(X_rec,Q);
%% BER Calculation
BER=[BER sum(sum(B_rec~=B))/N_user/N_bit]
end
Opt_Threshold_Indicate=find(BER==min(BER));
% end
% figure(1);
%
% % semilogy(1:N_user,BER,'o');
% semilogy(1:t_length,BER,':');
% hold on;
% end
% hold off;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -