E24系列の計算を行う関数を作った [電子工作]
E24系列の値を求める関数を作成しました。
E24系列というのは、抵抗などの値に使用される数値の並びのことです。 1から10までの間を24の数値でほぼ等比分割しています。 ところが、これらの数値は完全な等比関係にあるわけではありません。 テーブルを使って値を求める方法もあるのですが、さる理由から関数に仕立て上げてみました。
' Omega is PI/12. Private Const Omega As Double = 3.14159265358979 / 12 ' Ln24 is LOG(10**-24) Private Const Ln24 As Double = 2.30258509299405 / 24 Public Function CalcE24(ByVal x As Double) As Double Dim R As Double R = 1 R = R _ + 0.0100001 _ - 0.0193252 * Cos(1 * Omega * x) _ + 0.0070975 * Cos(2 * Omega * x) _ - 0.0020583 * Cos(3 * Omega * x) _ + 0.0037966 * Cos(4 * Omega * x) _ + 0.0001574 * Cos(5 * Omega * x) _ + 0.004413 * Cos(6 * Omega * x) _ + 0.0013219 * Cos(7 * Omega * x) _ - 0.0027041 * Cos(8 * Omega * x) _ - 0.0029183 * Cos(9 * Omega * x) _ - 0.0026354 * Cos(10 * Omega * x) _ + 0.0010465 * Cos(11 * Omega * x) _ + 0.001808 * Cos(12 * Omega * x) R = R _ + 0.0034761 * Sin(1 * Omega * x) _ - 0.0037331 * Sin(2 * Omega * x) _ - 0.0024473 * Sin(3 * Omega * x) _ - 0.0008674 * Sin(4 * Omega * x) _ + 0.0024085 * Sin(5 * Omega * x) _ - 0.0024512 * Sin(6 * Omega * x) _ + 0.003231 * Sin(7 * Omega * x) _ + 0.0041405 * Sin(8 * Omega * x) _ - 0.0019662 * Sin(9 * Omega * x) _ - 0.003133 * Sin(10 * Omega * x) _ - 0.0050543 * Sin(11 * Omega * x) CalcE24 = Exp(x * Ln24) * R End Function
これは、Visual BASICの関数です。 xが整数値になったときに限りE24系列の数値が現れます。 例えば、0の時には1.0Ω、89(24*3+17)の時には5.1kΩ、の値が得られます。
プログラムのうち、"Exp(x * Ln24)"の部分が理想的な等比数列をあらわしています。 そして、理想的な値からの誤差を計算しているのが、"R"です。
"R"は、フーリエ級数によって求めています。 フーリエ級数のための係数は、逆フーリエ変換でも求まるのですが、今回は、Excelの「ソルバー」という仕組みを使って計算させました。
何で、こんな関数が必要だったかというお話は、また後日。
うーん、MUSIC STICKでE24系列を使った時の時定数の計算とか。
by hamayan (2008-07-16 20:39)
MUSIC STICKの場合、マイコンが数値処理をするから、マージンさえとってあれば値は問わないのです。
問題は、「抵抗でプログラム」する場所です。
by noritan (2008-07-16 21:31)