어제 나는 시간이 지남에 따라 표시되는 트랙의 오디오 에너지를 탐지하는 코드를 완성했는데, 결국 오디오 미리보기 프로젝트의 일부로 사용하게 될 것입니다.MATLAB에서 오디오 피치 계산 중입니까?
그러나 시간이 지남에 따라 표시되는 트랙의 피치를 감지 할 수있는 방법을 원합니다. 따라서 내 연구를 기반으로하는 2 가지 옵션이 있습니다. 에너지 방법에 대한 올바른 코드
[y, fs, nb] = wavread('Three.wav'); %# Load the signal into variable y
frameWidth = 441; %# 10 msec
numSamples = length(y); %# Number of samples in y
numFrames = floor(numSamples/frameWidth); %# Number of full frames in y
energy = zeros(1,numFrames); %# Initialize energy
for frame = 1:numFrames %# Loop over frames
startSample = (frame-1)*frameWidth+1; %# Starting index of frame
endSample = startSample+frameWidth-1; %# Ending index of frame
energy(frame) = sum(y(startSample:endSample).^2); %# Calculate frame energy
end
, 그리고 연구 후에, 나는 이산 시간 푸리에 루프의 각 프레임의 현재 피치를 찾기 위해 변환 사용해야합니다 것을 발견했다.
필자는 이산 푸리에 변환을 계산하기위한 "fft"MATLAB 명령을 포함하도록 코드의 마지막 줄을 수정하는 것만 큼 쉽지만 불균형 식에 대한 오류가 다시 발생한다고 생각했습니다.
도움말은 올바른 방향의 일반 포인터 일지라도 크게 감사하겠습니다. 고맙습니다.
정확한 오류 메시지를 첨부하여 문제를 해결하는 방법을 알 수 있습니다. abs (fft (y (startSample : endSample)))) 유효한 접근 방식을보고 "불균형 방정식"이되어서는 안됩니다. – YYC