DTW 的使用假设在您的情况下验证 2 个音频序列。因此,对于要验证的序列,您将有一个矩阵 M1xN 和查询 M2xN。这意味着您的成本矩阵将具有 M1xM2。
要构建成本矩阵,您必须在序列之间应用距离/成本度量,如 cost(i,j) = your_chosen_multidimension_metric(M1[i,:],M2[j,:])
结果成本矩阵将是 2D,您可以轻松应用 DTW。
我基于 MFCC 为 DTW 制作了类似的代码。下面是返回 DTW 分数的 Python 实现;x 和 y 是语音序列的 MFCC 矩阵,具有 M1xN 和 M2xN 维度:
def my_dtw (x, y):
cost_matrix = cdist(x, y,metric='seuclidean')
m,n = np.shape(cost_matrix)
for i in range(m):
for j in range(n):
if ((i==0) & (j==0)):
cost_matrix[i,j] = cost_matrix[i,j]
elif (i==0):
cost_matrix[i,j] = cost_matrix[i,j] + cost_matrix[i,j-1]
elif (j==0):
cost_matrix[i,j] = cost_matrix[i,j] + cost_matrix[i-1,j]
else:
min_local_dist = cost_matrix[i-1,j]
if min_local_dist > cost_matrix[i,j-1]:
min_local_dist = cost_matrix[i,j-1]
if min_local_dist > cost_matrix[i-1,j-1]:
min_local_dist = cost_matrix[i-1,j-1]
cost_matrix[i,j] = cost_matrix[i,j] + min_local_dist
return cost_matrix[m-1,n-1]