Sei sulla pagina 1di 6

close all; clc; % fecha todas as janelas e limpa a tela

% Entrada de dados
% O arquivo de dados precisa estar no mesmo diretório do
programa de MATLAB
nome_do_arq_dados = input('Qual é o arquivo de dados:
','s');
dados = xlsread(strcat(nome_do_arq_dados,'.xlsx'));
v = reshape(dados,[1 numel(dados)]); % reformata a matriz
obtida
% em um vetor linear

questao = 'Medição foi efetuada de longe para perto?


(S/N) ';
resposta = input(questao,'s'); %Rotas P, 1, 2 e 3 = N; 4
e 5 = S

if resposta == 'S'
dados_final = fliplr(v); % espelha o vetor se a
medição é
else % efetuada de longe para
perto
dados_final = v;
end

% inspeção do sinal medido, verificando seu gráfico


nfig = 1; figure(nfig);
plot(dados_final); grid on;
xlabel('Samples'); ylabel('Power (dBm)');
%
% Fim parte 1
%%
f = ('Frequência (MHz): '); % fornecer a
frequência (em MHz)
freq = input(f); % 850 MHz
d0 = ('Distância de referência d0(m): '); % fornecer a
distância (em m)
dist_0 = input(d0); % (valor = 11.2
m)
d1 = ('Distância d(m): '); % fornecer a
distância (em m)
dist1 = input(d1); % Rota P: 237.3
% Rota 1: 212.5
% Rota 2: 179.7
% Rota 3: 165.8
% Rota 4: 243.7
% Rota 5: 110.4
t = ('Duração (s): '); % fornecer a
duração (em s)
duracao = input(t); % 1e-5 s
vel = ('Velocidade(m/s): '); % fornecer
velocidade
velocidade= input(vel); % 5.56 m/s

lambda = 300/freq; % comp. onda correspondente


dist = dist1 - dist_0; % distância total percorrida
dist_lambda = dist/lambda; % distância em unidades de
comp. onda
% número de setores
num_set = dist_lambda/30; % usando setores de
30*lambda
if num_set < 5
num_set = dist_lambda/5; % usando setores de 5*lambda
end
% calcular o tamanho
tam_jan = numel(dados_final)/num_set;
%
%%
% realização do filtro de média movel (FMM)
% analisar o valor de tam_jan e retornar um nº de
amostras sempre ímpar
pto_media = round((tam_jan - 1)/2); % retorna o pto. de
média inicial
janela_final = pto_media*2+1; % retorna o nº ímpar maior
e mais próximo
% criar o vetor com todos os ptos. de média (abscissa)
menos o último setor
indices_FMM = (pto_media+1) : (janela_final) :
(numel(dados_final)-1);
% encontrar o pto. médio do último setor
ultimo = ceil( (indices_FMM(numel(indices_FMM)) +
pto_media + ...
numel(dados_final))/2 );
indices_FMM_f = [indices_FMM, ultimo]; % finaliza o vetor
% % Lógica seguida:
% % -255 ... -1 0 1 ... 255
% % 1 ... 255 256 257 ... 511
% % 512 ... 766 767 768 ... 1022 e assim por diante
% criar o vetor com todas as médias (ordenadas) exceto o
último setor
for k = 1:(numel(indices_FMM_f) - 1) % iteração até o
penúltimo setor
FMM(k) = mean(dados_final( (1 + (k-1)
*janela_final):(k*janela_final) ));
% varre o vetor dados_f e efetua as médias locais
end
% média do último setor
FMM_ultimo = mean(dados_final( (1 + janela_final * ...
(numel(indices_FMM_f)-1)):numel(dados_final) ));

% Teste para saber se existe valor ou não


% 1 se NaN, 0 se existe valor
if isnan(FMM_ultimo) == 0
FMM_f = [FMM FMM_ultimo];
else
FMM_f = FMM;
indices_FMM_f = indices_FMM;
end

% plotagem final
nfig = nfig+1;
figure(nfig);
% plotagem do gráfico
plot(dados_final,'b-','LineWidth',1); grid on; hold on;
% plotagem do FMM
plot(indices_FMM_f, FMM_f,'r*-', 'LineWidth',1); hold
off;
xlabel('Samples'); ylabel('Power (dBm)');
legend('Received power','Moving average filter');
%%
% Aplicando dfittool nas janelas
for n = 1 : num_set %iteração sem o ultimo setor
setor= 1:1:janela_final; %Cria um vetor para cada
setor
setor=dados_final((1 + (n-1) *janela_final) :
(n*janela_final));
dfittool(setor)
end
if isnan(FMM_ultimo) == 0
setor_final = dados_final( [(1 + janela_final * ...
(numel(indices_FMM_f)-1)):numel(dados_final)] );
% dfittool para o ultimo setor
dfittool(setor_final);
% a partir da janela de dfittool, procurar as
distribuições de ajuste
end
%
%%
% conversão do vetor de amostras para distância
% Casos em que a TX e/ou RX não estão na mesma direção do
deslocamento
H = 4.7;
D = input('Valor da distância até a antena: ');
% Rota Principal = 39.5m
% Rota 1 = 50.9m
% Rota 2 = 62.0m
% Rota 3 = 80.0m
% Rota 4 = 80.0m
% Rota 5 = 194.0m
questao_2 = 'Você irá analisar rotas horizontais (H) ou
verticais (V)? (H/V) ';
resposta_2 = input(questao_2,'s'); %Rotas P, 1, 2 e 3 =
H; 4 e 5 = V , 's' de string

if resposta_2 == 'H'
d0 = sqrt(H^2+D^2);
else
d0 = sqrt((39.5^2+D^2)); %39.5 é a distancia vertical
entre a linha em que esta a TX e o inicio das rota
verticais
end

delta = dist/length(dados_final);
distancia = ([1:length(dados_final)] * delta);
dist_plano = sqrt(D^2 + distancia.^2);
d0_n = sqrt(H^2 + dist_plano.^2);
v = d0_n/d0;
d_log = log10(v); %vetor de log(d0_n/d0)

d_log_FMM = log10(((indices_FMM_f) * delta) + ...


v_d0(1:length(indices_FMM_f))/dist_0); %vetor com as
distâncias das amostras do FMM
%%
%%%Ajuste de curva - amostras (Método dos Mínimos
Quadrados (MMQ)
% amostras = [1 : numel(dados_final)]';
amostras = d0_n.';
Ad = [amostras amostras.^0];
X = inv(Ad'*Ad)*Ad'*(dados_final)';
y = Ad*X;
%%% Ajuste de curva - log (Método dos Mínimos Quadrados
(MMQ)
Alog = [d_log' d_log'.^0];
Xlog = inv(Alog'*Alog)*Alog'*(dados_final)';
ylog = Alog*Xlog;
%%% Cálculo do Fator de Atenuação (alfa)
% No canal rádio móvel terrestre, o expoente de perdas no
percurso, n,
% é diferente de 2 (entre 2.5 e 6, tipicamente)
alpha = (dados_final(30) -
dados_final(50))/(10*(d_log(50)-d_log(30)));
% Dois pontos aleatorios da reta (30 e 50)
% para n. amostras < 50, usar um valor menos (ex. 40)
sem_path_loss = dados_final - y';
%%% Grafico distancia(m) x P(dBm)
nfig = nfig+1;
figure(nfig);
plot(d0_n, dados_final, 'b','LineWidth',1); grid on; hold
on;
%%% Curva ajuste MMQ
plot(d0_n, y, 'r','LineWidth',1); hold off;
title('Mobile Radio Channel: Narrow Band')
xlabel('Distance (m)'); ylabel('Power (dBm)');
legend('Received power','Fitting curve');
%%
%%% Grafico log (d/d0) x P(dbm)
nfig = nfig+1;
figure(nfig); %nova janela
plot(d_log,dados_final,'b','LineWidth',1); grid on;
title('Mobile Radio Channel: Narrow Band')
xlabel('log(d/d_0)'); ylabel('Power (dBm)'); hold on;
plot(d_log, ylog, 'r','LineWidth',1); hold on;
plot(d_log_FMM, FMM_f,'yo-','LineWidth',1);
legend('Received power','Fitting curve','Moving average
filter');
%
%%
% conversão do vetor de amostras para distância
deltaf = dist/length(FMM_f);
v_d0f = ones(1,length(FMM_f))*dist_0; % vetor que vai
somar d0 a cada amostra
distanciaf = ([1:length(FMM_f)] * deltaf) + v_d0f ;
dist_nf = distanciaf/dist_0; % normaliza o vetor
d_log = log10(dist_n); %vetor de log(d/d0)
d_log_FMM = log10(((indices_FMM_f) * delta) + ...
v_d0(1:length(indices_FMM_f))/dist_0);
% vetor com as distancias das amostras do FMM

%%%Ajuste de curva - FMM (MMQ)


FMMsmp = [1:numel(FMM_f)]';
Adf = [FMMsmp FMMsmp.^0];
Xf = inv(Adf'*Adf)*Adf'*FMM_f';
Yf = Adf*Xf;
%%%plotagem
nfig = nfig+1;
figure(nfig); %nova janela
plot(distanciaf, FMM_f, 'b','LineWidth',1); grid on;
hold on;
plot(distanciaf, Yf, 'r*-','LineWidth',1); hold off;
title('Mobile Radio Channel: Narrow Band'); ...
xlabel('Distance (m)'); ylabel('Power (dBm)');
legend('MAF','MAF fitting curve');
%%%subtração do FMM com a reta de ajuste MMQ
Diff_FMM = FMM_f.' - Yf;
nfig = nfig+1;
figure(nfig); %nova janela
plot(distanciaf, Diff_FMM,'k','LineWidth',1); grid on;
title('Error analysis of the MAF'); ...
xlabel('Distance (m)'); ylabel('Error (dB)');
%%%dfittool de Diff_FMM
dfittool(Diff_FMM);
%%
% Aplicando as fórmulas dos modelos
% freq, distancia

% I) perda de espaço livre (dB)


% representado como potência recebida em dBm = pot. Tx -
perda
% distancia em km e freq em MHz
G_t = 5; G_r = 5; % ganhos das antenas (dBi)
L_cabo = 0.5; % perda dos cabos Anritsu (dB) para 850 MHz
FSL = 2.93 + G_t - ( 32.44 + 20 * log10(d0_n/1e3) + 20 *
log10(freq) )...
+ G_r - L_cabo;

% ii) BRLJ 1 (rota transversal cruzada) e 2 (direta)


(dBm)
H_t = 4.7; % altura da antena Tx
H_r = 1.6;
% dist em m, altura em m, freq em GHz
BRLJ_1 = 1.24 - 49.7 * log10(d0_n) - 20 * log10(freq/1e3)
+ 20 * log10(H_t);
BRLJ_2 = 13.02 - 36.4 * log10(d0_n) - 20 *
log10(freq/1e3) - 20 * log10(H_t);

% iii) ITU-R
ITUR = FSL - (0.2 * freq^0.3 * d0_n.^0.6);

% iv) UFPA
a1 = 1.7; b1 = 0.0024; c1 = 9.49;
H_ob = 4; % altura méd. obstáculos
X = (H_t + H_r)*lambda/(0.1*H_ob);
K0 = a1 - b1 * X;
gamma_ufpa = K0 * (a1 - b1 * H_t + c1/H_t);
X_f = 20.35 * log10(freq/2000);
X_h = 4.5 - 9.78 * log10(H_r/2);
L0 = 20*log10(4*pi*dist_0/lambda);
UFPA = 2.93 + G_t - ( L0 +
10*gamma_ufpa*log10(d0_n/dist_0) + X_f + X_h)...
+ G_r - L_cabo;

% v) Log distance
%%%% GRAFICO MODELO LOG-DISTANCIA (em escala log)
o = [1 1 1 1 1 1 1 1 1 1];
P0 = (dados_final(1:10)*o')/10; % Média da potencia em d0
PL = P0 - 10*(alpha)*d_log ; %%ajustar positivo

grid on;

% plotagem
nfig = nfig+1;
figure(nfig); % nova janela
plot(d0_n, dados_final, 'k', 'LineWidth',1); grid on;
title('Application of propagation models'); ...
xlabel('Distance (m)'); ylabel('Power (dBm)');
hold on; plot(d0_n, FSL, 'LineWidth',2);
plot(d0_n, ITUR, 'LineWidth',2);
plot(d0_n, ylog, 'LineWidth',2);
plot(d0_n, BRLJ_1, 'LineWidth',2);
plot(d0_n, BRLJ_2, 'LineWidth',2);
plot(d_log, PL, 'g');
plot(d0_n, UFPA, 'LineWidth',2); hold off;
legend('Power','Free-space loss','ITU-R','Log fitting
curve', ...
'BRLJ (cross route)','BRLJ (direct
route)','UFPA'),'LOG-Distancia ';
%%
%%% Cálculo dos erros quadráticos médios (EQM/MSE)

% fórmula: MSE = somatório( (VE - VS)^2 )/num. amostras


MSE_FSL = sum((dados_final -
FSL).^2)/numel(dados_final);
MSE_BRLJ1 = sum((dados_final -
BRLJ_1).^2)/numel(dados_final);
MSE_BRLJ2 = sum((dados_final -
BRLJ_2).^2)/numel(dados_final);
MSE_ITUR = sum((dados_final -
ITUR).^2)/numel(dados_final);
MSE_UFPA = sum((dados_final -
UFPA).^2)/numel(dados_final);
MSE_Dlog = sum((dados_final - PL).^2)/numel1
(dados_final);

%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% FIM DO PROGRAMA %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Potrebbero piacerti anche