Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

iscola

ウィンドウ-オーバーラップの組み合わせが COLA 準拠かどうかを決定します。

説明

tf = iscola(window,noverlap) は、指定したウィンドウとオーバーラップが定数オーバーラップ加算 (COLA) 制約を満たし、逆短時間フーリエ変換が変更されていないスペクトルの完全再構成になるようにします。

tf = iscola(window,noverlap,method) は使用する内挿法を指定します。

[tf,m] = iscola(___) は COLA 加算の中央値も返します。以前の任意の入力構文と共にこれらの出力引数を使用できます。

[tf,m,maxDeviation] = iscola(___) は、中央値 m から最大偏差を返します。

すべて折りたたむ

長さが 120 の周期的ルート-ハン ウィンドウを作成します。ウィンドウが 50% オーバーラップの COLA 準拠かどうかをテストします。

win = sqrt(hann(120,'periodic'));
noverlap = 60;

ウィンドウが 50% オーバーラップの COLA 準拠かどうかを確認します。

tf = iscola(win,noverlap)
tf = logical
   1

長さが 256 の周期的ハミング ウィンドウを作成します。オーバーラップ加算の方法を 'ola' として設定します。

window = hamming(256,'periodic');
method = 'ola';
noverlap = 128;

ウィンドウが 50% オーバーラップの COLA 準拠かどうかをテストします。COLA 加算の中央値とその加算からの最大偏差も計算します。

[tf,m,maxDeviation] =  iscola(window,noverlap,method)
tf = logical
   1

m = 1.0800
maxDeviation = 2.2204e-16

入力引数

すべて折りたたむ

解析ウィンドウ。ベクトルとして指定します。

例: win = bartlett(120) は長さが 120 のバートレット ウィンドウです。

データ型: double | single

window の長さより小さな正の整数として指定する、オーバーラップするサンプル数。

データ型: double | single

オーバーラップ加算の方法。以下として指定します。

  • 'wola' — 重み付きオーバーラップ加算。

  • 'ola'— オーバーラップ加算。

出力引数

すべて折りたたむ

COLA 準拠。logical スカラーとして返されます。関数が 1 (true) を返す場合、ウィンドウとオーバーラップの長さは COLA 制約を満たします。

COLA 加算の中央値。実数スカラーとして返されます。入力が COLA 準拠である場合は、m は COLA 加算定数と等しくなります。

中央値 m からの最大偏差。windownoverlap が COLA 準拠である場合、maxDeviation は COLA 加算の予測される数値精度誤差に近くなります。

メモ

m = 1maxDeviation が数値精度誤差に近い場合、強い COLA 準拠と結論付けることができます。

詳細

すべて折りたたむ

逆短時間フーリエ変換

逆短時間フーリエ変換は、STFT の各 DFT ベクトルの IFFT を取り、逆変換した信号をオーバーラップ加算することで計算されます。ISTFT は次のように計算されます。

x(n)=1/21/2m=Xm(f)ej2πfndf=m=1/21/2Xm(f)ej2πfndf=m=xm(n)

ここで、R は連続する DFT 間のホップ サイズで、Xm は時間 mRxm(n)=x(n)g(nmR) 付近を中心としたウィンドウが適用されたデータの DFT です。逆 STFT は、"解析ウィンドウ" g(n) が元の信号のウィンドウ処理に使用されて c が定数の m=ga+1(nmR)=cn と同じ長さの元の信号の完全再構成です。次の図は、元の信号の再構成で使用されているステップを示しています。

定数オーバーラップ加算 (COLA) 制約

変更していないスペクトルを正しく再構成させるには、解析ウィンドウが COLA 制約を満たさなければなりません。通常、解析ウィンドウが条件 m=ga+1(nmR)=cn を満たす場合、ウィンドウは COLA 準拠であると見なされます。さらに、COLA 準拠は弱いまたは強いのいずれかで説明されます。

  • 弱い COLA 準拠とは、

    G(fk)=0,k=1,2,,R1,fkkR.

    となるフレーム レートの高調波で解析ウィンドウのフーリエ変換がゼロであることを意味します。

    エイリアスのキャンセルはスペクトル変更によって妨害されます。弱い COLA は、周波数領域のエイリアスのキャンセルに依存しています。したがって、信号に何らかのスペクトル変更が行われていなければ、弱い COLA 準拠ウィンドウを使用して完全な再構成が可能です。

  • 強い COLA 準拠の場合、ウィンドウのフーリエ変換は

    G(f)=0,f12R.

    となるフレーム レートによってダウンサンプリングしながら常に帯域制限しなければなりません。この方程式は、強い COLA 制約によって許可されるエイリアシングがないことを示します。さらに、強い COLA 準拠の場合、定数 c の値は、1 と等しくなければなりません。通常、短時間のスペクトルが何らかの方法で変更される場合、より強い COLA 準拠ウィンドウが推奨されます。

関数 iscola を使用して、弱い COLA 準拠を確認できます。COLA 準拠を確認するために使用される加算数は、ウィンドウの長さとホップ サイズによって決まります。通常、重み付きオーバーラップ加算 (WOLA) には、m=ga+1(nmR)=cna=1、オーバーラップ加算 (OLA) には、a=0 を使用するのが一般的です。既定では、istft は、オーバーラップ加算方法を実行する前に "合成ウィンドウ" を適用して、WOLA 方法を使用します。

通常、合成ウィンドウは解析ウィンドウと同じです。強い OLA ウィンドウの平方根を取ることで有用な WOLA ウィンドウを構築できます。すべての非負の OLA ウィンドウに対してこの方法を使用できます。たとえば、ルートーハン ウィンドウは WOLA ウィンドウの良い例です。

完全再構成

一般に、入力信号の STFT を計算して逆変換しても、完全再構成は行われません。ISTFT の出力を元の入力信号と可能な限り一致させるには、信号とウィンドウが以下の条件を満たす必要があります。

  • 入力サイズ — istft を使用して stft の出力を逆変換して、その結果を入力信号 x と同じ長さにする場合、k = (length(x)-noverlap)(length(window)-noverlap) の値は整数でなければなりません。

  • COLA 準拠 — COLA 準拠ウィンドウを使用して、信号の短時間フーリエ変換を変更していないと仮定します。

  • パディング — k の値が整数にならないような入力信号の長さの場合、短時間フーリエ変換を計算する前に信号をゼロ パディングします。信号を逆変換した後に、余分なゼロを削除します。

参照

[1] Allen, J. B. “Short Term Spectral Analysis, Synthesis, and Modification by Discrete Fourier Transform” IEEE Transactions on Acoustics, Speech and Signal Processing. Vol. 25, No. 3, June 1977, pp. 235–238.

[2] Griffin, D. W., and J. S. Lim. “Signal Estimation from Modified Short-Time Fourier Transform.” IEEE Transactions on Acoustics, Speech and Signal Processing. Vol. 32, No. 2, April 1984, pp. 236–243.

[3] Sharpe, Bruce. Invertibility of Overlap-Add Processing. https://gauss256.github.io/blog/cola.html, accessed July 2019.

[4] Smith, J. O. Spectral Audio Signal Processing. https://ccrma.stanford.edu/~jos/sasp/, online book, 2011 edition, accessed Nov 2018.

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

参考

関数

R2019a で導入