这个小波变换实现正确吗? [英] Is this wavelet transform implementation correct?
问题描述
我正在寻找FFT的替代方法,以便在python中创建频谱图分析仪.我听说小波变换比短时FFT更快,并且提供了更好的时间精度.我读了这篇Wikipedia文章,其中介绍了Java中的Haar小波变换实现:
I am searching for alternatives to the FFT to create a spectrogram analyser in python. I heard that the wavelet transform is faster and provides better time accuracy than the short time FFT. I went in this wikipedia article that features the Haar wavelet transform implementation in Java:
https://en.wikipedia.org/wiki/Discrete_wavelet_transform#Code_example
我将其残酷地转换为python,但是我不知道自己获取的值是否正确.有人可以确认吗?
I brutally converted it to python but I have no idea if the values I'm getting are correct. Can someone confirm?
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
推荐答案
我没有发现任何错误.您还可以通过将结果与 Pywavelet软件包中的结果进行比较来进行检查.关于haar的实现,还有一个示例 Pywavelet的小波.
I don't find anything wrong. You can also check it by comparing your result to the result from Pywavelet package. There is also an example on the implementation of haar wavelet with Pywavelet.
这篇关于这个小波变换实现正确吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!