这里的音频菜鸟和数学挑战。我正在使用DirectSound,它使用a -10000到0范围,将其转换为0-100标度。我找到了这个函数这里,它根据百分比获得毫米波:
private int ConvertPercentageToMillibels(double value)
{
double attenuation = 1.0 / 1024.0 + value / 100.0 * 1023.0 / 1024.0;
double db = 10 * Math.Log10(attenuation) / Math.Log10(2);
return (int)(db * 100);
}我需要帮助得到这个函数的反比,基本上是基于毫米波的百分比。以下是我到目前为止所得到的,不起作用的东西:
private double ConvertMillibelsToPercentage(int value)
{
double db = value / 100;
double attenuation = Math.Pow(10, db) / 10 * Math.Pow(10, 2);
double percentage = (1.0 * attenuation) - (1024.0 * 100.0 / 1023.0 * 1024.0);
return percentage;
}发布于 2016-03-17 22:10:22
这就是你要的!
private double ConvertMillibelsToPercentage(int value)
{
double exponent = ((value / 1000.0) + 10);
double numerator = 100.0 * (Math.Pow(2, exponent) - 1);
return numerator / 1023.0;
}由于在int和double之间出现明显的问题,答案将略有不同。
编辑:根据教学如何捕鱼的要求,这里是第一个数学步骤,以达成解决方案。我没有展示全部的东西,因为我不想破坏所有的乐趣。除非另有说明,所有日志功能都应视为第10号日志:
millibels = db*100; // Beginning to work backward
millibels = 10*Log(attenuation)*(1/Log(2))*1000; // Substituting for db
millibels = 1000*Log(attenuation)/Log(2); // Simplifying让毫巴=米。然后:
m = 1000*Log(attenuation)/Log(2);从这里您可以选择两条路线,您可以使用日志的属性来发现:
m = 1000* Log_2(attenuation);// That is, log base 2 here
attenuation = 2^(m/1000);或者,您可以忽略该特定属性,并意识到:
attenuation = 10^(m*Log(2)/1000);通过插入您所知道的衰减值,尝试从上面的选项中找出它:
attenuation = (1/1024)+(percentage/100)*(1023/1024);然后求百分比。祝好运!
如果你被这样的事情困住了,我强烈建议你去数学栈交换--那里有一些聪明的人喜欢解决数学问题。
或者,如果你特别懒惰,只想得到答案,你可以直接把这些东西输入Wolfram,它就会“神奇地”给出答案。看看这个
https://stackoverflow.com/questions/36072054
复制相似问题