大家好、
我无法理解 slaa517e 中参考代码中"emeter-background.c"文件中下面代码背后的数学原理
/*基于内插过零的市电频率测量程序, 以获得市电频率阶跃变化的快速更新速率*/ /*通过连续近似值对过零点进行内插 * z = V_sample - phase -> metal量 度。last_V_sample; X = 0; y = 0; 对于(k = 0;k < 8;k++) { Y <<<= 1; z >>= 1; x += z; 如果(x > V_sample) x -= z; 其他 y |= 1; } //由于检测到尖峰,现在我们需要允许跳过的样本*/ Z = y; while (phase -> metal量 度量.sine_last > 1) { z += y; phase -> metal量 度.sine_last-; } /* z 现在是零之间采样间隔的小数 交叉和当前样本、以样本的1/256为单位*/ /*轻阻尼的滤波器现在应该足以消除噪声并获得 频率的稳定值*/ phase -> metal量 度.main_period +=(int32_t)(phase -> metal量 度.cycle_sample_count - z)<< 12)-(phase -> metal量 度量.main_period >> 4); /*使用样本的残留分次开始下一个循环*/ phase -> metal量 度.cycle_sample_count = z;
如果有人能对此提供一些见解、那将会有所帮助。
谢谢、此致
Shahul
