主要内容

变换

转换音频数据存储

描述

例子

transformDatastore=变换(广告@fcn控件的输出转换为新的数据存储函数。

例子

transformDatastore=变换(广告@fcn名称,值使用一个或多个指定选项名称,值对参数。

例子

全部折叠

指定audio Toolbox™中包含的音频示例的文件路径。创建指向指定文件夹的音频数据存储。

文件夹= fullfile (matlabroot,“工具箱”“音频”“样本”);广告= audioDatastore(文件夹);

调用变换创建一个将多通道信号混合成单声道信号的新数据存储。

ADSnew =变换(广告,@ (x)的意思是(x, 2));

从新的数据存储中读取,并确认它只输出单声道信号。

hasdata(ADSnew)音频=读取(ADSnew);流('通道数= %d\n'、尺寸(音频、2))结束
通道的数量= 1频道的数量= 1频道的频道数量= 1 = 1频道的频道数量= 1 = 1频道的频道数量= 1 = 1频道的频道数量= 1 = 1频道的频道数量= 1 = 1频道的频道数量= 1 = 1的频道数量= 1通道的数量= 1频道的数量= 1频道的频道数量= 1 = 1频道的频道数量= 1 = 1频道的频道数量= 1 = 1频道的频道数量= 1 = 1频道的频道数量= 1 = 1频道的频道数量= 1 = 1的频道数量= 1通道数= 1通道数= 1通道数= 1通道数= 1

audio Toolbox™中包含的音频示例具有不同的持续时间。使用变换函数自定义函数,以便它输出一个随机的5秒音频样本片段。

指定音频工具箱中包含的音频示例的文件路径。创建指向指定文件夹的音频数据存储。

文件夹= fullfile (matlabroot,“工具箱”“音频”“样本”);广告= audioDatastore(文件夹);

对象的输出定义一个函数作为输入函数。使该函数从音频信号中提取5秒值的数据。

函数[dataOut,info] = extractSegment(audioIn,info) [N,numChan] = size(audioIn);newN =圆(info.SampleRate * 5);如果newN > N%信号长度< 5秒numPad = newN - N + 1;dataOut = [audioIn; 0 (numChan数字键盘,“喜欢”audioIn)];elseifnewN < N%信号长度> 5秒start = randi(N - newN + 1);dataOut = audioIn(启动:启动+ newN-1:);其他的%信号长度== 5秒dataOut = audioIn;结束结束

调用变换创建一个TransformedDatastore转换设置为您定义的函数。

ADSnew =变换(广告、@extractSegment“IncludeInfo”,真正的)
ADSnew = TransformedDatastore with properties: UnderlyingDatastores: {audioDatastore} 金宝appSupportedOutputFormats: ["txt" "csv" "xlsx" "xls"…{@extractSegment} IncludeInfo: 1

读取前三个音频文件,并验证输出是5秒段。

i = 1:3[音频,信息]=读取(ADSnew);流('Duration = %d秒\n'、大小(音频,1)/ info.SampleRate)结束
Duration = 5 seconds Duration = 5 seconds持续时间= 5秒

使用变换要创建一个音频数据存储,从函数。

指定audio Toolbox™中包含的音频示例的文件路径。创建指向指定文件夹的音频数据存储。

文件夹= fullfile (matlabroot,“工具箱”“音频”“样本”);广告= audioDatastore(文件夹);

定义一个函数,将音频数据从时域表示转换为日志mel谱图。函数的附加输出melSpectrogram函数的信息结构体输出从读取音频数据存储。

函数[dataOut,infoOut] = extractMelSpectrogram(audioIn,info) [S,F,T] = melSpectrogram(audioIn,info. samplerate);dataOut = 10 * log10 (S + eps);infoOut =信息;infoOut。CenterFrequencies = F;infoOut。TimeInstants = T;结束

调用变换创建一个TransformedDatastore转换设置为extractMelSpectrogram

ADSnew =变换(广告、@extractMelSpectrogram“IncludeInfo”,真正的)
ADSnew = TransformedDatastore with properties: UnderlyingDatastores: {audioDatastore} 金宝appSupportedOutputFormats: ["txt" "csv" "xlsx" "xls"…{@extractMelSpectrogram} IncludeInfo: 1

阅读前三个音频文件并绘制日志mel谱图。如果有多个频道,只绘制第一个频道。

i = 1:3 [melSpec,info] = read(ADSnew);图(我)冲浪(info.TimeInstants、info.CenterFrequencies melSpec (:,: 1),“EdgeColor”“没有”);包含(“时间(s)”) ylabel (的频率(赫兹)) [~,name] = fileparts(info.FileName);title(name)轴([0 info.TimeInstants(end) info.CenterFrequencies(1) info.CenterFrequencies(end)])视图([0,90])结束

图中包含一个轴对象。标题为Ambiance-16-44p1-mono-12secs的axis对象包含一个类型为surface的对象。

图中包含一个轴对象。标题为AudioArray-16-16-4channels-20secs的axis对象包含一个类型为surface的对象。

图中包含一个轴对象。标题为ChurchImpulseResponse-16-44p1-mono-5secs的轴对象包含一个类型为surface的对象。

使用变换创建返回特征向量的音频数据存储。

指定audio Toolbox™中包含的音频示例的文件路径。创建指向指定文件夹的音频数据存储。

文件夹= fullfile (matlabroot,“工具箱”“音频”“样本”);广告= audioDatastore(文件夹);

定义一个函数,extractFeatureVector,它将音频数据从时域表示转换为特征向量。

函数[dataOut,信息]= extractFeatureVector (audioIn信息)%转换为频域表示windowLength = 256;overlapLength = 128;[~ f ~ S] =光谱图(意思是(audioIn, 2),...损害(windowLength“周期”),...overlapLength,...windowLength,...信息。SampleRate,...“权力”...“单向的”);%提取特征[峰度,传播,重心]= spectralKurtosis (S、f);偏态= spectralSkewness (S、f);佳洁士= spectralCrest (S、f);减少= spectralDecrease (S、f);熵= spectralEntropy (S、f);平面度= spectralFlatness (S、f);通量= spectralFlux (S、f);滚边= spectralRolloffPoint (S、f);斜率= spectralSlope (S、f);%连接以创建特征向量dataOut =[峰度,传播,重心偏态,波峰,减少,熵,平坦,通量,滚边,斜率);结束

调用变换创建一个TransformedDatastore转换设置为extractFeatureVector

ADSnew =变换(广告、@extractFeatureVector“IncludeInfo”,真正的)
ADSnew = TransformedDatastore with properties: UnderlyingDatastores: {audioDatastore} 金宝appSupportedOutputFormats: ["txt" "csv" "xlsx" "xls"…{@extractFeatureVector

调用返回音频随时间变化的特征向量。

featureMatrix =阅读(ADSnew);[numFeatureVectors, numFeatures] =大小(featureMatrix)
numFeatureVectors = 4215 numFeatures = 11

使用变换创建一个音频数据存储,在从函数。

指定audio Toolbox™中包含的音频示例的文件路径。创建指向指定文件夹的音频数据存储。

文件夹= fullfile (matlabroot,“工具箱”“音频”“样本”);广告= audioDatastore(文件夹);

定义一个函数,applyBandpassFilter,它应用了一个通频带在1到15 kHz之间的带通滤波器。

函数[audioOut,info] = applyBandpassFilter(audioIn,info) audioOut = bandpass(audioIn,[1e3,15e3],info. samplerate);结束

调用变换创建一个TransformedDatastore转换设置为applyBandpassFilter

ADSnew =变换(广告、@applyBandpassFilter“IncludeInfo”,真正的)
ADSnew = TransformedDatastore with properties: UnderlyingDatastores: {audioDatastore} 金宝appSupportedOutputFormats: ["txt" "csv" "xlsx" "xls"…转换:{@applyBandpassFilter} IncludeInfo: 1

调用从转换数据存储返回带通过滤的音频。调用从原始数据存储返回带通过滤的音频。绘制光谱图来可视化差异。

[audio1, info1] =阅读(广告);[audio2, info2] =阅读(ADSnew);
光谱图(audio1损害(512),256512年,info1。SampleRate,“桠溪”)标题(原始信号的

图中包含一个轴对象。标题为Original Signal的axis对象包含一个类型为image的对象。

光谱图(audio2损害(512),256512年,info2。SampleRate,“桠溪”)标题(“过滤信号”

图中包含一个轴对象。标题为Filtered Signal的axis对象包含一个类型为image的对象。

输入参数

全部折叠

音频数据存储,指定为audioDatastore对象。

转换数据的函数,指定为函数句柄。函数的签名依赖于IncludeInfo参数。

  • 如果IncludeInfo被设置为(默认),该函数转换音频输出.的信息输出是不变的。

    transform函数必须有这样的签名:

    函数dataOut = fcn(音频)...结束

  • 如果IncludeInfo被设置为真正的,该函数将音频输出转换为,并可以使用或修改返回的信息

    transform函数必须有这样的签名:

    函数[dataOut, infoOut] = fcn(音频、infoIn)...结束

名称-值参数

指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:IncludeInfo,特遣部队

通过定制的read函数传递信息,指定为真正的.如果真正的,转换函数可以使用或修改它从中获得的信息.如果未指定的,IncludeInfo默认为

数据类型:逻辑

输出参数

全部折叠

自定义的新数据存储,返回为TransformedDatastoreUnderlyingDatastore设置为广告转换设置为fcn,IncludeInfo设置为真正的

介绍了R2019a