2

过零率是信号沿信号的符号变化率,即信号从正变为负或返回的速率。

过零率 Zn 可用于:

1-区分浊音/清音 2-将清音与静态背景噪声分开。

这是区分浊音和清音区域的一种简单(但有效)的方法:

 • Voiced region:  lower zero-crossing rate 
 • Unvoiced region:  higher zero-crossing rate 

这是我正在使用的代码:

        public double evaluate(){
            int numZC=0;
            int size=signals.length;

            for (int i=0; i<size-1; i++){
                    if((signals[i]>=0 && signals[i+1]<0) || (signals[i]<0 && signals[i+1]>=0)){
                            numZC++;
                    }
            }                       

            return numZC/lengthInSecond;
        }

我的问题是:

1-我使用过零的目标是消除信号的清音部分,并且此代码返回过零率。那我该怎么做?!

2-我怎么知道“低”过零率是多少,“高”过零率是多少???

4

1 回答 1

4

根本问题是,虽然您找到了一种计算样本块过零率的方法,但您不能用它来区分该块内的声音,因为它只给您一个描述整个块的数字。

一种可能的解决方案是将你的大块分成小块,然后处理这些块。如果你这样做,你很快就会发现你随意制作的小块不适合整齐的浊音和清音类别,简单地删除一个块或将一个块的音量设置为零会让你“断断续续”声音甚至刺耳的咔哒声,并且不会像您喜欢的那样清晰地划分词性。

这可能是一个值得一开始的点,因为它更接近您现有的代码,但从长远来看它不会奏效,除非您只是想做一些粗糙的事情(在这种情况下,这可能已经足够好了! )。

要解决此问题,您可能需要考虑计算更新每个样本的 Zr的“瞬时过零率” 1 。

  1. My goal of using zero crossing is to eliminate the unvoiced part of the signal,,, and this code gives back the ZERO-CROSSING RATE. SO how will i do that?!不清楚你想要什么。“消除”是什么意思?你想要沉默还是想要跳过这些部分?对于静音,只需用零替换不需要的部分。要跳过,只需删除这些样本。当然,您仍然会遇到点击和弹出,但我假设您知道如何摆脱它。如果没有,也许您可​​以阅读线性插值。请记住,您几乎肯定必须应用一些启发式方法,例如“不要删除任何小于 n 个样本的部分”。

  2. How will i know how much is a "low" zero-crossing rate and how much is a "high" zero-crossing rate???我猜一个好的阈值大约是 400Hz,但语音不是我的专长。此外,它会因说话者以及可能因语言和其他因素而有所不同。我建议你做一些样品,自己看看。

1这个名字有点误导,你可以说“不存在瞬时过零率”。我不是来争辩的;相反,我想使用那个短语,因为它表达了我的意思,我希望你能理解。只要说您应该尽最大努力尽可能多地更新 Zr 就足够了。例如。像这样的东西:

int lastSign = 0;
int lastCrossing = 0;
float nextZeroCrossing( float newSample ) {
   int thisSign = newSample > 0 ? 1 : -1 ;
   if( thisSign != lastSign ) {
      lastSign = thisSign;
      //zero crossing has happened. Update our estimate of Zr using lastCrossing and return that
   } else {
      ++lastCrossing;
      //zero crossing has not happened. Return existing Zr
   }
}

您可能想要“平滑” nextZeroCrossing() 的输出,因为它往往会跳跃很多。一个简单的指数或移动平均滤波器会很好用。

于 2013-07-08T21:34:39.170 回答