2010-01-01から1年間の記事一覧

FPGA 版 FM 音源 (7) -- YMF262 回路 (2)

S/PDIF 出力版 YMF262 回路は、新たに作成するハードウェア量が少なくてすむように、内蔵ペリフェラルとして S/PDIF モジュールを持つ SH-2A と組み合わせることにしました。 ベースボード上には、光送信モジュールも実装してあります。 48 kHz サンプリング…

FPGA 版 FM 音源 (6) -- YMF262 回路 (1)

YMF262 (OPL3) に fs = 48 kHz 動作となる 13.824 MHz マスタークロックを加え、出力ディジタル・データを S/PDIF 経由で出力するための具体的な回路の検討に入っています。 まずは、クロック関係のタイミングを実測してみました。 マスタークロック (φM) と…

FPGA 版 FM 音源 (5) -- EG (2)

前回の記事で述べた、 Windows 98 の MS-DOS コマンド・プロンプト上の DOS 版 FM 音色エディタで操作 S/PDIF 経由で別 PC で波形キャプチャ 時間軸反転および処理 という手順で求めた、RR (Release Rate) を 1 から 3 まで変えてプロットした結果を下に示し…

FPGA 版 FM 音源 (4) -- EG (1)

FM 音源プログラムでの EG (Envelope Generator) の処理は、処理量をなるべく減らすことに重点を置いていて、オリジナルの再現という点に関してはあまり考慮していませんでした。 そのため、現実の OPL3 チップ (YMF262) の特性の測定などは行っておらず。MA…

FPGA 版 FM 音源 (3) -- クロックの選定 (2)

前回、YMF715x (OPL3-SA3) でのマスタークロック分周比を「684」であると推定しましたが、明確にこの値を記してある資料を見つけました。 それは、タイトルが 「OPL4 YMF289D APPLICATION MANUAL」 という資料で、キーワード「OPL4」で検索するだけで pdf フ…

STM32 Value Line Discovery (1)

秋月で最近販売が開始された「STM32 Value Line Discovery」を買ってきました。 当然のことですが、「ST Visual Programmer (STVP)」と、「Atollic TrueSTUDIO/STM32 Lite」で、ボード上の STM32F100RBT6B チップに対し SWD モードの「ST-Link」として機能す…

FPGA 版 FM 音源 (2) -- クロックの選定

YAMAHA の OPL 系列の FM 音源チップのうち、データシートの pdf が入手可能なものについて、チップに外部から供給するマスタークロック周波数と、サンプリング周波数との関係についてまとめると、下の表のようになります。 ここで、サンプリング周波数や分…

ボイス・アサイナ (9)

「ノートオン・カウント」を導入したシングル・アサイン・アルゴリズムでの「同音連打」の例を示します。 まず、ノートオン・カウントを書き加えた初期状態の図を下に示します。 「@1」のように表示してあるのがノートオン・カウントです。

FPGA 版 FM 音源 (1)

以前から、ハードウェア版の FM 音源を FPGA/CPLD を使って実現したいと思っていました。 詳細な検討はまだですが、なんとか行けそうなめどがついたので着手することにしました。 一挙に完成まで持っていけるわけではないので、不定期な記事になると思います…

ボイス・アサイナ (8)

今回は「シングル・アサイン」の場合を考えます。 シングル・アサインの場合には、同じ MIDI チャンネル、同じ音程の音に対しては、2つ以上のボイスを割り当てることはありません。 したがって、ノートオン・メッセージに対して、アクティブ・キューと、ホ…

ボイス・アサイナ (7)

「マルチ・アサイン」設定では、「同音連打」に対しても普通の音と同様に扱い、特別なことはしていません。 したがって、前の説明で尽くされていますが、一応、同音連打の場合についても簡単に説明しておきます。 まず、下の初期状態から始めます。

ボイス・アサイナ (6)

ボイスを「再利用」する実際的なアルゴリズムは次のようになります。 「同音連打」に対しては「マルチ・アサイン」を仮定しています。 入力データの同時発音数が、ハードウェアの同時発音数を越える場合については考慮してありません。

ボイス・アサイナ (5)

今回からは、リソースに制限のある現実の場合について考えます。 まず、2048 要素の 2 次元配列を用意するのは非現実的ですから、MIDI チャンネル番号か、ノート番号かの 1 次元配列に縮小することを考えます。 この場合、MIDI チャンネル番号をインデクスと…

ボイス・アサイナ (4)

グランド・ピアノには 3 本、アップライト・ピアノには 2 本か 3 本の「べダル」がありますが、その一番右側のべダルが「ダンパー・ペダル」で、そのダンパー・ペダルを踏み込むと、すべてのダンパー (damper) が一斉に持ち上がり、鍵盤を離してもすぐに音が…

ボイス・アサイナ (3)

前回の例では、同音連打でも、ノートオン/ノートオフ・メッセージが直接に1対1対応していて、ふたつの独立した音となっていましたが、可能性としては、MIDI データ上で、下の図のように、最初のノートオン (Note_ON1) の後にノートオフが来ないで、別のノ…

ボイス・アサイナ (2)

