Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.79 KB | None | 0 0
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from scipy import signal
  4. from scipy.io import wavfile
  5. import librosa
  6. import librosa.display
  7. from scipy.constants import pi
  8. import scipy
  9.  
  10. gamma = 0.3
  11. k_max = 15 # k_max+1 kerrosta
  12.  
  13. # read in the audio file
  14. fs,x = wavfile.read('/Users/mac/OneDrive - TUNI.fi/SGN/Audio/Projekti/rhythm_birdland.wav')
  15. # x = x[0:fs]
  16. f, t, F = signal.stft(x, fs, nperseg=1000)
  17. amp = 2 * np.sqrt(2)
  18.  
  19. # print(np.zeros((2,3)))=[0 0 0;0 0 0]
  20.  
  21. plt.figure()
  22. plt.pcolormesh(t, f, np.abs(F), vmin=0, vmax=amp*10)
  23. plt.title('STFT Magnitude')
  24. plt.ylabel('Frequency [Hz]')
  25. plt.xlabel('Time [sec]')
  26. plt.colorbar()
  27. plt.show()
  28.  
  29. W = (np.abs(F))**(2*gamma)
  30.  
  31. H = 0.5*W
  32. P = H
  33.  
  34. alpha = 0.3 # (np.var(P))/(np.var(H)+np.var(P)) # 0.3
  35.  
  36. delta = np.zeros((len(f-2),len(t-2))) # Delta tulee yhden jaljessa -> deltaa on k_max kerrosta
  37.  
  38. print(" ")
  39. print(np.size(x), fs)
  40. print(F.shape)
  41. print(delta.shape)
  42. print(" ")
  43.  
  44. for k in range(0,k_max):
  45.  
  46.     H_im1 = np.c_[ np.zeros(len(f)), H[:,1:len(t)] ]
  47.     H_ip1 = np.c_[ H[:,0:len(t)-1], np.zeros(len(f))]
  48.     # print(H_im1)
  49.  
  50.     P_hm1 = np.vstack([ np.transpose(np.zeros(len(t))), P[0:len(f)-1] ])
  51.     P_hp1 = np.vstack([ P[1:len(f)], np.transpose(np.zeros(len(t))) ])
  52.     #print(P_hm1)
  53.  
  54.     delta = alpha*(H_im1-2*H+H_ip1)/4 - (1-alpha)*(P_hm1-2*P+P_hp1)/4
  55.  
  56.     if k == k_max-1: # For luupin viimeisella kerralla vaihetta 7 varten
  57.         H_km1 = H   # Tallennetaa H ja P apumuuttujiin
  58.         P_km1 = P
  59.  
  60.     # Kaava 26
  61.     H = H + delta
  62.     H = np.maximum(H, np.zeros(H.shape))
  63.     H = np.minimum(H, W)
  64.  
  65.     # Kaava 27
  66.     P = W - H
  67.  
  68. # Kaava 28: Rumasti tehtyna
  69. for h in range(0, len(f)-1):
  70.     for i in range(0, len(t)-1):
  71.         if H[h][i] < P[h][i]:
  72.             H[h][i] = 0
  73.             P[h][i] = W[h][i]
  74.         else:
  75.             P[h][i] = 0
  76.             H[h][i] = W[h][i]
  77.  
  78. #if H_km1 < P_km1:
  79.  #   H = 0
  80.   #  P = W
  81.  
  82. #else:
  83.  #   P = 0
  84.   #  H = W
  85.  
  86.  
  87. h = scipy.signal.istft(H**(1/(2*gamma))*np.exp(1.j*np.angle(F)))
  88. print("Eka ISTFT tehty. Koko h = ", np.size(h))
  89. p = scipy.signal.istft(P**(1/(2*gamma))*np.exp(1.j*np.angle(F)))
  90. print("Tonen ISTFT tehty. Koko p = ", np.size(p))
  91.  
  92.  
  93. # s = audio["samples"]
  94. # s_q = np.square(s)
  95. # y = h+p
  96.  
  97. # SNR_h = 10*np.log*()
  98.  
  99. plt.figure()
  100. plt.pcolormesh(t, f, np.abs(H), vmin=0, vmax=amp*10)
  101. plt.title('Harmonic')
  102. plt.ylabel('Frequency [Hz]')
  103. plt.xlabel('Time [sec]')
  104. plt.colorbar()
  105.  
  106.  
  107. plt.figure()
  108. plt.pcolormesh(t, f, np.abs(P), vmin=0, vmax=amp*10)
  109. plt.title('Percussive')
  110. plt.ylabel('Frequency [Hz]')
  111. plt.xlabel('Time [sec]')
  112. plt.colorbar()
  113. plt.show()
  114.  
  115.  
  116. # Record the audio file
  117. audio_name = 'Harmonic'
  118. h = h / np.max(np.abs(h))
  119. wavfile.write(audio_name, fs, h.T)
  120. audio_name = 'Percussive'
  121. p = p / np.max(np.abs(p))
  122. wavfile.write(audio_name, fs, p.T)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement