dsPIC33FJ64GP802 (21) --- 周波数シフター (5)

 以下、(1.441-1.) のような式番号が付けられている式は、

I.S. Gradshteyn, I.M. Ryzhik 著
Alan Jeffrey, Daniel Zwillinger 編
"Table of Integrals, Series, and Products",
Seventh Edition,
Academic Press

からの引用です。
 まずは、のこぎり波のフーリエ展開の式です。

続きを読む

dsPIC33FJ64GP802 (20) --- 周波数シフター (4)

 ヒルベルト変換器を通すと、すべての周波数成分の位相が 90° 遅れるので、単一周波数の正弦波以外の一般の信号では、入力信号とは違った波形になります。
 のこぎり波 / 方形波 / 三角波に対する出力波形を観測し、「理論値」と比較してみました。
 まずは単一周波数 (250 Hz) の正弦波の場合を示します。

続きを読む

dsPIC33FJ64GP802 (19) --- 周波数シフター (3)

 前回示したオブジェクト・プログラムでサポートしている

  • 外付け 12.288 MHz 水晶振動子を使用した回路
  • 外付け 16 ビット ADC を使用した回路

を示します。 ただし、簡単のため、電源の配線など前回の基本回路図で表されている部分は省略し、追加すべき部分についてのみ記述します。

続きを読む

dsPIC33FJ64GP802 (18) --- 周波数シフター (2)

 dsPIC33FJ64GP802 を使った「Bode frequency shifter」のプログラムの基本的な部分がほぼ機能するようになりました。 「スケルチ」などは、まだ実装していません。
 クロックに関しては

  • 内蔵 FRC オシレータ (7.37 MHz) 使用
  • 外付け 12.288 MHz 水晶振動子使用

の 2 通りと、入力アナログ信号を変換する AD コンバータに関しては

  • 内蔵 12 ビット ADC 使用
  • 外付け 16 ビット ADC 使用

の 2 通りを組み合わせた、合計 4 種類の構成に対して、1 種類のオブジェクトで対応します。
 現在のバージョンでのプログラム・サイズは 1744 ワード (24 ビット・ワード)、データ・サイズは 2554 バイトです。 (2019 年 2 月 16 日追記: ヒルベルト変換器のタップ数を増やしたプログラムに差し替えて、プログラム・サイズは 1770 ワード、データ・サイズは 3194 バイトとなりました。)
 この記事の後半に hex フォーマットのオブジェクトを掲載します。
 「コピー・アンド・ペースト」して hex ファイルを作り、
PICkit 3 などで dsPIC33FJ64GP802 に書き込めば動作させてみることができます。
 ソース・リストについては近日中に公開する予定です。

続きを読む

dsPIC33FJ64GP802 (17) --- 周波数シフター (1)

 2018 年 11 月に開催された「アナログシンセ・ビルダーズ・サミット 2018」で、「公生32+」さんと「yama」さんが、「Bode Frequency Shifter」(以下「周波数シフター」と略記) の構成に基づいた (アナログ) シンセ・モジュールを出品されていました。
 この周波数シフターを dsPIC33FJ64GP802 を使って「ディジタル的」に実現しようと試みていましたが、「性能」や「実用性」はともかく、「周波数シフト」という基本機能については動作することが確認できました。
 内蔵 12 ビット ADC / 内蔵 16 ビット DAC を使用し、入出力の「シグナル・コンディショニング」用の OP アンプを除けば、主要なチップとしては dsPIC33FJ64GP802 ワンチップだけで実現できています。
 外部 16 ビット ADC を接続すれば性能の向上が期待できます。
 外部 ADC 対応、使用メモリ量の低減など、プログラムの整理がついたら公開したいと思っています。
 周波数シフターの構成について、簡略化したブロック・ダイアグラムをディジタル実現の場合について下に示します。

続きを読む

PSoC1 (6) --- スイッチトキャパシタ・フィルタ (6)

 フィルタのユーザモジュールのウィザードでは、フィルタ仕様を入力して設計するほかに、外部のプログラムでコーナー角周波数を 1 [rad/s] として設計したフィルタの s-平面上の「極」の配置を入力して使うこともできます。
 ELPF ユーザモジュールでは、「ノッチ」となる「零点」の入力も必要ですが、こちらは s-平面上の位置ではなく、ノッチ周波数を入力します。
 MATLAB および GNU Octave には、ディジタル / アナログ両方に対応した楕円フィルタ設計関数「ellip( )」があるので、これを試してみました。
 GNU Octave で記述したプログラム (ELPF4.m) を下に示します。

続きを読む

PSoC1 (5) --- スイッチトキャパシタ・フィルタ (5)

 SC ブロックを「フィルタ」として使うために特化した「ユーザモジュール」として、下の 6 種が用意されています。

  • BPF2 (2 次バンドパス・フィルタ)
  • BPF4 (4 次バンドパス・フィルタ)
  • LPF2 (2 次ローパス・フィルタ)
  • LPF4 (4 次ローパス・フィルタ)
  • ELPF2 (2 次楕円ローパス・フィルタ)
  • ELPF4 (4 次楕円ローパス・フィルタ)

 2 次のフィルタは ASC + ASD のペアを 1 組使い、4 次のフィルタは ASC + ASD のペアを 2 組使います。
 SC ブロック間の接続は自動的に行われ、ユーザは入力の接続および出力の接続だけを指定すればすみます。
 キャパシタの値の設定も、「ウィザード」を利用すれば、周波数応答のグラフを見ながら調節することができます。

続きを読む