该函数,顾名思义,就是描绘F0 Candidate的轮廓。
在中,已经介绍了如何获取ZeroCrossings了。不清楚的可以再看一下我的那一篇文章。
void GetF0CandidateContour(const ZeroCrossings *zero_crossings,
double boundary_f0, double f0_floor, double f0_ceil,
const double *temporal_positions, int f0_length, double *f0_candidate)
函数入参有:
它的原理是这样,
通过zero_crossings中的四个维度,向上过零点,向下过零点,峰值,谷值,来分别做插值计算,算法仿自matlab的.
每个维度都会通过插值的算法,构建出f0_lenght的波形
一下是第一个band频率的数值样例
然后把四个波形合并(每个点取均值),得出f0在此band频率下的轮廓。