createDatastores
構文
説明
[
は、名前と値の引数を使用して追加オプションを指定します。sigData
,lblData
] = createDatastores(lss
,lblNames
,Name=Value
)
この構文を使用するには、
lblNames
でroiTimeFrequency
のラベルの定義を指定しなければなりません。ラベル付き信号セットlss
内でどのラベルの定義がroiTimeFrequency
であるかを確認するには、getLabelDefinitions(lss,LabelType="roiTimeFrequency")
と入力します。複数の名前と値の引数を指定できます。以下に例を示します。
ラベル付き信号セット[sigData,lblData] = createDatastores(lss,"Atom", ... TimeFrequencyMapFormat="image",TimeFrequencyLabelFormat="mask")
lss
、および時間-周波数 ROI のラベルの定義"Atom"
から、データストアを作成します。createDatastores
関数は、sigData
に時間-周波数マップ イメージを返し、lblData
に ROI 時間-周波数ラベル マスクを返します。
(R2025a 以降)
例
クジラの歌の録音を含むラベル付き信号セットを読み込みます。
load whales
lss
lss = labeledSignalSet with properties: Source: {2×1 cell} NumMembers: 2 TimeInformation: "sampleRate" SampleRate: 4000 Labels: [2×3 table] Description: "Characterize wave song regions" Use labelDefinitionsHierarchy to see a list of labels and sublabels. Use setLabelValue to add data to the set.
セットの最初のメンバーのラベルを表示します。
lss.Labels(1,:)
ans=1×3 table
WhaleType MoanRegions TrillRegions
_________ ___________ ____________
Member{1} blue {3×2 table} {1×3 table}
セット内のラベルの名前を取得します。信号情報を使用して信号データストアを作成し、ラベル情報を使用して配列データストアを作成します。
lbls = getLabelNames(lss); [sgd,lbd] = createDatastores(lss,lbls)
sgd = signalDatastore with properties: MemberNames:{ 'Member{1}'; 'Member{2}' } Members: {2×1 cell} ReadSize: 1 SampleRate: 4000 OutputDataType: "same" OutputEnvironment: "cpu"
lbd = ArrayDatastore with properties: ReadSize: 1 IterationDimension: 1 OutputType: "cell"
セットの最初のメンバーのラベルを表示します。
lbls = read(lbd); lbls{:}
ans=1×3 table
WhaleType MoanRegions TrillRegions
_________ ___________ ____________
blue {3×2 table} {1×3 table}
MATLAB® に MAT ファイルとして含まれているオーディオ信号セットへのパスを指定します。各ファイルには、信号変数とサンプル レートが格納されています。ファイル名をリストします。
folder = fullfile(matlabroot,"toolbox","matlab","audiovideo"); lst = dir(append(folder,"/*.mat")); nms = {lst(:).name}'
nms = 7×1 cell
{'chirp.mat' }
{'gong.mat' }
{'handel.mat' }
{'laughter.mat'}
{'mtlb.mat' }
{'splat.mat' }
{'train.mat' }
指定したフォルダーを示す信号データストアを作成します。サンプル レート変数名を Fs
に設定します。これは、すべてのファイルで共通です。ファイル mtlb.mat
を除くデータストアのサブセットを生成します。サブセット データストアをlabeledSignalSet
オブジェクトのソースとして使用します。
sds = signalDatastore(folder,SampleRateVariableName="Fs"); sds = subset(sds,~strcmp(nms,"mtlb.mat")); lss = labeledSignalSet(sds);
信号にラベルを付けるために、次の 3 つのラベルの定義を作成します。
人間の声を含む信号を真とする論理属性ラベルを定義。
各信号の最大値の位置と振幅を示す数値ポイント ラベルを定義。
各信号にオーバーラップのない、長さが均一なランダム領域を選択するためのカテゴリカル関心領域 (ROI) ラベルを定義。
この信号ラベルの定義をラベル付き信号セットに追加します。
vc = signalLabelDefinition("Voice",LabelType="attribute", ... LabelDataType="logical",DefaultValue=false); mx = signalLabelDefinition("Maximum",LabelType="point", ... LabelDataType="numeric"); rs = signalLabelDefinition("RanROI",LabelType="ROI", ... LabelDataType="categorical",Categories=["ROI" "other"]); addLabelDefinitions(lss,[vc mx rs])
信号にラベルを付けます。
人間の声を含むものとして、
'handel.mat'
と'laughter.mat'
にラベルを付けます。関数
islocalmax
を使用して、各信号の最大値を求めます。その位置と値にラベルを付けます。関数
randROI
を使用して、領域間の最小間隔が N/6 サンプルの場合に長さ N の信号に収まるだけの長さ N/10 サンプルの領域を生成します。それらの位置にラベルを付け、ROI
カテゴリに割り当てます。
点と領域にラベルを付けるときに、サンプル値を時間値に変換します。MATLAB 配列のインデックス付けを考慮して 1 を減算し、サンプル レートで除算します。
kj = 1; while hasdata(sds) [sig,info] = read(sds); fs = info.SampleRate; [~,fn] = fileparts(info.FileName); if fn=="handel" || fn=="laughter" setLabelValue(lss,kj,"Voice",true) end xm = find(islocalmax(sig,MaxNumExtrema=1)); setLabelValue(lss,kj,"Maximum",(xm-1)/fs,sig(xm)) N = length(sig); rois = randROI(N,round(N/10),round(N/6)); setLabelValue(lss,kj,"RanROI",(rois-1)/fs, ... repelem("ROI",size(rois,1))) kj = kj+1; end
2 つの信号にのみ音声が含まれていることを確認します。
countLabelValues(lss,"Voice")
ans=2×3 table
Voice Count Percent
_____ _____ _______
false 4 66.667
true 2 33.333
この 2 つの信号の最大振幅が 1 であることを確認します。
countLabelValues(lss,"Maximum")
ans=5×4 table
Maximum Count Percent MemberCount
______________________ _____ _______ ___________
0.80000000000000004441 1 16.667 1
0.89113331915798421612 1 16.667 1
0.94730769230769229505 1 16.667 1
1 2 33.333 2
1.0575668990330560071 1 16.667 1
各信号に、オーバーラップのない 4 つのランダムな関心領域があることを確認します。
countLabelValues(lss,"RanROI")
ans=2×4 table
RanROI Count Percent MemberCount
______ _____ _______ ___________
ROI 24 100 6
other 0 0 0
ラベル付き信号セットのデータを使用して 2 つのデータストアを作成します。
signalDatastore
オブジェクトsd
には信号データが格納される。arrayDatastore
オブジェクトld
にはラベル付け情報が格納される。作成したすべてのラベルに対応する情報を含めるように指定します。
[sd,ld] = createDatastores(lss,["Voice" "RanROI" "Maximum"]);
データストアの情報を使用して、信号をプロットし、それらのラベルを表示します。
signalMask
オブジェクトを使用して、関心領域を青色で強調表示。最大値の位置を示すために黄色の線をプロット。
人間の声を含む信号に対して赤色の軸ラベルを追加。
tiledlayout flow while hasdata(sd) [sg,nf] = read(sd); lbls = read(ld); nexttile msk = signalMask(lbls{:}.RanROI{:},SampleRate=nf.SampleRate); plotsigroi(msk,sg) colorbar off xlabel('') xline(lbls{:}.Maximum{:}.Location, ... LineWidth=2,Color="#EDB120") if lbls{:}.Voice{:} ylabel("VOICED",Color="#D95319") end end
function roilims = randROI(N,wid,sep) num = floor((N+sep)/(wid+sep)); hq = histcounts(randi(num+1,1,N-num*wid-(num-1)*sep),(1:num+2)-1/2); roilims = (1 + (0:num-1)*(wid+sep) + cumsum(hq(1:num)))' + [0 wid-1]; end
R2025a 以降
時間-周波数関心領域 (ROI) ラベルの定義、およびスペクトログラム オプションを使用して、時間-周波数領域でガウス原子にラベルを付けます。
信号の生成とスペクトログラムの可視化
電圧制御発振器と 4 つのガウス原子で構成される信号を生成します。この信号は 14 kHz で 2 秒間サンプリングされます。信号のスペクトログラムをプロットします。
Fs = 14000; t = (0:1/Fs:2)'; st = 0.01; gaussFun = @(A,x,mu,f) exp(-(x-mu).^2/(2*st^2)).*sin(2*pi*f.*x)*A'; atomTimeCenters = [0.2 0.5 1 1.75]; atomFreqCenters = [2 6 2 5]*1000; s = gaussFun([1 1 1 1]/10,t,atomTimeCenters,atomFreqCenters); x = vco(chirp(t+.1,0,t(end),3).*exp(-2*(t-1).^2),[0.1 0.4]*Fs,Fs); s = s/10+x; bt = 0.2; tr = 0.05; op = 99; pspectrum(s,Fs,"spectrogram", ... Leakage=bt,TimeResolution=tr,OverlapPercent=op)
このスペクトログラムには、ガウス原子に対応する時間-周波数領域の 4 つのパッチが表示されます。すべての原子の時間と周波数を定義します。
atomTimes = atomTimeCenters'+[-st st]*5.5; atomFreqs = atomFreqCenters'+[-1 1]*200;
時間-周波数領域における信号へのラベル付け
ガウス原子にラベルを付けるため、logical の時間-周波数 ROI ラベルの定義を作成します。漏れ特性をもつスペクトログラム オプションを指定します。
opts = labelSpectrogramOptions("leakage", ... Leakage=40*(1-bt),Overlap=op, ... TimeResolutionMode="specify",TimeResolution=tr); lblDef = signalLabelDefinition("Atom", ... LabelDataType="logical", ... LabelType="roiTimeFrequency",TimeFrequencyOptions=opts);
信号と時間-周波数 ROI ラベルの定義からラベル付き信号セットを作成します。
lss = labeledSignalSet(s,lblDef,SampleRate=Fs);
時間-周波数領域で 4 つの原子にラベルを付けます。ラベルの値を true
に設定します。
setLabelValue(lss,1,"Atom",atomTimes,atomFreqs,true(1,4))
時間-周波数イメージとラベル マスクの可視化
時間-周波数 ROI ラベルのラベル付き信号セットからデータストアを作成します。
imSize = [512 768]; [sds,ads] = createDatastores(lss,"Atom", ... TimeFrequencyMapFormat="image", ... TimeFrequencyImageSize=imSize, ... TimeFrequencyLabelFormat="mask", ... TimeFrequencyMaskPriority=true);
時間-周波数イメージを読み取って表示します。
imagesc(read(sds))
ラベル マスクを読み取り、時間-周波数イメージの上に表示します。
lbl = read(ads); im = zeros([imSize 3]); im(:,:,1) = lbl{1}; hold on imagesc(im,AlphaData=0.5*lbl{1}) hold off
入力引数
ラベル付き信号セット。labeledSignalSet
オブジェクトとして指定します。
例:
は、属性 labeledSignalSet
({randn(100,1) randn(10,1)},signalLabelDefinition("female"))"female"
を含むランダム信号の 2 つのメンバーのセットを指定します。
ラベル名。文字ベクトル、string スカラー、文字ベクトルの cell 配列、または string 配列として指定します。
データ型: char
| string
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: [sds,ads] = createDatastores(lss,"Atom",TimeFrequencyMapFormat="image",TimeFrequencyLabelFormat="mask")
は、ラベル付き信号セット lss
、および時間-周波数 ROI のラベルの定義 "Atom"
から、データストアを作成します。createDatastores
関数は、sds
に時間-周波数マップ イメージを返し、ads
に ROI 時間-周波数ラベル マスクを返します。
時間-周波数マップの形式。次のいずれかの値として指定します。
"map"
—createDatastores
は、メンバー信号を M 行 N 列の行列として格納します。ここで、M は周波数ビンの数、N は時間ウィンドウの数です。各行列は、スペクトログラムの振幅を dB 単位で表したグレースケール マップを表します。"image"
—createDatastores
は、メンバー信号を M×N×3 の配列として格納します。ここで、M は周波数ビンの数、N は時間ウィンドウの数です。各配列は、スペクトログラムの振幅のイメージを dB 単位で表します。各配列の 3 番目の次元は、赤、緑、および青の色の強度を表します。
TimeFrequencyMapFormat
を指定すると、createDatastores
は、いずれかの形式オプションをもつ TransformedDatastore
オブジェクトとして sigData
を返します。TimeFrequencyImageSize
でこれらの次元を指定しない限り、この関数は M と N を自動的に選択します。
この入力引数を使用するには、lblNames
で roiTimeFrequency
のラベルの定義を指定しなければなりません。
データ型: char
| string
時間-周波数イメージのサイズ。正の整数の 2 要素ベクトルとして指定します。
TimeFrequencyImageSize
をベクトル [M N] として指定した場合、createDatastores
は、TimeFrequencyMapFormat
を "image"
として設定し、メンバー信号を M×N×3 の配列として格納します。ここで、M は周波数ビンの数、N は時間ウィンドウの数です。各配列は、スペクトログラムの振幅のイメージを dB 単位で表します。各配列の 3 番目の次元は、赤、緑、および青の色の強度を表します。
この入力引数を使用するには、lblNames
で roiTimeFrequency
のラベルの定義を指定しなければなりません。
データ型: double
| single
時間-周波数ラベルの形式。次のいずれかの値として指定します。
"mask"
—createDatastores
は、メンバー信号のラベルを M 行 N 列の行列として格納します。ここで、M は周波数ビンの数、N は時間ウィンドウの数です。各行列の各値は、対応する信号の時間-周波数マップと同じインデックスのラベル値を表します。"xywh"
—createDatastores
は、メンバー信号のラベルを、ラベル値の各インスタンスを記述する 4 要素ベクトル [x y w h] として格納します。ここで、次のようになります。x はラベル行列の開始列を表します。
y はラベル行列の開始行を表します。
w はラベルが何列にわたるかを表します。
h はラベルが何行にわたるかを表します。
"xyMinMax"
—createDatastores
は、メンバー信号のラベルを、ラベル値の各インスタンスを記述する 4 要素ベクトル [xMin xMax yMin yMax] として格納します。ここで、次のようになります。xMin は、時間-周波数マップの x 軸の単位における x の最小値を表します。
xMax は、時間-周波数マップの x 軸の単位における x の最大値を表します。
yMin は、時間-周波数マップの y 軸の単位における y の最小値を表します。
yMax は、時間-周波数マップの y 軸の単位における y の最大値を表します。
TimeFrequencyMapFormat
を指定すると、この関数は、いずれかの形式オプションをもつ arrayDatastore
オブジェクトとして lblData
を返します。
この入力引数を使用するには、lblNames
で roiTimeFrequency
のラベルの定義を指定しなければなりません。
データ型: char
| string
時間-周波数マップのマスク優先度。true
、false
、"ascending"
、"descending"
、string のベクトル、または文字ベクトルの cell 配列として指定します。TimeFrequencyMaskPriority
は、重なり合うラベルの階層構造を指定します。
lss
で指定されたラベル付き信号セットのラベルのデータ型に応じて、TimeFrequencyMaskPriority
の値を指定します。
lss.LabelDataType
が"logical"
である場合、TimeFrequencyMaskPriority
を次のいずれかの値として指定します。true
— この関数は、値が"false"
であるラベルよりも値が"true"
であるラベルを優先します。false
— この関数は、値が"true"
であるラベルよりも値が"false"
であるラベルを優先します。
lss.LabelDataType
が"numeric"
である場合、TimeFrequencyMaskPriority
を次のいずれかの値として指定します。"ascending"
— この関数は、数値が大きいラベルよりも数値が小さいラベルを優先します。"descending"
— この関数は、数値が小さいラベルよりも数値が大きいラベルを優先します。
lss.LabelDataType
が"categorical"
である場合、ラベルの定義に関するカテゴリ値のセット全体を含む string のベクトルまたは文字ベクトルの cell 配列として、TimeFrequencyMaskPriority
を指定します。このベクトルまたは配列によって優先順位が指定され、最初のカテゴリの優先順位が最も高くなります。lss.LabelDataType
が"string"
である場合、TimeFrequencyMaskPriority
を次のいずれかの値として指定します。"ascending"
— この関数は、アルファベット順で後になるラベルよりも、アルファベット順で先になるラベルを優先します。"descending"
— この関数は、アルファベット順で先になるラベルよりも、アルファベット順で後になるラベルを優先します。
この入力引数を使用するには、次を行わなければなりません。
lblNames
で"roiTimeFrequency"
のラベルの定義を指定します。TimeFrequencyLabelFormat
を"mask"
に設定します。
データ型: char
| string
| logical
時間-周波数マップに部分的なビンを含めるオプション。1
(true
) または 0
(false
) として指定します。TimeFrequencyIncludePartialBins
を指定すると、createDatastores
は、時間-周波数マップのピクセルに時間と周波数のビンの全体を含めなければならないかどうかを決定します。
この入力引数を使用するには、lblNames
で roiTimeFrequency
のラベルの定義を指定しなければなりません。
データ型: double
| single
| logical
出力引数
信号データ。signalDatastore
オブジェクト、audioDatastore
(Audio Toolbox) オブジェクト、または TransformedDatastore
オブジェクトとして返されます。
ラベル データ。arrayDatastore
オブジェクトとして返されます。
バージョン履歴
R2021a で導入createDatastores
関数は、roiTimeFrequency
のラベルの定義をもつラベル付き信号セットをサポートします。この関数を使用すると、時間-周波数マップとラベルをデータストア オブジェクトに保存することもできます。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)