シンセ・アンプラグド RSSフィード

2008-01-07

平均率関数のシュトレーレ近似

またまた、ちょっと脱線します。 「ikuro」さんの web サイトのコラムに興味深い記事がありました。

それは、2 を底とする指数関数の近似式で、1743 年にシュトレーレが発見した

¥quad¥quad 2^x = (24 + 10 ¥cdot x) / (24 - 7 ¥cdot x)

というものです。(0 ¥le x ¥le 1)

「ikuro」さんの web サイトは(→こちら)で、下のほうの「今月のコラム(閑話休題)」をクリックして開くページの 08/01/07 付けの記事、「平均率関数の分数関数近似」を見てください。

この記事の中では、平均率の周波数の計算に 2 を底とする指数関数が登場するということで、「平均率関数」と呼んでいます。

シュトレーレは職人で、数学的な訓練を受けていなかったそうで、長い間、あまり正確ではない近似式だと思われていたようです。 それが、50 年前に、とても良い近似式であることが分かったそうです。

さっそく、誤差のグラフを書いてみました。

f:id:pcm1723:20080107231213p:image

誤差は、± 0.2 % ほどで、ほぼ最良近似になっています。

シュトレーレの近似式を計算するアナログ回路を考えてみました。 といっても、何のヒネリもない、加減算回路と乗除算回路の組み合わせです。

f:id:pcm1723:20080107231216p:image

1 オクターブ分だけのアンチログ回路と言えるもので、入力 VIN が 0 から Vref まで変化すると、出力電流が 1 オクターブ変化します。

OP アンプ 2 個の加減算回路部は SPICEシミュレーションしてみましたが、結果は自明なので、特に載せるほどのことはありません。

1 オクターブだけのアンチログなんて実用性がないように思われますが、トップオクターブ内の音程をアナログ値で、オクターブのコードをディジタル値で表現するシステムでは、トップオクターブの生成に利用することができます。

その場合は、マイコンが関わることになるので、アンチログはプログラムでも処理できますので、あまりメリットはありません。

上の回路では、入力電流 I_2 に一定電流を流しているだけですが、ここにオクターブ・コードに対応して 2 のべき乗に比例する電流を流せば、出力電流はオクターブも含めて正しい周波数に対応するものとなります。

乗除算器を持ち出すのは、ちょっと大げさですが、乗除算器自体や、基準電源に温度依存性がなければ、他に温度特性を持つ部分はないので、その点は通常のアンチログ回路に比べて有利です。

欠点は、分子、分母、オクターブと、変化する入力が3つあるので、オクターブの境界をまたいで周波数が変化する時の過渡変化がノイズとなることです。

Pade(パデ)近似との関係

Pade 近似とは、簡単に言えばテイラー展開の拡張とも言えるもので、テイラー展開は、べき級数で近似するものですが、Pade 近似は有理式で近似します。

指数関数の双一次の Pade 近似は、

¥quad¥quad ¥exp(x) = (2 + x) / ( 2 - x)

となります。

指数関数には、「分数的対称性」といって、

¥quad¥quad ¥exp(-x) = ¥frac{1}{¥exp(x)}

という性質があります。 指数関数の Pade 近似を見ると、確かに分数的対称性があることが分かります。

この Pade 近似式を 2 を底とする指数関数に変換すると、

¥quad¥quad 2^x = ¥exp(¥ln(2) ¥cdot x) = (2 + ¥ln(2) ¥cdot x ) / (2 - ¥ln(2) ¥cdot x)

となります。

分子分母の定数項の 2 を、シュトレーレの近似式の 24 と合わせるために分子分母に 12 をかけると、

¥quad¥quad (24 + 12 ¥cdot ¥ln(2) ¥cdot x) / (24 - 12 ¥cdot ¥ln(2) ¥cdot x) = (24 + 8.318 ¥cdot x) / (24 - 8.318 ¥cdot x)

となり、12 ¥cdot ¥ln(2) = 8.317... と、シュトレーレの近似式の分子分母の x の係数の相乗平均 ¥sqrt{7 ¥cdot 10} = 8.366... が近い値なのは興味深いです。

Pade 近似では、x が 0.5 くらいまではシュトレーレの近似式と同程度の誤差ですが、0.5 を超えると急激に誤差が大きくなっていきます。

また、シュトレーレの近似式は分数的対称性を満たしていないのも興味深いです。