信号の複素化による周波数変換 その2

1.前節の結果から

MATH

只、単に信号を複素化して、掛け合わせるだけでは、上図のように

適切な信号が生成されないことがわかりました。

 

理論的には、一転の曇りもありません、明白です。

MATH

及び、これより導かれる計算式も、正当です。

MATH

 

2.どうすれば、よいのか...

 

入力信号と、漸化式によるsin波の、振幅の割合を工夫するしかありません。

これは、残念ながら、

今の所、実験で試行錯誤的に求めるしか、思いつきません...

これが、疲れるのですわ...

比較的よい結果が出たのに、データー消失したりして... (T_T)

 

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

 

振幅の大きさを変えれる所は、4箇所ありますが、

 

漸化式によるsin波の大きさは、定義の部分の所(120が振幅の大きさを決める所)

だけ、触ります。

 

//************************************************************

const int sinw=9069/120 ;//Q15 a1=sinw 1KHz sampling 22.405Hz

const int const1_cosd=5120; //Q17 b0=1-cosd

//************************************************************

入力信号の大きさは、以下で決めます。

 

//AD変換の結果をhilbert変換器に通す---------------------------------------------------------------------

//*****************************************************************

kakunou(i,data,N);

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

//data=data_chukan>>15;

data=data_chukan>>14;

moto_data=data_up[N-1-i+(N-1)/2];//N-1-iから40ポイント前の点=中点

moto_data = moto_data*66/50; //振幅のスケーリング。 * 0.65と小数点にすると、極端に遅くなるので注意!

//*****************************************************************

 

理由は、よくわかりませんが、

和と差の周波数の振幅の比は

この部分で、かなり改善されます。

(moto_data*real_y*3の部分です。3を掛ける事で、随分変わる。)

 

//実部、虚部同士の積を計算する

//****************************************

output=moto_data*real_y*3 - data*imag_y;

output +=200000;

output =output>>9;

//****************************************

 

この数字の「3」ですが、偶然見つけました。

「2.8」でも、「3.2」でも、結果は、「3」より悪いです。

 

この、「偶然」言うのが、疲れるのですわ...

「1234」やったら、よう見つけんわ...

 

 

 

今の所、これが、最高のパフォーマンスです。

 

内部の漸化式によるsin波、元信号の1.5KHzは、

発生した高調波を採用すれば、関係なくなりますから、

これで、一気に、高い周波数まで、持っていけます。

 

その代り、サンプリング周波数の倍の高調波のサイドに、エリアスが出現するのですが...

MATH

製作した hilbert変換器は、10.9KHzまで、平坦なのですから

MATH

漸化式によるsin波そのものを、もっと、高い周波数に持っていく事を試しているのですが

どうも、桁あふれが出て、NGです...

H.16.3.9

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