AF PSN

PSN方式でSSBを発生させるためのAF PSNを試作した.01
PSN方式のSSBジェネレータは上図のような構成であるが,大概AF PSNの実現がネックとなる.

アナログ回路でAF PSNを実現する方法としては,ナガード型PSN,多段のオールパスフィルタ,PPSNなどが知られている.
これらは,性能が十分でなかったり,回路規模が大きい,部品定数の精度が要求される,など少々難しいところがあり,さらにアナログであるが故,環境(周囲温度など)の変化による特性の変化にも気を付ける必要がある.

そこで今回はAF PSN をディジタル信号処理で実現することにした.これは近年よく見かけるSDRと同様なものである.

まず,SSBの発生方法から確認していく.SSBの生成方法はシンプルに考えれば下図のとおりである.
02
周波数シフトは,AF PSNの後の直交変調器で行われるので,
結局AF PSNとは,AF信号の負(あるいは正)の周波数成分を除去するものである.

ならばバンドパスフィルタ(BPF)で実現できそうだが,通常フィルタの周波数特性は,下図の上段に示すように,正の周波数領域と負の領域で対称なものしか実現できない(実係数フィルタの場合).

03

しかしながら,フィルタの係数を複素数にすれば(複素係数フィルタ),上図下段に示すような非対称な周波数特性をもったフィルタが実現できる.

複素係数フィルタを用い,信号を複素数表現すれば,SSB生成の流れは下図のようになる.
04

今回はこの複素係数フィルタを,dsPIC33FJ64GP802 を用いディジタル信号処理で実現してみた.下図のように,複素係数フィルタの出力の実部がAF PSNの0°出力,虚部が90° 出力に相当する.
05

 

複素係数フィルタの構成は,512Tap FIR フィルタとした.
06

 

フィルタの周波数特性(設計目標)は下図のとおり.
+300Hz~+3kHzのバンドパスで,負の領域はすべて阻止する.
Fres_cmplx

 

これを逆フーリエ変換し,FIRフィルタの係数を求めた.
サンプリング周波数は,使用するdsPICの性能により 約10kHz に設定した.

フィルタ係数(実部:R0 – R511)
FirCoeff_re

フィルタ係数(虚部:Q0 – Q511)FirCoeff_im

複素係数フィルタのプログラムのソースコードを,こちらに置いておく.
dsPIC周辺の接続は下図のとおり.07

 

動作確認の結果を以下にまとめておく.

20180706_071500 dsPIC

入力200Hz
f0200

入力300Hz
f0300

入力1000Hz
f1000

入力2000Hz
f2000

入力2900Hz
f2900.jpg

入力3000Hz
f3000

これらの結果を見る限りは使い物になりそうな感じがする.
部品選別や調整などなしに,プログラムを書き込みさえすればこれと全く同じ結果が得られる.
あとは実際にSSBジェネレータにしたときにどのような品質の信号になるか,確認が必要だろう.

AF PSN」への5件のフィードバック

  1. 西野 和幸 2018年8月23日 / 7:54 午後

    初めまして、西野と申します。
    素晴らしい実験をされているなと思い、自分なりに
    再現しようと、ソースファイルをダウンロードして
    XC16 ver1.26でコンパイルしましたが、以下のエラーが出て解決できません。
    build/default/production/main.o(.text+0x10e): In function `__DAC1LInterrupt’:
    : undefined reference to `_VectorDotProduct’
    build/default/production/main.o(.text+0x122): In function `__DAC1LInterrupt’:
    : undefined reference to `_VectorDotProduct’
    アドバイスをいただけると助かります。
    よろしくお願いいたします。

    いいね

    • uebo 2018年8月24日 / 12:20 午前

      西野様,初めまして.
      ご興味を持っていただきましてありがとうございます.

      リンク時に VectorDotProduct という関数が見つからないようなので,
      この関数を含むライブラリがリンクできていないのだと思います.

      プロジェクトに,ライブラリ libdsp-elf.a を追加してください.
      XC16をデフォルトでインストールされているのでしたら,
      c:/Program Files (x86)/Microchip/xc16/v1.26/lib/ の中にあると思います.

      いいね

      • 西野 和幸 2018年8月24日 / 6:23 午前

        アドバイスありがとうございました。

        プロジェクトにライブラリを追加しましたら、問題なくビルドできました。
        注文中のICチップが届きましたらインストールして試験してみます。

        ところで、このAF-PSNと入出力が逆の動作で I(0°),Q(90°) ⇒ AFの
        実験はされましたか?

        複数のCRを並べることなく、dsPICの処理で、スタンドアロンな
        トランシーバを簡単に実現出来ないものか考えています。

        FPGAで実現している方もおりますが、ハードルが高いので
        私にとっては、単独動作のこちらの方法の方が魅力を感じます。

        今後ともよろしくお願いいたします。

        いいね

  2. uebo 2018年8月26日 / 11:40 午後

    逆動作ですが,このPICでは少々工夫が必要かと判断しており思案中です.

    課題は,

    1.受信信号はダイナミックレンジが広く,12bitAD変換では実用上bit数が不足かもしれない
    2.AD(12bit時)のサンプルホールドが1個なので,IQ同時変換ができない(位相がずれる)

    2はFIRフィルタの係数を,位相シフト分も含めたものにすればよいのですが,
    1は難題です.
    AGCを掛ければよいのでしょうが,過渡的にも全く同じ動作をする2つ(IQ)のAGC回路を
    実現するのはほぼ無理でしょう.
    別に24bit等のAD変換器を付ければよいのですが.

    このPIC単体で受信処理するには,PSN方式でない方がよいかもしれません.

    いいね

  3. 西野 和幸 2018年8月27日 / 10:53 午後

    コメントありがとうございました。

    勉強不足なのでdsPIC33Fの仕様を調べていたのですが、

    ① 10 ビットADC コンフィグレーションでは、
      最大で4 つのサンプル/ ホールド チャンネル(CH0~ CH3) を使用できる。

    ② 12 ビットADC コンフィグレーションでは、
      1 つのサンプル/ホールド チャンネル(CH0)しか使用できない。

    課題 1
    SDRの用途で、ダイレクトスイッチングによりIQを同時に取り込むには、12ビットでは
    ダイナミックレンジの点で、もの足りないのは同感です。
    これを考慮しようとすると16~24ビットの外付けADCが必要となりますね。

    dsPIC33Fの1チップでこの動作を実現できるのは、課題1と2の両方を妥協しないと不可能。

    ダイナミックレンジは60dB程度で妥協し、ADCは10ビットの2CH同時入力の設定なら
    可能ということでしょうか。

    SDRではなく、従来方式受信機でAGCの機能があるIF出力をスイッチングでIQを取り出し
    その後 dsPIC33Fで処理する程度なら十分実用になりそうに思います。

    ちなみに、従来の短波帯受信機では、フェージング対策のため、かなり高利得の回路をAGCで
    制御しているためS/Nは60dB以上確保するのはかなり難しかったです。

    最近は、関心が薄れていますが、AMモードの受信で、LSB側或いはUSB側の混信を避ける
    ために、同期検波とdsPICのAF-PSNを使用することで従来簡単に製作できなかった
    側波帯切替が、容易に実現可能になりそうです。

    理想から乖離し、妥協の産物になるかもしれませんが、1チップのdsPICで復調用の
    AF-PSNが構成できるという検証になると思います。

    いいね

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中