ちょっと難しいわ、信号の複素化による周波数変換

1.前節までで、ヒルベルト変換を調べましたし...

 

 

前節で、ヒルベルト変換を調べました。

その前は、漸化式による正弦波の発生も、できました。

 

 

そこで、今回は、このふたつを組み合わせて

信号の複素化による、周波数変換に、トライしてみましたが

思ったほど、簡単では、ありませんでした....

まだ、完成してないんです...(T_T)

 

 

2.信号の複素化による周波数変換について

 

 

これは、以下の式で、実現できます。

 

 

MATH

 

 

ですので、

 

この積の、実部を計算すれば、一発で、周波数変換ができます。

 

 

MATH

 

逆サイドバンドも発生しません...従って、逆サイドバンド除去の為の、firフィルタも不要です。

 

すんばらしい!

 

 

3.実際は、どうだったのか?

 

 

ヒルベルト変換器の設計は

 

 

// 次数=40 タップ数=41 Q15

// サンプリング= 32KHz

// 帯域端周波数 = 0.5 KHz

 

 

で、行いました。

 

次数を40と、下げたのは、入力信号と、漸化式によるsinのふたつを

ヒルベルト変換器に、通さねばならないからです。

 

この設計で作ったプログラムの、サンプリング周波数は、約25KHzになりました。

(まだ、CPUのクロックを半分にしています。MATH

 

 

3−1 おやっ? プログラムは、割り込みの関数の所に記述していない

 

実は、CPUを、SH7047Fに換えてから、ずっと、そうなんです。

 

92.実際にやってみましょう、ヒルベルト変換 その2(改その2)

91.実際にやってみましょう、ヒルベルト変換

90.ヒルベルト変換は、どんなん?

89.「信号の複素化」の門を叩く

88.SH7047Fでfirフィルタを作成する(最終訂正版)

87.SH7047Fで DSB

86.SH7047Fで、 AD_DAスループログラム等(改)

 

 

以上のプログラムを、参照下さい。

 

 

全て、メイン関数の所で、記述しています。

AD_DAスループログラムですと

void main(void)

{

InitSH();

while(1)

{

PE.DRL.BIT.B12=1;

if(AD0.ADCSR.BIT.ADF)

{

AD0.ADCR.BIT.ADST=0;

data=AD0.ADDR0.WORD;

data=data>>6; //1024の範囲に入るように調節する

data +=0x8300; //AD無入力時の値を足す

PE.DRL.WORD =data;

AD0.ADCSR.BIT.ADF=0;

AD0.ADCR.BIT.ADST=1;

}

PE.DRL.BIT.B12=0;

}

}

 

 

そうなんです...AD_DAスルーがメインなので、メイン関数の所に、書いています。

 

勿論

InitSH()の中で

 

MST.CR2.BIT._AD0=0;//これがないと、AD変換器は動かない

と、宣言して、AD変換器を動作させています。

 

 

この 方法ですと、割り込みのプライオリティを設定する必要が、ありません。

割り込むための、メインプログラムは、ないのですから...

 

 

実は、最初は、無意識で、やっていました。

うまく、動作するもので、違和感も覚えずに...hi (^_^;

 

3−2 今回のプログラム

 

今回のプログラムは、ここ です。

(製作途中なので、汚いです、ごめんなさい。)

 

漸化式によるsin波の発生は、今の実験段階で、約1.2KHzです。(サンプリング周波数から、正確に計算して、決定 すべき)

振幅を合わせる為には、やはり、htermが必要なので、再び、HEW3を使っています。(もうすぐ、試用の命が尽きる...)

 

 

(リードアウトは、10倍する事が必要)

                                    漸化式によるsin波の実部と虚部

$\vspace{1pt}$

                  入力信号の実部と虚部

 

漸化式によるsin波と、入力信号は、振幅のレベルが、ちょっと、違ってますが

そんなことは、実際に、マイクで音声を入力すれば、当然なので、このままにしました。

 

 

漸化式によるsin波の周波数と、入力周波数が同じであれば

正しく周波数変換されます。

MATH

$\vspace{1pt}$

しかし、周波数が異なれば、メタメタです。

MATH

 

 

 

入力信号は、2KHzで、漸化式によるsin波は、1.2KHzなので、

3.2KHzの周波数成分が見えるのですが

漸化式によるsin波、1.2KHzのキャリアが、大きな値(変調信号と、ほとんど変わらない)なのです...

 

 

入力信号と、漸化式によるsin波も、同じ振幅レベルでないと、あかんのでしょうか? そんなアホな...

 

 

今、考えている所です。

 

原因が少し、解りました。

GCC developer Liteでは、正常に働いていたHilbert変換器が

殆ど同じプログラムであるにも拘らず、

HEW3を使うと、hilbert変換器として、正常に動作しないんです、ムムムのム...

そう言えば、HEW3付属のSH7047のヘッダーファイルは、少し変なので

ルネサス社から、7047S.Hを引っ張って来たんでした...

 

H.16.2.6

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