ボイス・アサイナを考える最初の段階として、実現可能性はともかく、プログラムおよびハードウェアのリソース (資源) が制約なく、無限に使える場合について検討してみます。 到着した MIDI ノートオン・メッセージ1個に対応して、1個の音を発音させるのが…

ボイス・アサイナ (1)

タイトルの「(ダイナミック) ボイス・アサイナ」(Dynamic Voice Assigner) とは、限られた数の「発音エレメント」(これをこの話題では「ボイス」と呼ぶことにします)を、各チャンネルの MIDI ノートオン・メッセージに対して、固定的ではなく、動的に柔軟に…

3.3 V ノイズジェネレータ (13)

STM32 の SPI モジュールに内蔵されている CRC 計算回路は、CRC 計算としては 8/16 ビットに限定されますが、CRC 入力データとして「0」(または「1」) の連続として、単なる LFSR として使う場合には 8/16 ビットに限定されずに使えることが分かりました。 …

SPI ハードウェア CRC 回路の MMC/SD カードへの応用 (5)

今回は、ChaN さんの「ぷち FatFs」(→こちら) の AVR 用のサンプル・プロジェクト (アーカイブ・ファイル名は "pfsample.zip") に STM32 の SPI ハードウェア CRC 計算機能を組み込んだプログラム例を示しますが、その前に、いくつかの MMC/SD カード・コマ…

SPI ハードウェア CRC 回路の MMC/SD カードへの応用 (4)

今回は、SPI のハードウェア CRC 計算回路に 8 次の生成多項式を設定した場合には避けられない、定義よりも 1 ビット分の「0」が多く入力される影響について考えます。 まず、定義通りに入力メッセージ 40 ビット + 追加の「0」7 ビット = 47 ビット分の入力…

SPI ハードウェア CRC 回路の MMC/SD カードへの応用 (3)

前回述べたように、実際の STM32 の SPI モジュールのハードウェア CRC 計算回路で求まるのは、8 ビットの「0」を追加した入力メッセージに対する剰余ですが、それについては後に回し、まず、定義通りの場合について考えます。 40 ビットの入力メッセージに …

SPI ハードウェア CRC 回路の MMC/SD カードへの応用 (2)

CRC-7 の生成多項式に単一パリティの因子 (x + 1) を掛けて求めた 8 次の多項式を使って計算した結果から、もとの CRC-7 に対応する結果を抽出する方法を説明していきます。 まず、CRC-7 をビット・シリアルに計算する回路を下に示します。

SPI ハードウェア CRC 回路の MMC/SD カードへの応用 (1)

今回は、m-系列ノイズの話から横道にそれて、STM32 の SPI モジュールのハードウェア CRC 計算を MMC/SD カードのアクセスに応用してみます。 MMC (Multi-Media Card) / SD (Secure Digital) メモリ・カードでは、コマンド部のエラーチェックに CRC-7、デー…

3.3 V ノイズジェネレータ (12)

STM32 の SPI モジュールには CRC 計算機能が組み込まれていて、8 ビットおよび 16 ビットの SPI モードに対応して、それぞれ 8 ビット、16 ビットの CRC を自動計算することができます。 外付けの 16 ビット・シリアル入力、ディジタル・オーディオ用 DAC …

3.3 V ノイズジェネレータ (11)

FM 音源プログラムを「STBee」および「STBee Mini」に移植するにあたり、STM32F103xx の最新のリファレンス・マニュアル (RM0008 rev.11) を見ていたら、m-系列によるホワイトノイズ作成に使える内蔵モジュールが3つほどあることが分かりました。 12 ビット…

CQ-STARM/STbee/STBee Mini 用FM音源プログラム

デザインウェーブマガジン誌 2008 年 5 月号付属の CQ-STARM 基板用のFM音源プログラム「TGSTARM」を作ってから 2 年あまりが過ぎました。 C コンパイラとして Keil 社および IAR 社の無償コードサイズ制限版を使ったために、あまり機能を追加することがで…

3.3 V ノイズジェネレータ (10)

今回は、ホワイトノイズ出力およびピンクノイズ出力のパワーに関する話題です。 まず、フーリエ変換における「パーセバル (Parseval) の式」を示します。 ここで、 と は、互いにフーリエ変換/逆変換の対で、具体的に言えば は時間ドメインでの「波形」で、 …

3.3 V ノイズジェネレータ (9)

今回は、前回作成した -3 dB/oct (-10 dB/dec) フィルタを、生成多項式 3 を使った m-系列ノイズ・ジェネレータにつないで測定してみました。 周波数特性を観測するだけではなく、録音したノイズの .wav ファイルをプログラムで処理して、振幅方向の統計的性…

3.3 V ノイズジェネレータ (8)

これまで述べて来たのは、各段のラグ・リード・フィルタをバッファを介して接続したり、「低域」と「高域」のように中心周波数の比が約 80 となって互いに影響しにくい状態のラグ・リードをパッシブの状態で組み合わせる方法でした。 この方法には、(各段が…

3.3 V ノイズジェネレータ (7)

これまでの方針をふまえて、-3 dB/oct (-10 dB/dec) 特性のフィルタ回路の LTspice シミュレーションを行い、実際にブレッドボード上に実験回路を作成して特性を測定してみました。 まず、下に LTspice に入力した回路図を示します。