我目前正在尝试使用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 \
答案 0 :(得分:2)
管道中每个命令的输出都传递给下一个命令。无法将输出写入文件并在同一时间将其传递给下一个命令。您正尝试在compress-feats中编写数据,同时尝试将其传递给add-delta。
您无法使用单个命令同时编写原始专长和增量专长。你可以写一些增量而不用将raw-stdout of compute-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 \
可以使用命名管道进行技巧,将这两者组合在一个命令中,但我不建议这样做。简单地运行上面的单个作业
更简单