ウェーブレット変換は、時間に限定されたフィルタリング/相関演算にすぎないことを覚えておいてください。ウェーブレット変換は、フーリエ変換の影響を受けるハイゼンベルクの不確定な原理を回避するための統一されたフレームワークを提供します。したがって、「帯域幅と中心周波数の設定はどうすればよいですか」と尋ねると、フィルターパラメーターを指定する必要があります。フィルタパラメータを提供できるのは自分自身とアプリケーションだけです。これがパラメーターである理由です。:-)
より具体的には、あなたを選ぶ方法 Fc そして Fbあなたの信号の性質と関係があります。まず、いくつかの予備知識:
ウェーブレット変換は、関心のある信号の「機能」に最もよく一致するように、作成した一致フィルターにすぎません。考慮できる「機能」の1つのセットは、中心周波数の近傍と帯域幅の近傍です。繰り返しますが、あなたが探しているものを知る必要があるので、誰もあなたのためにそれらを選ぶことはできません。ただし、予想に応じた範囲を選択できます。(これは実際にはウェーブレット変換を非常に強力にする機能の1つです)。
モーレットウェーブレットは、次の関数によって与えられます。
Ψ(t,fc,Tp)=1πTp−−−√ e−t2Tp e−j2πfct
ここに、 t 秒単位の時間インデックスです。 fc あなたの中心周波数であり、 Tp「期間パラメータ」と呼んでいるものを表します。上記の方程式を調べます。モーレットウェーブレットが実際に周波数を中心とする複雑な指数関数にすぎないことに注目fc、ゼロ平均ガウス関数によってウィンドウ処理され、 σ=Tp2−−√
したがって、最初の質問に答えるために、 Fc パラメータは、問い合わせたい周波数またはその近くになるように選択する必要があります。
ウェーブレット帯域幅について:私が呼んだもの Tpここに「期間パラメータ」があり、これは帯域幅に直接関連しています。Morlet Wavelet方程式に戻り、ガウスウィンドウの代わりに長方形ウィンドウを使用したシナリオを考えます。フーリエドメインでは、このタイプのウィンドウによりsinc関数を実現します。Null-to-Null帯域幅は、Bは単純です: B=2Tperiod、(通過帯域内)。
次の図は、次の場所にある複雑な指数関数のこれを示しています fc=2 Hz、変動あり Tperiod 値:
期間範囲が増加すると、帯域幅が減少することがはっきりとわかります。これは、時間と周波数の関係の逆の性質です。この疑似ウェーブレットを使用したい場合、何を選びますかTperiodすることが?答えは「何でもTperiod私の興味のある信号がぶら下がっています。実際には、これはまさに短時間フーリエ変換(STFT)で行われていることですが、ボックスカーの代わりに、よりスマートなウィンドウを選択します。
次に、モーレットウェーブレット方程式を再検査し、ガウスウィンドウ関数を再挿入します。 σ=Tp2−−√。これを行うと、次の時間領域プロットと、対応するMorletウェーブレットの離散フーリエ変換(DFT)が得られます。
もう一度、範囲に注意してください。複素指数をシェーディングするガウスウィンドウの分散が増加するにつれて、フーリエドメインの帯域幅が減少します。(この場合、サイドローブの振る舞いはずっと良くなりますが、これは接線方向です)。いずれにせよ、あなたは再び我々が持っているかを確認することができ、逆の関係をTp パラメータ(またはガウシアンの標準偏差パラメータのどちらか適切な方)、および対応するフィルタの帯域幅。
この知識をどうするか:これで、帯域幅がMorletウェーブレットに埋め込まれたガウスシェーディング関数にどのように関係するかを理解できました。したがって、すべての信号x[n]あなたが持っているなら、あなたは単にあなたの信号のDFTを取り、様々な中心周波数でその帯域幅を観察するかもしれません。次に、σ そして fcMorlet Waveletのパラメーターに応じて、MorletフィルターのDFT関数がテンプレート信号のDFT関数と直接オーバーラップするようにします。これは、パラメーターを設定する方法です。
上記のプロットを生成するコードは次のとおりです。
clear all;
fS = 500;
tStart = -4;
tStop = 4;
timeVector = linspace(tStart,tStop, (tStop-tStart)*fS );
fCenter = 2;
tP = [0.2 1 3];
exps = length(tP);
figure(1); clf(1);
figure(2); clf(2);
for ii = 1:exps
tPeriod = tP(ii);
timeMask = zeros(1,length(timeVector));
timeMask((timeVector >= -tPeriod/2) & (timeVector <= tPeriod/2)) = 1;
psiFakeWavelet = exp(2*1i*pi*fCenter.*timeVector).*timeMask;
psiWavelet = ((pi*tP(ii))^(-0.5)).*exp(2*1i*pi*fCenter.*timeVector).*exp(-timeVector.^2/tP(ii));
%Demonstrating the Rectangular Window
figure(1);
subplot(3,2,2*ii-1);
plot(timeVector,real(psiFakeWavelet), timeVector,imag(psiFakeWavelet));
ylim([-1.2 1.2])
xlabel('Time / Seconds');
title(sprintf('Morlet Wavelet, T_{period} = %2.2f, f_c = %2.2f Hz', tPeriod, fCenter));
input = psiFakeWavelet;
Nfft = 10 * 2^nextpow2(length(input));
psd = 20.*log10(fftshift(abs(fft(input,Nfft))));
freqs = [0:Nfft - 1].*(fS/Nfft);
freqs(freqs >= fS/2) = freqs(freqs >= fS/2) - fS;
freqs = fftshift(freqs);
figure(1);
subplot(exps,2,2*ii);
plot(freqs, psd);
xlim([-10 15]);
xlabel('Frequency / Hz');
title (sprintf('PSD, Null-Null-BW = %2.2f Hz', 2/tPeriod));
%Demonstrating the Morlet Wavelet
figure(2);
subplot(3,2,2*ii-1);
plot(timeVector,real(psiWavelet), timeVector,imag(psiWavelet));
ylim([-1.2 1.2])
xlabel('Time / Seconds');
title(sprintf('Morlet Wavelet, T_{period} = %2.2f, f_c = %2.2f Hz', tPeriod, fCenter));
input = psiWavelet;
Nfft = 10 * 2^nextpow2(length(input));
psd = 20.*log10(fftshift(abs(fft(input,Nfft))));
freqs = [0:Nfft - 1].*(fS/Nfft);
freqs(freqs >= fS/2) = freqs(freqs >= fS/2) - fS;
freqs = fftshift(freqs);
figure(2);
subplot(exps,2,2*ii);
plot(freqs, psd);
xlim([-10 15]);
xlabel('Frequency / Hz');
title ('Wavelet PSD');
end