2017-02-09 63 views
1

我目前正在嘗試使用由kaldi提供的add-deltas二進制文件來提取delta + delta-delta。但由於某些原因,我無法提取它。無法提取增量和增量delta功率譜計算

我通常使用make_spectrum.sh腳本提取功率譜。 我修改了一下,還包括增量,但是輸出與沒有增量部分的輸出沒有任何區別。

我在做什麼錯?

$cmd JOB=1:$nj $logdir/spect_${name}.JOB.log \ 
    compute-spectrogram-feats --frame-length=25 --frame-shift=10 --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 \| \ 
     add-deltas ark:- ark,scp:$specto_dir/raw_spectogram_$name.JOB.ark,$specto_dir/raw_spectogram_$name.JOB.scp \ 

回答

2

管道中的每個命令的輸出都被傳遞給下一個命令。沒有辦法將輸出寫入文件並在同一時間將其傳遞給下一個命令。您正在嘗試使用compress-feats編寫數據,並且您正嘗試將它傳遞給add-deltas。

你不能用一個命令寫出原始和三角形專長。要麼你寫的增量,而無需編寫計算,功勳原料通過標準輸出增加三角洲:

$cmd JOB=1:$nj $logdir/spect_${name}.JOB.log \ 
    compute-spectrogram-feats --frame-length=25 --frame-shift=10 --verbose=2 \ 
     scp,p:$logdir/wav_spect_${name}.JOB.scp ark:- \| 
    add-deltas ark:- ark,scp:$specto_dir/delta_spectogram_$name.JOB.ark,$specto_dir/delta_spectogram_$name.JOB.scp 

或者運行兩項工作:

$cmd JOB=1:$nj $logdir/spect_${name}.JOB.log \ 
    compute-spectrogram-feats --frame-length=25 --frame-shift=10 --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 

$cmd JOB=1:$nj $logdir/spect_${name}_deltas.JOB.log \ 
     add-deltas scp:$specto_dir/raw_spectogram_$name.JOB.scp ark,scp:$specto_dir/delta_spectogram_$name.JOB.ark,$specto_dir/delta_spectogram_$name.JOB.scp \ 

這是可以做到的技巧與命名管道這兩個結合起來在一個單一的命令,但我不會推薦。簡單地運行

+0

感謝您的幫助。 這確實解決了我的問題.. 我確實有一個問題,關於如何存儲信息。 哪些是增量和哪些是三角洲增量? – Loser

+2

首先是頻譜,中間是delta,最後是delta-delta –

+0

頻譜存儲在raw_spectogram_ $ name.JOB中。 增量變量位於delta_spectogram_ $ name.JOB中。 所以我不知道我明白你是什麼意思的第一,中間和最後?..光譜和三角洲是在單獨的文件.. – Loser