1

我目前正在尝试使用 kaldi 提供的 add-deltas 二进制文件提取 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 \
4

1 回答 1

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 \

可以使用命名管道来将这两者组合在一个命令中,但我不建议这样做。简单地运行上面的单个作业更简单

于 2017-02-09T08:28:12.230 回答