さっきの追記
やっぱり変数を左右分に分ける必要性があんまりなかったみたい。
あったとしたらこれだけ。
int l=0, r=0, m=0;
先生に聞くと、これであってるっぽい。
エクセルで差分をグラフに描くと、y軸が元の1/10になってることから、差分のエントロピーは元のエントロピーより1/10小さいと考えられるそうな。
そうすると、1/8≦1/10≦1/16だから、大体3ビットちょっと小さくなってるんじゃないかなと言ってた。
で、さっきは全体のエントロピー求めたから、今度は差分だ。
for(count=0; count!=samples_to_output; count++){ for(i=0; i<channels; i++){ if(bits<=8){ if((x=fgetc(f)) == EOF) goto loopend; x -= 128; }else{ if(fread(s, 2, 1, f) != 1) goto loopend; x = (short)(s[0] + 256 * s[1]); } if(i!=channels - 1) m = l; if(i==channels - 1) m = r; //printf("%d", x-m); //if(i!=channels - 1) printf(" "); histo[x+32768]++; hists[(x-m)+32768]++; if(i!=channels - 1){ l = x; } if(i==channels - 1){ r = x; } total++; } //printf("\n"); }
以前のこの部分を、上のやつに変更。
これでいいっぽい。
で、結果が
all : 12.3109 diff : 8.92482
になる。
うん、大体3ビットちょっと減ってるな。