노래의 특정 시간에 어떤 주파수 (음표)가 연주되는지 파악하는 코드를 작성하고 있습니다 (현재 I 노래의 첫 번째 초만 붙잡는 것을 시험하고있다). 이를 위해 오디오 파일의 첫 번째 부분을 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/chunks에서 시도해 보았지만, 나는 그 값이 맞는지 확신 할 수 없으므로 그 값을 주석으로 처리했다. fs/2 샘플 미만일 때 어떻게하면 단일 단면 스펙트럼을 찾을 수 있습니까?
모든 그래프를 그릴 때 주어진 주파수는 거의 똑같습니다. 이것은 놀라운 것이 었습니다. 왜냐하면 정확한 시간에 발생하는 빈도 만 가져와야하기 때문에 청크를 작게 만들어야한다고 생각했기 때문입니다. 따라서 현재 연주중인 음을 연주하게 될 것입니다. 어떤 사람이 각 시간에 어떤 음표가 연주되는지 더 잘 알면 그 정보가 크게 감사 할 것입니다.
[중복 가능합니까?] [이 질문에 답변] (https://stackoverflow.com/q/4364823/253056)을 참조하십시오. –