|
|
●概要 測定に混入する誤差を小さくしたり、バラツキを押さえた測定技術について考察する。 ●誤差を小さくする オーバーヘッドは0にはできないので、真値に比べオーバーヘッドを小さくすることが現実的な解となる。例えば、1nS の事象を、500pS 掛かるループ制御で何回かループさせて測定すれば、50%の誤差となってしまう。また、ループさせることは必要なことで、例えば、明らかに測定分解能以下の事象であればループせざるを得ない。このような場合は、以下のように、ループの代わりに、同じコードを書き下ろして実行させる。 t を XXXXX の実行時間真値とすれば、 For i = 0 To N - 1 →測定値 T = ( t + to) * N (toはループ処理オーバーヘッド時間) の代わりに、 XXXXX →測定値 T = t * N と、同じコードをN回実行する。これで、測定値 T は、真値に比例する。また、 測定分解能 ≪ t * N の条件が必要となる。分解能誤差は、一般に量子化されるので、M = 真値 \ 分解能 とすれば、誤差は、 分解能誤差 = 1 / M となる。つまり、M が大きければ大きいほど誤差は小さくなる。当然、真値 < 分解能では、誤差は無限大になる。 この誤差を5%程度にしたいなら、M = 20 つまり、分解能の20倍以上の事象を計測すれば良いと分かる。同じコードを書き下ろす回数にも限度があるので、書き下ろした部分の時間が、ループ処理のオーバーヘッドより十分大きくなれば、それをループしても良い。 ●システムオーバーヘッドの影響を小さくする もうお分かりと思うが、測定分解能がいくら小さくても、このシステムオーバーヘッドがあるので、喜んではいけない。 今、システム周期をt、カーネル平均処理時間をtk、測定時間をTmとすれば、真値をTとすれば、 Tm = T + K * tk Kは、測定中に起こったシステム割り込み回数で、 K = Tm \ t となる。従って、 Tm = T + (Tm \ t) * tk となる。ところで、Tm \ t は、量子数なので、0、1、2・・・・となるが、Tm ≦ t では、0 or 1 となる。これは、システム割込みが、いかなる場合でも起こる可能性があるからで、この状態で 1となれば、Tm = T + tk となる。もし、 T ≒ tk であれば、Tm = 2 * tk と、誤差が100%となる。システム割込み回数が比較的小さいところでは、このように量子化誤差が大きくなるし、バラツキも大きくなる。 今、Tm ≫ t とすれば、量子数は線形化できるので、 Tm = T + (Tm / t) * tk とできる。整理すると、 Tm = t / (t - tk) * T 誤差率を算出すると、 誤差率 = (Tm - T) / T と概ね一定になる。バラツキも問題なので、算出すれば、 バラツキ = 1 / K となる。結局、システムオーバーヘッドの対策は、無限回の割り込みでも、誤差は、tk / (t - tk) より小さくならない、しかし、バラツキは0にできる。常識的な値として、バラツキを10% 程度にしたければ、K = 10 以上とすればよい。つまり、システム周期が50mSであれば、0.5秒間は測定することになる。tkをエイヤッと、200μSとすれば、誤差率は、約4%になる。 |