Filtrado de frecuencias


Sonidos según rango de frecuencias

Nature

En ejemplo de "filtrado" de frecuencias
Leemos un archivo de sonido y quitamos frecuencias bajas ("graves"), frecuencias medias (por ejemplo la voz) o frecuencias altas ("agudos").

import matplotlib.pyplot as plt         #paquete para graficar
import numpy as np                         #paquete de operaciones matemáticas
from scipy.io import wavfile            #paquete para cargar archivos wav
from scipy.fftpack import dct, idct   #paquete para dct y idct
 
# leemos el archivo wav
frec, x = wavfile.read('audio.wav')

# calculamos la DCT
Xantes = X

# normalizo la escala
L = len(X)
T=np.linspace(1,1/frec,L)
f= frec/2*np.linspace(0,1,L)

# graficamos las frecuencias
X[0:7000]=0                 #quitamos las frecuencias bajas
#X[7000:144000]=0    #quitamos las frecuencias altas
#X[7000:70000]=0      #quitamos las frecuencias medias

# antitransformamos
xx= idct(X, norm="ortho")
xx= xx.astype(np.int16)

# guardamos el nuevo sonido
wavfile.write("Naudio.wav", frec, xx)

# espectrograma
plt.title('Quitamos las frecuencias bajas')
#plt.title('Quitamos las frecuencias altas')
#plt.title('Quitamos las frecuencias medias')

#plt.plot(f,X)
plt.specgram(xx)
 
plt.show()





f1

f1

f1
f1