transform
信号データストアの変換
構文
説明
は、関数 transformDatastore
= transform(sds
,@fcn
)read
からの出力を変換する新しいデータストアを作成します。
には、transformDatastore
= transform(sds
,@fcn
,'IncludeInfo',infoIn
)sds
の読み取りで返された情報が含まれます。
例
sample_chirps
フォルダーには、Signal Processing Toolbox™ に含まれるサンプル ファイルが格納されています。各ファイルには、チャープと 100 ~ 150 Hz の範囲のランダム サンプル レート fs
が含まれます。sample_chirps
内の 4 つのファイルを指す信号データストアを作成し、サンプル レート変数の名前を指定します。
addpath("sample_chirps") files = ["chirp_1.mat","chirp_4.mat","chirp_9.mat","chirp_10.mat"]; sds = signalDatastore(files,SampleRateVariableName="fs");
関数 read
の出力を取得し以下を計算して返す関数を定義します。
チャープのスペクトログラム。
ウィンドウ セグメントの中心に対応する時点のベクトル。
推定値に対応する周波数。
function [dataOut,infoOut] = extractSpectrogram(dataIn,info) [dataOut,F,T] = pspectrum(dataIn,info.SampleRate,"spectrogram",... TimeResolution=0.25,... OverlapPercent=40,Leakage=0.8); infoOut = info; infoOut.CenterFrequencies = F; infoOut.TimeInstants = T; end
関数 transform
を呼び出し、定義した関数を使用して各チャープのスペクトログラムを計算するデータストアを作成します。
sdsNew = transform(sds,@extractSpectrogram,IncludeInfo=true);
変換したデータストアに読み取られていないファイルがある場合、新しいデータストアから読み取って、3 次元空間でスペクトログラムを可視化します。
t = tiledlayout("flow"); while hasdata(sdsNew) nexttile [sig,infoOut] = read(sdsNew); waterfall(infoOut.TimeInstants,infoOut.CenterFrequencies,sig) xlabel("Frequency (Hz)") ylabel("Time (S)") view([30 70]) end
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
入力引数
sds
を signalDatastore
オブジェクトとして指定します。
データを変換する関数。関数ハンドルとして指定します。関数のシグネチャは、IncludeInfo
パラメーターによって異なります。
IncludeInfo
がfalse
(既定値) に設定されている場合、関数はread
からの信号出力を変換します。read
からの info 出力は変換されません。変換関数には以下のシグネチャがなければなりません。
function dataOut = fcn(dataIn) ... end
IncludeInfo
がtrue
に設定されている場合、関数はread
からの信号出力を変換し、read
から返される情報を使用または変更することができます。変換関数には以下のシグネチャがなければなりません。
function [dataOut,infoOut] = fcn(signal,infoIn) ... end
出力引数
カスタマイズされた read
をもつ新しいデータストア。sds
に設定された UnderlyingDatastores、fcn
に設定された Transforms、および true
または false
に設定された IncludeInfo をもつ TransformedDatastore
として返されます。
バージョン履歴
R2020a で導入
参考
signalDatastore
| subset
| hasdata
| progress
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)