Mini-DSO
Mini-DSO copied to clipboard
一些计算细节的原理疑问?
老刘你好,我在学习您的示波器代码的时候对以下几个计算公式感到了一些困惑,它们没有数学公式的说明,难以理解这样处理的缘由,希望您能给予解答。
-
问题1:在chart.c的AnalyseData()函数中,处理当前选择Option_MeaWay_AC方式进行测量的处理中,对DC输入您是用
Mvoltage_Aver += (VMax_m + VMin_m) >> 1
进行处理,但是AC部分却做了如下复杂计算,这个计算的依据是什么? -
问题2:回头再看
VMax_m
和VMin_m
,它们同样经过了一些处理,除此之外,它们是通过adcMax-BiasVoltage
以及adcMin-BiasVoltage
转换得到,BiasVoltage
默认值为8900
我原来猜测是4092满量程的偏移,但这个值还是让我感到困惑。 -
问题3:关于频率计算方面,您给了一个 $Waveform_{freq}=25000(ms)/(Range \times Interval)$ or $25000000(us)/(Range\times Interval)$ 的公式,
25000 or 25000000
这个基准值为什么这么选取?是与缓存大小相关吗?
switch (ScaleH)
{
case 0: //500ms
WaveFreq = 50.0f / (float)WaveLength + 0.5; //WaveFreq=25000/(500*WaveLength);
break;
case 1: //200ms
WaveFreq = (125.0f / (float)WaveLength); //WaveFreq=25000/(200*WaveLength);
break;
case 2: //100ms
WaveFreq = (250.0f / (float)WaveLength); //WaveFreq=25000/(100*WaveLength);
break;
case 3: //50ms
WaveFreq = (500.0f / (float)WaveLength); //WaveFreq=25000/(50*WaveLength);
break;
case 4: //20ms
WaveFreq = (1250.0f / (float)WaveLength); //WaveFreq=25000/(20*WaveLength);
break;
case 5: //10ms
WaveFreq = (2500.0f / (float)WaveLength); //WaveFreq=25000/(10*WaveLength);
break;
case 6: //5ms
WaveFreq = (5000.0f / (float)WaveLength); //WaveFreq=25000/(5*WaveLength);
break;
case 7: //2ms
WaveFreq = (12500.0f / (float)WaveLength); //WaveFreq=25000/(2*WaveLength);
break;
case 8: //1ms
WaveFreq = (25000.0f / (float)WaveLength); //WaveFreq=25000/(1*WaveLength);
break;
case 9: //500us
WaveFreq = (50000.0f / (float)WaveLength); //WaveFreq=25000000/(500*WaveLength);
break;
case 10: //200us
WaveFreq = (125000.0f / (float)WaveLength); //WaveFreq=25000000/(200*WaveLength);
break;
case 11: //100us
WaveFreq = (250000.0f / (float)WaveLength); //WaveFreq=25000000/(100*WaveLength);
break;
}
- 问题4:在问题3中得到的$Waveform_{freq}$您又做了如下计算,这样做的目的以及依据是什么?
WaveFreq = (float)WaveFreq / (0.0162f * (log10(WaveFreq) /log10(2.7) ) + 0.9398f);
@CreativeLau 谢谢!
您好,您的信息我已收到