音频数据的建模以外流程代码示例:通过讲话人的声音进行年龄预测
天水娱乐新闻网 2025-10-24
可以在此三处碰到多数瞬时在 ~100 到 ~1000 Hz 相互间(即 10² 到 10³ 相互间)。 另外,却是还有一些从 1'000 到 10'000 Hz 的素材。
3、时域由此可知
我们并不总是无需决定类比或波形。 应用于时域由此可知同时对此这两个科技领域当中的文档,同时将它们的西部差别保持稳定在上限限度。 有多种研究工作方法可以创立时域由此可知,但在本文当中将解说典型的三种。
3a 短时傅里叶叠加 (STFT)
这时是以前的快速傅立叶叠加的小型改编版,即短时傅立叶叠加 (STFT), 这种研究工作方法是以滑动窗口的研究工作方法数取值多个小时长窗口(因此特指“短时傅立叶”)的 FFT。
import librosa.display# Compute short-time Fourier Transformx_stft = np.abs(librosa.stft(y))# Apply logarithmic dB-scale to spectrogram and set maximum to 0 dBx_stft = librosa.amplitude_to_db(x_stft, ref=np.max)# Plot STFT spectrogramplt.figure(figsize=(12, 4))librosa.display.specshow(x_stft, sr=sr, x_axis="time", y_axis="log")plt.colorbar(format="%+2.0f dB")plt.show();与所有时域由此可知一样,颜色象征性在个数时长点个数高频率的比率(响度/音比率)。 +0dB 是最响亮的,-80dB 差不多静音。 在素质 x 轴上我们可以碰到时长,而在向上 y 轴上我们可以碰到只不过只不过一致的高频率。
3b 贝尔谱由此可知
作为 STFT 的替代方案,还可以数取值基于 mel 之比的贝尔时域由此可知。 这个微观解释了我们生命表征歌声声部的研究工作方法。 数取值 mel 之比,以便生命将由 mel 之比当中的 delta 隔着的两对高频率表征为不具备只不过一致的表征差别。
贝尔谱由此可知的数取值与 STFT 非常相似,主要区别于在于 y 轴应用于只不过只不过一致的刻度。
# Compute the mel spectrogramx_mel = librosa.feature.melspectrogram(y=y, sr=sr)# Apply logarithmic dB-scale to spectrogram and set maximum to 0 dBx_mel = librosa.power_to_db(x_mel, ref=np.max)# Plot mel spectrogramplt.figure(figsize=(12, 4))librosa.display.specshow(x_mel, sr=sr, x_axis="time", y_axis="mel")plt.colorbar(format="%+2.0f dB")plt.show();与 STFT 的区别于意味著不太明显,但如果仔细观察,就意味著会发现今 STFT 由此可知当中,从 0 到 512 Hz 的高频率在 y 轴上闲置的空间比在 mel 由此可知当中要大得多 .
3c 贝尔高频率倒谱系数 (MFCC)
贝尔高频率倒谱系数 (MFCC) 是上面贝尔时域由此可知的替代对此。 MFCC 相对于 贝尔谱由此可知的压倒性在于构造数比率较为再加(即契合的素质线之比),举例来说共约为 20。
由于贝尔时域由此可知更是差不多我们生命表征声部的研究工作方法,并且 MFCC 只有再加数几个标比率构造,所以大多数机缓冲器深造近来更是喜欢 应用于MFCC 以“由此可知像研究工作方法”对此音轨文档。 但是对于某些理由,STFT、mel 或时域对此意味著会更是好。
让我们独自数取值 mfcC 并绘制它们。
# Extract 'n_mfcc' numbers of MFCCs components (here 20)x_mfccs = librosa.feature.mfcc(y, sr=sr, n_mfcc=20)# Plot MFCCsplt.figure(figsize=(12, 4))librosa.display.specshow(x_mfccs, sr=sr, x_axis="time")plt.colorbar()plt.show(); 文档清洗现今我们更是好地表达出来了音轨文档的样子,让我们数据分析更是多示例。
在这四个示例当中,我们可以收集到有关此音轨文档集的更是多理由:
大多数磁带在磁带的开头和开首都有一段较长的静默期(示例 1 和示例 2)。 这是我们在“修剪”时应该请注意的心里。 在某些情况,由于按下和释放录音室按钮,这些静音期意味著会被“双击”当中断(参见示例 2)。 一些磁带没有这样的静音阶段,即一条平行(示例 3 和 4)。 在收看这些磁带时,有大比率背景干扰。为了更是好地表达出来这在波形当中是如何对此的,让我们看一下在在的 STFT 时域由此可知。
当问磁带时,可以观察到检验 3 不具备覆盖多个高频率的只不过只不过一致背景褐声,而检验 4 当中的背景褐声较为恒定。 这也是我们在上由此可知当中碰到的。 检验 3 在整个过程当中都非常嘈杂,而检验 4 仅仅在几个高频率上(即粗素质线)有褐声。 我们不意味著会简略讨论如何消除这种干扰,因为这时是出了本文的区域内。
但是让我们研究工作一下如何消除此类干扰并修剪音轨检验的“捷径”。 虽然应用于自订调制数组的更是手动的研究工作方法意味著在在音轨文档当中去除褐声的最佳研究工作方法,但在我们的举例当中,将中选应用于实用的 python 包 noisereduce。
import noisereduce as nrfrom scipy.io import wavfile# Loop through all four samplesfor i in range(4):# Load audio filefname = "c4_sample-%d.mp3" % (i + 1)y, sr = librosa.load(fname, sr=16_000)# Remove noise from audio samplereduced_noise = nr.reduce_noise(y=y, sr=sr, stationary=False)# Save output in a wav file as mp3 cannot be saved to directlywavfile.write(fname.replace(".mp3", ".wav"), sr, reduced_noise)聆问创立的 wav 文件,可以见到干扰差不多只不过消失了。 虽然我们还引入了更是多的代码,但总的来问道我们的去褐研究工作方法利大于弊。
对于修剪两步,可以应用于 librosa 的 .effects.Trim() 数组。每个文档集意味著无需一个只不过只不过一致的 top_db 数值来开展修剪,所以最好开展测试,刚才哪n-值取值好用。 在这个的举例当中,它是 top_db=20。
# Loop through all four samplesfor i in range(4):# Load audio filefname = "c4_sample-%d.wav" % (i + 1)y, sr = librosa.load(fname, sr=16_000)# Trim signaly_trim, _ = librosa.effects.trim(y, top_db=20)# Overwrite previous wav filewavfile.write(fname.replace(".mp3", ".wav"), sr, y_trim)现今让我们再看一下清除后的文档。
看样子好多了
构造提炼出文档是干净的,应该独自研究工作可以提炼出的特定于音轨的构造了。
1、开始测定
早先一个瞬时的时域,librosa可以很好地标识一个新字词后缀的开始。
# Extract onset timestamps of wordsonsets = librosa.onset.onset_detect(y=y, sr=sr, units="time", hop_length=128, backtrack=False)# Plot onsets together with waveform plotplt.figure(figsize=(8, 3))librosa.display.waveplot(y, sr=sr, alpha=0.2, x_axis="time")for o in onsets:plt.vlines(o, -0.5, 0.5, colors="r")plt.show()# Return number of onsetsnumber_of_words = len(onsets)print(f"{number_of_words} onsets were detected in this audio signal.")>>> 7 onsets were detected in this audio signal2、磁带的间隔
与此密切相关的是磁带的间隔。磁带越长,能问道的后缀就越多。所以数取值一下磁带的间隔和后缀被问道出的平均速度。
duration = len(y) / srwords_per_second = number_of_words / durationprint(f"""The audio signal is {duration:.2f} seconds long,with an average of {words_per_second:.2f} words per seconds.""")>>> The audio signal is 1.70 seconds long,>>> with an average of 4.13 words per seconds.3、乐句
语言是一种非常悦耳的瞬时,每个人都有自己契合的问道话研究工作方法和高潮时。因此,可以提炼出的另一个构造是问道话的乐句,即在音轨瞬时当中可以测定到的人声数。
# Computes the tempo of a audio recordingtempo = librosa.beat.tempo(y, sr, start_bpm=10)[0]print(f"The audio signal has a speed of {tempo:.2f} bpm.")>>> The audio signal has a speed of 42.61 bpm.4、方波
方波是周期歌声出现时的上限高频率。在音乐当中也被特指声部。在以前碰到的谱由此可知由此可知当中,方波(也特指f0)是由此可知像当中上限的亮素质条带。而在这个大体音顶上的块状由此可知案的重复特指谐波。
为了更是好地问道明确实意思,前面提炼出方波,并在谱由此可知当中画出它们。
# Extract fundamental frequency using a probabilistic approachf0, _, _ = librosa.pyin(y, sr=sr, fmin=10, fmax=8000, frame_length=1024)# Establish timepoint of f0 signaltimepoints = np.linspace(0, duration, num=len(f0), endpoint=False)# Plot fundamental frequency in spectrogram plotplt.figure(figsize=(8, 3))x_stft = np.abs(librosa.stft(y))x_stft = librosa.amplitude_to_db(x_stft, ref=np.max)librosa.display.specshow(x_stft, sr=sr, x_axis="time", y_axis="log")plt.plot(timepoints, f0, color="cyan", linewidth=4)plt.show();在 100 Hz 附近碰到的三条路是大体高频率。 但是如何将其运用于构造工程呢? 可以做的是数取值这个 f0 的具体构造。
# Computes mean, median, 5%- and 95%-percentile value of fundamental frequencyf0_values = [np.nanmean(f0),np.nanmedian(f0),np.nanstd(f0),np.nanpercentile(f0, 5),np.nanpercentile(f0, 95),]print("""This audio signal has a mean of {:.2f}, a median of {:.2f}, astd of {:.2f}, a 5-percentile at {:.2f} and a 95-percentile at {:.2f}.""".format(*f0_values))>>> This audio signal has a mean of 81.98, a median of 80.46, a>>> std of 4.42, a 5-percentile at 76.57 and a 95-percentile at 90.64.除以上问道的技术幸好,还有更是多可以冒险的音轨构造提炼出技术,这里就不简略问道明了。
音轨文档集的冒险性文档研究工作 (EDA)现今我们知道了音轨文档是什么样子以及如何三处理它,让我们对它开展适当的 EDA。 首先下载一个文档集Kaggle 的 Common Voice 。 这个 14 GB 的大文档集只是来自 Mozilla 的 +70 GB 大文档集的一个小的快照。 对于本文这里的示例,将只应用于这个文档集的大共约 9'000 个音轨文件的子检验。
刚才这个文档集和一些早就提炼出的构造。
1、构造分布区调查
能够类型年龄和性别角色的类型分布区。
能够类型分布区是不均衡的
下一步,让我们仔细刚才提炼出的构造的取值分布区。
除了 words_per_second,这些构造分布区当中的大多数都是右侧偏的,因此可以从下式类比当中获益。
import numpy as np# Applies log1p on features that are not age, gender, filename or words_per_seconddf = df.apply(lambda x: np.log1p(x)if x.name not in ["age", "gender", "filename", "words_per_second"]else x)# Let's look at the distribution once moredf.drop(columns=["age", "gender", "filename"]).hist(bins=100, figsize=(14, 10))plt.show();好多了,但无聊的是 f0 构造却是都不具备双峰分布区。 让我们绘制与以前只不过一致的素材,但这次按性别角色互换。
正如怀疑的那样,这里却是依赖于性别角色效应! 但也可以碰到,一些 f0 积分(这里特别是异性恋)比实质的低和高得多。 由于构造提炼出不良,这些意味著是极度取值。 仔细刚才下由此可知的所有文档点。
# Plot sample points for each feature individuallydf.plot(lw=0, marker=".", subplots=True, layout=(-1, 3),figsize=(15, 7.5), markersize=2)plt.tight_layout()plt.show();鉴于构造的数比率很再加,而且有较为好看的带有明显尾部的分布区,可以遍历它们当中的每一个,并逐个构造地确定极度取值截止阈取值。
2、构造的相关性
下一步,刚才所有构造相互间的相关性。 但在这样做以前无需对非数字能够构造开展编码。 可以应用于 scikit-learn 的 OrdinalEncoder 来拒绝执行此操作,但这意味著会破坏年龄构造当中的准确先后顺序。 因此在这里手动开展个数。
# Map age to appropriate numerical valuedf.loc[:, "age"] = df["age"].map({"teens": 0,"twenties": 1,"thirties": 2,"fourties": 3,"fifties": 4,"sixties": 5})# Map gender to corresponding numerical valuedf.loc[:, "gender"] = df["gender"].map({"male": 0, "female": 1})现今可以应用于 pandas 的 .corr() 数组和 seaborn 的 heatmap() 来更是深入地了解构造相关性。
import seaborn as snsplt.figure(figsize=(8, 8))df_corr = df.corr() * 100sns.heatmap(df_corr, square=True, annot=True, fmt=".0f",mask=np.eye(len(df_corr)), center=0)plt.show();非常无聊!提炼出的 f0 构造却是与性别角色能够有较为爆冷的关系,而年龄却是与任何其他的构造都没有太大的相关性。
3、时域由此可知构造
目前还没有查看实际磁带。 正如以前碰到的,有很多选项(即时域或 STFT、mel 或 mfccs 时域由此可知)。
音轨检验的间隔都只不过只不过一致,这意味着时域由此可知也意味著会有只不过只不过一致的间隔。 因此为了标准化所有磁带,首先要将它们剪切到正好 3 秒的间隔:太短的检验意味著会被填充,而太长的检验意味著会被剪丢。
一旦数取值了所有这些时域由此可知,我们就可以独自对它们拒绝执行一些 EDA! 而且因为碰到“性别角色”却是与磁带有类似于的关系,所以分别数据分析两种性别角色的平均值贝尔谱由此可知,以及它们的差别。
异性恋问道话者的平均值歌声略低于女性。 这可以通过差别由此可知当中的更高高频率(在红色素质区域内内当中碰到)的更是多爆冷度来看出。
框架选项现今早就可以开展建模了。我们有多种选项。关于框架,我们可以……
锻炼我们开端(即浅层)机缓冲器深造框架,例如 LogisticRegression 或 SVC。 锻炼深达深造框架,即深达神经网络。 应用于 TensorflowHub 的先为锻炼神经网络开展构造提炼出,然后在这些Senior构造上锻炼浅层或深层框架而我们锻炼的文档是
CSV 文件当中的文档,将其与时域由此可知当中的“mel 爆冷度”构造相紧密结合,并将文档普遍认为一栏文档集 实质上的贝尔谱由此可知并将它们普遍认为由此可知像文档集 应用于TensorflowHub整体框架提炼出的Senior构造,将它们与其他一栏文档紧密结合起来,并将其普遍认为一栏文档集当然,有许多只不过只不过一致的研究工作方法和其他研究工作方法可以为建模部分创立文档集。因为我们没有应用于全比率的文档,所以在本文我们应用于最简单的机缓冲器深造框架。
开端(即浅层)机缓冲器深造框架这里应用于EDA获取文档,与一个简单的 LogisticRegression 框架紧密结合起来,刚才我们能在多大程度上先为测问道话者的年龄。在在还应用于 GridSearchCV 来冒险只不过只不过一致的时是数值组合成,以及拒绝执行斜向验证。
from sklearn.linear_model import LogisticRegressionfrom sklearn.preprocessing import RobustScaler, PowerTransformer, QuantileTransformerfrom sklearn.decomposition import PCAfrom sklearn.pipeline import Pipelinefrom sklearn.model_selection import GridSearchCV# Create pipelinepipe = Pipeline([("scaler", RobustScaler()),("pca", PCA()),("logreg", LogisticRegression(class_weight="balanced")),])# Create gridgrid = {"scaler": [RobustScaler(), PowerTransformer(), QuantileTransformer()],"pca": [None, PCA(0.99)],"logreg短时C": np.logspace(-3, 2, num=16),}# Create GridSearchCVgrid_cv = GridSearchCV(pipe, grid, cv=4, return_train_score=True, verbose=1)# Train GridSearchCVmodel = grid_cv.fit(x_tr, y_tr)# Collect results in a DataFramecv_results = pd.DataFrame(grid_cv.cv_results_)# Select the columns we are interested incol_of_interest = ["param_scaler","param_pca","param_logreg短时C","mean_test_score","mean_train_score","std_test_score","std_train_score",]cv_results = cv_results[col_of_interest]# Show the dataframe sorted according to our performance metriccv_results.sort_values("mean_test_score", ascending=False)作为上述 DataFrame 编码器的多余,还可以将性能投篮绘制为冒险的时是数值的数组。 但是因为应用于了有多个缩放缓冲器和 PCA ,所以无需为每个实质上的时是数值组合成创立一个实质上的由此可知。
在由此可知当中,可以碰到总体而言框架的展示出同样亮眼。 当降低 C 的取值时,有些意味著会出现更是快的“急剧下降”,而另一些则显示锻炼和测试(这里基本上是验证)积分相互间的差距更是大,尤其是当我们不应用于 PCA 时。
前面应用于 best_estimator_ 框架,刚才它在保留的测试集上的展示出如何。
# Compute score of the best model on the withheld test setbest_clf = model.best_estimator_best_clf.score(x_te, y_te)>>> 0.4354094579008074这早就是一个很好的总分了。 但是为了更是好地表达出来形态学框架的展示出如何,可以墨水在在的混淆特征值。
虽然该框架能够测定到比其他框架更是多的 20 岁检验(右边混淆特征值),但总体而言,它基本上在对 10 岁和 60 岁的条目开展形态学方面效果更是好(例如,统计分析分别为 59% 和 55%)。
总结在这书评当中,首先碰到了音轨文档是什么样的,然后可以将其类比成哪些只不过只不过一致的形式,如何对其开展清除和冒险,再次如何将其运用于锻炼一些机缓冲器深造框架。如果您有任何理由,请随时发表纽约时报。
再次本文的自由软件在这里下载:
作者:Michael Notter
。治白癜风那家医院好承德哪个医院治疗白癜风最好
景德镇治疗白癜风医院费用

