dsPIC

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」(以下「周波数シフター」と略記) の構成に基づいた (アナログ) シンセ・モジュールを出品されていました。 この周…

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」は「汎用」…