interpolation を試す

 

                        up sampling のみ                                                                    interpolation filterを通した

 

1. interpolation filter の仕様

    最初のサンプリング周波数 fsと、すると

    cutoff freq = fs/2 

    で、求めることが、できる。(理屈は、まだ、よう、解明できていない。)

 2.実験での、R8C/15用のプログラム

    今回も、タイマーCの割り込みを使う。

    まず、通常のサンプリング fs=10KHz(このfsは、TimerCのサンプリング周波数 tm1=2000で、10KHz)

    入力 2KHz

   

    #pragma interrupt /B comp1_int

void comp1_int(void)
{
    while(adst==1); 

    data = ad - 512 ; 

    tm0=(int)(data+ 512); 

    if (++i==taps)i=0;

    adst=1; 
}
割り込みvectorは、sect30.incに、直接、記述する。

これは、updateされたtool chain 5.40.00に、−fMVTのオプションが、出てこない! からです。

つぎに、decimation 2 (f=fs/2)する。(入力は、同じ2KHz)

void comp1_int(void)
{
    while(adst==1); 

    if(i%2) 

    {

        data = ad - 512 ; //decimation 2

        tm0=(int)(data+ 512); 
     }

     if (++i==taps)i=0;

    adst=1; 

}

つぎに、up sampling 2 (f= 2*fs/2 = fs)

これは、ゼロを挿入することです。

void comp1_int(void)
{
    while(adst==1); 


    if(i%2) data = ad - 512 ; //decimation 2

    else data = 0; //interpolation
 

   tm0=(int)(data+ 512); 

    if (++i==taps)i=0;

    adst=1; 
}

3.いよいよ、interpolation filter を通す

                      decimation → interpolation                                                                normal sampling

 

interpolation filter は、fs/4 に、設定した。(decimateした時のsampling f=fs/2 で、これの半分)

void comp1_int(void)
{
    while(adst==1); 


    if(i%2) data = ad - 512 ; //decimation 2
    else data = 0;             //interpolation 2

    inter[2*taps-1-i] = inter[taps-1-i] = data; // use interpolation filter

    result=rmpa_w(0, taps, fir, inter +taps -1-i);

    result=result >> order;

    tm0=(int)(result+ 512); 

    if (++i==taps)i=0;

    adst=1; 

}

でけたっ!

ところが、

Weaverさんの方式のSSB出力で、うまく、エリアスを取ることが、まだ、でけてない.....(-_-)

4.この一ヶ月、何しとったんやろ

手持ちの、SH2-7047Fを、使いたくて、再度取り出してきたのですが、

もはや、GDBで、remoteDebugできなく、なりました。

理由は

    gnu-sh compilerの version4からの移行過程で version5 以上で、変化が、あったらしく、

スタブ(stub)プログラムが、compilerを通らなくなった!

((long*))mem)++;   *((long*)mem)++ = lcbuf.lbuf; が、Compilerを通らないのです。

そこで

    mem += sizeof(long);

そして

*((long*)mem)++ = lcbuf.lbuf;    は

     *mem=lcbuf.lbuf;
    mem +=sizeof(long);

等に、書き直して

buildできるのですが、GDBと交信すると、色々と不都合が、連発するのです.....

interface誌5月号に、stubプログラムが、掲載されていましたので

それと、William A. Gatliffさんのstartupプログラム(gdbstubs-20030326-1117CDT.tar)を、合体すれば

何とかなりそうなんですが、もう、疲れたびー、中断中。

そこへ、朗報!

    SH7144Fが、Interface誌6月号に付く!  

SH7047F ボードは、1ミャン円以上して、買ったのに.... 凄い!

旭日屋書店さんに、2冊お願いして置きました、安心。

開発環境も付くそうなので、SH7047Fも、動かせるのでは....

H.18.3.28