Módulo del espectro
Código auxiliar
# Cargo paquetitos
using DSP, FFTW
# Y armo un par de funciones auxiliares
stem(args...; kwargs...) = sticks(args...;
marker=:circle,
leg=false,
kwargs...)
# Delta
d(n) = n == 0 ? 1. : 0.
# Escalón
u(n) = n >= 0 ? 1. : 0.
using Plots # esto está demorando como un minuto :S
Plots.default(:legend, false)
Armemos dos señales coseno de frecuencias diferentes de duración 10s (afuera valen 0), muestreémoslas durante cierto tiempo, y tomemos la DFT
f1 = 10
f2 = 15
sup = 10
w(t) = u(t) - u(t - sup)
x1(t) = cos(2π*f1*t) * w(t)
x2(t) = cos(2π*f2*t) * w(t)
sr = 100 # frec de muestreo (Hz) -- cumple con Nyquist
t_tot = 20 # duración total de muestreo (s)
ts = range(0; stop=t_tot, step=1/sr)
x1s = x1.(ts)
x2s = x2.(ts)
x1sf = fft(x1s)
x2sf = fft(x2s)
;
Conseguimos muestras de la transformada de las señales.
Grafico el módulo de los espectros, sólo en sus frecuencias positivas (ya sé que es simétrico porque eran señales reales).
fs = range(0; stop=sr, length=length(x1sf)) #aprox
plot(fs, [abs.(x1sf), abs.(x2sf)];
xlim = (0, sr/2),
xlabel = "f (Hz)",
title = "Módulo de los espectros",
legend = true,
lab = ["|X1|" "|X2|"]
)
Veamos cómo quedaría el espectro de la suma
plot(fs, abs.(x1sf .+ x2sf);
xlim = (0, sr/2),
xlabel = "f (Hz)",
title = "|X1 + X2|"
)
La suma, en los primeros 10 segundos, se ve algo así
plot(t -> x1(t) + x2(t), 1, 1.5)
y luego se hace cero
plot(t -> x1(t) + x2(t), -1, 12)
Veamos ahora el espectro de una señal que, en los primeros 10 segundos es igual al primer coseno, y en los segundos 10s, al segundo
plot(t -> x1(t) + x2(t - 10), -1, 22)
plot(t -> x1(t) + x2(t - 10), 9.6, 10.4)
x12seq = x1.(ts) .+ x2.(ts .- 10)
plot(fs, abs.(fft(x12seq));
xlim = (0, sr/2),
xlabel = "f (Hz)",
title = "Módulo del espectro de x1 seguido de x2"
)
¡¡Se ve casi igual que el caso de las dos señales simultáneas!!
Y el espectro (módulo) de la secuencia en orden inverso también se ve igual
x21seq = x1.(ts .- 10) .+ x2.(ts)
plot(fs, abs.(fft(x21seq));
xlim = (0, sr/2),
xlabel = "f (Hz)",
title = "Módulo del espectro de x1 seguido de x2"
)
Mirando el módulo del espectro, no tenemos idea de qué tiempos son los responsables de la energía que tiene la señal en cada frecuencia (esa información está en la derivada de la fase en función de la frecuencia).