DCT4回目 DCT係数を計算する所
///// 変換 /////////////////////////////////////////////////////////
7 Su(u) = 1/2 * C(u) * Σ * Sx(x) * cos( (2x+1)uπ/16 ) x=0 但し、C(u)は、 u=0 の時、1/√2 u≠0 の時、1 です。
まず、1番目の波(DC成分と呼ばれ、実際には波ではなく、直線です)の成分、Su[0]の値を出す所。
上記の公式では、u = 0 となります。
よって、
7 Su(0) = 1/2 * 1/√2 * Σ * Sx(x) * cos( (2x+1)*0*π/16 ) x=0
となりますので、
Σの中のcos() の中はゼロとなり、結果的に、
Su[0] = 1/2( 1/√2*Sx[0] + 1/√2*Sx[1] + ・・・・・・ + 1/√2*Sx[7] )
となります。
この値は、1/√2 に対して各要素が、どういう位置関係に居るのか?という値を個別に出していって、足したものでしょう。
この値を、全部足してしまう所に、私の不思議があります。
各要素に対する値を個別に保存しておくのならば、元に戻せるというのも納得です。
ですが、実際には全部足してしまうので、平均値(のような値)しか残りません。
元々の値が、
例1)100,100,100,100,100,100,100,100 というように一定の値であれば、足してしまっても構いませんが、
例2)0,100,100,100,100,100,100,200, というような値であっても、例1)と計算結果は同じになります・・・
※だから、8つの波で同様に値を出すのでしょうけど・・・
まぁ、次へ進みます
次は、2番目の波へ進みます。
同様に、公式に u=1 を代入すると以下となります。
7 Su(1) = 1/2 * Σ Sx(x) * cos( (2x+1)*π/16 ) x=0
ここで、cos() の中の値は、以下の様に変化します。
π*1/16, π*3/16, π*5/16, π*7/16, π*9/16, π*11/16, π*13/16, π*15/16
これは、ラジアンという単位で表されているようなので(初耳です)、高校時代の記憶通りに、(度:°)に変換すると
11.25°, 33.75°, 56.25°, 78.75°, 101.25°, 123.75°, 146.25°, 168.75°
これは、360°を16分割した22.5°区切りの真ん中の値かな?
0°-22.5°,22.5°-45°,45°-77.5°,77.5°-90°,90°-112.5°,112.5°-135°,135°-157.5°,157.5°-180°
まぁ、これは置いておいて
cos()を実際の値に直してみると
0.9808, 0.8315, 0.5556, 0.1951, -0.1951, -0.5556, -0.8315, -0.9808
となります。
この値で一つ感じるのは、
0番目と7番目、1番目と6番目、2番目と5番目、3番目と4番目、が、正負が逆になっています
なので、値が一定なら打ち消しあって 0 となります。
この事から、入力値が一定なら、Su[0] = 何らかの値、Su[1]、Su[2]、・・・ = 0 となるので、
元の値が復元出来そうな事は、何となく感じました。
ただ、以前、入力値がバラバラの時も復元出来るという所は不明です。
まぁ結局、計算は
Su(1) = 1/2( 0.9808*Sx[0] + 0.8315*Sx[1] + ・・・・・・ + -0.8315*Sx[6] + -0.9808*Sx[7])
となります。
これも、やっている事は、Su(0)の時と変わらず、
0.9808, 0.8315, 0.5556,・・・・ というのは、波を表しているので、
これに対して、対応する要素の値との位置関係を求めているだけでしょう。
これも、個別の値を保持しているのなら分かりますが・・・全部足してしまうので、
結局残る値は、全体的に見てどうか?という事ですよね????
うーーーん。
これ以降の、弟3、弟4・・・の波に関しても、波の波形が変わるだけなので、以下に表とグラフを載せておきます。
【コサイン内の角度】
x=0 | x=1 | x=2 | x=3 | x=4 | x=5 | x=6 | x=7 | |
---|---|---|---|---|---|---|---|---|
u=0 | 0° | 0° | 0° | 0° | 0° | 0° | 0° | 0° |
u=1 | 11.25° | 33.75° | 56.25° | 78.75° | 101.25° | 123.75° | 146.25° | 168.75° |
u=2 | 22.5° | 67.5° | 112.5° | 157.5° | 202.5° | 247.5° | 292.5° | 337.5° |
u=3 | 33.75° | 101.25° | 168.75° | 236.25° | 303.75° | 11.25° | 78.75° | 146.25° |
u=4 | 45° | 135° | 225° | 315° | 45° | 135° | 225° | 315° |
u=5 | 56.25° | 168.75° | 281.25° | 33.75° | 146.25° | 258.75° | 11.25° | 123.75° |
u=6 | 67.5° | 202.5° | 337.5° | 112.5° | 247.5° | 22.5° | 157.5° | 292.5° |
u=7 | 78.75° | 236.25° | 33.75° | 191.25° | 348.75° | 146.25° | 303.75° | 101.25° |
【コサインの実数値】
x=0 | x=1 | x=2 | x=3 | x=4 | x=5 | x=6 | x=7 | |
---|---|---|---|---|---|---|---|---|
u=0 | 0.7071 | 0.7071 | 0.7071 | 0.7071 | 0.7071 | 0.7071 | 0.7071 | 0.7071 |
u=1 | 0.9808 | 0.8315 | 0.5556 | 0.1951 | -0.1951 | -0.5556 | -0.8315 | -0.9808 |
u=2 | 0.9239 | 0.3827 | -0.3827 | -0.9239 | -0.9239 | -0.3827 | 0.3827 | 0.9239 |
u=3 | 0.8315 | -0.1951 | -0.9808 | -0.5556 | 0.5556 | 0.9808 | 0.1951 | -0.8315 |
u=4 | 0.7071 | -0.7071 | -0.7071 | 0.7071 | 0.7071 | -0.7071 | -0.7071 | 0.7071 |
u=5 | 0.5556 | -0.9808 | 0.1951 | 0.8315 | -0.8315 | -0.1951 | 0.9808 | -0.5556 |
u=6 | 0.3827 | -0.9239 | 0.9239 | -0.3827 | -0.3827 | 0.9239 | -0.9239 | 0.3827 |
u=7 | 0.1951 | -0.5556 | 0.8315 | -0.9808 | 0.9808 | -0.8315 | 0.5556 | -0.1951 |
【コサインの値に対するグラフ(実際の値を繋げたグラフ)】
DCTは、入力された値を、このグラフの各波に分解していると思います。