2013-11-27 9 views
3

Я ищу альтернативы БПФ для создания анализатора спектрограмм в питоне. Я слышал, что вейвлет-преобразование быстрее и обеспечивает лучшую точность времени, чем короткое время БПФ. Я пошел в этой статье википедии, что функции Хаара вейвлет-преобразование реализации в Java:Правильно ли это вейвлет-преобразование?

https://en.wikipedia.org/wiki/Discrete_wavelet_transform#Code_example

Я жестоко преобразовал его в питон, но я понятия не имею, если значения я получаю правильно. Может кто-нибудь подтвердить?

from math import * 

N = 8 
res = [sin(k) for k in xrange(N)] 

for k in xrange(N): 
    print res[k] 

print 

def discreteHaarWaveletTransform(x): 
    N = len(x) 
    output = [0.0]*N 

    length = N >> 1 
    while True: 
     for i in xrange(0,length): 
      summ = x[i * 2] + x[i * 2 + 1] 
      difference = x[i * 2] - x[i * 2 + 1] 
      output[i] = summ 
      output[length + i] = difference 

     if length == 1: 
      return output 

     #Swap arrays to do next iteration 
     #System.arraycopy(output, 0, x, 0, length << 1) 
     x = output[:length << 1] 

     length >>= 1 


res = discreteHaarWaveletTransform(res) 

for k in xrange(N): 
    print res[k] 

Результат:

0.0 
0.841470984808 
0.909297426826 
0.14112000806 
-0.756802495308 
-0.958924274663 
-0.279415498199 
0.656986598719 

0.553732750242 
3.23004408914 
-0.208946450078 
-2.09329787049 
-0.841470984808 
0.768177418766 
0.202121779355 
-0.936402096918 

ответ

3

Я не нахожу ничего плохого. Вы также можете проверить его, сравнив результат с результатом Pywavelet package. Существует также example о внедрении хайрового вейвлета с Pywavelet.