Escalado y desplazamiento temporal
[gL.edu] Este artículo recoge contribuciones de Javier Campos Andreu y J.M. Díaz Nafría, elaboradas en el contexto de la Clarificación conceptual en "teoría de la señal y la comunicación", bajo la supervisión de J.M. Díaz Nafría.
Nos hemos referido por separado al al escalado temporal y desplazamiento temporal, discutiendo sus propiedades en los dominios del tiempo y de la frecuencia. Aquí se muestran estas operaciones -codificadas en Matlab- aplicadas a una señal determinística original, ofreciendo así una ilustración de las propiedades discutidas en aquellos artículos.
Código en el que se representan las propiedades de desplazamiento y escalado sin modificar las señales
El siguiente código construye una señal determinística (sinusoidal) original para a continuación representar las operaciones antes referidas. Obsérvese que el código solo opera en el dominio de la representación, no en el de las señales. La simulación de los procesos implicaría mantener para cada señal una base de tiempos diferente. Si por razones de la simulación del conjunto fuera necesario mantener la misma base habría que recurrir a una operación diferente que implicase cambios en la señal. El código que se ofrece más abajo sí modifica la señal escalada o desplazada manteniendo la misma base de tiempos.
t = -1:0.01:1; % Base de tiempos
x = cos(5*pi*t); % Señal original
% Representación del escalado y desplazamiento temporal
subplot(3,1,1); plot(t,x,"r"); title("x(t)"); grid; % señal original
subplot(3,2,3); plot(t-10,x,"r"); title("retraso"); grid; % se modifica la base de tiempos con un retraso
subplot(3,2,5); plot(t+10,x); title("adelanto"); grid; % se modifica la base de tiempos con un adelanto
subplot(3,2,4); plot(3*t,x); title("expansion"); grid; % se modifica la base de tiempos con una expansión de factor 3
subplot(3,2,6); plot(t/3,x,"r"); title("compresion"); grid; % se modifica la base de tiempos con una expansión de factor 3
Código para el desplazamiento y escalado de la señal manteniendo la misma base de tiempos
A diferencia del caso anterior aquí se modelan las operaciones en cuestión pero no se representan. Obsérvese que las operaciones realizadas sobre la base de tiempos son las opuestas que las realizadas para la variable independiente en la representación del código anterior, ya que allí se operaba sobre la variable original.
Se elige además una base de tiempos que hace que todas las extensiones periódicas (las de la señal original y las versiones escaladas y desplazadas) sean periódicas. Es decir, la base de tiempos da cabida a un número entero de periodos lo que hace que los coeficientes de las DFT correspondan con la señal determinística que se se pretende modelas que, como se sabe, solo ha de contener dos coeficientes distintos de cero (o lo que el lo mismo un espectro constituido por 2 deltas correspondiente a la frecuencia de oscilación positiva y negativa). Para observarlo bastaría representar las DFT calculadas. Obsérvese también que la versión original y las versiones modificadas forman parte de una misma matriz en la que cada fila corresponde a una señal.
t = -0.6:0.01:0.59; x(1,:) = cos(5*pi*t); X(1,:) = fft(x(1,:)); % Base de tiempos elegida para que la extensión periódica coincida con las señales modeladas
tv = t+0.1; x(2,:) = cos(5*pi*tv); X(2,:) = fft(x(2,:)); % Versión retrasada
tv = t-0.1; x(3,:) = cos(5*pi*tv); X(3,:) = fft(x(3,:)); % Versión adelantada
tv = t/3; x(4,:) = cos(5*pi*tv); X(4,:) = fft(x(4,:)); % Versión expandida
tv = t*3; x(5,:) = cos(5*pi*tv); X(5,:) = fft(x(5,:)); % Versión comprimida

El siguiente código ofrece una representación en los dominios del tiempo y la frecuencia de la señal original y de las versiones modificadas en el que se puede ver el cumplimiento de las propiedades anteriores. Para ello primero determina la DFT de cada una de las señales usando la función fft() que determina la DFT unidimensional de cada columna.
N = length(t); f = linspace(0,N-1,N)/N; % variable temporal
X = fft(x.'); % DFT determinada por columnas (correspondientes a cada señal)
for n=1:5
% Representación en el dominio del tiempo
subplot(5,2,2*n-1); plot(t(1,:),x(n,:));
xlabel('t [s]'); ylabel(strcat('x_',num2str(n-1),'(t)'));
% Representación en el dominio de la frecuencia
subplot(5,2,2*n); stem(f,[real(X(:,n)),imag(X(:,n))]); xlim([0,0.5]);
xlabel('f/f_m'); ylabel(strcat('X_',num2str(n-1),'(f)'));
end