2

だから私はこのピアノ録音(.wav形式)を持っています。私はFFT全体的な録音を行い、周波数を特定することができます.

ただし、私が読んだいくつかの記事によると、wav ファイルがウィンドウに分割され、各ウィンドウに 1 つの特定のノートが含まれている場合に最適です。

このために、最初に時間領域信号の「パワー エンベロープ」をプロットする必要があります (音の平均エネルギーの概念を考慮して)。したがって、音ごとに 1 つの増加と 1 つの減少があり、音の開始は極小値をチェックすることで決定できます。

ここで「ウィンドウ」が導入され、各ウィンドウは 1 つのオンセットのみで構成され、各FFTウィンドウで実行されます。

パワーエンベロープをプロットして、それをウィンドウに分解することに苦労しています。Matlabこのためのコーディングの助けをいただければ幸いです。

私が使用したコードは非常に簡単です。

[波、fs] = wavread ('c スケール fast.wav'); % ファイルをメモリに読み込む */

%sound(wave,fs); % それがどのように聞こえるか見てください */

波 = 波。*ハミング (長さ (波));

t = 0:1/fs:(長さ (波)-1)/fs; % サンプリング周波数を取得 */

図 (2);

      subplot(2,1,1);
      plot(t,wave);
      title('Wave File');
      ylabel('Amplitude');
      xlabel('Length (in seconds)');

L = 長さ (波);

NFFT = 2^nextpow2(L); % y の長さから次の 2 の累乗

Y = fft(波、NFFT)/L;

f = fs/2*linspace(0,1,NFFT/2+1);

% 片側振幅スペクトルをプロットします。

   subplot(2,1,2);
   plot(f,2*abs(Y(1:NFFT/2+1))) 
   title('Single-Sided Amplitude Spectrum of y(t)')
   xlabel('Frequency (Hz)')
   ylabel('|Y(f)|')

信号 (wav ファイルの abs 値) がガウス フィルターで畳み込まれた後、1 次導関数と 2 次導関数を取得しようとしましたが、プロットしようとしても出力が得られません。

エッジ= fconv(abs(歌)、検出);

エッジ=エッジ(P/2:N+P/2-1);

テッジ=テッジ/最大(abs(テッジ));

W= diff(テッジ);

Z=差分(W);

W と Z をプロットしようとすると、必要な出力が得られません。つまり、私のグラフは空です。ここで何が間違っているのかわかりません...

4

1 に答える 1