補間曲線とリサンプリング

二週間のご無沙汰でした。SALです。

前回の続きとして、補間曲線を求めてみる(全係数を算出する)ことにします。
やり方を理解していただく為に、計算が容易な3次のペジエ曲線から始めます。
標本値やその傾き等の記号法及びルールは、前回と同じです。

ソースは、隣り合う二点とその傾きなので、左側の A- 標本点をY軸上に取ります。
(前回は、中点を求めるだけだったので、中点をY軸上に取りました。)
求める関数を、f(x)=a・x^3+b・x^2+c・x+(A-) とすると。連立方程式は
(A+)-(A-)=a+b+c
(G-)=c
(G+)=3a+2b+c
となります。この方程式は簡単に解けて、
a=-2・{(A+)-(A-)}+(G-)+(G+)
b=3・{(A+)-(A-)}-2(G-)-(G+)
c=(G-)
になります。本題の7次の曲線に備えて、行列を使った表現も添付しておきます。

ところでこの解は、前回の式②を含んでいなければなりません。
では、中点を計算してみましょう。
f(0.5)=[-2・{(A+)-(A-)}+(G-)+(G+)]/8+[3・{(A+)-(A-)}-2(G-)-(G+)]/4+(G-)/2+(A-)
={(A+)-(A-)}/2+(A-)+(G-)・(1/8-1/2+1/2)+(G+)・(1/8-1/4)
={(A+)+(A-)}/2+{(G-)-(G+)}/8
=A-G/4
中点の値は、確かに前回の②式になりました。

次に、いよいよ7次の曲線に移ります。
3次の時と同様に、A- 標本点をY軸上に取ります。
求める関数を、f(x)=a・x^7+b・x^6+c・x^5+d・x^4+e・x^3+f・x^2+g・x+(A-) とします。
方程式及び解は、テキストではみにくいので、図にしました。

上段が、7つの係数に対する7元の連立一次方程式です。
下段は、それを解いたもので、総ての係数が標本点とその傾きで表されています。
勿論、この関数の定義域は -1~2 つまり標本点(B-)~(B+)ですが、採用する範囲は、0~1 つまり標本点(A-)~(A+)です。
検算を兼ねて、こちらも中点 f(0.5) を求めてみます。
256・f(0.5)=2a+4b+8c+16d+32e+64f+128g+256・(A-)
と、256倍の値を計算すると少し楽です。
項数が多くて大変(挑戦してみてください)ですが、各成分毎に纏めると…
256・f(0.5)=6.5・{(B-)-(A-)}+121.5・{(A+)-(A-)}+6.5・{(B+)-(A-)}+1.5・(Gb-)+40.5・(Ga-)-40.5・(Ga+)-1.5・(Gb+)+256・(A-)
=6.5・{(B-)+(B+)-2(A-)}+134.5・(A-)+121.5・(A+)-1.5・{(Gb+)-(Gb-)}-40.5・{(Ga+)-(Ga-)}
=13・(B-A)+256・A-9・Gb-81・Ga
従って、
f(0.5)=A+(B-A)・13/256-Ga・81/256-Gb・9/256
これも、前回の⑤式そのものです。

ソフトウェアによるD/A変換
楽曲全体で標本点の総数-1 だけ、対象区間が有りますが、それぞれについて係数を求めることが可能です。
これまでに再三述べてきたように、近似値ではありますが、低エイリアスの楽曲波形を具体的な関数の形で求めたことになります。
任意の時刻における変位が求まったことになるので、この結果を「ソフトウェアによるD/A変換」と呼ぶことにします。
此処までくれば、任意のサンプリング周波数で標本値を求める手順「リサンプリング」は、朝飯前です。
SALが敢えて「レートコンバータ」ではなく「リサンプリング」と呼んでいるか、ご理解頂けたでしょうか?
最後に、重要な制限を忘れてはいけません。
それは、「元のサンプリング周波数より低くしてはいけない」と言うことです。

理由は簡単です。
このSAL方式では、ナイキストフィルタ処理が有りません。
従って、新しいサンプリング周波数の方が低いと、その半分より高い成分がエイリアスとして、信号側に混入してしまいます。
まあ簡潔に言えば、「本末転倒」と言う事ですネ…。

次回は、補間曲線の本当の目的についてお話します。
今回はこの辺で、失礼します。

コメント