그래서이 피아노 녹음은 .wav 형식으로되어 있습니다. 나는 전체 녹음에 FFT
을 할 수 있고 주파수를 확인할 수있다.MATLAB에서 wav 파일 분석
그러나 필자가 읽은 몇 가지 기사에 따르면 wav 파일을 각 창에 하나의 특정 메모가 포함 된 창으로 세분화 한 경우 가장 좋습니다.
왜냐하면 처음에는 시간 영역 신호의 "파워 엔벨로프"(음표의 평균 에너지 개념을 고려함)를 그릴 필요가 있기 때문에 각 음표와 음표 온셋에 대해 하나의 감소와 감소가있을 것입니다 지역 최소치.
여기서 'windows'가 도입되는 곳입니다. 각 창은 하나의 시작으로 구성되며 각 창에는 FFT
이 수행됩니다.
임 파워 엔벨로프를 플로팅하고 창으로 이동하는 데 어려움이 있습니다. 이 코드를 Matlab
코딩에 도움을 주시면 감사하겠습니다.
I를 사용한 코드는 매우 단순하다
[파도 FS = wavread ('C 스케일 fast.wav'); 파일을 메모리에 읽음 */
소리 (wave, fs); % * 웨이브 = 웨이브. * 해밍 (길이 (파));
t = 0 : 1/fs : (길이 (파) -1)/fs; % 및 샘플링 주파수 */
figure (2);
subplot(2,1,1); plot(t,wave); title('Wave File'); ylabel('Amplitude'); xlabel('Length (in seconds)');
L = 길이 (파);
NFFT = 2^nextpow2 (L); Y의 길이로부터 2의 2의 멱수
Y = fft (파, NFFT)/L;
f = fs/2 * linspace (0,1, NFFT/2 + 1);
% 단면 편 진폭 스펙트럼을 플롯합니다. 내 신호 (내 wav 파일의 복근 값) 후
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)|')
내가 1, 2 차 파생 상품을 복용하려고 가우시안 필터와 컨볼 루션,하지만 난 그것을 플롯 할 때 내가 출력을하지 않습니다.
edges = fconv (abs (노래), detect);
테지 = 에지 (P/2 : N + P/2-1);
tedges = tedges/max (abs (tedges));
W = diff (tedge);
Z = diff (W);
필자는 필요한 출력을 얻지 못하는 W와 Z를 플롯하려고 할 때입니다. 내 그래프는 다른 말로 비어 있습니다. 내가 여기서 뭘 잘못하고 있는지 알 수 없다.
당신이 코드를 게시하시기 바랍니다 수 있습니까? – user1343318
코드에 – user2482542