Sie sind auf Seite 1von 8

TEMA:

RESPUESTA IMPULSIVA DE UN SISTEMA MEDIANTE UNA SEÑAL PSEUDO-ALEATORIA BINARIA EN


LA ENTRADA

OBJETIVOS:

General:
Obtener la respuesta impulsiva de un sistema mediante la función de auto-correlación,
aplicando a la entrada una señal pseudo-aleatoria binaria.

Específicos
 Implantar el código para obtener una señal pseudo-aleatoria binaria, con
parámetros de entrada como el orden de la secuencia, la amplitud de la señal y la
repetición periódica de la señal.
 Implantar el código para obtener la función de auto-correlación de dos señales de
entrada indicando el número de retrasos en que las funciones serán procesadas.
 Integrar las funciones de la señal aleatoria y la identificación mediante auto-
correlación, y comprobar los resultados con las funciones de matlab: idinput,
randn, y cra.

MARCO TEÓRICO:

PROCEDIMIENTO:
Realizar un programa en matlab que permita ingresar el orden de la secuencia “ m”, la amplitud “A”
y la repetición periódica de la señal pseudo-aleatoria “ repetir_senal”.

function u = Pseudoaleatoria(m,A,repetir_senal)

Esta función devolverá un vector columna con los valores de A, -A en los intervalos
correspondientes.

Realizar aparte un programa que permita obtener la función de correlación de dos señales
(entrada “u”, salida “y”) y el número de retrasos en que las funciones serán procesadas “ K”.

function [respuesta_impulsiva phi_yu] = Autocorrelacion(y, u, K)

Esta función devolverá “respuesta_impulsiva”, que será la respuesta impulsiva del sistema de
salida “y” ante la entrada “u”, y “phi_yu” los valores de la función de correlación entre “ u” y “y”.
Escribir un código para que la obtener la respuesta impulsiva de la función de transferencia:

( s+1 )e−20 s
g(s)=−2. 5
(2s+1 )(3 .2s+1)(6 s+1 )(1 .6 s+1)

Obtener la respuesta impulsiva mediante:

 El comando impulse de matlab


 La utilización de la función Pseudoaleatoria para obtener la señal de entrada, y la
función Autocorrelacion para obtener la respuesta impulsiva del sistema.

Al final graficar las dos respuestas impulsivas y comparar.

Utilizar además otro tipo de entradas aleatorias mediante los comandos:

 idinput
 randn

Utilizar el comando cra para comprobar el funcionamiento de la función Autocorrelacion.

DESARROLLO:
La función Pseudoaleatoria se puede observar en el anexo A.1.

La función Autocorrelacion se puede observar en el anexo A.2.

El código para integrar las señales se puede observar en el anexo A.3.


Respuesta impulsiva del sistema para m=5 y A=0.045

Impulse Response Impulse Response


0.1 0.1

0.05 0.05

0 0
Amplitude

Amplitude
-0.05 -0.05

-0.1 -0.1

-0.15 -0.15
0 20 40 60 80 0 20 40 60 80
Time (sec) Time (sec)

Ilustración 1. 1ra Respuesta impulsiva del sistema: Izquierda (Autocorrelacion); Derecha (cra)

Impulse Response Impulse Response


0.1 0.1

0.05 0.05

0 0
Amplitude

Amplitude

-0.05 -0.05

-0.1 -0.1

-0.15 -0.15
0 20 40 60 80 0 20 40 60 80
Time (sec) Time (sec)

Ilustración 2. 2da Respuesta impulsiva del sistema: Izquierda (Autocorrelacion); Derecha (cra)
Otro tipo de entradas aleatorias

Impulse Response Impulse Response


0.1 0.1

0.05 0.05

0 0
Amplitude

Amplitude
-0.05 -0.05

-0.1 -0.1

-0.15 -0.15
0 20 40 60 80 0 20 40 60 80
Time (sec) Time (sec)

Ilustración 3. Respuesta ante una señal pseudo-aleatoria normalmente distribuida: Izquierda (Autocorrelacion);
Derecha (cra)

Impulse Response Impulse Response


0.1 0.1

0.05 0.05

0 0
Amplitude

Amplitude

-0.05 -0.05

-0.1 -0.1

-0.15 -0.15
0 20 40 60 80 0 20 40 60 80
Time (sec) Time (sec)

Ilustración 4. Respuesta ante una señal aleatoria gaussiana: Izquierda (Autocorrelacion); Derecha (cra)
CONCLUSIONES:
 Se logró identificar el sistema mediante una señal pseudo-aleatoria binaria en la entrada,
usando la función de auto-correlación, y se pudo notar que la aproximación se vuelve
confiable para pocas repeticiones periódicas, además que la identificación en el intervalo
[20:30] segundos no es tan precisa, debido al gran cambio de la respuesta del sistema.
 Se implantó el código para la construcción de la señal pseudo-aleatoria binaria con el
orden y amplitud deseado, y se integró con el código de la función de auto-correlación que
obedece a la ecuación general de correlación y por tanto al comando “cra” de matlab,
pero sin denotar el filtro usado por este.
 Mientras mayor sea el orden de la secuencia, la aproximación del impulso será más exacta
y por tanto la respuesta impulsiva será mejor estimada.
 La mejor aproximación de la respuesta al impulso se da con la señal pseudo-aleatoria
