だから私はこのピアノ録音(.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 をプロットしようとすると、必要な出力が得られません。つまり、私のグラフは空です。ここで何が間違っているのかわかりません...