2017-01-11 1 views
3

현재 kaldi 프레임 워크에 파워 스펙트럼이 저장되는 방법을 이해하려고 애 쓰고 있습니다. 오디오 파일 스펙트로 그램 값 이해

나는 성공적으로 this 같은 날 다른 오디오 파일에 대한 데이터 포인트와 큰 파일을 제공

$cmd JOB=1:$nj $logdir/spect_${name}.JOB.log \ 
    compute-spectrogram-feats --verbose=2 \ 
    scp,p:$logdir/wav_spect_${name}.JOB.scp ark:- \| \ 
    copy-feats --compress=$compress $write_num_frames_opt ark:- \ 
     ark,scp:$specto_dir/raw_spectogram_$name.JOB.ark,$specto_dir/raw_spectogram_$name.JOB.scp 

를 사용하여 일부 데이터 파일을 만든 것 같다.

문제는이 데이터 세트를 해석해야하는 방법에 대해 확신하지 못한다는 것입니다.이 fft가 수행되기 전에는 좋은 일이라고 생각합니다.

위의 출력 예제는 1 초 길이의 파일에서 나온 것입니다.
스펙트로 그램 계산에 모든 표준이 사용되었으므로 샘플 주파수는 16 kHz, 프레임 길이 = 25 ms, 오버랩 = 10 ms 여야합니다. 첫 번째 세트의 데이터 포인트 수는 25186입니다.

이러한 정보가 주어지면 어떤 방식으로 출력을 해석 할 수 있습니까?

일반적으로 fft를 수행 할 때 주파수 빈 크기는 F_s/N=bin_size으로 추출 할 수 있습니다. 여기서 F_s은 샘플 주파수이고 N은 FFT 길이입니다. 이것도 같은 경우입니까? 16000/25186 = 0.6 ... Hz/bin?

아니면 잘못 해석합니까? 하나의 FFT를 수행 할 때 F_s는 샘플 주파수이고 N는 FFT 길이이다

답변

4

통상적으로, 주파수 빈 크기 F_s/N=bin_size 의해 추출 될 수있다.

같은 경우입니까? 16000/25186 = 0.6 ... Hz/bin?

실제로 F_s/N은 주파수 빈 크기를 계산하는 데 사용됩니다. 그러나, 당신은 N 언급 FFT 길이가 아닌 샘플의 총 수입니다. 대략 25ms 프레임 길이, 10ms 홉 크기 및 생성 된 출력 데이터 파일이 아마도 실제 값이있는 입력에 대해 98 라인의 257 값을 가지고 있기 때문에 사용 된 FFT 길이는 512 였을 것입니다. bin 크기는 16000/512 = 31.25 Hz/bin입니다. 이 스케일링에 기초

는 (이전 Z 행렬에로드 된 데이터와 함께)은 다음 매트랩 스크립트 원시 데이터를 플로팅 :

fs  = 16000; % 16 kHz sampling rate 
hop_size = 0.010; % 10 millisecond 
[X,Y]=meshgrid([0:size(Z,1)-1]*hop_size, [0:size(Z,2)-1]*fs/512); 
surf(X,Y,transpose(Z),'EdgeColor','None','facecolor','interp'); 
view(2); 
xlabel('Time (seconds)'); 
ylabel('Frequency (Hz)'); 

이 그래프 (어두운 붉은 영역이 가장 높은 영역이다 제공 강도) : Spectrogram

+0

정말 멋지다! .. 코드를 공유 할 수 있습니까? –

+0

은 플롯을 생성하기위한 코드를 공유합니다 .. –

+0

코드를 공유해 주셔서 감사합니다 :) –

관련 문제