function test3()
%constants
MaxLongTime=5*60*60;% 5 hours as 18000 samples
MaxChanals=10;
Efficiency=0.50;
MinUsingTime=30;
MaxUsingTime=5*60;
%%%%%%%%%%%%%%%%%%%%%%%% Step1 get OriginalSignals and SUSignals %%%%%%%%%%%%%%%%%%%%%%%%
OriginalSignals = MakingSignals(MaxLongTime, MaxChanals, Efficiency, MinUsingTime, MaxUsingTime);
OriginalEfficiency=sum(sum(OriginalSignals))/(MaxLongTime*MaxChanals);
SUSignals = MakingSignals(MaxLongTime, MaxChanals, 1-Efficiency, MinUsingTime, MaxUsingTime);%we need send
SUEfficiency=sum(sum(OriginalSignals))/(MaxLongTime*MaxChanals);
%%%%%%%%%%%%%%%%%%%%%%%% Step2 get DiscoveredSignals, SSOHSignals %%%%%%%%%%%%%%%%%%%%%%%%
%constants
SleepinTime=10;
MinFreeTime=MinUsingTime*(1-Efficiency)/Efficiency;
MaxFreeTime=MaxUsingTime*(1-Efficiency)/Efficiency;
MaxPDFSize=max(MaxUsingTime,MaxFreeTime);
%init
ObservedSignals=[]; ObservedSignals (1:MaxLongTime,1:MaxChanals)=0;%1 SU send in the channels, otherwise 0.
DiscoveredSignals=[]; DiscoveredSignals (1:MaxLongTime,1:MaxChanals)=0;%1 SU send in the channels, otherwise 0.
SSOHSignals=[]; SSOHSignals (1:MaxLongTime,1:MaxChanals)=0;%1 SU stop current sending (waiting) because any other SU or same SU need Sensing, otherwise 0.
SendingPointer=[]; SendingPointer (1:MaxChanals)=1;
Tis=[]; Tis (1:MaxChanals)=1;
Tps=[]; Tps (1:MaxChanals)=max(MaxChanals+1,min(MinUsingTime,MinFreeTime));
Us=[]; Us (1:MaxChanals)=0;
pdfOn=[]; pdfOn (1:MaxPDFSize,1:MaxChanals)=0;
pdfOff=[]; pdfOff (1:MaxPDFSize,1:MaxChanals)=0;
cdfOn=[]; cdfOn (1:MaxPDFSize,1:MaxChanals)=0;
cdfOff=[]; cdfOff (1:MaxPDFSize,1:MaxChanals)=0;
PreviousSensingState=[];PreviousSensingState(1:MaxChanals)=0;
LastSensingState=[]; LastSensingState (1:MaxChanals)=0;
DelayCounter=[]; DelayCounter (1:MaxChanals)=0;
TpsCounter=[]; TpsCounter (1:MaxChanals)=0;
TOffCounter=[]; TOffCounter (1:MaxChanals)=0;
TOnCounter=[]; TOnCounter (1:MaxChanals)=0;
SleepingCounter=0;
PacketsToSend=[];
IdleChannels=[];
for t=1:MaxLongTime
%%%%%%%%%%%%%%%% refresh procces begin %%%%%%%%%%%%%%%%
debug_step=1;
for c=1:MaxChanals
if LastSensingState(c)==0
TOffCounter(c)=TOffCounter(c)+1;%change TOff counter to refresh pdfOff.
if PreviousSensingState(c)==1 %end of TOn
%refresh pdfOn and resit TOn counter.
if TOnCounter(c)>0
Xon=min(TOnCounter(c),MaxPDFSize);
pdfOn(Xon,c)=pdfOn(Xon,c)+1;
cdfOn(Xon:MaxPDFSize,c)=cdfOn(Xon:MaxPDFSize,c)+1;
TOnCounter(c)=0;
end;
end;
else
ObservedSignals(t,c)=1;% PU On (Channel is not free)
Us(c)=Us(c)+1;%refresh Us.
TOnCounter(c) =TOnCounter(c) +1;%change TOn counter to refresh pdfOn.
if PreviousSensingState(c)==0 %end of TOff
%refresh pdfOff and resit TOff counter.
if TOffCounter(c)>0
Xoff=min(TOffCounter(c),MaxPDFSize);
pdfOff(Xoff,c)=pdfOff(Xoff,c)+1;
cdfOff(Xoff:MaxPDFSize,c)=cdfOff(Xoff:MaxPDFSize,c)+1;
TOffCounter(c)=0;
end;
end;
end;
% Change Channel Delay counter if SU in Delay time
if DelayCounter(c)>0 DelayCounter(c)=DelayCounter(c)-1;end;
% Change Channel Tp counter
TpsCounter(c)=TpsCounter(c)-1;
%copy LastSensingState
PreviousSensingState(c)=LastSensingState(c);
end;
%%%%%%%%%%%%%%%% refresh procces end %%%%%%%%%%%%%%%%
debug_step=2;
if SleepingCounter>0
SleepingCounter=SleepingCounter-1;
continue;
end;
if size(PacketsToSend,2)==0
%get new SU Packets
for c=1:MaxChanals
if SUSignals(SendingPointer(c),c)==0
if SendingPointer(c)<t
SendingPointer(c)=SendingPointer(c)+1;
end;
else
PacketsToSend=[PacketsToSend c];
end;
end;
if size(PacketsToSend,2)==0%There is no a packet to be send/received
continue;
end;
end;
debug_step=3;
if size(IdleChannels,2)==0
%Sense the channels in an ascending order acording to their utilization;
[NotUsed ChanelOrder]=sort(Us);
IdleChannels=[];
for co=1:MaxChanals c=ChanelOrder(co);
DelayCounter(:)=DelayCounter(:)+Tis(c);%at sensing delay SU Ti second to stop any SU
if OriginalSignals(t,c)==0%An idle channel found
IdleChannels=[IdleChannels c];
LastSensingState(c)=0;%PU Off
else
LastSensingState(c)=1;%PU On
end;
if size(IdleChannels,2)>=size(PacketsToSend,2)%Idle Channels enough
break;
end;
end;
%Sleep for SleepinTime second
if size(IdleChannels,2)==0
SleepingCounter=SleepinTime;
continue;
end;
end;
debug_step=4;
%Transmit/Receive
N=size(IdleChannels,2);
for ic=1:N ric=N-ic+1; c=IdleChannels(ric);
if DelayCounter(c)>0
SSOHSignals(t,c)=1;%SU Delay
else
DiscoveredSignals(t,c)=1;%SU Send Packet
SendingPointer(PacketsToSend(1))=SendingPointer(PacketsToSend(1))+1;
PacketsToSend(1)=[]; %remove Packet from beginig of Queue
IdleChannels(ric)=[];%remove IdleChannel from ending of Queue
end;
end;
debug_step=5;
%Sense the channels periodically
for c=1:MaxChanals
if TpsCounter(c)<=0%check Tp Ending for any Channel
%sensing
LastSensingState(c)=OriginalSignals(t,c);
TpsCounter(c)=Tps(c);% reset Channel Tp counter
end;
end;
%Estimate channels parameters
%Adapt sensing period for each channel
end;
UOPP1Error=0;UOPP0Error=0;ObservingImage=[];ObservingImage(1:MaxChanals,1:MaxLongTime,1:3)=uint8(0);
for t=1:MaxLongTime
for c=1:MaxChanals
if OriginalSignals(t,c)==0
if ObservedSignals(t,c)==0
ObservingImage(c,t,:)=[ 0 0 0];%no error PU Off
else
ObservingImage(c,t,:)=[ 0 0 255];%error UOPP1 opportunities existing cannot discovered.
UOPP1Error=UOPP1Error+1;
end;
else
if ObservedSignals(t,c)==0
ObservingImage(c,t,:)=[255 0 0];%error UOPP0 PUs emerge in opportunities.
UOPP0Error=UOPP0Error+1;
else
ObservingImage(c,t,:)=[255 255 255];%no error PU On
end;
end;
end;
end;
SendingImage=[];SendingImage(1:MaxChanals,1:MaxLongTime,1:3)=uint8(0);
SendingImage(1:MaxChanals,1:MaxLongTime,1)=uint8(255*ObservedSignals');
SendingImage(1:MaxChanals,1:MaxLongTime,2)=uint8(255*DiscoveredSignals');
SendingImage(1:MaxChanals,1:MaxLongTime,3)=uint8(255*SSOHSignals');
DiscoveringEfficiency=round(100*sum(sum(DiscoveredSignals))/sum(sum(DiscoveredSignals+SSOHSignals)));
%figure('NumberTitle','off','name','OriginalSignals','Position',[1 1000 500 500]);
figure('NumberTitle','off','name',sprintf('Original Signals with %d%% Efficiency',round(100*OriginalEfficiency)));
imshow(imresize(uint8(255*OriginalSignals'),[200 700]));
title(sprintf('%d seconds --> ',MaxLongTime));
ylabel(sprintf('<-- %d Channals',MaxChanals));
figure('NumberTitle','off','name',sprintf('SU Signals to send with %d%% Efficienc
- 1
- 2
- 3
- 4
前往页