You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
def Cargar_datos_y_señal(Link):
|
|
Datos = scipy.io.loadmat(Link)
|
|
|
|
Datos_Complejos = Datos['radar_I'] + 1j* Datos['radar_Q']
|
|
|
|
fase = Obtener_angulos(Datos_Complejos)
|
|
fase = fase - np.mean(fase)
|
|
|
|
return Datos, fase
|
|
|
|
def Obtener_angulos(Datos):
|
|
|
|
Resultado = np.zeros(len(Datos))
|
|
Desfasaje = 0
|
|
for i in range(len(Resultado)):
|
|
|
|
### Siempre cargo el primer caso sin importar que
|
|
if i == 0:
|
|
Angulo = np.angle(Datos[0,0])
|
|
Resultado[0] = Angulo
|
|
continue
|
|
|
|
### Calculo el angulo del dato
|
|
Angulo_anterior = Angulo
|
|
Angulo = np.angle(Datos[i])
|
|
|
|
if np.sign(Angulo_anterior) != np.sign(Angulo) and np.abs(Angulo) > 2:
|
|
Desfasaje += np.sum(np.pi * (-2)* np.sign(Angulo))
|
|
|
|
Resultado[i] = Desfasaje + Angulo[0]
|
|
|
|
return Resultado
|
|
|
|
def Resampleo_de_la_señal(Señal, frecuencia_original, nueva_frecuencia):
|
|
|
|
Señal = np.ravel(Señal) # asegurar que es 1D
|
|
|
|
### Genero el filtro pasabajos para luego hacer el resampling
|
|
fc = 2.0 # Frecuencia de corte pasa-bajos [Hz]
|
|
numtaps = 40 # Orden del filtro FIR (más grande = transición más suave)
|
|
|
|
nyq = fs / 2.0
|
|
b = firwin(numtaps, fc / nyq) # Filtro FIR pasa-bajo lineal-fase
|
|
Señal_filt = lfilter(b, 1.0, Señal)
|
|
|
|
### Busco el resampling rate y lo implemento
|
|
|
|
#M = int(np.floor(fs / (4*fc))) # margen de seguridad del 25%
|
|
M = int(np.floor(frecuencia_original/(2*nueva_frecuencia)))
|
|
M = max(1, M) # evitar M=0
|
|
|
|
Señal_dec = resample_poly(Señal_filt, up=1, down=M)
|
|
fs_new = fs / M
|
|
|
|
return Señal_dec, fs_new |