続 R8C/15でフィルタータイプSSB

-1. ローパスフィルターの改善

Fc=7.9KHzと、計算と少し違いますが、OKですよね。

VCVS型2次ローパスフィルタ2段にして、4次ローパスフィルタを作りました。

出典は、トラ技オリジナル No.9 「実験研究 アナログ フィルタ回路の誕生 CQ出版 1992年 p.27」です。

回路は、以前と同じです。

4580Dを、単電源で使っています。(+端子を、、VCC/2に、つった)

コンデンサ、抵抗の値は、最初と同じ、ただ、配線を、間違えとった.....絶句、 堪忍してえな

昔から、超アホやねん、理屈が解らないと....

コンデンサは、積層セラミック 0.1u,0.01u を、使ってます、選別なんて、高級なことは、してませんですねん。

この、4次ローパスフィルタを通して、観察しました。

2KHz(2Vp_p)

ええですねー, 素敵、うっとりします。

しかし、1KHz(2Vp_p)の結果が...

これより、結論として

    キャリアサプレッションは -45dB以上

    不要な、サイドバンドサプレッションも、-45dB以上

と、結論しました。

フー、やれやれ、なんとか目的を達することが、できました。

疑問点も、あります。

R8C/15のAD変換の結果は、10ビットで、得ることも出来るのですが、これの結果が、8ビットより、かなり悪いのです。

10ビットで、Q14に採れば、すごく良さそうなのに...

お見せできない位に、話にならない結果です。

 

課題として、

    AD変換結果10ビットでの検討

    入力部にも、ローパスフィルタ挿入の必要

    出力部のローパスフィルターの、更なる高次化

が、挙げられます。

きっと、キャリアサプレッション、逆サイドバンドサプレッション共、-50dBを実現できると、思います。

これを、突き詰めようかなあ、どうしようかなあ、と、迷っております........

 

さて、ひと段落。

毎度お騒がせいたしました。

今回の実験は、これにてお開きにいたします。

オペアンプの結果について、ご指摘いただきました、尾硲OMに、御礼申しあげます、 m(__)m

-------------------------------------------------------------------------------------------------------------

0.プリント基板版の結果

    記念撮影です、パシャッ。     4次ローパスフィルタを、オペアンプで、組んでみましたが、さっぱり駄目でした トホホ (T_T)

 

オペアンプで、こんな特性を狙ったんですが...

もちろん、単電源5Vで、4580Dを使うために、入力は、中点につっています。

やっぱ、

フィルムコンデンサーを使わないと、あかんのやろか?

抵抗、コンデンサーの設定値が、問題か?

いつもどおり、ええかげんで、ごめんなさい。

 

以下の測定は、オペアンプを通さないで計測したものです。 

 2KHz入力(1Vp_p)

                            穴あき基板                                                                                                     プリント基板

もう少し、スペアナの、RBWを上げますと

                    LPFを通さないで観察                                                                                しょうもないLPFを通してみた

更に、10dB/divに、変更してみますと(LPF通さない)

こんな風でした。

逆サイドの不要な周波数成分は、-45dBで、穴あき基板より、7dB改善されました。(期待した程でも、ニャイニャー)

 

入力が1KHz(1Vp_p)では

                    LPFを通さないで観察                                                                            しょうもないLPFを通してみた

2KHzより悪く、-42dB位です。

ちゃんとした、LPFを作らな、あかんなあ....ぶつぶつ。

2 toneでの入力では 

スペアナ(TR=4171)のRBWを、いっぱいにして観測すると

うーん、結論として、

                          キャリアサプレッションは、 -45dB以上、(1KHz入力結果が、悪い...)

                         不要な、逆サイドバンドサプレッションは、40dBを確保、

と、言う所です。

プログラムは、変えていません。(最後に、書いてあるものです。)

---------------------------------------------------------------------------------------------------------------

 

1.前節の問題点

 2KHz入力時に、

キャリアサプレッッション、逆サイドバンドサプレッション共に、50dB確保していますが

逆サイドバンドに、関係ない周波数が出現して、困りました。

関係ない周波数と、言えども、逆サイドバンドの漏れに、違いはありません。

これは、入力の2KHzのレベルが、大きすぎたのです、凡そ、+-2.5Vと、目いっぱいでした。

この入力のレベルを、下げてみました。

入力2KHz 約900mVです。

シングルトーンでは、これ位のレベルが丁度よいみたい(実は、two tone での最大出力レベルに合わせたのです。)

結果

入力2KHzに対して、逆サイドの不要な漏れは、-38dB位。(最初の約29dBよりは、ましですね。)

AF tow tone では

キャリアサプレッションは45dB位、逆サイドバンドの、関係ない周波数の漏れは、-38dB位です。

これで、精一杯です。

低周波と言えども、ここは、やはり、プリント基板で作ってみないと、よい結果が出ないんでは、ないでしょうか?

やっぱり、こんな測り方では、細かい所まで、測れんと、思う....

こんな、プローブの当て方では、色んなもの(信号、ノイズ)を拾ってしまいますよね。

んで、