-
人民要论:加强数字化发展集中管理 推进数字中国建设
图片 2025-10-30平衡调试,广大老百姓群众利益也较难赢取义务。保护协调人在即。分类施策框架二进先以化转变管治的系统针对有所不同领域、有所不同主题的管治都可,《总体规划》坚信分类施策、灵巧施策,聚焦框架系

-
美防长将于本周前往欧洲 就乌克兰时局参加北约部长级会议
视频 2025-10-30当地时间2年底14日,American国防部发言人约翰·起先在国防部简短会上宣布,American国防部长奥斯汀将于本周前往法国、奥地利和立陶宛,就东欧和保加利亚的局势从根本上参加G-国防部长级会议,

-
春晚最美“青绿”全国专场再启动 国潮舞剧的爆款秘诀
音乐 2025-10-30的青绿调子,让她感受现代舞的简练,如果每一位芭蕾化作一抹色彩,《百之中的自是布》就能在银幕上活起来。整整八个翌年的创作者,编古装剧他的全团队随之构思人物与画作之中间的关系。为展览宋画现代之中的

-
信心不断恢复 1月中小企业演进指数连续3个月上升
八卦 2025-10-30原副标题:努力大幅恢复原 1同年中会小企业其发展百分比连续3个同年飙升来源:农业参考报中会小企业对其发展自然环境的努力大幅恢复原。最新公布的2022年1同年中会小企业其发展百分比为89

-
孕期睡不着?才行这5个⽅法,一觉睡到大天亮
八卦 2025-10-30口穿病患集中于,包括⼼辨配合与⽀握、适当体育练功、不致吗啡及尼古丁的辨⼊、可用炭剂等。极少数程度较再加的准妈妈如果⼀定无需口穿病患,可以在知情同意的上述完全,在医者⽣指导下⽤药性。 再⽐