Skip to content

Commit

Permalink
Wavelet work
Browse files Browse the repository at this point in the history
  • Loading branch information
Stephen Marsland committed May 8, 2017
1 parent 7c5e252 commit 83ccf41
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 13 deletions.
36 changes: 23 additions & 13 deletions WaveletSegment.py
Expand Up @@ -39,11 +39,17 @@ def __init__(self,data=[],sampleRate=0,spp='kiwi',annotation=None):
self.data = data
self.sampleRate = sampleRate

[lowd,highd,lowr,highr] = np.loadtxt('dmey.txt')
self.wavelet = pywt.Wavelet(filter_bank=[lowd,highd,lowr,highr])

#self.wavelet = pywt.Wavelet(name='dmey')
print self.wavelet

def denoise(self,data=None,thresholdType='soft', maxlevel=5):
# Perform wavelet denoising. Can use soft or hard thresholding
if data is None:
data = self.data
wp = pywt.WaveletPacket(data=data, wavelet='db3', mode='symmetric', maxlevel=maxlevel)
wp = pywt.WaveletPacket(data=data, wavelet=self.wavelet, mode='symmetric', maxlevel=maxlevel)

det1 = wp['d'].data
# Note magic conversion number
Expand All @@ -68,7 +74,7 @@ def computeWaveletEnergy(self,fwData,sampleRate):
for t in range(300):
E = []
for level in range(1,6):
wp = pywt.WaveletPacket(data=fwData[t * sampleRate:(t + 1) * sampleRate], wavelet='db3', mode='symmetric', maxlevel=level)
wp = pywt.WaveletPacket(data=fwData[t * sampleRate:(t + 1) * sampleRate], wavelet=self.wavelet, mode='symmetric', maxlevel=level)
e = np.array([np.sum(n.data**2) for n in wp.get_level(level, "natural")])
if np.sum(e)>0:
e = 100.0*e/np.sum(e)
Expand Down Expand Up @@ -163,7 +169,7 @@ def sortListByChild(self,order):

def ButterworthBandpass(self,data=None,sampleRate=0,order=10,low=1000,high=7000):
import scipy.signal as signal
if data==None:
if data is None:
data=self.data
if sampleRate==0:
sampleRate=self.sampleRate
Expand All @@ -181,7 +187,7 @@ def detectCalls(self,wp,node,sampleRate=0):
sampleRate=self.sampleRate
import string
# Add relevant nodes to the wavelet packet tree and then reconstruct the data
new_wp = pywt.WaveletPacket(data=None, wavelet='db3', mode='symmetric')
new_wp = pywt.WaveletPacket(data=None, wavelet=self.wavelet, mode='symmetric')
# First, turn the index into a leaf name.
level = np.floor(np.log2(node))
first = 2**level-1
Expand Down Expand Up @@ -229,7 +235,7 @@ def detectCalls_test(self,wp,listnodes,sampleRate):
detected = np.zeros((300,len(listnodes)))
count = 0
for index in listnodes:
new_wp = pywt.WaveletPacket(data=None, wavelet='db3', mode='symmetric')
new_wp = pywt.WaveletPacket(data=None, wavelet=self.wavelet, mode='symmetric')
# First, turn the index into a leaf name.
level = np.floor(np.log2(index))
first = 2**level-1
Expand Down Expand Up @@ -275,7 +281,7 @@ def detectCalls1(self,wp,listnodes,sampleRate):
# about different size coefficient arrays most of the time.
import string
# Add relevant nodes to the wavelet packet tree and then reconstruct the data
new_wp = pywt.WaveletPacket(data=None, wavelet='db3', mode='symmetric')
new_wp = pywt.WaveletPacket(data=None, wavelet=self.wavelet, mode='symmetric')

for index in listnodes:
# First, turn the index into a leaf name.
Expand Down Expand Up @@ -366,7 +372,7 @@ def splitAudio(self,folder_to_process='Sound Files/survey'):
#librosa.output.write_wav(fName, data[start:start+fs*60*5], fs)
i+=1

def findCalls_train(self,fName,species='kiwi'):
def findCalls_train(fName,species='kiwi'):
# Load data and annotation
ws=WaveletSeg()
ws.loadData(fName)
Expand Down Expand Up @@ -407,7 +413,7 @@ def findCalls_train(self,fName,species='kiwi'):
print nodes

