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

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