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

前回示したオブジェクト・プログラムでサポートしている 外付け 12.288 MHz 水晶振動子を使用した回路 外付け 16 ビット ADC を使用した回路 を示します。 ただし、簡単のため、電源の配線など前回の基本回路図で表されている部分は省略し、追加すべき部分に…

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

dsPIC33FJ64GP802 を使った「Bode frequency shifter」のプログラムの基本的な部分がほぼ機能するようになりました。 「スケルチ」などは、まだ実装していません。 クロックに関しては 内蔵 FRC オシレータ (7.37 MHz) 使用 外付け 12.288 MHz 水晶振動子使…

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

2018 年 11 月に開催された「アナログシンセ・ビルダーズ・サミット 2018」で、「公生32+」さんと「yama」さんが、「Bode Frequency Shifter」(以下「周波数シフター」と略記) の構成に基づいた (アナログ) シンセ・モジュールを出品されていました。 この周…

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

フィルタのユーザモジュールのウィザードでは、フィルタ仕様を入力して設計するほかに、外部のプログラムでコーナー角周波数を 1 [rad/s] として設計したフィルタの s-平面上の「極」の配置を入力して使うこともできます。 ELPF ユーザモジュールでは、「ノ…

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

SC ブロックを「フィルタ」として使うために特化した「ユーザモジュール」として、下の 6 種が用意されています。 BPF2 (2 次バンドパス・フィルタ) BPF4 (4 次バンドパス・フィルタ) LPF2 (2 次ローパス・フィルタ) LPF4 (4 次ローパス・フィルタ) ELPF2 (2…

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

オーバーサンプリング比 (OSR) = 100 の場合の回路を下に示します。 キャパシタの「値」は、SC ブロックのパラメタとして指定する数値 (整数値) を示しています。 C1 は 0、あるいは 1 (通過域 ゲイン = 1 の場合) となります。 CP および CPP は 0、あるい…

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

「フルスペック版」スイッチトキャパシタ回路を下に再掲します。 この回路図では、積分器のフィードバック・キャパシタの値を「1 F (ファラド)」とする、正規化された形で表現していますが、実際の FCap の値としては、標準値で約 80 fF (フェムト・ファラド…

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

CY8C29466 や CY8C27443 などの代表的な PSoC1 チップには、全部で 12 個のアナログ・ブロックが含まれており、データシートや PSoC Designer の Chip Editor などでは下のように 3 行 4 列のアレイとして表記されます。

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

1 か月ほど前、秋葉原に行った際に、秋月の店頭で「サイプレスプログラマー/ 開発セット」がジャンク扱いで 2000 円で売られていました。 中身は、 MiniProg1 USB ケーブル MiniEval1 ボード CY8C29466-24PXI CY8C27443-24PXI ソフトウェア CD で、これは、…

dsPIC33FJ64GP802 (16) --- 1/12 オクターブバンド・フィルタを使った「グライコ」風表示 (1)

1/12 オクターブバンド・フィルタを多数並べて、オーディオ用グラフィック・イコライザの「バー」風の表示をさせてみました。 表示は、下の記事の Adafruit 1.8 インチ TFT LCD シールド互換のシールドを装着した Arduino で行い、1/12 オクターブバンド・フ…

dsPIC33FJ64GP802 (15) --- 無償で使えるフィルタ設計アプリケーション (2)

前回示した ディジタル・フィルタ設計プログラム (IIR_Design、FIR_Remez、FIR_Kaiser) — (三上直樹著・CQ 出版「はじめて学ぶディジタル・フィルタと高速フーリエ変換」のサポート・プログラム) http://www.cqpub.co.jp/hanbai/books/30/30881.htm は、上記…

dsPIC33FJ64GP802 (14) --- 無償で使えるフィルタ設計アプリケーション (1)

libdsp の IIR フィルタ関数では、フィルタ係数の生成には「dsPIC FD」(dsPIC Filter Designer) を使用することが前提になっています。 dsPIC FD にはフル機能版と機能限定の廉価版 (dsPIC FD Lite) がありますが、両者ともに「有償」で「無償版」はありませ…

dsPIC33FJ64GP802 (13) --- IIR フィルタ関数と Yデータ・メモリ・アクセス (2)

IIR フィルタ関数が範囲外の Y データ・メモリをアクセスすることで発生するドレス・エラーを防ぐ方法には、大きく分けて次の 2 種類があります。 「範囲外」アクセスの対象が RAM 非実装領域とならないように、RAM 中にダミーの変数を定義して「範囲外」ア…

dsPIC33FJ64GP802 (12) --- IIR フィルタ関数と Yデータ・メモリ・アクセス (1)

dsPIC の libdsp に含まれている IIR フィルタ関数 (IIRCanonic()、IIRTransposed()) では、割り当てられた Y データ・メモリの範囲外へ (不要な) アクセスを行っているため、場合によってはプログラムの停止、リセットの繰り返しなどを生じるおそれがあるこ…

dsPIC33FJ64GP802 (11) --- DSP 命令と DSP ライブラリ (9)

IIRCanonic() 関数と IIRTransposed() 関数を使ったプログラムの断片を下に示します。 フィルタ係数の配列の詳細は 2018 年 10 月 10 日付けの記事 (→こちら) に記載しています。 WaveSpectra による特性測定のために使ったプログラムでは、ふたつの 1/12 オ…

dsPIC33FJ64GP802 (10) --- DSP 命令と DSP ライブラリ (8)

「楽音」の「音名」でいうと「A」(880 Hz)と、「A#」(932.33 Hz) を中心周波数とする 1/12 オクターブ・バンド・フィルタふたつを IIRTransposed() 関数で実現し、内部で発生させたリニア周波数スイープのサイン波をフィルタリングした結果を下に示します。 …

dsPIC33FJ64GP802 (9) --- DSP 命令と DSP ライブラリ (7)

IIRTransposed() での処理の様子と伝達関数の表現との対応を、2 次セクション 1 段の場合について下に示します。 「標準型」の構成を「転置」、つまり信号の向きを反対に (出力を入力に、入力を出力に)、「分岐」を「加算」に、「加算」を「分岐」に置き換え…

dsPIC33FJ64GP802 (8) --- DSP 命令と DSP ライブラリ (6)

IIRCanonicStruct 構造体 (IIRTransposedStruct 構造体も同様) の「numSectionsLess1」 フィールドには、2 次セクションの段数を「S」としたとき、(S - 1) の値を設定します。 前回の 2 次セクション 1 段の場合には、(S - 1) = (1 - 1) = 0 を設定します。 …

dsPIC33FJ64GP802 (7) --- DSP 命令と DSP ライブラリ (5)

DSP ライブラリのドキュメントでは、IIR (Infinite Impulse Response) フィルタ係数は「dsPIC Filter Design」(略称: dsPICFD) プログラム (有償) によって生成されたもの (あるいはそれに等価なもの) を使うように指示されていて、係数値の取るべき詳細な条…

dsPIC33FJ64GP802 (6) --- DSP 命令と DSP ライブラリ (4)

DSP ライブラリ中の (補間/間引き/格子型/適応型などを除く「普通」の) FIR 関係の関数には次の 3 つがあります。 void FIRStructInit ( FIRStruct* filter, int numCoeffs, fractional* coeffsBase, int coeffsPage, fractional* delayBase ); void FIRDela…

dsPIC33FJ64GP802 (5) --- DSP 命令と DSP ライブラリ (3)

DSP ライブラリの FIR() 関数を使う前に、下のようなデータを用意しておく必要があります。 入力データが格納された配列 (要素数 N) 出力データを受け取るための配列 (要素数 N) タップ係数の配列 (要素数 M,、X-データ・メモリあるいはプログラム・メモリ、…

dsPIC33FJ64GP802 (4) --- DSP 命令と DSP ライブラリ (2)

DSP ライブラリに含まれる関数をカテゴリ別に分類すると下のようになります。 ベクトル演算 窓関数の初期化 行列演算 フィルタ FFT/DCT PID 制御 浮動小数点と固定小数点との相互変換 スタック・ガードの設定 (dsPIC33E のみ) これらのカテゴリ分けは、ライ…

dsPIC33FJ64GP802 (3) --- DSP 命令と DSP ライブラリ (1)

FIR (Finite Impulse Response) フィルタの計算では、FIR フィルタの「タップ」ひとつあたり 1 回の積和演算が必要です。 積和の乗算ではオペランドを 2 つ必要とするので、メモリ・アクセスが 2 回必要となります。 したがって、タップひとつ分の計算を 1 …

dsPIC33FJ64GP802 (2) --- DAC の周波数特性 (2)

dsPIC マイコン本体のプログラムで固定周波数の正弦波、あるいはリニア周波数スイープの正弦波を発生させ、DAC に出力し、アナログ信号をホスト PC のオーディオ入力に接続して「WaveSpecta」で周波数特性を観測した結果を示します。 他に注記のない限り、Wa…

dsPIC33FJ64GP802 (1) --- DAC の周波数特性 (1)

Microchip 社の dsPIC33F ファミリは、DSP 命令を持つ 3.3 V 電源の 16 ビット・マイコン・ファミリで、秋月電子では次の 2 品種の取り扱いがあります。 dsPIC33FJ32GP202-I/SP (単価 380 円) dsPIC33FJ64GP802-I/SP (単価 480 円) 型番中の「GP」は「汎用」…

はてなブログへの移行のお知らせ

これまで、「はてなダイアリー」を利用してきましたが、2019 年 春ごろにサービス停止となる予定を受けて、「はてなブログ」へ移行しました。 新しい URL は下のようになります。 https://pcm1723.hateblo.jp/ なお、「リダイレクト」機能により、旧・はてな…

FPGA 版 FM 音源 (87) -- OPLx 実チップ上の ROM

以下のサイトで、YM3812 (OPL2) および YMF262 (OPL3) チップを「デキャップ」してダイ表面の写真を撮影し、ROM 内容を読み出したレポートが見られます。 Matthew Gambrell and Olli Niemitalo, 2008/04/20 OPLx decapsulated - Google ドキュメント これま…

FPGA 版 FM 音源 (86) -- TX7 (OPS) 測定 (13)

「ロー・レート」動作の上限、つまり、EG プリスケーラの設定が 1/1 になり、オクタル・レート・マルチプライアに fs レートのクロックが直接に入力される場合の rate99、rate63 の表を下に示します。

FPGA 版 FM 音源 (85) -- TX7 (OPS) 測定 (12)

検索ワード「FM音源 OPS レジスタ解析」でググると、 FM音源 EGS/OPSのレジスタ解析 と題された、作者不明の web ページが見つかります。 このページには、TX7 のファームウェアを解析して EGS/OPS のレジスタの仕様を探った結果が示されています。 …

FPGA 版 FM 音源 (84) -- TX7 (OPS) 測定 (11)

EG のアタック部分をプログラムで再現することができました。 やはり「ゴンペルツ曲線」でした。 (→参考記事) まず、アタック/リリースの「エンベローブ波形」をキャプチャしたものを再掲します。