You are on page 1of 5

clear

clc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Tmin=-4e-9;
Tmax=4e-9;
smp = 1024;
N = 8000;
dt = (Tmax-Tmin)/smp;
Ts=dt;
fs = 1/Ts;
df = fs/N ;
frequency=linspace(0,(fs/2),N/2);
t=linspace(-4e-9,4e-9,smp);
Tp= t(size(t,2))-t(1);
fccmask = mask(N, fs);
%-------------------------------------------------------------------------%-------------------------------------------------------------------------%-------------------------------------------------------------------------particles=2;
iterations=300;
swarmsize=50;
xmax=[15 1e-9];
xmin=[7 1e-10];
v=zeros(swarmsize,particles);
X_MAX = xmax;
X_MIN = xmin;
vmin=-(max(xmax)-min(xmin))/(swarmsize*5);
vmax=(max(xmax)-min(xmin))/(swarmsize*5);
gBest = zeros(1,particles);
gbestvalue = -400;
xBest=zeros(swarmsize,particles);
fitBest=zeros(swarmsize,1);
fit = zeros(swarmsize,1);
noiterations=1;
x=initSwarm(swarmsize, particles, X_MIN, X_MAX);
%-------------------------------------------------------------------------%-------------------------------------------------------------------------%--------------------------------------------------------------------------

for j=1:swarmsize
inpulse = (64*pi^3*t.*exp(-2*pi*(t.^2)/x(j,2)^2).* ...
(15*x(j,2)^4-40*pi*(t.^2)*x(j,2)^2+16*pi^2*(t.^4))/x(j,2)^10);
norpulse = x(j,1) * inpulse/max(abs(inpulse));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% double-sided MATLAB amplitude spectrum
EX = fft(norpulse,N);
% conversion from MATLAB spectrum to Fourier spectrum
EX = EX/N;
% DOUBLE-SIDED ENERGY SPECTRAL DENSITY
E = abs(EX).^2/(df^2);
% SINGLE-SIDED ENERGY SPECTRAL DENSITY
Ess = 2.*E(1:floor(N/2));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
PSD = 10 * log10 ((1/Ts) * Ess / 377) + 90;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
maxfccpower= 7.5e-8*(Ts/Tp)^2;
maxfccpowerindBm= 10*log10(maxfccpower)+30;
psdpower= 1/Ts .* Ess.*df / 377;
[maxpower, ind_max]= max(psdpower);
maxpowerindBm = 10*log10(maxpower)+30;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%if all(PSD < fccmask);
if all(psdpower<maxfccpower)
fit(j) = psdpower;
else
fit(j)=0;
end

fitBest(j)=fit(j);

end
[a,b]=max(fit);
gBest=x(b,:);
gbestvalue = fit(b);
xBest = x;
while(noiterations<=iterations)
i=1;
randnum1 = rand ([swarmsize, particles]);
randnum2 = rand ([swarmsize, particles]);
v = 1.*v + 1.5 .* randnum1.*(xBest-x) + 1.5.*
randnum2.*((ones(swarmsize,1)*gBest-x));
v = ( (v <= vmin).*vmin ) + ( (v > vmin).*v );
v = ( (v >= vmax).*vmax ) + ( (v < vmax).*v );
x = x+v;
for j = 1:swarmsize,
for k = 1:particles,
if x(j,k) < X_MIN(k)
x(j,k) = X_MIN(k);
elseif x(j,k) > X_MAX(k)
x(j,k) = X_MAX(k);
end
end
end
while(i<=swarmsize)
if(i==swarmsize)
for j=1:swarmsize
inpulse = (64*pi^3*t.*exp(-2*pi*(t.^2)/x(j,2)^2).*...
(15*x(j,2)^4-40*pi*(t.^2)*x(j,2)^2+16*pi^2*(t.^4))/x(j,2)^10);
norpulse = x(j,1) * inpulse/max(abs(inpulse));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% double-sided MATLAB amplitude spectrum


EX = fft(norpulse,N);
% conversion from MATLAB spectrum to Fourier spectrum
EX = EX/N;
% DOUBLE-SIDED ENERGY SPECTRAL DENSITY
E = abs(EX).^2/(df^2);
% SINGLE-SIDED ENERGY SPECTRAL DENSITY
Ess = 2.*E(1:floor(N/2));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
PSD = 10 * log10 ((1/Ts) * Ess / 377) + 90;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
maxfccpower= 7.5e-8*(Ts/Tp)^2;
maxfccpowerindBm= 10*log10(maxfccpower)+30;
psdpower= 1/Ts .* Ess.*df / 377;
[maxpower, ind_max]= max(psdpower);
maxpowerindBm = 10*log10(maxpower)+30;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if all(psdpower<maxfccpower)
fit(j) = psdpower
else
fit(j)=0;
end
fitBest(j)=fit(j);
if fit(j) < fitBest(j)
fitBest(j) = fit(j);
xBest(j,:) = x(j,:);
end
end
[a,b]=max(fit);
if (fit(b) > gbestvalue)
gBest=x(b,:);
gbestvalue = fit(b);
end
end

i=i+1;
end
noiterations = noiterations+1;
end
xbest=gBest
fit=gbestvalue
w=xbest(1);
alpha=xbest(2);
inpulse = (64*pi^3*t.*exp(-2*pi*(t.^2)/alpha^2).* ...
(15*alpha^4-40*pi*(t.^2)*alpha^2+16*pi^2*(t.^4))/alpha^10);
norpulse = w * inpulse/max(abs(inpulse));
EX=fft(norpulse,N);
EX=EX/N;
E = fftshift(abs(EX).^2/(df^2));
Ess = 2.*E((N/2+1):N);
PSD = 10 * log10 ((1/Ts) * Ess / 377) + 90;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(1)
plot(t,inpulse);
figure(2)
frequency=linspace(0,df*size(PSD,2),size(PSD,2));
plot(frequency/1e6,...
fccmask,'r','Linewidth',[1]);
hold on;
plot(frequency/1e6, PSD);
AX=gca;
set(AX,'FontSize',12);
T=title('Random combination');
set(T,'FontSize',14);
X=xlabel('Frequency [MHz]');
set(X,'FontSize',14);
Y=ylabel('PSD [dBm/MHz]');
set(Y,'FontSize',14);
axis([0 12e3 -400 0]);

You might also like