crepePreprocess
CREPE深度学习网络音频预处理
语法
描述
例子
下载CREPE网络
下载并解压缩CREPE的音频工具箱™模型。
类型绉
在命令窗口。如果CREPE的Audio Toolbox模型未安装,则该函数将提供到网络权重位置的链接。要下载模型,请单击链接并将文件解压缩到MATLAB路径上的某个位置。
或者,执行这些命令下载CREPE模型并将其解压缩到临时目录。
下载文件夹= fullfile(tempdir,“crepeDownload”);loc = websave(下载文件夹,“https://ssd.mathworks.com/金宝appsupportfiles/audio/crepe.zip”);crepeLocation = tempdir;crepeLocation解压(loc)目录(fullfile (crepeLocation,“绉”))
通过输入检查安装是否成功绉
在命令窗口。如果已安装网络,则该函数返回DAGNetwork
(深度学习工具箱)对象。
绉
ans = DAGNetwork with properties: Layers: [34×1 nnet.cnn.layer.Layer] Connections: [33×2 table] InputNames: {'input'} OutputNames: {'pitch'}
加载预训练的CREPE网络
加载一个预先训练好的CREPE卷积神经网络,并检查层和类。
使用绉
加载预训练的CREPE网络。输出网
是一个DAGNetwork
(深度学习工具箱)对象。
净绉
net = DAGNetwork with properties: Layers: [34×1 nnet.cnn.layer.Layer] Connections: [33×2 table] InputNames: {'input'} OutputNames: {'pitch'}
命令查看网络结构层
财产。网络有34层。一共有13层可学习权重,其中6层是卷积层,6层是批处理归一化层,1层是全连接层。
网层
ans = 34×1带有图层的图层数组:1' input' Image input 1024×1×1 images 2' conv1' Convolution 1024 512×1×1 convolutions with stride [4 1] and padding 'same' 3 'conv1_relu' ReLU ReLU 4 'conv1- bn ' Batch Normalization Batch Normalization with 1024 channels 5 'conv1-maxpool' Max Pooling 2×1 Max Pooling with stride [2 1] and padding [0 0 0 0 0] 6 'conv1- Dropout ' Dropout 25% Dropout 7 'conv2' Convolution 128 64×1×1024 convolutions with stride [1 1] and padding 'same' 8 'conv2_relu' ReLU ReLU 9 'conv2- bn ' Batch Normalization Batch正常化128个频道10“conv2-maxpool”马克斯池2×1马克斯池步(2 - 1)和填充[0 0 0 0]11的conv2-dropout辍学25%辍学12 conv3卷积128×64×128旋转步[1]和填充“相同”13”conv3_relu ReLU ReLU 14“conv3-BN”批量标准化批量标准化与128个频道15“conv3-maxpool”马克斯池2×1马克斯池步(2 - 1)和填充[0 0 0 0]16“conv3-dropout”辍学25%辍学17 conv4卷积12864×1×128 convolutions with stride [1 1] and padding 'same' 18 'conv4_relu' ReLU ReLU 19 'conv4-BN' Batch Normalization Batch Normalization with 128 channels 20 'conv4-maxpool' Max Pooling 2×1 Max Pooling with stride [2 1] and padding [0 0 0 0 0] 21 'conv4-dropout' Dropout 25% Dropout 22 'conv5' Convolution 256 64×1×128 convolutions with stride [1 1] and padding 'same' 23 'conv5_relu' ReLU ReLU 24 'conv5- bn ' Batch Normalization Batch Normalization with 256 channels 25 'conv5-maxpool' Max Pooling2×1马克斯池步(2 - 1)和填充[0 0 0 0]26“conv5-dropout”辍学25%辍学27 conv6卷积512 64×1×256旋转步[1]和填充“相同”28日的conv6_relu ReLU ReLU 29“conv6-BN”批量标准化批量正常化30 512个频道“conv6-maxpool”马克斯池2×1马克斯池步(2 - 1)和填充[0 0 0 0]31“conv6-dropout”辍学25%辍学32“分类”完全连接360完全连接层33 classifier_sigmoid乙状结肠sigmoid 34 'pitch'回归输出均方误差
使用analyzeNetwork
(深度学习工具箱)为了直观地探索网络。
analyzeNetwork(净)
使用CREPE网络估计Pitch
CREPE网络需要对音频信号进行预处理,以生成缓冲的、重叠的和规范化的音频帧,这些音频帧可以用作网络的输入。这个例子演示了如何使用音频预处理crepePreprocess
并利用基音估计进行音频后处理crepePostprocess
.的pitchnn
函数为您执行这些步骤。
读入音频信号进行基音估计。想象并听音频。音频剪辑中有九段语音。
[audioIn,fs] = audioread(“SingingAMajor-16-mono-18secs.ogg”);soundsc(audioIn,fs) T = 1/fs;t = 0: t:(长度(audioIn)* t) - t;情节(t, audioIn);网格在轴紧包含(“时间(s)”) ylabel (“Ampltiude”)标题(《大调歌唱》)
使用crepePreprocess
将音频划分为1024个样本帧,连续的MEL频谱图之间有85%的重叠。沿着第四维空间放置框架。
[frames,loc] = crepePreprocess(audioIn,fs);
创建CREPE网络ModelCapacity
设置为小
.如果你打电话绉
在下载模型之前,一个错误会被打印到带有下载链接的命令窗口。
可丽饼(“ModelCapacity”,“小”);
预测网络激活。
activationsTiny =预测(netTiny,帧);
使用crepePostprocess
产生以赫兹为单位的基频距估计。通过设置禁用置信阈值设置ConfidenceThreshold
来0
.
f0Tiny = crepePostprocess(activationsTiny,“ConfidenceThreshold”, 0);
随着时间的推移,将音高估计可视化。
情节(loc f0Tiny)网格在轴紧包含(“时间(s)”) ylabel (“音调估计(Hz)”)标题('CREPE网络频率估计-阈值禁用')
禁用置信度阈值后,crepePostprocess
为每一帧提供一个pitch估计。增加了ConfidenceThreshold
来0.8
.
f0Tiny = crepePostprocess(activationsTiny,“ConfidenceThreshold”, 0.8);
随着时间的推移,将音高估计可视化。
情节(loc f0Tiny,“线宽”3)网格在轴紧包含(“时间(s)”) ylabel (“音调估计(Hz)”)标题(CREPE网络频率估计-启用阈值)
创建一个新的CREPE网络ModelCapacity
设置为完整的
.
netFull = crepe(“ModelCapacity”,“全部”);
预测网络激活。
activationsFull =预测(netFull,帧);f0Full = crepePostprocess(激活满,“ConfidenceThreshold”, 0.8);
想象音调估计。有九种主要的音调估计组,每一组对应九种发声中的一种。
情节(loc f0Full,“线宽”3)网格在包含(“时间(s)”) ylabel (“音调估计(Hz)”)标题(CREPE网络频率估计-满)
找出与最后一次发声相对应的时间元素。
roundedLocVec = round(loc,2);lastUtteranceBegin = find(roundedLocVec == 16);lastUtteranceEnd = find(roundedLocVec == 18);
为简单起见,将话语组中最频繁出现的音调估计作为该时间跨度的基本频率估计。生成一个与最后一次发声的音调估计频率匹配的纯音。
lastutteranceestimate = mode(f0Full(lastUtteranceBegin:lastUtteranceEnd))
lastUtteranceEstimation =单217.2709
的值lastUtteranceEstimate
的217.3
赫兹。对应注A3。将合成的音调叠加在最后一个发声的话语上,以便在听觉上比较两者。
lastVocalUtterance = audioIn(fs*16:fs*18);newTime = 0:T:2;compareTone = cos(2*pi* lastutteranceestimate *newTime).';soundsc(lastVocalUtterance + compareTone,fs);
调用光谱图
更仔细地检查歌唱的频率内容。使用的帧大小为250
样本和重叠的225
样本或90%。使用4096
变换的DFT点。的光谱图
揭示了声乐录音实际上是一组由多个频率组成的复杂和声。
光谱图(fs audioIn, 250225年,4096年,“桠溪”)
输入参数
audioIn
- - - - - -输入信号
列向量|矩阵
输入信号,指定为列向量或矩阵。如果你指定一个矩阵,crepePreprocess
将矩阵的列作为单独的音频通道。
数据类型:单
|双
fs
- - - - - -采样率(Hz)
积极的标量
输入信号的采样率(以Hz为单位),指定为正标量。
数据类型:单
|双
人事处
- - - - - -连续音频帧之间的重叠百分比
85
(默认)|范围[0,100]内的非负标量
连续音频帧之间的重叠百分比,由逗号分隔的对组成“OverlapPercentage”
和一个范围为[0,100)的标量。
数据类型:单
|双
输出参数
帧
-可以馈送到CREPE预训练网络的音频帧
1024
——- - - - - -1
——- - - - - -1
——- - - - - -N数组
处理过的音频帧,返回为1024
——- - - - - -1
——- - - - - -1
——- - - - - -N数组,N是生成的帧数。
请注意
对于多通道输入,生成帧
沿着第四维空间按通道堆叠。例如,如果audioIn
是立体信号,产生了多少帧
对于每个通道实际上N/ 2
.第一个N/ 2
帧
对应通道1及其后N/ 2
帧
对应通道2。
数据类型:单
|双
疯狂的
-时间值
1
——- - - - - -N向量
与每一帧相关联的时间值,返回为1
——- - - - - -N向量,N是生成的帧数。时间值对应于用于计算帧的最新样本。
数据类型:单
|双
参考文献
[1]金,钟旭,贾斯汀·萨拉蒙,彼得·李和胡安·巴勃罗·贝罗。Crepe:一种用于音高估计的卷积表示在2018 IEEE声学、语音和信号处理国际会议(ICASSP), 161 - 65。卡尔加里,AB: IEEE, 2018。https://doi.org/10.1109/ICASSP.2018.8461329。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
本功能完全支持GPU阵列。金宝app有关更多信息,请参见在图形处理器上运行MATLAB函数(并行计算工具箱).
版本历史
R2021a中引入
另请参阅
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。