このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
dlstft
深層学習の短時間フーリエ変換
構文
説明
[
は、名前と値の引数を使用して追加オプションを指定します。オプションには、スペクトル ウィンドウ、FFT 長などがあります。これらの引数を前の入力構文のいずれかに追加できます。たとえば、yr
,yi
] = 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); [yr,yi,f,t] = dlstft(dlx,seconds(1/fs),'DataFormat','CTB');
出力を数値配列に変換します。短時間フーリエ変換の振幅を計算し、それをウォーターフォール プロットとして表示します。
yr = extractdata(yr); yi = extractdata(yi); f = extractdata(f); t = seconds(t); waterfall(f,t,squeeze(hypot(yr,yi))') 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 を指定します。
[re,im,f,t] = dlstft(x,'Window',rectwin(64),'FFTLength',1024);
dlstft
は、'T'
次元に沿って変換を計算します。出力配列は、'SCBT'
形式です。'S'
次元は、短時間フーリエ変換の周波数に相当します。
深層学習配列からデータを抽出します。
re = squeeze(extractdata(re)); im = squeeze(extractdata(im)); f = extractdata(f); t = extractdata(t);
短時間フーリエ変換の振幅を計算します。振幅をチャネルごとに分けてウォーターフォール プロットにプロットします。
z = abs(re + 1j*im); 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')
入力引数
x
— 入力配列
dlarray
オブジェクト | 数値配列
入力配列。書式化されていない 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'
形式で指定します。
fs
— サンプルレート
2π (既定値) | 正の数値スカラー
サンプルレート。正の数値スカラーとして指定します。
ts
— サンプル時間
duration
スカラー
サンプル時間。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 サンプルのハミング ウィンドウを使用してデータをウィンドウ処理します。
DataFormat
— 入力のデータ形式
文字ベクトル | string スカラー
入力のデータ形式。文字ベクトルまたは string スカラーとして指定します。この引数は、x
が書式化されていない場合にのみ有効です。
この引数内の各文字は次のラベルのいずれかでなければなりません。
C
— チャネルB
— バッチ観測値T
— 時間
関数 dlstft
は、'CBT'
がどのような順列であっても受け入れます。C
、B
、T
のラベルは、それぞれ最大で 1 回指定できます。
この引数の各要素が、x
の一致する次元のラベルになります。引数がここに挙げた順序 ('C'
の後ろに 'B'
と続く順序) になっていない場合、dlstft
は、順序が一致するように引数とデータの両方を暗黙的に並べ替えます。ただし、データの格納方法は変わりません。
例: 'CBT'
Window
— スペクトル ウィンドウ
hann(128,'periodic')
(既定値) | ベクトル
スペクトル ウィンドウ。ベクトルとして指定します。ウィンドウを指定しない場合、またはウィンドウを空として指定する場合、関数は長さが 128 のハン ウィンドウを使用します。'Window'
の長さは 2 以上でなければなりません。
利用可能なウィンドウのリストについては、ウィンドウを参照してください。
例: hann(N+1)
と (1-cos(2*pi*(0:N)'/N))/2
は、いずれも長さ N
+ 1 のハン ウィンドウを指定します。
データ型: double
| single
OverlapLength
— オーバーラップするサンプル数
ウィンドウの長さの 75%
(既定値) | 非負の整数
オーバーラップするサンプル数。'Window'
の長さより小さな非負の整数として指定します。'OverlapLength'
を省略するか、空として指定する場合、ウィンドウの長さが 75% より少ない最大整数に設定されます。これは、既定のハン ウィンドウの 96 サンプルです。
データ型: double
| single
FFTLength
— 離散フーリエ変換 (DFT) 点の数
128
(既定値) | 正の整数
正の整数として指定する DFT 点の数。この値は、ウィンドウの長さ以上でなければなりません。入力信号の長さが DFT 長より小さい場合、データにはゼロがパディングされます。
データ型: double
| single
出力引数
yr
, yi
— 短時間フーリエ変換
書式化された dlarray
オブジェクト | 書式化されていない dlarray
オブジェクト
短時間フーリエ変換。書式化された 2 つの dlarray
(Deep Learning Toolbox) オブジェクトとして返されます。yr
には、変換の実数部が含まれます。yi
には、変換の虚数部が含まれます。
x
が書式化されたdlarray
である場合、yr
とyi
は'SCBT'
で書式化されたdlarray
オブジェクトです。'S'
次元は、短時間フーリエ変換の周波数に相当します。x
が書式化されていないdlarray
または数値配列である場合、yr
とyi
は書式化されていないdlarray
オブジェクトです。yr
とyi
の次元の順序は'SCBT'
です。
時間情報が指定されていない場合、STFT の計算は、'FFTLength'
が偶数であればナイキスト範囲 [0, π] で行われ、'FFTLength'
が奇数であれば [0, π) で行われます。時間情報を指定すると、計算区間はそれぞれ [0, fs/2]、[0, fs/2) となります。ここで、fs は有効なサンプル レートです。
f
— 周波数
dlarray
オブジェクト
深層学習 STFT が計算される周波数。dlarray
オブジェクトとして返されます。
入力配列に時間情報が含まれない場合、周波数は正規化された単位のラジアン/サンプルで表されます。
入力配列に時間情報が含まれる場合、
f
は Hz 単位で表される周波数を含みます。
詳細
短時間フーリエ変換
短時間フーリエ変換 (STFT) を使用して、非定常信号の周波数成分が時間の経過と共に変化する様子を解析します。
信号の STFT は、信号上の長さ の "解析ウィンドウ" をスライドして、ウィンドウが適用されたデータの離散フーリエ変換を計算することによって計算されます。ウィンドウは、 サンプルの間隔で元の信号を飛び越えます。ほとんどのウィンドウ関数は、スペクトル リンギングを回避するためにエッジで小さくなります。非ゼロのオーバーラップ長 が指定されている場合、ウィンドウが適用されたセグメントのオーバーラップ加算がウィンドウ エッジでの信号の減衰を補正します。ウィンドウが適用された各セグメントの DFT は、時間と周波数の各点の振幅と位相を含む行列に対して追加されます。STFT 行列内の列数は次のように求められます。
ここで、 は元の信号 の長さです。⌊⌋ 記号は床関数を表します。行列内の行数は、中央変換および両側変換の場合は DFT 点の数である NDFT と同じで、片側変換の場合は ⌊NDFT/2⌋ + 1 と同じです。
STFT 行列は、この行列の 番目の要素が
である によって指定されます。
ここで、
— 長さ のウィンドウ関数。
— 時間 付近を中心としたウィンドウが適用されたデータの DFT。
— 連続する DFT 間のホップ サイズ。ホップ サイズは、ウィンドウの長さ とオーバーラップ長 間の差異です。
STFT の振幅二乗では、関数のパワー スペクトル密度の spectrogram
表現が得られます。
拡張機能
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は、GPU 配列を完全にサポートします。詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2021a で導入
参考
dlarray
(Deep Learning Toolbox) | stft
| istft
| stftmag2sig
| stftLayer
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)