>

오디오 웨이브와 시간 주파수 데이터 (x 축 시간, 웨이브 에너지 및 y 축 주파수 데이터)를 보여주는 그래프를 만드는 방법을 찾고 있습니다. 두 개의 별도 플롯 에서이 코드를 사용합니다.

[audio, fs] = wavread('audio.wav');
subplot(211)
spectrogram(audio,256,200,256,fs,'yaxis')
subplot(212)
wavEnergy=audio(:,1);
time=(1/fs)*length(wavEnergy);
t=linspace(0,time,length(wavEnergy));
plot(t,wavEnergy);

이제 2 가지에 대한 도움이 필요합니다.

먼저 스펙트로 그램 시간을 초 단위로 가져 오려면 어떻게해야합니까? 지금은 x 범위가 0-340 ( 'time'으로 표시됨)으로 그래프로 표시되며 클립의 길이가 약 40 초라는 것을 알고 있습니다 (다른 플롯은 올바르게 표시합니다).

둘째, 어떻게 함께 플롯합니까? 스펙트로 그램에서 행렬을 얻을 수 있지만 해당 행렬에서 어떤 배열을 얻을 수 있으며 시간 프레임을 어떻게 초로 변환합니까?

수정 :

첫 번째 문제는 해결되었지만 그래프는 여전히 이상한 일을하고 있습니다. 둘 다 약 40의 데이터를 출력하지만 그래프의 범위와 데이터의 오프셋은 다릅니다. 스펙트로 그램은 0에서 40 초 사이이지만 첫 번째 0.5에서는 데이터가 표시되지 않으며 웨이브 플롯은 0에서 45 초 사이이며 마지막 5에서는 데이터가 표시되지 않습니다. 범위와 오프셋을 동일하게하려면 어떻게해야합니까?

편집 2 :

방금 axis tight; 를 사용해야했습니다.  두 서브 플롯에서

  • 답변 # 1

    동일한 타임베이스에서이 두 플롯을 정렬하려면 데이터의 샘플링 주파수를 결정해야합니다. 스펙트로 그램에 전달하는 파라미터에 따라 샘플링 주파수는 1000Hz입니다. time = (1/8000)*length(wavEnergy) 정의에 근거 샘플링 주파수는 8000Hz입니다. 일관성이 없습니다. wav 파일에서 오디오 샘플링 주파수를 얻으려면 [audio, fs] = wavread('audio.wav') 를 사용할 수 있습니다 .

  • 이전 typescript - 앵귤러 소재 - 평평한 나무와 중첩 된 나무의 차이점
  • 다음 c# - SQL로 인해 사이클 또는 여러 계단식 경로가 발생할 수 있음