現在、PCBE.EXEで、プリント基板版も、製作始めました...

 

firの係数を80に取ってみたり、tm1の値を色々変えてみたり....

firの設計を300Hz〜2700Hzに、きっちり採ろうとしたら、最悪の結果になります。

理論的な方法ではなくて、ゆきあたりばったりは、しんどいな。

tm1=220なんて設定は、根拠なしですわ... (T_T)

 

「ディジタル信号処理ですから、理論どおりに動くはずなのです。」

応援団長様の、お言葉が、忘れられんわ....感謝。

 

このフィルタータイプSSBで、行くとすると、

まず、FS/2以上を、高次のフィルターで切って、

手ごろな455KHzフィルターを利用するために、ミックスして455KHzに持ってきて、片方を切り落とす事になります。

これも、やってみないと、あかんな.....

下のほうに、最終のプログラムを、掲載しときます、ご批判を頂戴したいと、思います。

 

2.じゃあ、次は、どうすんの?

    やっぱ、PSNタイプと言うか、位相で打ち消すタイプを、あたってみます。

 

3.最終プログラム

/***********************************************************************/
/* */
/* FILE :ssb_0.c */
/* DATE :Tue, Jun 21, 2005 */
/* DESCRIPTION :Main Program */
/* CPU TYPE :Other */
/* */
/* This file is generated by Renesas Project Generator (Ver.4.0). */
/* */
/***********************************************************************/

#include <asmmacro.h> 
#include "start.h" 

int fir[60]={
//Q7
/*; ----------------------------------------------------------
; Band(1) Low:0.00000 High:0.06350 R= -52.78252
; Band(2) Low:0.11350 High:0.20000 R= 1.991546E-02
; Band(3) Low:0.25000 High:0.50000 R= -52.78252 Q7 60taps
;----------------------------------------------------------*/
/*0,0,0,0,
-1,0,0,0,
0,0,1,2,
0,-2,-1,0,
-1,-4,-2,4,
6,2,0,4,
6,-4,-22,-22,
3,30,30,3,
-22,-22,-4,6,
4,0,2,6,
4,-2,-4,-1,
0,-1,-2,0,
2,1,0,0,
0,0,0,-1,
0,0,0,0*/
/*; ----------------------------------------------------------
; Band(1) Low:0.00000 High:0.06350 R= -52.78252
; Band(2) Low:0.11350 High:0.20000 R= 1.991546E-02
; Band(3) Low:0.25000 High:0.50000 R= -52.78252 Q14 60taps
;----------------------------------------------------------*/
4,4,18,-33,
-70,-39,23,22,
-24,24,172,196,
-11,-195,-116,5,
-183,-452,-213,456,
709,244,-37,511,
814,-574,-2757,-2807,
386,3900,3900,386,
-2807,-2757,-574,814,
511,-37,244,709,
456,-213,-452,-183,
5,-116,-195,-11,
196,172,24,-24,
22,23,-39,-70,
-33,18,4,4

};

unsigned char i; 
int data[120]={0};
long total;

void set_timerC(void);
void set_AD8(void);

void main(void)
{
i=0;

set_CLK20();

set_LED();

set_timerC();

set_AD8();

asm("FSET I"); //割り込み許可

tcc00 = 1; //タイマCカウント制御開始ビットのセット
adst=1; //AD変換開始
while(1)
{

}

}

void set_timerC(void)
{

pd3_4=1; //P3_4をタイマCの出力に設定
p3_4=1; //初期値=1


tcc00=0;

tcc01=0; //タイマCカウントソース f1
tcc02=0;

tcc12=1; //タイマC カウンタリロード選択ビット 1

tcc13=1; //コンペア0選択ビット アウトプット=1

tcc14=0; //コンペア0一致で出力を L に設定
tcc15=1; 

tcc16=1; //コンペア1一致で出力を H にする
tcc17=1;

tcout4=1; //コンペア出力を  CMP1_1に設定

tm0=0; //カウンタ 初期値
// tm1=140;
tm1=220; //220 が成績がよい
ilvl0_cmp1ic =1; // コンペア1割り込み優先レベル(レベル1)
ir_cmp1ic = 0; // コンペア1割り込み要求フラグクリア

}

void set_AD8(void)
{
pd1_0 =0; //p1_0 読み出しモード AN8
p1_0 =0; //初期値=0

ch2 =1; //AN8
ch1 =0;
ch0 =0;

md =0; //単発モード
adgsel0 =1; //Port1グループ選択
adcap =0; //ADSTビットで開始
cks0 =1; //f2を選択 cks1=0にする

bits =0; //8bit
cks1 =0;
vcut =1; //Vref接続

smp =1; //サンプルホールドあり
}

#pragma interrupt comp1_int (vect=16)
int data_ad;

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

data_ad =ad - 0x80;

if( (i/2)%2 ) data_ad =-data_ad; 

data[119-i] = data[59-i] = data_ad;

total=rmpa_w(0, 60, fir, data+59-i);

total=total>>14;
//total=total>>7;
tm0=(char)(total + 0x80); //13 cycles

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

adst=1; 
}

 

H.17.6.21