1

オーディオ ファイルから周波数を認識しなければならないプロジェクトがあります。このために、10 kHz の単一トーンを使用して、動作するかどうかを確認します。私は Octave にかなり慣れていないので、この例を自分のオーディオ ファイルで試しました。すべての機能について調査を行うことで、何が起こるかを理解しようとしました。

ここでの私の質問は次のとおりです。出力を指定しない場合に specgram に図をプロットさせると、次のようになります。

specgram(y,fftn,Fs,hanning(window),step);

それは私が望むものである10kHzでラインを与えます。

しかし、specgram関数の出力を指定すると

[S,f,t]= specgram(y,fftn,Fs,hanning(window),step);

プロットすると、18 kHz で線がプロットされます。

Figure の入力にある必要があると考え、これらを少し変更しようとしましたが、そのたびに Octave でエラーが発生します。特定の出力として周波数が必要です。これを使用して計算を行う必要があるため、周波数出力を指定する必要があると考えました。

これは、スペクトログラムのプロットを指定するコードの一部です。

step= fix(5*Fs/1000);           % stepsize of the window
window= fix(90*Fs/1000);        % window size 
fftn =2^nextpow2(window);       % Size of the FFT block

[S,f,t]= specgram(y,fftn,Fs,hanning(window),step); 

S= abs(S(2:fftn*12000/Fs,:));   % Normalize the phase
S= S/max(S(:));                 % Normalize the Energy
S= max(S, 10^(-40/10));         % Throw out values below -40 dB and above -3dB
S= min(S, 10^(-3/10));      
figure
imagesc(t,f,(log(S)));

オーディオファイルから周波数データを取得して、計算で使用できるようにする方法を教えてください。

Octave マニュアルで既に回答を検索し、さまざまな matlab サイトで試しました。また、次のようなすでに多くの投稿をここで確認しました。

信号からのオクターブ スペクトログラム 'specgram' はどのように機能しますか?

Matlab スペクトログラム/短時間フーリエ変換関数の FFT の方法論

PS下手な英語で申し訳ありません、それは私の母国語ではありません

4

1 に答える 1

0

私は自分で答えを見つけました。それは次のコード行にあることがわかりました。

S= abs(S(2:fftn*12000/Fs,:));

この行を削除すると、線は図の正しい周波数に配置されます。私には、この行はfftの小さなスペースを取り、それを他の周波数に置き換えるだけのように見えますが、それについては確信が持てません.

于 2015-03-12T08:21:24.950 に答える