# Generate a full 5 level wavelet packet decomposition
wpFull = pywt.WaveletPacket(data=fwData, wavelet='db3', mode='symmetric', maxlevel=5)
wpFull = pywt.WaveletPacket(data=fwData, wavelet=ws.wavelet, mode='symmetric', maxlevel=5)

# Now check the F2 values and add node if it improves F2
listnodes = []
Expand Down Expand Up @@ -444,7 +450,7 @@ def findCalls_test(listnodes,fName,species='kiwi'):
ws.sampleRate=fs
wData = ws.denoise(ws.data, thresholdType='soft', maxlevel=5)
fwData = ws.ButterworthBandpass(wData,ws.sampleRate,low=1000,high=7000)
wpFull = pywt.WaveletPacket(data=fwData, wavelet='db3', mode='symmetric', maxlevel=5)
wpFull = pywt.WaveletPacket(data=fwData, wavelet=self.wavelet, mode='symmetric', maxlevel=5)
detected = ws.detectCalls_test(wpFull, listnodes, ws.sampleRate) #detect based on a previously defined nodeset
print fName
ws.fBetaScore(ws.annotation, detected)
Expand All @@ -459,7 +465,7 @@ def processFolder(folder_to_process = 'Sound Files/survey/5min', species='kiwi')
ws.loadData(filename[:-4],trainTest=False)
wData = ws.denoise(ws.data, thresholdType='soft', maxlevel=5)
fwData = ws.ButterworthBandpass(wData,ws.sampleRate,low=1000,high=7000)
wpFull = pywt.WaveletPacket(data=fwData, wavelet='db3', mode='symmetric', maxlevel=5)
wpFull = pywt.WaveletPacket(data=fwData, wavelet=self.wavelet, mode='symmetric', maxlevel=5)
detected[i,:] = ws.detectCalls_test(wpFull, nodelist_kiwi, ws.sampleRate) #detect based on a previously defined nodeset
return detected

Expand All @@ -485,6 +491,8 @@ def genReport(folder_to_process,detected):
#Test
nodelist_kiwi = [20, 31, 34, 35, 36, 38, 40, 41, 43, 44, 45, 46] # python
#nodelist_kiwi = [34, 35, 36, 38, 40, 41, 42, 43, 44, 45, 46, 55] # matlab
#[36, 35, 43, 41, 38, 45, 44, 55]
#[36, 35, 43, 41, 38, 45, 44, 39, 31, 17, 21, 18, 20, 15, 8, 10, 3, 4, 1, 55]

# def test(nodelist):
# for filename in glob.glob(os.path.join('Sound Files/test','*.wav')):
Expand All @@ -498,6 +506,8 @@ def genReport(folder_to_process,detected):
# ws.splitAudio(folder_to_process='Sound Files/survey')
# print "5-min splitting done"
# Now to process survey data
detected=processFolder(folder_to_process='Sound Files/survey/5min', species='kiwi')
genReport(folder_to_process='Sound Files/survey/5min',detected=detected)
print detected
#detected=processFolder(folder_to_process='Sound Files/survey/5min', species='kiwi')
#genReport(folder_to_process='Sound Files/survey/5min',detected=detected)
#print detected