normalmente distribuida, ya que tiene mayor relación estadística que la señal pseudo-
aleatoria binaria.
 Una aproximación más estable se da en la respuesta ante una señal aleatoria gaussiana, a
diferencia de las anteriores pseudo-aleatorias.
 En general no es aplicable la identificación con una señal pseudo-aleatoria binaria para un
orden m=5 y amplitud A=0.045. (Valores óptimos probados son: m=10 y A=0.045)

RECOMENDACIONES:
 Se recomienda utilizar una aproximación de alto orden para el retardo de la función de
transferencia del sistema.
 Es recomendable que la repetición periódica de la señal pseudo-aleatoria se dé en un
número mayor a 3 veces para obtener una buena aproximación al impulso.
 Se recomienda un valor de amplitud bajo para la señal de entrada, esto ayudará a no
afectar el comportamiento del sistema cuando se encuentre operativo.

BIBLIOGRAFÍA:
 Apuntes en clase

ANEXOS

A.1. Función pseudo-aleatoria binaria


function u = Pseudoaleatoria(m,A,repetir_senal)
clc
% m -> orden de la secuencia
% A -> Amplitud de la señal aleatoria
% repetir_senal -> # de veces a repetir la señal aleatoria base
%% Selección de coeficientes para el algoritmo XOR
switch m
case 2
coefs = [1 2];
case 3
coefs = [1 3];
case 4
coefs = [3 4];
case 5
coefs = [3 5];
case 6
coefs = [2 3 6];
case 7
coefs = [4 7];
case 8
coefs = [2 3 4 8];
case 9
coefs = [5 9];
case 10
coefs = [7 10];
case 11
coefs = [9 11];
otherwise
fprintf('Seleccionar un entero entre 2 y 11\n');
return
end
%% Algoritmo XOR
a=hardlim(randn(1,m));
a(coefs(1))=1; a(coefs(2))=1;
b=zeros(2^m-1,m);
b(1,:)=a(1,:);
for i=1:2^m-2
b(i+1,1) = xor(b(i,coefs(1)) , b(i,coefs(2)));
b(i+1,2:end) = b(i,1:end-1);
end
u_base = A*(2*b(:,end) - 1);
u_aux = u_base;
%% Repetir la señal varias veces
for i=2:repetir_senal
u_aux = [u_aux ; u_base];
end
%% Asignación final
u = u_aux;
end

A.2. Función de auto-correlación


function [respuesta_impulsiva phi_yu] = Autocorrelacion(y, u, K)
clc
%% Correlacion
dimension_y = length(y);
if dimension_y ~= length(u)
fprintf('Entrada y Salida de diferente dimensión..!\n');
return;
end
% y es el vector de entrada para obtener la autocorrelación
% K es el número de términos que deseo de la función de salida de
% autocorrelación
centro_y = round(dimension_y/2+0.5); % Indica el centro de y que indicará
el
% cero entre -M y +M
M = centro_y - 1; % El valor de M debe ser exacto al número de índices
a la
% izquierda o derecha del índice 0 del vector y
Suma = 0;
for k = 0:K
m = k+1; % Solo permite acceder correctamente a los índices de
phi_yu
for i = -M:M
n = i+centro_y; %Solo para poder acceder a los indices de y()
if n > k && n <= dimension_y %Diferencia cuando y exista
switch mod(dimension_y,2)
case 0
Suma = Suma + 1/(2*M)*y(n)*u(n-k);
case 1
Suma = Suma + 1/(2*M+1)*y(n)*u(n-k);
otherwise
fprintf('No se ha logrado saber si dim(y) es par o
impar');
end
end
end
respuesta_impulsiva(m) = Suma;
Suma = 0;
end
%% Covarianza de la entrada
covarianza_u = covf(u.',K + 1);
%% Respuesta al impulso
respuesta_impulsiva = respuesta_impulsiva/covarianza_u(1);
phi_yu = [respuesta_impulsiva(end:-1:1),respuesta_impulsiva(2:1:end)];
end
% PARA OBTENER LA 4TA COLUMNA DE CRA SOLO SE DEBE DIVIDIR phi_yu PARA EL
% TÉRMINO MÁS ALTO QUE ES y(1), ES DECIR NORMALIZAR

A.3. Integración de funciones


%% Función de transferencia
s = tf('s');
g = -2.5*(s+1)/((2*s+1)*(3.2*s+1)*(6*s+1)*(1.6*s+1));
[n d] = pade(20,2);
aprox=tf(n,d);
g = series(g,aprox);
% y1 = step(g1,0:0.1:99.9); hold on;
%% Respuesta ante la señal pseudoaleatoria
m = 5; A = 0.045;
u = Pseudoaleatoria(m,A,2); % Señal pseudoaleatoria en base binaria
% u = randn(100,1); % Señal pseudoaleatoria normalmente
% distribuida
% u = idinput([100 1],'rgs',[0.1 , 0.9],[-A , A]);
% Señal aleatoria gaussiana
t = 0:1:length(u)-1;
y = lsim(g,u,t); % u debe estar en forma de columna
% plot(t,y);
%% Respuesta impulsiva al sistema
[ir phi_yu] = Autocorrelacion(y.', u.', length(u)-1);
[ir1,r,cl] = cra([y u],length(u)-1,16,0);
subplot(121)
impulse(g); hold on;
plot(t,ir,'r'); hold off;
subplot(122)
impulse(g); hold on;
plot(t,ir1,'r'); hold off;

Das könnte Ihnen auch gefallen