我试图找到最有效的算法来计算位模式中的"边缘".边缘意味着从0变为1或1变为0.我每250 us对每个位进行采样并将其转换为32位无符号变量.
到目前为止,这是我的算法
void CountEdges(void)
{
uint_least32_t feedback_samples_copy = feedback_samples;
signal_edges = 0;
while (feedback_samples_copy > 0)
{
uint_least8_t flank_information = (feedback_samples_copy & 0x03);
if (flank_information == 0x01 || flank_information == 0x02)
{
signal_edges++;
}
feedback_samples_copy >>= 1;
}
}
Run Code Online (Sandbox Code Playgroud)
它需要至少2或3倍的速度.