Skip to content

Commit 55d4ad1

Browse files
authored
Merge pull request #32 from janLuke/master
This fixes the output type of the delta function and rewrites it in a more vectorial form
2 parents f093f32 + ce1febb commit 55d4ad1

1 file changed

Lines changed: 8 additions & 6 deletions

File tree

python_speech_features/base.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -179,10 +179,12 @@ def delta(feat, N):
179179
:param N: For each frame, calculate delta features based on preceding and following N frames
180180
:returns: A numpy array of size (NUMFRAMES by number of features) containing delta features. Each row holds 1 delta feature vector.
181181
"""
182+
if N < 1:
183+
raise ValueError('N must be an integer >= 1')
182184
NUMFRAMES = len(feat)
183-
feat = numpy.concatenate(([feat[0] for i in range(N)], feat, [feat[-1] for i in range(N)]))
184-
denom = sum([2*i*i for i in range(1,N+1)])
185-
dfeat = []
186-
for j in range(NUMFRAMES):
187-
dfeat.append(numpy.sum([n*feat[N+j+n] for n in range(-1*N,N+1)], axis=0)/denom)
188-
return dfeat
185+
denominator = 2 * sum([i**2 for i in range(1, N+1)])
186+
delta_feat = numpy.empty_like(feat)
187+
padded = numpy.pad(feat, ((N, N), (0, 0)), mode='edge') # padded version of feat
188+
for t in range(NUMFRAMES):
189+
delta_feat[t] = numpy.dot(numpy.arange(-N, N+1), padded[t : t+2*N+1]) / denominator # [t : t+2*N+1] == [(N+t)-N : (N+t)+N+1]
190+
return delta_feat

0 commit comments

Comments
 (0)