2016-06-06 23 views
0



I gefragt, ob es eine Implementierung für die Energie für die 1-D-Wavelet in Python, das gleiche wie die Matlab ‚[Ea, Ed] = Wenergy (C, L) ". Ich habe versucht, auf meinem eigenen zu schreiben, aber ich bin nicht sicher davon: Die Formel lautet:Energie für 1-D-Wavelet in Python

enter image description here

Wo Dj das Detail Vektor soll, und j = 1,2, ... , ld und N1 ist die Datenlänge auf der Dekompositionsebene.

import json 
import pywt 
f=open('DataFile.txt','r') 
D=json.load(f) 
f.close() 
#create the wavelet function 
db1 = pywt.Wavelet('db13') 
#calculate the number of necessary decompositions 
NbrDecomp= pywt.dwt_max_level(len(D), db1)+1 
#Initialize an empty list to receive the Detail and Approximation 
Vector = [None] * NbrDecomp 
#we use the Wavelet decomposition in the pywt module 
Vector = pywt.wavedec(D, db1) 
#Now Vector = [Approxiamtion N, Details N, Details N-1,.....] 
#Where N would be the number of decompositions 

Nach der Definition der Energie auf der Ebene k:

Energy(k)=np.sqrt(sum([x**2 for x in Vecktor[len(Vektor)-N-1-k]])/len(Vektor)) 

die Umsetzung richtig ist?

+1

Gibt es einen Grund, warum Sie NumPy's Quadratwurzel verwenden, wenn die Stock 'sqrt' Funktion aus dem' math' pac ist Kage in Python wird es tun? Keiner Ihrer Datentypen war ursprünglich 'numpy' Arrays, deshalb sehe ich keinen Sinn darin, ein 'numpy'-Array auszugeben (zumindest nicht in dieser aktuellen Version des Codes), wenn Sie' numpy 'wahrscheinlich nicht nutzen werden. s Datendarstellung. – rayryeng

+0

Ihre doppelte 'Vector' Definition ist überflüssig, Sie können eine Liste nicht vorbelegen und sie vollständig überschreiben. –

+0

Entfernen Sie den Quadratwurzelbegriff – ejectamenta

Antwort

1

Sie können Ihren Code ein wenig vereinfachen:

coeffs[len(coeffs) - k - 1] 

als

coeffs[-k] 

neu geschrieben werden, und Sie können die Quadrierung und Summierung als ein NumPy Betrieb tun (da Sie NumPy verwenden bereits)

def Energy(coeffs, k): 
    return np.sqrt(np.sum(np.array(coeffs[-k]) ** 2))/len(coeffs[-k])