语音中浊音段的短时平均能量远远大于清音段的短时平均能量。因此,短时平均能量的计算给出了区分清音段与浊音段的依据,即En(浊)>En(清)。
计算每一帧的过程中,会显示在原来波形中的位置,并且实时显示该帧得到的基音周期。另外还会在另一个窗口实时显示该帧的原始波形。
该帧的原始波形图(以下为不同时间的两帧,会动态变化):
下面左边的图是计算该语音的所有帧对应的基音周期的点,由图可以看出存在不少的野点。因为,需要对此进行进一步的处理,即去除野点。这里通过中值滤波来除去野点,滤波结果见右图。
C++如下:(每按一次空格进入下一个步骤)
- // Description : Pitch detection
- #include <iostream>
- #include <fstream>
- #include "opencv2/opencv.hpp"
- #include "ReadWriteWav.h"
- #include <string>
- using namespace std;
- using namespace cv;
- #define MAXLENGTH 1000
- void wav2image(Mat &img, vector<short> wavData, int wav_start, int width, int max_amplitude)
- {
- short max(0), min(0);
- for (int i = 0; i < wavData.size(); i++)
- {
- if (wavData[i] > max)
- max = wavData[i];
- if (wavData[i] < min)
- min = wavData[i];
- }