MFCC算法实现与计算教程

版权申诉
0 下载量 193 浏览量 更新于2024-10-22 收藏 1022B RAR 举报
资源摘要信息:"MFCC.rar_MFCC_calculo" MFCC,即梅尔频率倒谱系数(Mel Frequency Cepstral Coefficients),是一种广泛应用于语音识别和音频信号处理中的特征提取技术。它通过模拟人类听觉系统的非线性特性,将声音信号从时域转换到频域,并进一步提取出频谱特征,以达到压缩数据、增强识别准确性的目的。 在Slilab环境下进行MFCC系数的计算,涉及到了对声音信号进行预处理、快速傅里叶变换(FFT)、梅尔滤波器组处理、对数能量计算以及离散余弦变换(DCT)等多个步骤。Slilab是一个免费的科学软件系统,提供了一个交互式环境,用于数值计算、可视化以及程序设计。虽然Slilab主要用于教学和研究,但它的功能对于音频信号处理同样适用,可以用来实现MFCC算法。 在【描述】中提到的“Calculo dos coeficientes MFCC em Slilab”,意味着文件“MFCC.sci”是Slilab环境下的一个脚本文件,该文件包含了用于计算MFCC系数的源代码和相关函数定义。使用该脚本文件可以方便地在Slilab中实现MFCC的计算过程。 由于压缩包仅包含一个名为“MFCC.sci”的文件,我们可以假设该文件内含有以下知识点: 1. 信号预处理:在进行MFCC计算之前,通常需要对音频信号进行预处理,比如分帧、加窗等。分帧是将长语音信号分割成短帧,帧长通常为20~30ms;加窗是为了减少帧与帧之间的不连续性,常用的窗函数有汉明窗、汉宁窗等。 2. 快速傅里叶变换(FFT):预处理后的信号需要通过FFT转换到频域,从而获取其频率信息。FFT是一种高效计算离散信号离散傅里叶变换(DFT)及其逆变换的算法。 3. 梅尔滤波器组:根据人耳的听觉特性,将频谱划分为若干个带通滤波器组,并模拟人耳的非线性频率感知特性。梅尔刻度是一个基于人耳感知的频率刻度,与线性频率刻度不同,它在低频部分较为密集,在高频部分较为稀疏。 4. 对数能量计算:在梅尔滤波器组处理后,计算每个滤波器输出的能量。然后进行对数转换,这一步是为了更好地模拟人耳对声音响度的感知。 5. 离散余弦变换(DCT):将对数能量通过DCT转换,得到MFCC系数。DCT是一种类似于傅里叶变换的变换方法,能够把具有相关性的样本转换成彼此独立或者不相关的新样本,从而实现特征压缩。 6. 反梅尔滤波器组和重构:通常在MFCC的计算过程中还包含了反梅尔滤波器组和信号重构的步骤,以便于验证MFCC的计算结果。 文件“MFCC.sci”中可能还包含了Slilab特有的函数和语句,用于读取音频文件、处理数据和输出结果等。 在使用该脚本文件进行MFCC计算之前,用户需要确保已经安装了Slilab软件,并对Slilab的基本操作有所了解。脚本文件的具体使用方法和步骤可能需要结合Slilab的帮助文档或附加的说明文档来学习。 由于文件列表中仅有一个文件,相关的知识点只能限于这个文件可能涉及的内容。不过,对于熟悉Slilab和音频处理的用户来说,该脚本文件是一个实用的工具,可以用于自动执行MFCC的复杂计算过程,大大简化了手动计算的麻烦。
2023-07-15 上传

修改下面代码,另画一张可视化图展示出t_sne里面的数据每15行数据个用一种颜色画出。 import pandas as pd from sklearn import cluster from sklearn import metrics import matplotlib.pyplot as plt from sklearn.manifold import TSNE from sklearn.decomposition import PCA def k_means(data_set, output_file, png_file, t_labels, score_file, set_name): model = cluster.KMeans(n_clusters=7, max_iter=1000, init="k-means++") model.fit(data_set) # print(list(model.labels_)) p_labels = list(model.labels_) r = pd.concat([data_set, pd.Series(model.labels_, index=data_set.index)], axis=1) r.columns = list(data_set.columns) + [u'聚类类别'] print(r) # r.to_excel(output_file) with open(score_file, "a") as sf: sf.write("By k-means, the f-m_score of " + set_name + " is: " + str(metrics.fowlkes_mallows_score(t_labels, p_labels))+"\n") sf.write("By k-means, the rand_score of " + set_name + " is: " + str(metrics.adjusted_rand_score(t_labels, p_labels))+"\n") '''pca = PCA(n_components=2) pca.fit(data_set) pca_result = pca.transform(data_set) t_sne = pd.DataFrame(pca_result, index=data_set.index)''' t_sne = TSNE() t_sne.fit(data_set) t_sne = pd.DataFrame(t_sne.embedding_, index=data_set.index) plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False dd = t_sne[r[u'聚类类别'] == 0] plt.plot(dd[0], dd[1], 'r.') dd = t_sne[r[u'聚类类别'] == 1] plt.plot(dd[0], dd[1], 'go') dd = t_sne[r[u'聚类类别'] == 2] plt.plot(dd[0], dd[1], 'b*') dd = t_sne[r[u'聚类类别'] == 3] plt.plot(dd[0], dd[1], 'o') dd = t_sne[r[u'聚类类别'] == 4] plt.plot(dd[0], dd[1], 'm.') dd = t_sne[r[u'聚类类别'] == 5] plt.plot(dd[0], dd[1], 'co') dd = t_sne[r[u'聚类类别'] == 6] plt.plot(dd[0], dd[1], 'y*') plt.savefig(png_file) plt.clf() '''plt.scatter(data_set.iloc[:, 0], data_set.iloc[:, 1], c=model.labels_) plt.savefig(png_file) plt.clf()''' frog_data = pd.read_csv("D:/PyCharmPython/pythonProject/mfcc3.csv") tLabel = [] for family in frog_data['name']: if family == "A": tLabel.append(0) elif family == "B": tLabel.append(1) elif family == "C": tLabel.append(2) elif family == "D": tLabel.append(3) elif family == "E": tLabel.append(4) elif family == "F": tLabel.append(5) elif family == "G": tLabel.append(6) scoreFile = "D:/PyCharmPython/pythonProject/scoreOfClustering.txt" first_set = frog_data.iloc[:, 1:1327] k_means(first_set, "D:/PyCharmPython/pythonProject/kMeansSet_1.xlsx", "D:/PyCharmPython/pythonProject/kMeansSet_2.png", tLabel, scoreFile, "Set_1")

2023-07-12 上传
2023-05-30 上传