print findCalls_train('Wavelet Segmentation/kiwi/train/train1',species='kiwi')
4 changes: 4 additions & 0 deletions dmey.txt
@@ -0,0 +1,4 @@
0.0000000e+00 -1.5097409e-06 1.2787668e-06 4.4958556e-07 -2.0965689e-06 1.7232236e-06 6.9808228e-07 -2.8794080e-06 2.3831484e-06 9.8251560e-07 -4.2177892e-06 3.3535015e-06 1.6747219e-06 -6.0345013e-06 4.8375558e-06 2.4022880e-06 -9.5563098e-06 7.2165277e-06 4.8490783e-06 -1.4206929e-05 1.0503914e-05 6.1875803e-06 -2.4438006e-05 2.0106388e-05 1.4993524e-05 -4.6428764e-05 3.2341312e-05 3.7409666e-05 -1.0277901e-04 2.4461957e-05 1.4971352e-04 -7.5592870e-05 -1.3991315e-04 -9.3512894e-05 1.6118982e-04 8.5950021e-04 -5.7818580e-04 -2.7021687e-03 2.1947753e-03 6.0455106e-03 -6.3867286e-03 -1.1044642e-02 1.5250913e-02 1.7403888e-02 -3.2094063e-02 -2.4321784e-02 6.3667301e-02 3.0621244e-02 -1.3269662e-01 -3.5048287e-02 4.4409503e-01 7.4375100e-01 4.4409503e-01 -3.5048287e-02 -1.3269662e-01 3.0621244e-02 6.3667301e-02 -2.4321784e-02 -3.2094063e-02 1.7403888e-02 1.5250913e-02 -1.1044642e-02 -6.3867286e-03 6.0455106e-03 2.1947753e-03 -2.7021687e-03 -5.7818580e-04 8.5950021e-04 1.6118982e-04 -9.3512894e-05 -1.3991315e-04 -7.5592870e-05 1.4971352e-04 2.4461957e-05 -1.0277901e-04 3.7409666e-05 3.2341312e-05 -4.6428764e-05 1.4993524e-05 2.0106388e-05 -2.4438006e-05 6.1875803e-06 1.0503914e-05 -1.4206929e-05 4.8490783e-06 7.2165277e-06 -9.5563098e-06 2.4022880e-06 4.8375558e-06 -6.0345013e-06 1.6747219e-06 3.3535015e-06 -4.2177892e-06 9.8251560e-07 2.3831484e-06 -2.8794080e-06 6.9808228e-07 1.7232236e-06 -2.0965689e-06 4.4958556e-07 1.2787668e-06 -1.5097409e-06
1.5097409e-06 1.2787668e-06 -4.4958556e-07 -2.0965689e-06 -1.7232236e-06 6.9808228e-07 2.8794080e-06 2.3831484e-06 -9.8251560e-07 -4.2177892e-06 -3.3535015e-06 1.6747219e-06 6.0345013e-06 4.8375558e-06 -2.4022880e-06 -9.5563098e-06 -7.2165277e-06 4.8490783e-06 1.4206929e-05 1.0503914e-05 -6.1875803e-06 -2.4438006e-05 -2.0106388e-05 1.4993524e-05 4.6428764e-05 3.2341312e-05 -3.7409666e-05 -1.0277901e-04 -2.4461957e-05 1.4971352e-04 7.5592870e-05 -1.3991315e-04 9.3512894e-05 1.6118982e-04 -8.5950021e-04 -5.7818580e-04 2.7021687e-03 2.1947753e-03 -6.0455106e-03 -6.3867286e-03 1.1044642e-02 1.5250913e-02 -1.7403888e-02 -3.2094063e-02 2.4321784e-02 6.3667301e-02 -3.0621244e-02 -1.3269662e-01 3.5048287e-02 4.4409503e-01 -7.4375100e-01 4.4409503e-01 3.5048287e-02 -1.3269662e-01 -3.0621244e-02 6.3667301e-02 2.4321784e-02 -3.2094063e-02 -1.7403888e-02 1.5250913e-02 1.1044642e-02 -6.3867286e-03 -6.0455106e-03 2.1947753e-03 2.7021687e-03 -5.7818580e-04 -8.5950021e-04 1.6118982e-04 9.3512894e-05 -1.3991315e-04 7.5592870e-05 1.4971352e-04 -2.4461957e-05 -1.0277901e-04 -3.7409666e-05 3.2341312e-05 4.6428764e-05 1.4993524e-05 -2.0106388e-05 -2.4438006e-05 -6.1875803e-06 1.0503914e-05 1.4206929e-05 4.8490783e-06 -7.2165277e-06 -9.5563098e-06 -2.4022880e-06 4.8375558e-06 6.0345013e-06 1.6747219e-06 -3.3535015e-06 -4.2177892e-06 -9.8251560e-07 2.3831484e-06 2.8794080e-06 6.9808228e-07 -1.7232236e-06 -2.0965689e-06 -4.4958556e-07 1.2787668e-06 1.5097409e-06 0.0000000e+00
-1.5097409e-06 1.2787668e-06 4.4958556e-07 -2.0965689e-06 1.7232236e-06 6.9808228e-07 -2.8794080e-06 2.3831484e-06 9.8251560e-07 -4.2177892e-06 3.3535015e-06 1.6747219e-06 -6.0345013e-06 4.8375558e-06 2.4022880e-06 -9.5563098e-06 7.2165277e-06 4.8490783e-06 -1.4206929e-05 1.0503914e-05 6.1875803e-06 -2.4438006e-05 2.0106388e-05 1.4993524e-05 -4.6428764e-05 3.2341312e-05 3.7409666e-05 -1.0277901e-04 2.4461957e-05 1.4971352e-04 -7.5592870e-05 -1.3991315e-04 -9.3512894e-05 1.6118982e-04 8.5950021e-04 -5.7818580e-04 -2.7021687e-03 2.1947753e-03 6.0455106e-03 -6.3867286e-03 -1.1044642e-02 1.5250913e-02 1.7403888e-02 -3.2094063e-02 -2.4321784e-02 6.3667301e-02 3.0621244e-02 -1.3269662e-01 -3.5048287e-02 4.4409503e-01 7.4375100e-01 4.4409503e-01 -3.5048287e-02 -1.3269662e-01 3.0621244e-02 6.3667301e-02 -2.4321784e-02 -3.2094063e-02 1.7403888e-02 1.5250913e-02 -1.1044642e-02 -6.3867286e-03 6.0455106e-03 2.1947753e-03 -2.7021687e-03 -5.7818580e-04 8.5950021e-04 1.6118982e-04 -9.3512894e-05 -1.3991315e-04 -7.5592870e-05 1.4971352e-04 2.4461957e-05 -1.0277901e-04 3.7409666e-05 3.2341312e-05 -4.6428764e-05 1.4993524e-05 2.0106388e-05 -2.4438006e-05 6.1875803e-06 1.0503914e-05 -1.4206929e-05 4.8490783e-06 7.2165277e-06 -9.5563098e-06 2.4022880e-06 4.8375558e-06 -6.0345013e-06 1.6747219e-06 3.3535015e-06 -4.2177892e-06 9.8251560e-07 2.3831484e-06 -2.8794080e-06 6.9808228e-07 1.7232236e-06 -2.0965689e-06 4.4958556e-07 1.2787668e-06 -1.5097409e-06 0.0000000e+00
0.0000000e+00 1.5097409e-06 1.2787668e-06 -4.4958556e-07 -2.0965689e-06 -1.7232236e-06 6.9808228e-07 2.8794080e-06 2.3831484e-06 -9.8251560e-07 -4.2177892e-06 -3.3535015e-06 1.6747219e-06 6.0345013e-06 4.8375558e-06 -2.4022880e-06 -9.5563098e-06 -7.2165277e-06 4.8490783e-06 1.4206929e-05 1.0503914e-05 -6.1875803e-06 -2.4438006e-05 -2.0106388e-05 1.4993524e-05 4.6428764e-05 3.2341312e-05 -3.7409666e-05 -1.0277901e-04 -2.4461957e-05 1.4971352e-04 7.5592870e-05 -1.3991315e-04 9.3512894e-05 1.6118982e-04 -8.5950021e-04 -5.7818580e-04 2.7021687e-03 2.1947753e-03 -6.0455106e-03 -6.3867286e-03 1.1044642e-02 1.5250913e-02 -1.7403888e-02 -3.2094063e-02 2.4321784e-02 6.3667301e-02 -3.0621244e-02 -1.3269662e-01 3.5048287e-02 4.4409503e-01 -7.4375100e-01 4.4409503e-01 3.5048287e-02 -1.3269662e-01 -3.0621244e-02 6.3667301e-02 2.4321784e-02 -3.2094063e-02 -1.7403888e-02 1.5250913e-02 1.1044642e-02 -6.3867286e-03 -6.0455106e-03 2.1947753e-03 2.7021687e-03 -5.7818580e-04 -8.5950021e-04 1.6118982e-04 9.3512894e-05 -1.3991315e-04 7.5592870e-05 1.4971352e-04 -2.4461957e-05 -1.0277901e-04 -3.7409666e-05 3.2341312e-05 4.6428764e-05 1.4993524e-05 -2.0106388e-05 -2.4438006e-05 -6.1875803e-06 1.0503914e-05 1.4206929e-05 4.8490783e-06 -7.2165277e-06 -9.5563098e-06 -2.4022880e-06 4.8375558e-06 6.0345013e-06 1.6747219e-06 -3.3535015e-06 -4.2177892e-06 -9.8251560e-07 2.3831484e-06 2.8794080e-06 6.9808228e-07 -1.7232236e-06 -2.0965689e-06 -4.4958556e-07 1.2787668e-06 1.5097409e-06

0 comments on commit 83ccf41

Please sign in to comment.