首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正弦波频率/period的检测

正弦波频率/period的检测
EN

Stack Overflow用户
提问于 2012-11-27 20:51:02
回答 1查看 4.7K关注 0票数 0

我只需要一些关于如何从正弦波中检测频率的指导。我通过DtoA转换器产生了正弦波。现在,我将该信号放回AtoD以监视和验证输出。

我不知道如何检测正弦波的频率。显然,我应该从正弦波中获得周期,并应用滞后来补偿噪声。任何提示都是非常感谢的。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2012-11-27 20:56:11

如果这只是关于正弦波,我会检查零交叉,并计算几百个周期的零交叉之间的平均时间,这将给出准确的半周期长度,由此,你可以计算频率。

(“零”可能不是微不足道的,因为大多数uC只有0-Vdd范围的模数转换器输入,所以在这种情况下,零可能恰好是Vdd/2...)

(非常简单)伪代码可以是

代码语言:javascript
复制
const zero = 0; //or vdd/2 if that's the case
while(cyclesSoFar<enoughCycles) {
    currentSample=adcRead();
    //detect zero crossing (needs hysteresis added)
    if((lastSample>zero&&currentSample<=zero) || (lastSample<zero&&currentSample>=zero) ) {
        period = getTicks()-ticksAtLastCrossing; //might have to check for over/underflow to get correct value
        avgPeriod = avgPeriod * (cyclesSoFar)/(cyclesSoFar+1) + period/(cyclesSoFar+1);
        cyclesSoFar++;
    }
    lastSample = currentSample;
}
freq = ticksFreq/(avgPeriod*2);

其中: enoughCycles是要测量的周期数,零是正弦波的直流偏移量,ticksFreq是CPU的频率,这是可用的最精确时间。当然,这是非常-非常简单的,需要添加大量的错误和检查。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13584644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档