このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
dlstft
説明
は、名前と値の引数を使用して追加オプションを指定します。オプションには、スペクトル ウィンドウ、FFT 長などがあります。これらの引数を前の入力構文のいずれかに追加できます。たとえば、y
= dlstft(___,Name,Value
)'DataFormat','CBT'
は、x
のデータ形式を CBT
として指定します。
例
600 Hz で 2 秒間サンプリングされた信号を生成します。この信号は、正弦関数的に変化する周波数成分をもつチャープで構成されます。
fs = 6e2; t = 0:1/fs:2; x = vco(sin(2*pi*t),[0.1 0.4]*fs,fs);
信号を、形式を整えていない深層学習配列に格納します。信号の短時間フーリエ変換を計算します。サンプル時間を duration
スカラーとして入力します。(または、サンプル レートを数値スカラーとして入力します。)入力配列が 'CTB'
形式であることを指定します。
dlx = dlarray(x); [y,f,t] = dlstft(dlx,seconds(1/fs),'DataFormat','CTB');
出力を数値配列に変換します。短時間フーリエ変換の振幅を計算し、それをウォーターフォール プロットとして表示します。
y = extractdata(y); f = extractdata(f); t = seconds(t); waterfall(f,t,squeeze(abs(y))') ax = gca; ax.XDir = 'reverse'; view(30,45) ylabel('Time (s)') xlabel('Frequency (Hz)') zlabel('Magnitude')
3 チャネル、160 サンプルの正弦波信号を 1 バッチ含む 3×160 (×1) 配列を生成します。正規化された正弦波の周波数は、 ラジアン/サンプル、 ラジアン/サンプル、および ラジアン/サンプルです。次元を順に指定して、信号を dlarray
として保存します。dlarray
は、配列の次元を、深層学習ネットワークが期待する 'CBT'
形状に並べ替えます。配列の次元サイズを表示します。
x = dlarray(cos(pi.*(1:3)'/4*(0:159)),'CTB');
[nchan,nbtch,nsamp] = size(x)
nchan = 3
nbtch = 1
nsamp = 160
信号の深層学習の短時間フーリエ変換を計算します。64 サンプルの箱型ウィンドウと、FFT 長 1024 を指定します。
[y,f,t] = dlstft(x,'Window',rectwin(64),'FFTLength',1024);
dlstft
は、'T'
次元に沿って変換を計算します。出力配列は、'SCBT'
形式です。'S'
次元は、短時間フーリエ変換の周波数に相当します。深層学習配列からデータを抽出します。
y = extractdata(y); f = extractdata(f); t = extractdata(t);
短時間フーリエ変換の振幅を計算します。振幅をチャネルごとに分けてウォーターフォール プロットにプロットします。
z = abs(squeeze(y)); for kj = 1:nchan subplot(nchan,1,kj) waterfall(f/pi,t,squeeze(z(:,kj,:))') view(30,45) end xlabel('Frequency (\times\pi rad/sample)') ylabel('Samples')
入力引数
入力配列。形式を整えていない dlarray
(Deep Learning Toolbox) オブジェクト、'CBT'
形式で整えられた dlarray
オブジェクト、または数値配列として指定します。x
が形式を整えていない dlarray
または数値配列である場合は、'DataFormat'
に 'CBT'
をいずれかの順列で指定しなければなりません。
例: dlarray(cos(pi./[4;2]*(0:159)),'CTB')
と dlarray(cos(pi./[4;2]*(0:159))','TCB')
はどちらも、2 チャネル正弦波の 1 つのバッチ観測値を 'CBT'
形式で指定します。
サンプル レート。正の数値スカラーとして指定します。
サンプル時間。duration
スカラーとして指定します。ts
の指定は、サンプル レート fs = 1/ts
の設定と等価です。
例: seconds(1)
は、連続する信号サンプル間の 1 秒間の時間差を表す duration
スカラーです。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name
を引用符で囲みます。
例: 'Window',hamming(100),'OverlapLength',50,'FFTLength',128
は、隣接するセグメント間で 50 サンプルがオーバーラップし 128 点の FFT をもつ 100 サンプルのハミング ウィンドウを使用してデータをウィンドウ処理します。
入力データ形式。文字ベクトルまたは string スカラーとして指定します。この引数は、x
の形式が整えられていない場合にのみ有効です。
この引数内の各文字は次のラベルのいずれかでなければなりません。
C
— チャネルB
— バッチ観測値T
— 時間
関数 dlstft
は、'CBT'
がどのような順列であっても受け入れます。C
、B
、T
のラベルは、それぞれ最大で 1 回指定できます。
この引数の各要素が、x
の一致する次元のラベルになります。引数がここに挙げた順序 ('C'
の後ろに 'B'
と続く順序) になっていない場合、dlstft
は、順序が一致するように引数とデータの両方を暗黙的に並べ替えます。ただし、データの格納方法は変わりません。
例: 'CBT'
スペクトル ウィンドウ。ベクトルとして指定します。ウィンドウを指定しない場合、またはウィンドウを空として指定する場合、関数は長さが 128 のハン ウィンドウを使用します。'Window'
の長さは 2 以上でなければなりません。
利用可能なウィンドウのリストについては、ウィンドウを参照してください。
例: hann(N+1)
と (1-cos(2*pi*(0:N)'/N))/2
は、いずれも長さ N
+ 1 のハン ウィンドウを指定します。
データ型: double
| single
オーバーラップするサンプルの数。'Window'
の長さより小さな非負の整数として指定します。'OverlapLength'
を省略するか、空として指定する場合、ウィンドウの長さが 75% より少ない最大整数に設定されます。これは、既定のハン ウィンドウの 96 サンプルです。
データ型: double
| single
正の整数として指定する DFT 点の数。この値は、ウィンドウの長さ以上でなければなりません。入力信号の長さが DFT 長より小さい場合、データにはゼロがパディングされます。
データ型: double
| single
出力引数
短時間フーリエ変換。形式を整えた、または形式を整えていない dlarray
(Deep Learning Toolbox) オブジェクトとして返されます。
x
が形式を整えたdlarray
の場合、y
は'SCBT'
で形式を整えたdlarray
オブジェクトになります。'S'
次元は、短時間フーリエ変換の周波数に相当します。x
が形式を整えていないdlarray
または数値配列の場合、y
は形式を整えていないdlarray
オブジェクトになります。y
の次元の順序は'SCBT'
です。
時間情報が指定されていない場合、STFT の計算は、'FFTLength'
が偶数であればナイキスト範囲 [0, π] で行われ、'FFTLength'
が奇数であれば [0, π) で行われます。時間情報を指定すると、計算区間はそれぞれ [0, fs/2]、[0, fs/2) となります。ここで、fs は有効なサンプル レートです。
深層学習 STFT が計算される周波数。dlarray
オブジェクトとして返されます。
入力配列に時間情報が含まれない場合、周波数は正規化された単位のラジアン/サンプルで表されます。
入力配列に時間情報が含まれる場合、
f
は Hz 単位で表される周波数を含みます。
詳細
短時間フーリエ変換 (STFT) を使用して、非定常信号の周波数成分が時間の経過と共に変化する様子を解析します。STFT の振幅の 2 乗は、信号の "スペクトログラム" 時間-周波数表現と呼ばれます。スペクトログラムの詳細や、関数 Signal Processing Toolbox™ を使用したスペクトログラムの計算方法については、Signal Processing Toolbox を使用したスペクトログラムの計算を参照してください。
信号の STFT は、信号上の長さ M の "解析ウィンドウ" g(n) をスライドして、ウィンドウ処理されたデータの各セグメントの離散フーリエ変換 (DFT) を計算することによって算出されます。ウィンドウは、R サンプルの間隔で元の信号を飛び越えます。これは、隣り合ったセグメント間の L = M – R 個のサンプルのオーバーラップに相当します。ほとんどのウィンドウ関数は、スペクトル リンギングを回避するためにエッジで小さくなります。ウィンドウ処理された各セグメントの DFT は、時間と周波数の各点の振幅と位相を含む複素数値行列に対して追加されます。STFT 行列は次の列数をもちます。
ここで、Nx は信号 x(n) の長さです。⌊⌋ 記号は床関数を表します。行列内の行数は、中央変換および両側変換の場合は DFT 点の数である NDFT と同じで、実数値信号の片側変換の場合は NDFT/2 に近い奇数に等しくなります。
STFT 行列 の m 番目の列には、時間 mR 付近を中心としたウィンドウが適用されたデータの DFT が含まれます。
拡張機能
使用上の注意および制限:
名前と値の引数
DataFormat
はコンパイル時の定数でなければなりません。
使用上の注意および制限については、「C/C++ コード生成」セクションを参照してください。GPU コード生成にも同じ制限が適用されます。
この関数は、GPU 配列を完全にサポートします。詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2021a で導入dlstft
関数は以下をサポートします。
C/C++ コード生成。C/C++ コードを生成するには、MATLAB® Coder™ が必要です。
NVIDIA® GPU 用のコード生成。GPU コードを生成するには、GPU Coder™ が必要です。
R2023b 以降、dlstft
は STFT の実数部と虚数部を単一の出力引数に結合します。以前は、この関数は変換の実数部を最初の出力引数として返し、虚数部を 2 番目の出力引数として返しました。このリリース以降、この関数は 2 番目と 3 番目の出力引数として、STFT が計算される周波数と時間をそれぞれ返します。4 つの出力引数を指定した関数呼び出しはエラーになります。
R2023a 以前の元のコード | 結果 | R2023b で更新されたコード |
---|---|---|
[yr,yi] = dlstft(x); | 実行されるが、2 番目の出力引数の解釈が異なる | y = dlstft(x); yr = real(y); yi = imag(y); |
[yr,yi,f,t] = dlstft(x); | エラー | [y,f,t] = dlstft(x); yr = real(y); yi = imag(y); |
参考
オブジェクト
stftLayer
|istftLayer
|dlarray
(Deep Learning Toolbox)
関数
dlistft
|stft
|istft
|stftmag2sig
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)