このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
combine
複数のデータストアのデータの結合
説明
では、入力データストアで呼び出された関数 sdsnew
= combine(sds1,sds2,...,sdsn
)read
が返すデータを水平方向に連結することにより、複数のデータストアを結合します。
例
MATLAB® に含まれる 4 つの信号へのパスを指定します。これらの信号は、鳥の鳴き声、銅鑼、汽車、およびスプラット (ペチャッという音) の録音です。すべての信号は、8192 Hz でサンプリングされます。
folder = fullfile(matlabroot,'toolbox','matlab','audiovideo', ... ["chirp.mat","gong.mat","train.mat","splat.mat"]);
指定したファイルを示す信号データストアを作成します。各ファイルには、サンプル レートを示す変数 Fs
が含まれています。
sds1 = signalDatastore(folder,'SampleRateVariableName','Fs');
関数 read
の出力を取得し、少なくとも 80 サンプル単位に分割された局地的最大値に対してスプライン内挿を使用して信号の上側包絡線と下側包絡線を計算する関数を定義します。この関数はさらに、各信号のサンプル時間を返します。
function [dataOut,infoOut] = signalEnvelope(dataIn,info) [dataOut(:,1),dataOut(:,2)] = envelope(dataIn,80,'peak'); infoOut = info; infoOut.TimeInstants = (0:length(dataOut)-1)/info.SampleRate; end
関数 transform
を呼び出して、2 番目のデータストア sds2
を作成します。このデータストアでは、定義した関数を使用して信号の包絡線を計算します。
sds2 = transform(sds1,@signalEnvelope,"IncludeInfo",true);
sds1
と sds2
を結合して 3 番目のデータストアを作成します。結合したデータストアに対して関数 read
を呼び出すたびに、次の 3 列をもつ行列が返されます。
1 列目は元の信号に対応します。
2 列目と 3 列目は、それぞれ上側包絡線と下側包絡線に対応します。
sdsCombined = combine(sds1,sds2);
結合したデータストアから、元のデータと上側包絡線および下側包絡線を読み取って表示します。関数extractBetween
を使用して、ファイル パスからファイル名を抽出します。
tiledlayout('flow') while hasdata(sdsCombined) [dataOut,infoOut] = read(sdsCombined); ts = infoOut{2}.TimeInstants; nexttile hold on plot(ts,dataOut(:,1),'Color','#DCDCDC','LineStyle',':') plot(ts,dataOut(:,2:3),'Linewidth',1.5) hold off xlabel('Time (s)') ylabel('Signal') title(extractBetween(infoOut{:,2}.FileName,'audiovideo\','.mat')) end
sample_chirps
フォルダー内の各ファイルには、チャープと 100 ~ 150 Hz の範囲のランダム サンプル レートが含まれます。指定したフォルダーを示す信号データストアを作成し、サンプル レート変数の名前を設定します。
folder = "sample_chirps"; sds = signalDatastore(folder,SampleRateVariableName="fs");
関数 read
の出力を取得し、関数 pspectrum
を使用して信号のパワー スペクトルを推定する関数を定義します。推定を使用して瞬時周波数を計算します。この関数はさらに、ウィンドウ セグメントの中心に対応する時点のベクトル、および信号のスペクトログラムに含まれるスペクトル推定に対応する周波数を返します。
function [dataOut,infoOut] = extractinstfreq(dataIn,info) [P,F,T] = pspectrum(dataIn,info.SampleRate,"spectrogram",... TimeResolution=0.1,OverlapPercent=40,Leakage=0.8); dataOut = {instfreq(P,F,T)'}; infoOut = info; infoOut.CenterFrequencies = F; infoOut.TimeInstants = T; end
関数 transform
を呼び出して、瞬時周波数を計算する新しいデータストアを作成します。
sds2 = transform(sds,@extractinstfreq,IncludeInfo=true);
sds2
のデータは sds
のデータと水平方向に連結できないため、sds
のデータを cell 配列に変換します。
sds1 = transform(sds,@(x) {x});
sds1
および sds2
を組み合わせます。組み合わせたデータストアに読み取られていないファイルがある場合、新しいデータストアから読み取って、スペクトログラムを可視化します。スペクトログラムに瞬時周波数を重ね合わせます。
sdsCombined = combine(sds1,sds2); sdsSubset = subset(sdsCombined,[1,4,9,10]); plotID = 1; while hasdata(sdsSubset) subplot(2,2,plotID) [sig,info] = read(sdsSubset); pspectrum(sig{:,1},info{:,2}.SampleRate,"spectrogram", ... TimeResolution=0.1,OverlapPercent=40,Leakage=0.8) hold on plot(info{:,2}.TimeInstants',sig{:,2}) plotID = plotID + 1; end
入力引数
組み合わせる信号データストア。2 つ以上のコンマ区切りの signalDatastore
オブジェクトとして指定します。
出力引数
組み合わせたデータをもつ新しいデータストア。CombinedDatastore
オブジェクトとして返されます。
組み合わせたデータストアで read
を呼び出し、各入力データストアで read
を呼び出すことにより、データを水平方向に連結します。
バージョン履歴
R2020a で導入
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)