def filtDesign(self): ''' Design a low pass filter and a high pass filter ''' order, self.lowpass = filter_design( self.__fs, locutoff=0, hicutoff=50, revfilt=0) order, self.highpass = filter_design( self.__fs, locutoff=5, hicutoff=0, revfilt=1)
def recibir_filter(filename): #funcion que recibe un archivo de audio(.wav) y devuelve la senal filtrada linealmente y, sr = librosa.load(filename) #signal and sampling rate fs = sr; order, lowpass = filter_design(fs, locutoff = 0, hicutoff = 1000, revfilt = 0); #filtro pasabajas order, highpass = filter_design(fs, locutoff = 100, hicutoff = 0, revfilt = 1); #filtro pasa-altas y_hp = signal.filtfilt(highpass, 1, y); #aplicacion de filtro y_bp = signal.filtfilt(lowpass, 1, y_hp); #aplicacion de filtro data = np.asfortranarray(y_bp) return(data,sr)
def recibirsenal(filename): import scipy.signal as signal y, sr = librosa.load(filename) #signal and sampling rate fs = sr order, lowpass = filter_design(fs, locutoff=0, hicutoff=1000, revfilt=0) order, highpass = filter_design(fs, locutoff=100, hicutoff=0, revfilt=1) y_hp = signal.filtfilt(highpass, 1, y) y_bp = signal.filtfilt(lowpass, 1, y_hp) y_bp = np.asfortranarray(y_bp) return (y_bp, sr)
def filtrar_senal(senal_f, fs): "Esta funcion recibe la señal sin filtar y la frecuencia de muestreo y retorna la señal filtrada" order, lowpass = filter_design(fs, locutoff=0, hicutoff=1000, revfilt=0) # implementación del filtro pasa bajas con filter_design order, highpass = filter_design(fs, locutoff=100, hicutoff=0, revfilt=1) # implementación del filtro pasa altas con filter_design senal_hp = signal.filtfilt(highpass, 1, senal_f) # implementacion del diseño del filtro senal_lp = signal.filtfilt(lowpass, 1, senal_hp) return senal_lp
def filtradofir(senal, Fmuestreo): order, lowpass = filter_design(Fmuestreo, locutoff=0, hicutoff=1000, revfilt=0) order, highpass = filter_design(Fmuestreo, locutoff=100, hicutoff=0, revfilt=1) #Se definen las frecuencias bajas y altas para el diseño de el filtro pasabanda y_hp = signal.filtfilt(highpass, 1, senal) y_bp = signal.filtfilt(lowpass, 1, y_hp) #función filt filt y_bp = np.asfortranarray(y_bp) return y_bp, Fmuestreo
def cargar_filtrar(filename): file, sr = librosa.load(filename) order, lowpass = filter_design(sr, locutoff=0, hicutoff=2000, revfilt=0) #frecuencia de muestreo sr order, highpass = filter_design(sr, locutoff=100, hicutoff=0, revfilt=1) file_paltas = signal.filtfilt(highpass, 1, file) file_pbajas = signal.filtfilt(lowpass, 1, file_paltas) file_filt = np.asfortranarray(file_pbajas) return file_filt, sr
def Carga_Filt(y, sr): """ Funcion que permite filtrar la señal de audio y tomar las frecuencias de interes Ingresa una señal de audio y su frecuencia de muestreo. """ fs = sr # Frecuencia de muestreo # Diseño de filtros pasa bajas y altas para tomar la frecuencia de interes order, lowpass = filter_design(fs, locutoff=0, hicutoff=1000, revfilt=0) order, highpass = filter_design(fs, locutoff=100, hicutoff=0, revfilt=1) # Se aplica la funcion de filtrado filtfilt a los 2 diseños de filtro para #evitar desfases en la señal y_hp = signal.filtfilt(highpass, 1, y) y_bp = signal.filtfilt(lowpass, 1, y_hp) y_bp = np.asfortranarray(y_bp) # Convierte la salida del filtro en una matriz en orden Fortran return (y_bp) # salida de la funcion
def textos_y_audios(ruta_audio_y_textos): #funcion que me retorna listas con las señales cargada, filtradas, sr, archivo txt, etc. lista_archivos=os.listdir(ruta_audio_y_textos)# carga los archivos en la consola para mirarlos y los almacena en una lista. lista = [] y_vacia = [] sr_vacia = [] y_filtrada = [] x_ft = [] txt =[] for i in np.arange(920,1840,2): #ciclo for para cargar los audios y los txt de la base de datos cargada. filename = ruta_audio_y_textos + '/' + lista_archivos[i+1] #carga de audio filetxt = ruta_audio_y_textos + '/' + lista_archivos[i] #carga de texto lista.append(filename) #agrega un audio a la lista que almacena todos los audios. txt.append(filetxt) #agrega un txt a la lista que almacena todos los audios. for j in np.arange(0,len(lista)): #ciclo for para cargar los audios y, sr = librosa.load(lista[j]) #obtiene la señal de audio con sus valores y la frecuencia de muestreo. y_vacia.append(y)#agrega los valores de cada señal de audio a la lista sr_vacia.append(sr) for m in np.arange(0,len(y_vacia)): #ciclo for que ejecuta la cantidad de veces de audios cargados. #diseño de filtros paso bajo y alto de la señal para eliminar frecuencias o ruido indeseado. order, lowpass = filter_design(22050, locutoff = 0, hicutoff = 1000, revfilt = 0); order, highpass = filter_design(22050, locutoff = 100, hicutoff = 0, revfilt = 1); y_hp = signal.filtfilt(highpass, 1, y_vacia[m]); y_bp = signal.filtfilt(lowpass, 1, y_hp); y_bp1 = np.asfortranarray(y_bp) #despues del filtrado de cada señal se agrega a la lista que contiene todas la señales de audio filtradas con las especificaciones de los filtros creados (pasa bajas y altas) #y luego se aplica el comanado filt filt para realizar el filtrado de cada señal. y_filtrada.append(y_bp1); for g in np.arange(0,len(y_filtrada)): #cilco for que se ejecute la cantidad de audios de la base de datos, #definicion de funciones que se necesitan para realizar el filtrado wavelet def wthresh(coeff,thr): y = list(); s = wnoisest(coeff); for i in range(0,len(coeff)): y.append(np.multiply(coeff[i],np.abs(coeff[i])>(thr*s[i]))); return y; def thselect(y_bp1): Num_samples = 0; for i in range(0,len(y_bp1)): Num_samples = Num_samples + y_bp1[i].shape[0]; thr = np.sqrt(2*(np.log(Num_samples))) return thr def wnoisest(coeff): stdc = np.zeros((len(coeff),1)); for i in range(1,len(coeff)): stdc[i] = (np.median(np.absolute(coeff[i])))/0.6745; return stdc; plt.figure(g) LL = int(np.floor(np.log2(y_filtrada[g].shape[0]))); coeff = pywt.wavedec( y_filtrada[g], 'db6', level=LL ); thr = thselect(coeff); coeff_t = wthresh(coeff,thr); x_rec = pywt.waverec( coeff_t, 'db6'); x_rec = x_rec[0:y_filtrada[g].shape[0]]; #plt.plot(y_vacia[i][0:5000],label='Original') #plt.plot(x_rec[0:5000],label='Umbralizada por Wavelet y aplicada filtros ') x_filt = np.squeeze(y_filtrada[g] - x_rec); #resta de la señal con filtros pasabajo y pasa altos menos esa misma señal pero aplicado wavelet para obtner las señales respiratorias x_ft.append(x_filt) #plt.plot(x_filt[0:5000],label='Original - Umbralizada') #plt.legend(loc="upper right") return y_vacia,x_ft,sr_vacia,lista,txt
def filtrar_senal(senal_f, fs): order, lowpass = filter_design(fs, locutoff=0, hicutoff=1000, revfilt=0) order, highpass = filter_design(fs, locutoff=100, hicutoff=0, revfilt=1) senal_hp = signal.filtfilt(highpass, 1, senal) senal_lp = signal.filtfilt(lowpass, 1, senal_hp) return senal_lp