5

関数MATLAB ドキュメンテーションの例にspectrogramは、周波数軸が に設定された例が示されています[0 500]。これを次のように変更できます[0 100]か? 明らかに、axisコマンドを実行するとこれが行われますが、最終結果が調整され、結果のプロットが「爆破」され、ピクセル化されます。私は基本的に、スペクトログラムの作成後に再スケーリングせずに、0 ~ 100 の間の周波数のみを検索するスペクトログラムを作成しようとしています。

そのドキュメントの例を次に示します。

T = 0:0.001:2;
X = chirp(T,0,1,150);
spectrogram(X,256,250,256,1E3,'yaxis');

これにより、以下が生成されます。 線形チャープ スペクトログラム

350Hz 以下はすべて不要です。事後に軸を調整するのではなく、スペクトログラムを作成するときに 350 から 500 の間のすべてを含めないようにする方法はありますか?

4

2 に答える 2

7

ドキュメントから:

[S、F、T] = spectrogram(x、window、noverlap、F)は、Hz単位の周波数のベクトルFを使用します。Fは、少なくとも2つの要素を持つベクトルである必要があります。この場合、Goertzelアルゴリズムを使用して、Fの周波数でスペクトログラムを計算します。指定された周波数は、信号の分解能に見合った最も近いDFTビンに丸められます。nfftまたはnfftのデフォルトが使用される他のすべての構文の場合、短時間フーリエ変換が使用されます。返されるFベクトルは、丸められた周波数のベクトルです。Tは、スペクトログラムが計算される時間のベクトルです。Fの長さはSの行数に等しくなります。Tの長さは上記で定義したようにkに等しく、各値は各セグメントの中心に対応します。

それはあなたを助けますか?

于 2012-10-09T20:49:02.793 に答える
-1

FFT は非常に高速であるため、解像度を上げて不要なデータを破棄することをお勧めします。より良いスペクトル分解能 (より多くの周波数ビン) が必要な場合は、FFT サイズを増やします。時間次元でより滑らかに見えるスペクトルを得るには、noverlap 値を増やして、連続する各 FFT の増分を減らします。この場合、F を指定しません。FFT サイズが 1024 の場合、1024/2+1 の周波数ビンが得られます。

FFTN = 512;
start = 512*(350/500); % Only care about freq bins above this value
WIN_SIZE = FFTN;
overlap = floor(FFTN*0.8);
[~,F,T,P] = spectrogram(y, WIN_SIZE, overlap, FFTN);
f = 0:(length(F)-1);
f = f*((Fs/2)/length(F));
P = P(start:512,:);
f = f(1,start:512);
imagesc(T,f,10*log10(P),[-70 20]); 
于 2015-05-29T16:38:24.367 に答える