何とか、できました、 複素数化による周波数変換


dsp44__1.gif
複素数による周波数変換後の出力波形。Tektronix2432A ディジタルオシロ使用

[Tektronix2432A、例によって、ヤフーオークションで購入。保証はなかったが、完動(感動)品です。

波形が止まってみえるのは、初めてですねん、便利。66,000円也。

10年来使っているTektronix TAS465も愛用してます。]

 

1.新しいDAコンバーターを製作

74HC04 x2と、抵抗によるラダー回路です。(H8の時、使ったものを10ビットに拡張した。)


dsp44__2.gif

これだと、クロックが不要です、これがいいわ。

シンプルで、壊れても、すぐ作り直せるし、

出力電圧も、電源電圧5V、目一杯に、スイングできるし

入力電圧と、同じ大きさなんですから、わかりやすい。

(その昔、ある車に乗ってた時、エンジンルームが、すかすかで、地面が見えた!...

それ位、シンプルが、丁度ええですねん。)

MATH

2.理論に基づいて、設定していきましょう

今回は、重要な部分をクローズアップするために、

プログラムで、ごちゃごちゃした所を、すっきりさせました。

start.hなるヘッダーファイル(実は、start.cと書いたほうが正しい)を、インクルードするようにしました。

これを使うと、こんな感じです。

 

int main(void)

{

InitSH();

unsigned int i=0;

while(1)

{

if (AD0_READY) //#define AD0_READY AD0.ADCSR.BIT.ADFで置き換えただけ。

{

data=getAD();

data -=512; //10ビットの中点は、理論上511、又は513に採るべきなので。(実際は、517,520位になったのですが)

kakunou(i,data,N);

    data_chukan=macw( (data_up+N-1-i),fir);

   data=data_chukan>>15; //理論上、Q15だから。

moto_data=data_up[N-1-i+(N-1)/2];

data=(i%2) ? moto_data : data;

       data +=512; //出力も理論上、中点に採るべきだから。

putDA(data);

i++;

if( i==N) i=0;

}

}

return 1;

}

 

putDAも、単なる置き換えです。

inline void putDA(short data)

{

PE.DRL.WORD =~data;

AD0.ADCSR.BIT.ADF=0;

AD0.ADCR.BIT.ADST=1;

}

 

同、

inline short getAD(void)

{

AD0.ADCR.BIT.ADST=0;

unsigned short moto_data;

moto_data=AD0.ADDR0.WORD;

return (moto_data>>6);

}

 

ただ、見やすくしただけ、なんですわ。

 

漸化式によるsin波形の発生と、ヒルベルト変換して、虚部を作ったものを下図に載せます。

これは、例によって、実部と虚部を交互に出力したものです。

MATH

ディジタルオシロだと、信号を交互に出力してるのが、はっきり出すぎますが...

今回、実部と虚部の振幅も、同じくらいに、なってくれました、有り難や、有り難や。

90度の位相差も、これで、確認しただけなのですが...

アルゴリズムは、以前と全く同じなのですが...

何で前回は、アカンかったのか、いっこうに解りません...はて?

 

3.複素化による周波数変換結果等

プログラムは、ここです。

start.hをインクルードしています。

それでも、やっぱり、ゴチャゴチャしてしまった...

MATH

MATH

MATH

MATH

4.課題は?

漸化式による局発のsinの発生なのですが、

実験によると、サンプリング周波数の1/10の周波数位までが、正常に発振する限度のようです。

ここを上げれば、高調波を取り出す時、楽だと思うのですが。

ヒルベルト変換フィルタは、応援団長様ご指摘のように、14に採りました。

充分だと思います。もっと、下げれます。

 

そうやっ!。

SH7047FのADコンバータは、ぎょうさん余ってるんやから、

外部で発振させて、AD変換してhilbertフィルタ通す手も、ありますね。

 

それと、特性を、もっとリファインする事も、必要ですね。

 

 

何とか、又、ハッピーになれました。

IIRのオールパスも興味あるし、解析信号を使った復調、FFTも興味あり。

やることが多くて、長いこと、楽しめそうな気がします、hi。

 

応援団長様、皆様、ご支援、御礼申し上げます。 m(_ _)m

 

H.16.3.25

This document created by Scientific Notebook 4.1. この文書は次の製品で作成しました Scientific Notebook 4.1.