Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- # =============================================================================
- # La función suavizado aplica un suavizado de una subdivisión de octava específica
- # de acuerdo al parámetro OCT.
- # F debe ser una lista de las frecuencias entregadas por la FFT de menor a mayor
- # AMP debe ser una lista de las amplitudes en dB de la FFT
- # OCT debe ser la subdivisión de octava (ej. OCT=3 -> Suavizado por tercios de octava)
- # OCT=0 es un caso especial donde no se realiza el suavizado y se devuelve la curva intacta
- # =============================================================================
- def suavizado(F,AMP,OCT):
- ampsmooth=AMP
- if OCT!=0:
- for n, f in enumerate(F):
- fsup=f*pow(2,1/(2*OCT)) #calcula el corte superior del promedio
- finf=f*pow(2,1/(2*OCT)) #calcula el corte inferior del promedio
- if fsup >= F[-1]:
- idxsup=len(F)-n
- else:
- idxsup=np.argmin(abs(F[n:]-fsup)) #busca el índice de fsup
- if finf >= F[1]:
- idxinf=np.argmin(abs(F[0:n+1]-finf)) #busca el ínfice de finf
- else:
- idxinf=0
- if idxsup != idxinf+n and idxsup+n-idxinf != 0:
- temp=pow(10,AMP[idxinf:idxsup+n-1]*0.1)
- if sum(temp) != 0:
- ampsmooth[n]=10*np.log10(sum(temp)/(idxsup+n-idxinf))
- return ampsmooth
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement