Advertisement
juanmartinvk

Untitled

May 30th, 2020
1,435
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.46 KB | None | 0 0
  1. import numpy as np
  2.  
  3. # =============================================================================
  4. # La función suavizado aplica un suavizado de una subdivisión de octava específica
  5. # de acuerdo al parámetro OCT.
  6. # F debe ser una lista de las frecuencias entregadas por la FFT de menor a mayor
  7. # AMP debe ser una lista de las amplitudes en dB de la FFT
  8. # OCT debe ser la subdivisión de octava (ej. OCT=3 -> Suavizado por tercios de octava)
  9. # OCT=0 es un caso especial donde no se realiza el suavizado y se devuelve la curva intacta
  10. # =============================================================================
  11.    
  12. def suavizado(F,AMP,OCT):
  13.     ampsmooth=AMP
  14.     if OCT!=0:
  15.         for n, f in enumerate(F):
  16.             fsup=f*pow(2,1/(2*OCT))  #calcula el corte superior del promedio
  17.             finf=f*pow(2,1/(2*OCT))  #calcula el corte inferior del promedio
  18.  
  19.             if fsup >= F[-1]:
  20.                 idxsup=len(F)-n
  21.             else:
  22.                 idxsup=np.argmin(abs(F[n:]-fsup))   #busca el índice de fsup
  23.                
  24.             if finf >= F[1]:
  25.                 idxinf=np.argmin(abs(F[0:n+1]-finf))    #busca el ínfice de finf
  26.             else:
  27.                 idxinf=0
  28.                
  29.             if idxsup != idxinf+n and idxsup+n-idxinf != 0:
  30.                 temp=pow(10,AMP[idxinf:idxsup+n-1]*0.1)
  31.                 if sum(temp) != 0:
  32.                     ampsmooth[n]=10*np.log10(sum(temp)/(idxsup+n-idxinf))
  33.     return ampsmooth
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement