我在vb.net中做了一些计算,这是我的等式:
rms = (20 * (Math.Log(rms / 0.7746))) 'also tried (Math.Log10(rms / 0.7746))
我尝试过各种不同的编写方法,包括将计算分成不同的步骤。然而,最终结果相当远。
我尝试将变量'rms'声明为十进制和双精度。它确实包含小数位。
在Excel中,我尝试使用以下公式进行相同的计算:
=20*(LOG(C2/0.7746)) ' where C2 is the RMS value
结果与我以前检查的网站以及我的袖珍计算器一致。
我也尝试将数字四舍五入到小数点后3位:
rms = Math.Round(rms, 3)
这对最终结果的影响也很小。
我只能假设它是VB中的'运算符优先级',但我正在努力解决这个问题。
任何帮助都一如既往地非常感谢,谢谢。
答案 0 :(得分:1)
在马拉松调试会话之后,我在代码中发现了一个错误。
我有一个例程,它使用给定频率的电压来“#34;标准化"我做的所有图都是0dBu。
我的规范化程序被打破了。不好。
最后 - 为了从日志数学中获得正确的输出,我不得不改变执行计算的顺序。
原来是rms = (Math.Log10(rms / 0.7746) * 20)
在尝试查找问题时,我将其更改为rms = (20 * (Math.Log(rms / 0.7746)))
会产生不同(且不正确)的结果。
无论如何 - 它现在已经修好了。
感谢所有回复的人。