私は曲の特定の時間にどの周波数(ノート)が再生されているかを示すコードを書いていますそれは曲の最初の2分音符だけを掴んでテストしている)。これを行うには、オーディオファイルの最初の1秒を8つの異なるチャンクに分割します。それから私は、各チャンクにFFTを実行し、次のコードでそれをプロットします。私はあまりにもプロットしていますように
FFT:fs/2サンプル未満のときに片側スペクトルを見つける方法
に見えます:私はこれらのように見えるのグラフを得ることを行うと
% Taking a second of an audio file and breaking it into n many chunks and
% figuring out what frequencies make up each of those chunks
clear all;
% Read Audio
fs = 44100; % sample frequency (Hz)
full = audioread('song.wav');
% Perform fft and get frequencies
chunks = 8; % How many chunks to break wave into
for i = 1:chunks
beginningChunk = (i-1)*fs/chunks+1
endChunk = i*fs/chunks
x = full(beginningChunk:endChunk);
y = fft(x);
n = length(x); % number of samples in chunk
amp = abs(y)/n; % amplitude of the DFT
%%%amp = amp(1:fs/2/chunks); % note this is my attempt that I think is wrong
f = (0:n-1)*(fs/n); % frequency range
%%%f = f(1:fs/2/chunks); % note this is my attempt that I think is wrong
figure(i);
plot(f,amp)
xlabel('Frequency')
ylabel('amplitude')
end
グラフの右端に周波数が上がるので、私は両面スペクトルを使用していると考えています。私は1:fs/2のサンプルしか使用しないといけないと思うが、問題は多くのポイントをつかむのに十分な行列がないということだ。私は1:fs/2/chunkから行ってみましたが、それらが正しい値であると私は確信していますので、それらをコメントしました。 fs/2サンプル未満の場合、どのように片側スペクトルを見つけることができますか?
私がすべてのグラフをプロットするとき、私は与えられた周波数がほぼ同じであることに気付きます。これは私にとって驚くべきことです。私は、ちょうどその時に起こっている周波数だけが掴まれるべきであるように、チャンクを小さくしたと思っていました。それゆえ、私は現在のノートを演奏しています。誰かがどのようにノートが毎回再生されているかを分かりやすくすることが分かっていれば、その情報は非常に高く評価されます。
[この質問](https://stackoverflow.com/q/4364823/253056)(可能な重複?)を参照してください。 –