● 実験テーマ76

「オーディオ・FFTアナライザの実験」
(岩田氏の著書「dsPIC基板で始めるディジタル信号処理」を参考に、dsPICによるFFTアナライザの実験をしてみました。)

※ 160501: ソフトを更新しました。(定数を1ヵ所変えただけなので、ソース名の変更はしませんでした。→ dsPIC33F_FftAnalyzer_Test_3.c)
→ 
これで、音楽ソースに対する表示感度が改善されました。
   4月30日からの記事を参照してください。

※ 160514:ソフトは、実験段階の最終版(dsPIC33F_FftAnalyzer_Test_3.c)と基本同じとし、これを机の上に置いて使える形に、まとめてみました。
→ 今回、ステレオ入力を、左右MIXしてモノラル変換し、そのFFT表示を 行うようにしました。
   5月3日からの記事を参照してください。

以下、この実験の顛末記です。

■ 2016.3.28
  ・前回のテーマでは、トラ技の岩田氏の記事に載っていた、dsPICによる、移動平均LPF、FIRデジタルフィルタ
   等の実験を行ったが、この記事と並行して発売された、岩田氏の著書「
dsPIC基板で始めるディジタル信号処理」
   には、さらなるデジタルフィルタ(IIRフィルタ・イコライザ・FFT等)の記事が追記されている。
   また、同氏のホームページ「DIGITALFILTER.COM」にも、関連記事やら、掲示板も公開されているので
   非常に参考になる。

   FFTというと敷居はかなり高いが、このような良い参考書・資料があるので、何とかできそうな気がしてきた。
   まずは、dsPIC30F2012を、dsPIC30F4013に置換えたトレーニング基板にて、記事にある、16キャラクタ・2行
   のキャラクタ液晶を使用したFFTの実験をしようと思う。

  ・dsPICには、dspライブラリに、FFTに関する関数が数種類用意されている。
   今回の実験では、以下の3つの関数を使うことになる。
    @ FFTComplexIP(): FFT演算関数
    A BitReverseComplex(): FFT表示の時に、演算結果を周波数の低い順番に並べ替える関数
    B SquareMagnitudeCplx(): 複素数の絶対値の2乗(パワースペクトラム)を取得する関数

  ・早速、記事のソース「FftAnalizer.c」を、dsPIC30F4013用に置換える作業を行い動作確認をしてみたが
   液晶表示が初期化されない。
   これはあたり前で、LCDポートの割付けを変えないといけなかった。
   ただ本ソースでは、液晶の表示フォーマットの制御に、標準関数の、sprint文を使うようになっていたので
   コンパイル時のエラーが出ないか気になっていたが、問題なく通った。

   xlcd.hの定義ファイルのポート割付を、4013用に手直しした。
   定義ファイルの中に、使ってないポート(R/W信号は、W固定)が
   書かれている所があったが、その文(#if ifendで囲まれたところ)は無視して、個別に、制御信号の
   E, RS, R/Wを定義してみた。
   何かしらのワーニングは出たが、一応動いたので良しとした。
   最終目標が、dsPIC30F4013でないので深追いはしないことにした。
   また元々2012用のlcdライブラリは無いので、dsPIC30F6012用の、LCDライブラリを、2012用に岩田さんは
   改修して使っておられるようで、この部分はそのまま使わせて頂いた。

   以下に、この部分のポイントとなる記事の切り抜きと、私の実験結果の模様をアップします。
   (16kサンプル/64ポイント= 分解能:250Hz、表示Fレンジ=0〜 約4kHzです。SW2を押すと約8kHzまで見られる)


■ 2016.3.30
  ・キャラクタ液晶へのFFT表示の確認は出来たので、これを、128 x 64dotの、グラッフィック液晶(GLCD)へ
   表示させることを考えたい。
   実験ハードとしては、自作オシロ初号機の、MPUを、PIC24HJ64GP206から、dsPIC33FJ64GP802に
   差替えたものを使うことにする。
   まずは、WEBサイトを頼りに、同じような条件でやられている方がいないかと検索したところ、
   まさに、岩田氏の著書を参考にやられている方がいました。(MPUの型番が若干違うが、同じdsPIC33F)
   このサイト「趣味のプログ」のソースを、自分のハードに、モディファイして進めて行こうと思います。

   原作のソースは、AD変換は使っておらず、math(数学関数)で計算させた、各波形のレベル配列を基に
   モノクロGLCDに、FFT表示させているように記述してある。
   まずは、この通りの動作仕様でやってみることにした。(プロジェクト名:dsPIC33F_FftAnalyzer_Test_1)
   FFTの仕様としては、

   キャラクタ液晶へのFFT表示の時と同じ、
64ポイントFFTです。


■ 2016.3.31
  ・自分のハードに合わせて
モディファイしただけなので、ソースは難なく書き上げた。
   ところが、コンパイルすると、以下のリンクエラーが発生!!
   「
Link Error Could not allocate section '.ybss', because 'ymemory,near....」
   何回か経験している、メモリエリアを確保できない旨のリンクエラーである。
   原作者の型番のPIC(dsPIC33FJ32GP202)では、このエラーが出るか否かは確認してないが・・

   今迄の経験から、こういう時は、far属性を付けて宣言すれば解決するはずだが・・
   これをやってみた。
   fftData配列の、メモリロケート指示記述のところに、以下の通り、far属性を追加してみた。(下記朱書き部分)
   fractcomplex fftData[ fftPoints ] __attribute__ ((section (".ybss, bss, ymemory"),far, aligned (fftPoints * 2 * 2)));
   やはりこれで解決した。エラーは出なくなった。

   ※ 以下に動作確認の時の写真をアップしました。


■ 2016.4.02
  ・ADCを使った入力信号のFFT表示実験に移る。(プロジェクト名:dsPIC33F_FftAnalyzer_Test_2)
   とりあえず細かいこと抜きにして、ソース書き上げる。
   本日のデバッグ結果をまとめてみた。
    @ OFFSETポテンショが適当な位置にないと座標線が左半分バラける。
    A 一応、32目盛のF軸の周波数値と、入力信号の周波数の基本波位置は一致している。 
       しかし、入力レベルを下げても表示は下がらない。(上がる方はOK) 
       さらにFを変えていった場合、前のバー表示が残る。
    B マイナス側にもスペクトルが表示される場合がある?


■ 2016.4.03
  ・昨日の、Aの「Fを変えていった場合、前のバー表示が残る。」は当然。
   1回のFFT描画毎に、表示クリア(自作オシロと同じ、0.5秒毎)にすればイージーな方法だが、
   一応は解決すると思う。
  → やってみやが、これだと信号に追従しない感じになる。 
     連続的な繰り返しの単純波(サイン波等)なら問題はさほど無いが楽音となるとそうはいかない。

  ・座標線がバラケルのは、有り得ない座標値(Y >= 128)になった場合  のりミッターが無いためと思われる。
  → これは上手くいく。


■ 2016.4.04
  ・昨日の1回ごとに画面クリアして次の再描画を行う方法だと、信号に追従しないので、
   各ポイントのスペクトル表示の時に、最大レベル分のドットを、Lcd_pixel関数を使って削除(ドットoff)した後に、
   更新されたレベルバーをライン関数で描画するようにすれば、前の状態が残らず、現在の状態が描画できるし、
   少しは追従性が上がるはずである。


■ 2016.4.05
  ・160402-B:マイナス側にもスペクトルが表示される場合がある?
   は、入力がZERO(0V)の場合に、アンプ系の、OFFSETポテンショで厳密にx-y座標線の交点位置(0Vポイント)
   に合わせたら、マイナス側には出なくなった。


■ 2016.4.06
  ・160404に考えた、追従性改善案は、最大レベル分のドット消去を、各ポイントのスペクトル再描画のたびに、
   必ず行うので、効果はそんなに期待できないような気がする。
   そこで、XOR的なクリアが出来ないものかと考えた。
   つまり、前の、yposをテンポラリに格納しておいて、現在のスペクトル・バーを描画する時に、カレントのypos
   と、1つ前の、ypos_temp[*]を比較し、
    @ ypos == ypos_tempだったら何もしない。
    A ypos < ypos_tempだったら、下がった分のドットだけクリアする。
    B ypos > ypos_tempだったら、上がった分だけ、ライン関数で描画追加する。
   この方法だと、Aの条件の時だけ、クリア操作が必要になるだけだし、描画も増えた分だけ行うので、
   追従性の改善が期待できそうだ。

   この考えを基本にソースを修正したが、上手く行かず。
   表示上、上にはレベルが上がるが、下には下がらない?


■ 2016.4.07
  ・思い違いが、3点あった。
    @ yposの値に、+10のオフセット(zero点までのオフセット分)が含まれていなかった。
       つまりテンポラリの値が、10だけ少ない値になっていた。
    A ライン関数に渡す値は、@の修正をして、yposそのものを渡せばよかったのを、
       ここで、ypos+10としていた。
    B ドットを消す時に、ピクセル関数を使っているが、この時の原点位置を勘違いしていた。
       カラー液晶の場合と同じ、左上角が、(0, 0)と思っていたが、モノクロ液晶の場合は
       数学的な原点位置の、左下角が、(0, 0)でよかった。(後閑氏作成ライブラリ使用)
       いつも同じような思い違いをしているようで、お粗末なことであります・・・


■ 2016.4.08
  ・XOR的なクリアを試す(修正する)前に、昨日の、Bの原点位置の勘違いがあったので、
   最大レベル分のドットを消去する方式にこの修正を適応して動作上どうなるか、確認してみた。
   結果多少ではあるが追従性は改善された。(基本動作は問題なくなった。)
   しかし楽音に対する追従性は、今一歩という感じがする。
   写真だけでは、よくわからないと思うが、一例として下にアップしました。

  ・ここで、XOR的なクリアの方も修正して試すが、どうしても上手く行かない。
   レベルが上がって、追描画する方は良いが、レベルが下がって、その分を消去する方が、どうしても
   変にドットが残ってしまう。
   これは一時保留にして(何故か今回はあきらめが早いような・・・)、最大レベル分のドットを消去する方式で
   先に進めることにした。

  ・現在、64ポイントで、FFTを実施しているが、これを、128 or 256ポイントでやってみる。(分解能が上がる。)


■ 2016.4.09
  ・FFTの回転因子(何やら難儀な用語だが、FFT演算にはベクトルが絡んでくるのでこのような乗算時の定数が存在する。)
   を、64から、128等に増やすには、3通りの方法がある。
    @ プログラムの頭で、TwidFactarInit()を実行し、回転因子テーブルを生成する方法。
    → このやり方が、今一はっきりせず、やってみたが、早くもあきらめた。(ただの勉強不足だが・・)
    A Javaプログラム(Javaアブレットというらしい)を利用する方法
       岩田氏の本の付属CDの、「SigGen1.html」を利用する。
       このプログラムで設定値を入力すると、回転因子を計算してくれて、それをソースに埋め込めればよいようだが。
    → これも試したが、まず
       「Javaが古いので、セキュリティ強化の最新版にアップグレードする必要がある」旨のダイアログが出たので
       してみたが、アップグレードには成功したものの、その状態で、htmlを起動しても、セキュリティエラーで
       実行できなかった。
       特定のサイトのアドレスを登録(例外設定)を試みたが、それも駄目だった。登録すら出来なかった。
    B もう1つは面倒な方法だが、岩田さんが作成された、TwidFactarInit()で生成された回転因子を液晶に表示
       するプログラムを利用する方法がある。
       SWで送りながら、回転因子の値を読取り、それをソースに埋め込んでいく地道な作業になる。
    → これを、dsPIC30F2012でなく、4013で試したが、LCD制御信号関係で、原因不明の未宣言エラー
       が発生し、これもこの時点ではあきらめた。
       しょうがないので、2012のまま、ブートローダーでHEXを書込む方法を試した。
       私のOSは、64bit版の、windows7で、本に付属のローダープログラムは対応してなかったが、岩田さんのHP
       で、これに対応した「dspicguy64.exe」アプリが公開されていたので、これを使ったら、あっさり
       hexファイル「TwidFuncled.hex」を、ターゲットに書込めた。むろんRS232C経由だが。
       これで、64ポイント分の回転因子は表示で確認出来た。

  ・128ポイント分の回転因子生成プログラムに、ソースを修正してみた。
   修正点は、以下の、3点のみでよいので簡単である。
    @ main loopの先頭で宣言している、回転因子配列の要素数を、ポイント数の半分にする。
       つまり、fractcomplex Twid[ 64 ]; とすればOK。
    A 回転因子生成関数の、第1引数に渡す値を、7にする。ここはポイント数を、べき乗で指定するので
       n=7 つまり、2の7乗で128になる。具体的には
      TwidFactorInit(7, Twid, 0); とすればOK。
    B SWの送りモニタ機能のところで、MAXポイントのところで、ポイント[0]に戻す条件を変えてやればOK。
      つまり、if(bn == 128/2-1) bn = 0; とすればOK。

    この修正で上手く行く。これを面倒な作業になるが、ソースに埋め込んで行けば、CONSTテーブルが
    出来上がる。これも済み。
    ついでに、256ポイントの回転因子も同様の要領で、求め、ソースに埋め込んだ。


■ 2016.4.11
  ・FFTポイント数を増やした実験結果は以下の通りでした。(最大レベル分のドットを消去する方式)
   @ N= 128, 16kサンプル(分解能= 16k/128= 125Hz)では、
      単純繰返し信号入力の追従性は見た目、問題なし。
      楽音入力に対しては、見た目、そんなに悪くは無いが、多少、応答は処理時間が伸びているせいか
      N= 64より悪い感じ。
   A N= 256, 16kサンプル(分解能= 16k/256= 63.5Hz)では、
      単純繰返し信号入力の追従性は見た目、問題なし。
      楽音入力に対しては、さらに、スペクトル描画までの処理時間が長くなるので、
      はっきり見た目で判ってしまうほど追従できずNG。


■ 2016.4.12
  ・このFFTのテーマ、どこで妥協しようかと迷っている。(なにせ勉強不足なもんで・・・)
   @ 楽音に対する追従性をあきらめるなら、最大レベル分のドットを消去する方式で、
      現状の、N= 128, 16kサンプル(分解能= 16k/128= 125Hz)
      で良いような気がする。(単純繰返し波形入力では問題ない。)
   A あきらめないのなら、もう少し前に作った、XOR的にクリアする方式のソースを
      追及するしかない。

   ※ 結局、あきらめたくないので、もう少しソースを追ってみることにした。
    ・まず、電源ON時、最初のFFT表示のところでプログラムをブレイクすると、本来の、1kHzのところ
     の手前に、パルス状の、スペクトラムが表示されてしまう?
    → これは、1kHzサイン波入力をサンプルする以前に、電源立上げ時のインパルス性のノイズを
       FFT処理し、スペクトル表示してしまっていたことが原因だった。
       これを避けるため、P_ON時、最初の、T3 ON(ADCスタート)の前に、AD入力に不要なインパルス
       ノイズを無視するための遅延を0.5秒入れた。
       これで出なくなった!!

    ・次に、入力を変えないで、2回目のFFT処理〜スペクトル表示のところでブレイクしてみた。
    → 初回と同じレベルのスペクトル表示になることを確認した。
       つまり、OLD = NEWの条件判断は正しいということになる。

   ※ このようにいろいろと調査追及したが、諦めかけていた事が、何とか解決した!!
     
N= 64, 16kサンプル(分解能= 16k/64= 250Hz)に於ける、XOR的クリア方式(表示処理の高速化対策)
      でのFFT表示は上手く行った。!!
      さすがに楽音入力では、変化が激しいので、表示を濃くすることが難しいが、その変化に対しても、
      追従する様子が、割とはっきり見えるようになり、見た目は、音楽と同期しているように見えるので
      今回はこれで良しとした。
      調査・追及したデバッグ途中の詳細については、
      デバッグコメント付の、このソースを参照してください。(ちょっと醜いですが)→ 「dsPIC33F_FftAnalyzer_Test_2.c」


■ 2016.4.13
  ・N= 128, 16kサンプル(分解能= 16k/128= 125Hz)も試すが、上手く行く。


■ 2016.4.14
  ・N= 256, 16kサンプル(分解能= 16k/256= 62.5Hz)で上手く行ってなかったが、XOR的クリア方式に
   したら、応答性かなり良くなる。
   そんなに違和感なくなった!!
   この設定で、GLCD X方向 128dot刻みに、128ポイントのスペクトラムを描画できた。
   ただ、表示F帯域が、0〜約8kHzまでなので、高域がこの倍の、16kHz位までは欲しいところ。
   同条件で、32kサンプルにすれば、分解能= 32k/256= 125Hzになるが、表示F帯域の上限は、約16kHz
   に拡張される。
  → 結果、見た目、楽音にもなんとか追従しているようである。
     この様子は、このページ冒頭の写真の、(1)を参照してください。
     またこの時のソースは、このページ末尾の、最終ソースの欄にアップしましたので参照してください。


■ 2016.4.15
  ・昨日の条件で、FFTした時の、アンプ系のコンディションを確認してみた結果を以下に示します。


■ 2016.4.16
  ・32kサンプルのまま、もう少し分解能を上げたくなった。
   N= 512とすれば、表示F帯域は半分の、8kHzになるが、分解能は、62.5Hzに上がる。
   ちょっと回転因子テーブルを作るのが大変だが、512ポイントFFTも試してみようと思う。

   今迄通り、dsPIC30F2012で、512ポイントFFTの回転因子を作成する。
   ソースを、それ用に修正し、コンパイル〜HEX書込みまでは問題なかったが・・・
   なのに動かず??
   液晶が初期化しないような様子で止まっているように見える。
   原因不明。ブートローダーとメモリ関係で不都合が生じていると思われるが、この時点では深追い
   しないことにした。


■ 2016.4.18
  ・512ポイントの回転因子作成をなんとかしたく、原因調査を始めた。
   Twid配列の要素数を、[256]に増やした時点で、プログラムが正しく動かなくなることを確認した。
   ちなみにこの時のプログラム・メモリ使用量= 746/4096であった。
   また、[128]〜 [200]位まではOKだった。


■ 2016.4.19
  ・メモリに余裕のある、dsPIC30F4013で動かしてみることにした。
   4013を使って、キャラLCDを動かした実績のある「FFT_Analyzer_4013」プロジェクトの、LCD関係ソース
   と、xlcd.hを全てコピーし、メインソースは新たに作成して、プロジェクトを作成した。
   メインソースは「char_lcd_test_used_sprint_4013.c」として、Twid配列256宣言後に、LCDを初期化し、
   PutsXLCD(msgStart); でスタートメッセージを表示させるところでまず止めてみた。
   何の問題もなく上手く行くではないか。
   これと同じことをやっても、2012では、スタートメッセージを表示してくれなかった。
   どうやら、2012の場合のプログラムメモリの余裕が無いのが影響してたようだ。
   ちなみに、4013の場合のプログラム・メモリ使用量= 932/ 16384 であった。

   参考までに、この時のメインソースはこれです。→ 「char_lcd_test_used_sprint_4013.c」
   (名前はキャラ・LCDテスト・・となっていますが、これで回転因子生成表示まで行っています。)


■ 2016.4.20
  ・キャラLCDに表示される回転因子の値を読取りながら、ソースに埋め込む大変地道な作業を行った。
   32kサンプル/512ポイント= 分解能:62.5Hz、表示Fレンジ= 0〜 約8kHz(62.5Hz × 128dot)
   のソースはこれです。→ 「dsPIC33F_FftAnalyzer_Test_3_N512_32kconst.c」(N= 512, 32kサンプル固定版)

   動作の様子は、このページ冒頭の、(2)-@の写真を参照してください。


■ 2016.4.21
  ・
一応、32kサンプル/512ポイント= 分解能:62.5Hz、表示Fレンジ= 0〜 約8kHz(62.5Hz × 128dot)
   で上手く行ったが、まだこれでも楽音での見栄えが良くないような感じがする。
   それなりの表示、応答はするが、スペクトルが殆ど、0〜 4kHz位に集中して、時々高域のスペクトル
   が見られる程度。
   まあ音楽ソースにもよるのだが、こんなもんなのかな〜〜 とも思うが・・・ (もう少し定量的に評価できればよいが・・)

   そこで、512ポイントは固定にして、サンプルFを低くして、さらに分解能を上げてみる。
   そのかわり、表示F帯域は狭くなるが、それはさほど問題ではない。
   そしてそのサンプル周波数を、ロータリ・ディップSWで切替えるようにした。
   サンプル周波数は、32k, 16k, 8kを選択できるようにした。(切替えたら、RESET SWを押す簡単な方法にした。)


■ 2016.4.22
  ・昨日の案で、512ポイント固定の、サンプル周波数選択も、すんなり上手く行った。
   表示Fレンジは狭くなるが、少しは見栄えが改善されたようである。


---<ここから、追試:「ソフト更新」の記事>-------------------------------------

■ 2016.4.30
  ・気になっていた、音楽ソースに対する表示感度が改善されたので、報告します。
   音楽ソースに対する表示感度を上げるため、以下を試したら改善されました。
    @ アンプ系のトータルゲインを下げる(1.2倍程度にした)ことにより、音楽ソースに対する
       ダイナミックレンジを上げた。(AN0入力の非飽和域を広げるのと一緒)
    A そのかわり、lcdData[]から、yposに変換する時の割数を、1/10 に減らした。(30→ 3に変更し、ソフト的に感度を上げた)

  ※ 以下にその結果写真をアップしました。

 


---<ここから、追試:「使える形にまとめる」の記事>-------------------------------------

■ 2016.5.3
  ・自作オシロ初号機を使っての実験結果を踏まえ、ディスク・トップに置いて使える形
   にまとめてみようと思います。
   このアナライザの主な使用目的は、ステレオ信号の音楽ソースを入力して、音楽を聞きながら
   そのスペクトラム表示を見て楽しむということなので、今回アンプ系のハードを変更し、
   オペアンプによる反転増幅器の、加算点に左右の信号を入力し、MIXすることによる
   モノラル変換とし、この信号をFFT処理し、パワースペクトラム表示をさせてみることにしました。

   また、アンプのトータルゲインは、約1.2倍で良いので入力アッテネータ回路は省略(ボルテージ・バッファ
   と負電源も省略)しました。
   尚、GAIN調整範囲は、0.5倍〜 5.5倍としました。

   構造的には、秋月の両面スルーホール基板:AE-B2 THが、モノクロGLCDの基板サイズ
   とほぼ同じ(取付け穴位置もほぼ同じ)なので、これにコントロール部を全て実装し、GLCDの
   裏に、M2.6スタッドで取付ける構造にしました。
   ただ、結構、GLCDは重いので、重量バランスが全面に偏るので、ベーク板で足を作り
   それで座りが良くなるよう考えました。

  ・水魚堂にて回路図を作成し、部品手配を済ませる。


■ 2016.5.7〜 2016.5.10
  ・5/7に部品が届き、5/10には実装が上がった。


■ 2016.5.11
  ・動作チェック開始
   まず電源ショートチェックから電圧確認→ これはOK(VCC= 3.29V, AVCC= 3.12V)
   ところがデバイス(MPU)認識せず。
   これは、10進コードSW(ロータリ・ディップSW)の出力論理について勘違いしていた。
   今回入手の都合で、赤軸のそれを使ったが、これは、コード出力形式が
   コンプリメント・コード(その重みのビット(1,2,4,8)が、ONの時、コモンピンから開放(OPEN))
   になっている。
   今迄使っていた、白軸のは、リアル・コード形式(上とは逆の動き)のだが、10進タイプのものに
   在庫扱いがなかったので、赤軸のものを注文した。
   回路図の都合で、HEXを書込む時は、この入力ポートと共用になっているプログラムライン
   (PGDと、PGCの2線)がコモンであるGNDに落ちないようにしないと駄目。
   白軸の場合は、偶数ビットの位置にしないと駄目だったが、赤軸の場合は、奇数ビット
   の位置にして、PICkit2をセットしないと認識しない。
   これで認識するようになり、HEX書込みはOKとなる。


■ 2016.5.12
  ・今回モノラル化した信号のスペクトラム表示がどうなるか心配だったが、さほどアンプの
   ゲイン設定を実験の時と変えなくても、見た目はそんなに変わらず表示できた。
   たぶん左右信号が同相で合成された時は、振幅が倍になるが、位相がずれて合成された
   場合は振幅は減少(逆相の場合はゼロレベル)されるので平均的に見ると、ゲイン設定
   はそんなに変えなくてもよいことになるのだと思う。
   ただ、見た目、パワースペクトラムの動きが少なくならないように、若干ゲインは
   上げ気味(実験時:1.2倍を、1.4倍)にした。
   以下にアンプゲイン設定時と、楽音スペクトラム表示の模様tをアップしました。
   (R-CHのみに、1kHzサイン波:0.103Vrmsを入力した時に、フルスケール表示になる。
   この時の、AN0= 0.144Vrmsなので、トータルゲイン= 1.4倍)


<最終回路図>
 ・こちらから、どうぞ→ 「オーディオ・FFTアナライザの実験回路」
                   「簡易オーディオ・FFTアナライザ」 ※ 160514 追加

<最終ソース>
 ・こちらから、どうぞ→ 「dsPIC33F_FftAnalyzer_Test_3_N256_32kconst.c」 (N=256, 32kサンプル版)
                    「dsPIC33F_FftAnalyzer_Test_3.c」 (N= 512, サンプル切替方式:32k, 16k, 8k版) ※ ソフト更新により音楽ソースに対する表示感度を改善しました。
                                                                          定数変更のみなので、ソース名は変えないで置換えました。 160501

                    「easy_audio_fft_analyzer.c」 (使える形に、まとめた版) 
                                      ※ dsPIC33F_FftAnalyzer_Test_3.cと違う所は、10進コードSWの読込論理の所だけです。 160514 追加


← 実験テーマ1に戻る   TOP PAGEに戻る   実験テーマ77へ →