📄 cp0703_random_pulse_combinati.m
字号:
%
% FUNCTION 7.8 : "cp0703_random_pulse_combination"
%
% This function implements the random selection algorithm
% described in Section 7.2 for the determination of a
% combination of the first 15 Gaussian derivatives fitting
% the FCC emission mask
%
% 'smp' samples of the Gaussian pulse are considered, in
% the time interval 'Tmax - Tmin'
%
% The function receives in input:
% 1) the index 'i' indicating which setting must be adopted
% for the shape factors of the derivatives
% 2) the Pulse Repetition Period Ts
% 3) the number of attemtps in the random selection of the
% coefficients 'attemtps'
%
% The function returns:
% 1) the best coefficient set 'coefficient'
% 2) the coefficients for the set formed by each single
% derivative 'singlederivativeset'
% 3) the set of derivatives 'derivative'
% 4) a flag on the validity of the returned vectors
% 'validresult'
% 5) the fundamental frequency df
% The function individuates the best coefficient set within
% the sets found during the 'attempts' iterations and the
% best coefficient for the solutions based on each single
% derivative.
% The function then plots the target mask, the solutions
% based on each single derivative and the solution based on
% the set of the 15 derivatives of the Gaussian pulse.
%
% Programmed by Luca De Nardis
function [coefficients, singlederivativecoeff,...
derivative, validresult,df] = ...
cp0703_random_pulse_combination(i,Ts,attempts)
% -----------------------------------------------
% Step Zero - Input parameters and Initialization
% -----------------------------------------------
% Lower time limit
Tmin=-4e-9;
% Upper time limit
Tmax=4e-9;
% number of samples
smp = 1024;
% sampling period
dt = (Tmax-Tmin) / smp;
% sampling frequency
fs = 1/dt;
frequencysmoothingfactor = 8;
% number of samples (i.e. size of the FFT)
N = frequencysmoothingfactor * smp;
% fundamental frequency
df = 1 / (N * dt);
% Inizialization of the positive frequency axis
positivefrequency=linspace(0,(fs/2),N/2);
% Inizialization of the time axis
t=linspace(Tmin,Tmax,smp);
% Loading the alpha vector depending on the input 'i'
alpha=cp0703_get_alpha_value(i);
% Loading the emission mask on N points
emissionmask = cp0703_generate_mask(N, fs);
for i=1:15
% ---------------------------------------------
% Step One - Pulse waveforms in the time domain
% ---------------------------------------------
% Determination of the i-th derivative
derivative(i,:) = cp0702_analytical_waveforms(t, i,...
alpha(i));
% Amplitude normalization of the i-th derivative
derivative(i,:) = derivative(i,:) / max(abs(derivative(i,:)));
end
for i=1:15
% Determination of coefficients for each single
% derivative considered as a stand-alone set
[i_th_derivative_coeff,validresult] = ...
cp0703_random_coefficients(attempts, derivative,...
dt, smp, Ts, frequencysmoothingfactor,...
emissionmask, i, i);
% Application of coefficient to the i-th derivative
normalizedderivative(i,:) = i_th_derivative_coeff(i)...
* derivative(i,:);
% Recording coefficient for the function output
singlederivativecoeff(i)= i_th_derivative_coeff(i);
if(validresult)
% -----------------------------------------------------
% Step Two - Evaluation of PSDs of normalized waveforms
% -----------------------------------------------------
% double-sided MATLAB amplitude spectrum
X=fft(normalizedderivative(i,:),N);
% conversion from MATLAB spectrum to Fourier
% spectrum
X=X/N;
% DOUBLE-SIDED ESD
E = fftshift(abs(X).^2/(df^2));
% SINGLE-SIDED ESD
Ess = 2.*E((N/2+1):N);
% PSD of the i-th normalized derivative in dBm/MHz
singlederivativePSD(i,:) = 10 * log10 ((1/Ts)...
* Ess / 377) + 90;
end
% End of section dedicated to mask-fitting through single
% derivatives
end
% ---------------------------------------------------------
% Step Three - Evaluation of mask-fitting combination of
% pulse waveforms
% ---------------------------------------------------------
[coefficients,validresult] = ...
cp0703_random_coefficients(attempts, derivative,...
dt, smp, Ts, frequencysmoothingfactor, ...
emissionmask,1,15);
if(validresult)
% double-sided MATLAB amplitude spectrum
X=fft(coefficients*derivative,N);
% conversion from MATLAB spectrum to Fourier spectrum
X=X/N;
% DOUBLE-SIDED ESD
E = fftshift(abs(X).^2/(df^2));
% SINGLE-SIDED ESD
Ess = 2.*E((N/2+1):N);
% PSD of the combination in dBm/MHz
PSD = 10 * log10 ((1/Ts) * Ess / 377) + 90;
% ----------------------------
% Step Four - Graphical output
% ----------------------------
figure(1);
plot(positivefrequency/1e6,...
emissionmask,'r','Linewidth',[1]);
hold on;
plot(positivefrequency/1e6, singlederivativePSD);
PF = plot(positivefrequency/1e6, PSD);
set(PF,'LineWidth',[2]);
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]);
alphavalue = '\alpha = 0.714 ns';
text(8e3, -100, alphavalue,'BackgroundColor', [1 1 1]);
text(2e3, -300,...
'normalized derivatives','BackgroundColor',[1 1 1]);
text(7e3, -150, 'random combination',...
'BackgroundColor', [1 1 1]);
text(5e3, -25, 'FCC UWB indoor emission mask',...
'BackgroundColor', [1 1 1]);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -