countLabelValues
説明
は、cnt
= countLabelValues(lss
,lblname
)lblname
という名前のラベルの値をカウントし、結果をテーブル cnt
に返します。cnt
には、ラベル値のカウントと割合が含まれます。lblname
が ROI またはポイント ラベルのとき、cnt
には、特定のカテゴリの値を少なくとも 1 つもつメンバーの数も含まれます。countLabelValues
は以下をサポートしていません。
サブラベル
LabelDataType (Signal Processing Toolbox) プロパティが
'table'
または'timetable'
に設定されたラベルの定義インスタンスの値を、カテゴリの離散集合をもつベクトルに変換できないラベル。一意の離散カテゴリのセットを使用して、ラベル値をグループ化できなければなりません。サポートされていないラベルの例は次のとおりです。
timetable の cell 配列
異なるサイズの行列を含む cell 配列
例
クジラの歌の録音を含むラベル付き信号セットを読み込みます。
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.
セット内のラベルの名前を取得します。
getLabelNames(lss)
ans = 3×1 string
"WhaleType"
"MoanRegions"
"TrillRegions"
セットの 2 つのメンバーがシロナガスクジラであることを確認します。
countLabelValues(lss,"WhaleType")
ans=3×3 table
WhaleType Count Percent
_________ _____ _______
blue 2 100
humpback 0 0
white 0 0
各メンバーに 3 つのうめき声の領域があることを確認します。
countLabelValues(lss,"MoanRegions")
ans=2×4 table
MoanRegions Count Percent MemberCount
___________ _____ _______ ___________
false 0 0 0
true 6 100 2
各メンバーに 1 つのふるえ声の領域があることを確認します。
countLabelValues(lss,"TrillRegions")
ans=2×4 table
TrillRegions Count Percent MemberCount
____________ _____ _______ ___________
false 0 0 0
true 2 100 2
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
(Signal Processing Toolbox)オブジェクトsd
には信号データが格納される。arrayDatastore
オブジェクトld
にはラベル付け情報が格納される。作成したすべてのラベルに対応する情報を含めるように指定します。
[sd,ld] = createDatastores(lss,["Voice" "RanROI" "Maximum"]);
データストアの情報を使用して、信号をプロットし、それらのラベルを表示します。
signalMask
(Signal Processing Toolbox)オブジェクトを使用して、関心領域を青色で強調表示。最大値の位置を示すために黄色の線をプロット。
人間の声を含む信号に対して赤色の軸ラベルを追加。
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
入力引数
ラベル付き信号セット。labeledSignalSet
オブジェクトとして指定します。
例:
は、属性 labeledSignalSet
({randn(100,1) randn(10,1)},signalLabelDefinition("female"))"female"
を含むランダム信号の 2 つのメンバーのセットを指定します。
ラベル名。文字ベクトルまたは string スカラーとして指定します。
データ型: char
| string
出力引数
結果テーブル。次の変数を含むテーブルとして返されます。
Count
— 特定のカテゴリのラベル値の数。Percent
— すべてのラベル値に対する特定のカテゴリのラベル値の数の割合。MemberCount
— 特定のカテゴリの値を少なくとも 1 つもつメンバーの数。この変数は、ROI またはポイント ラベルに対してのみ返されます。
バージョン履歴
R2021a で導入
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)