gpt4 book ai didi

使用定点数学计算 RMS (C)

转载 作者:太空宇宙 更新时间:2023-11-04 04:35:46 28 4
gpt4 key购买 nike

我正在尝试计算波形的 RMS 值,但遇到了一些问题。

我每 x 微秒采样一次,这是由中断触发的。样本存储在一个数组中,每次采集样本时,它会将最后一个值推送到数组中的下一个点并输入一个新值。当我采集样本时,我将它平方并除以 20(每个样本的数量期间,假设波形固定频率)然后将它放入我的数组,我还将它添加到一个总和值,当我达到 20 个样本时,我减去第一个样本并添加最后一个样本。

value 20 = value 19   //INT16 values
value 19 = value 18
...
value1 = (sample * sample)/20
sumvalue += value1
sumvalue -= value20

然后我调用一个 RMS 函数,该函数采用该值,除以最后计算的 RMS 值(或者如果尚未计算则除以 1)加上最后的 RMS 值,然后将所有结果除以 2。

CalcRMS(sumvalue)
INT32 tempsum
if(RMS)
tempsum = (sumvalue/RMS + RMS)/2
else
tempsum = (sumvalue + 1)/2
RMS = tempsum

然后我将 RMS 输出到屏幕。唯一的问题是我的 RMS 值一直在变化,即使波形是恒定的。如果我在那里运行一个直流值,我的 RMS 保持稳定,但插入正弦波,它会变得疯狂。

希望有人能指出我正确的方向。我不想要直接的答案,只是一些让我回到正轨的插入。

最佳答案

好吧,这个函数并没有真正计算 RMS。

您是否查看过 sumvalue 如何随时间变化?在 dc 和符号情况下,sumvalue 必须有点恒定。如果不是,则执行求和的例程有问题。如果总和是常数,那么你的 RMS 程序有问题。

关于使用定点数学计算 RMS (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30756957/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com