バットディテクター(Bat Detector)の製作 2006年05月05日(データ復活版) [PIC]
コウモリの発する超音波を可聴音に変換して聞こえるようにする装置をバットディテクターとかコウモリ音翻訳機と呼ぶようです。
コウモリの鳴き声(40KHz前後)を人間が聞こえる帯域(<20KHz)に変換するためには周波数変換が必要となります。インターネットで調べてみると
1.周波数分周方式(Frequency division)
超音波をパルス列に整形後、カウンタでカウントダウンし周波数を
1/2,1/4・・・に変換する。
参考URL http://home.netcom.com/~t-rex/BatDetector.html
【長所】
・簡単な回路で実現できる。
・周波数をリニアに変換するので周波数の高低の関係が変換後でも
保たれる。(原音の周波数差は1/Nになる)
・広い周波数範囲をカバーできる。
【短所】
・超音波の強弱の情報がなくなる。(小さい音でも大きな音でも同
じ大きさに変換される)
・入力信号が小さい場合、途切れ途切れの音になる。
・サイン波が矩形波に変換されるため、奇数倍音が混入される(矩
形波には周波数的に奇数倍音が含まれる)。
・整数分の1にしか変換できない。
2.ヘテロダイン方式(Heterodyne)
二つの周波数を重ねるとその差分の周波数成分(ビート音)が発生
することを利用して可聴音に変換する方式。コウモリの超音波と40
KHzの信号を合成する場合が多いようです。
参考URL http://bertrik.sikken.nl/bat/index.html
【長所】
・超音波の強弱まで再現できる。
・原音の周波数差が保たれる。
【短所】
・回路が複雑になりがち。
・変換用基準信号の前後の周波数が重なってしまう。
(たとえば40KHzを使った場合、38KHzと42KHzの音が共に2KHzに変換
される。きちんとフィルタすれば回避可能)
の二つの方式が殆どのようです。
その他にテープ(メモリでもいいですが)に録音し、ゆっくり再生する方法もありますがリアルタイムで変換できないことと40KHz付近まで録音できる機器の入手が必要という大きな欠点があります。
メモリに保存する場合でも高速なA/D変換と大量のメモリが必要でPICでは実現できそうにありません。
リアルタイム性ということであれば、ビデオデッキの早送り時の再生音(早送りでも通常の高さの音声が再生される)のように間引いて再生すれば間引かれた部分の情報は欠落しますが変換が可能です。人間の声の特性として20mSec程度の短い時間であれば殆ど変化しないということなので耳の特性も似たものだと仮定すると20mSec分録音しその1/2のデータ(10mSec分)を20mSecかけて再生すれば40KHz付近の音まで可聴音へ変換できると思いますが80KHzでA/D変換する必要があり、PIC単体では困難と思います。(もっと周波数の低い人間の音声であればPICでも処理できそう(ピッチ変換方法として使えそう)ですのでそのうちトライしてみたい)
今回、バットディテクターを作成しようと思ったきっかけは、新たな方法を思いついたからです。
A/D変換する際、サンプリング周波数の1/2(ナイキスト周波数)以上の成分があるとその成分はナイキスト周波数から低い周波数に向かって折り返し、折り返し歪みになります。更に周波数を上げサンプリング周波数(この時点で0Hzまで到達する)を超えると今度は高い周波数に向かって更に折り返さることになります。 通常のA/D変換では禁断とされるこの現象を積極的に利用することで周波数変換が可能であり、バットディテクタも作れるのではないかと考えました。
下図がブロック図で、ナイキスト方式と命名します。
★2016/08/08 追記
「バットディテクター(Bat Detector)の製作」にブログ内容をまとめ公開しています。
コウモリの鳴き声(40KHz前後)を人間が聞こえる帯域(<20KHz)に変換するためには周波数変換が必要となります。インターネットで調べてみると
1.周波数分周方式(Frequency division)
超音波をパルス列に整形後、カウンタでカウントダウンし周波数を
1/2,1/4・・・に変換する。
参考URL http://home.netcom.com/~t-rex/BatDetector.html
【長所】
・簡単な回路で実現できる。
・周波数をリニアに変換するので周波数の高低の関係が変換後でも
保たれる。(原音の周波数差は1/Nになる)
・広い周波数範囲をカバーできる。
【短所】
・超音波の強弱の情報がなくなる。(小さい音でも大きな音でも同
じ大きさに変換される)
・入力信号が小さい場合、途切れ途切れの音になる。
・サイン波が矩形波に変換されるため、奇数倍音が混入される(矩
形波には周波数的に奇数倍音が含まれる)。
・整数分の1にしか変換できない。
2.ヘテロダイン方式(Heterodyne)
二つの周波数を重ねるとその差分の周波数成分(ビート音)が発生
することを利用して可聴音に変換する方式。コウモリの超音波と40
KHzの信号を合成する場合が多いようです。
参考URL http://bertrik.sikken.nl/bat/index.html
【長所】
・超音波の強弱まで再現できる。
・原音の周波数差が保たれる。
【短所】
・回路が複雑になりがち。
・変換用基準信号の前後の周波数が重なってしまう。
(たとえば40KHzを使った場合、38KHzと42KHzの音が共に2KHzに変換
される。きちんとフィルタすれば回避可能)
の二つの方式が殆どのようです。
その他にテープ(メモリでもいいですが)に録音し、ゆっくり再生する方法もありますがリアルタイムで変換できないことと40KHz付近まで録音できる機器の入手が必要という大きな欠点があります。
メモリに保存する場合でも高速なA/D変換と大量のメモリが必要でPICでは実現できそうにありません。
リアルタイム性ということであれば、ビデオデッキの早送り時の再生音(早送りでも通常の高さの音声が再生される)のように間引いて再生すれば間引かれた部分の情報は欠落しますが変換が可能です。人間の声の特性として20mSec程度の短い時間であれば殆ど変化しないということなので耳の特性も似たものだと仮定すると20mSec分録音しその1/2のデータ(10mSec分)を20mSecかけて再生すれば40KHz付近の音まで可聴音へ変換できると思いますが80KHzでA/D変換する必要があり、PIC単体では困難と思います。(もっと周波数の低い人間の音声であればPICでも処理できそう(ピッチ変換方法として使えそう)ですのでそのうちトライしてみたい)
今回、バットディテクターを作成しようと思ったきっかけは、新たな方法を思いついたからです。
A/D変換する際、サンプリング周波数の1/2(ナイキスト周波数)以上の成分があるとその成分はナイキスト周波数から低い周波数に向かって折り返し、折り返し歪みになります。更に周波数を上げサンプリング周波数(この時点で0Hzまで到達する)を超えると今度は高い周波数に向かって更に折り返さることになります。 通常のA/D変換では禁断とされるこの現象を積極的に利用することで周波数変換が可能であり、バットディテクタも作れるのではないかと考えました。
下図がブロック図で、ナイキスト方式と命名します。
★2016/08/08 追記
「バットディテクター(Bat Detector)の製作」にブログ内容をまとめ公開しています。
2008-01-06 01:22
nice!(0)
コメント(1)
トラックバック(0)
以下、Googleのキャッシュから復活させたコメントです
※追記 2021/06/25
画像ファイル用サーバ変更に伴いコメント内のURLを変更しました
今回のバットディテクタの製作方針は
1.D/A変換にはPWMを使用する。PWM周期は可聴音よりかなり高くしないと
フィルタリングが大変なのでなるべく高い周波数にする。そのためにはソフトに
よるPWMでは速度的に無理なので、PWM&A/D機能を持つPIC12F683を使用
する。
→A/D変換と同じ33.3KHzにする。
2.なるべく低電圧で動くようにしたい。できたらニッカド電池2本(2.4V)が理
想。そのため、PIC12F863のクロックは内部発信の4MHzにする。
(8MHzでの動作は電源電圧が3V以上でないと規格外である)
3.回路はなるべく簡単にしたい。当然PICは内部クロックを使用する。
4.容易性&回路の簡略性から単電源用オペアンプを使用する。電源電圧が低いので
rail to railタイプのものを使用。
5.PICのソフトはA/D入力し、直ぐにPWN出力するだけであること及び割込み
処理では時間的にきつく割込み応答に1クロック分の揺らぎが発生するので、割り
込みは使わない。
で、ブロック図の最終段の出力アンプに超定番のLM386を使ったため電源電圧が4V以上必要であり(3Vでは動作しなかった^^;)、電源は急遽5V(NiCD電池4本)となってしまいまいた。この部分以外は2,4Vで動作しているので後日、LM386の部分は変更する予定です。
A/D変換では処理時間の関係で規格値である11.5μSecはとれていませんがそれなりにA/D変換しています。それ以前にPWMの関係で有効ビットを5BITにしています^^;
PIC12F863に内蔵のA/Dは10ビットですが、最初の5ビットだけ欲しいのでコンバージョン中断を試みましたが10ビットまで変換が終わらないとA/D値がADRESHに設定されないようです。(ホワイトペーパーにも変換途中は以前の値が保持されると書いてある)。GOを強制的にlowにする前にADIFをlowにして見たところ、値は変わったけど変な値のようでした。
動作確認のために発信器が欲しいところですが無いので、USB接続 12ビット2chオシロ「Stingray」についている信号ジェネレータ機能で代用した関係でテスト信号の上限が31.25KHzという環境になってしまい、バンドパスフィルタ部分の動作確認は行っていません^^;;;
とりあえず、ブレッドボード上で動作確認できた回路がこれです。
https://piclabo.byte.jp/pic/image/BatDetector/BatDetectoerV001.pdf
31.25KHzを超音波用スピーカから出力した信号を受けたときのPIC12F683のPWM出力波形がこれです。
https://piclabo.byte.jp/pic/image/BatDetector/31250wavePWM.gif
サンプリング周波数が33.3KHzなので2.15KHzの信号が現れます。
ローパス後の信号には2KHz付近の信号がはっきりと現れます。
https://piclabo.byte.jp/pic/image/BatDetector/31250wave.gif
PWMの周期である33.3KHzがなかなか取り切れていませんが、完全に取り除こうとすると肝心の2KHzの信号も小さくなるためこの辺で妥協しています。
この信号をFFTにかけて見ると
https://piclabo.byte.jp/pic/image/BatDetector/31250waveFFT.gif
となり、当然ですが2KHzの信号がはっきり現れてました。
Posted by さと at 2006年05月05日 03:54
--------------------------------------------------
試作してみました。
電源は単四電池3本で4.5Vにしました。また、PWMをローパス後にPWM変換周波数を取りきれなかったのでPWM周期を倍の66.7KHzに変更しています。
https://piclabo.byte.jp/pic/image/BatDetector/BatDetectorBoard001-1.jpg
https://piclabo.byte.jp/pic/image/BatDetector/BatDetectorBoard001-2.jpg
試作基板がこれで単四電池ホルダは基板直付けタイプのものを使用して基板の裏面に実装しました。
小型スピーカを付けてボリュームを上げると1.5KHzくらいで発信してしまい^^;;;なかなか解決できなかった(音響的な結合による発信ではない)のでとりあえずヘッドホン(この場合フルボリュームでも発信しない)をつけ、夕方さっそく近くの河原へ行ってきました。
我ながら怪しげな機械を持ち夕暮れの河原を徘徊する怪しげな人と思いながら・・・結果はどうか?にワクワクしつつ、徒歩5分で到着。
コウモリが結構飛び交っていましたが、10mくらいまで近づかないとノイズに埋もれて良く聞こえず^^;;;
また、近くに飛来しても殆ど無音の場合もあったのでサンプリング周波数をもっと上げた方が良いかもしれません。
でもとりあえず鳴き声らしきものが聞こえたのでまずは満足(^^)。ノイズ対策が今後の課題です・・・
Posted by さと at 2006年05月08日 00:18
--------------------------------------------------
わたし超音波 だすことができます
160khz こえてます
連絡ください
Posted by 佐野秀樹 at 2006年05月15日 04:04
はじめまして
わたしもつくりたいとおもいます
連絡ください
Posted by 佐野秀樹 at 2006年05月15日 04:08
--------------------------------------------------
佐野さん、はじめまして
最初はStingrayの信号ジェネレート機能を使い、信号を取り出すのにプローブ(x1モードにして)を使っていたので二現象の測定ができず不便だったので、「無いものは作る」の精神でPIC12FF683で40KHz出力して試験しています。少しソフトを作ればスイッチ操作で出力周波数を変更できるようにするのも容易です。
但し、トランスレータに超音波受信器とペアの物を使っているので40KHz付近にQがあり、任意の周波数を同じレベルで出力はできないと思います。
昨日の日曜日に再び河原で観測しましたが、やはりサンプリング周波数を上げた方が良さそうだったので今は38KHzサンプリングにしています(40KHzは2KHzで聞こえる)。
また、以前未解決だったA/D変換も中断もできるようになり、サンプリングをもっと上げることも可能になりました。ホワイトペーパーではA/D変換を中断するにはGOビットを強制的にクリアすると可能と記載されていますが、この場合変換途中のデータはADRESレジスタに書き込まれないとも書いてあります。
そこで5ビット分の変換が終了した時点で設定変更しA/Dクロック(Tad)を高くすれば残りの変換ビットの精度は保障されないですが早く変換終了し変換値もADRESへの設定されると考えました。
実験してみたところ、Tad分周比をFosc/2に変更すると直ぐに(残り5ビット分の変換を待たずに)A/D変換が完了しました(^^)。これはホワイトペーパーにも載っていない隠し技です(笑)。
MPLABのシミュレータもこの辺の動作は忠実に再現するので関心しましたが、MPLAB(V7.30)でのGO表示は論理が逆です(ERATAに載ってるか否かは未確認)。
p.s.
最初のコメントで書いた「A/D変換では処理時間の関係で規格値である11.5μSecはとれていませんが」はTacq(AcquisitionTime)のことですが、上記発見により規格値を満たすタイミングにすることができています(^^)。(規格ではアナログ入力インピーダンスは10K以内ですが、今回は330で接続しているのでTacqは規格以下でも精度的な問題は発生しないとも思っていますが、規格外だと多少気持ち悪いので・・)
Posted by さと at 2006年05月16日 01:51
--------------------------------------------------
夏休みも明日の月曜日までとなり ^^;;;;、休み中にバッドディテクターを色々いじくりました。
最近ブログもホームページも更新を怠っていましたのでかなり前の製作済みではあったのですが前回作成のバッドディテクターのケースのご紹介から始めます。
以前、秋葉に行った時に買っておいた組み立て式(購入時は折り曲げされておらず平な状態)のアルミケースに入れてみました。このケースのうたい文句は
・組み立て前なので穴あけ加工が楽
・組み立て作業が無い分、安い
の二つです。確かに通常の組立て済みアルミケースよりは安かったし折り曲げは手でも楽に出来(かといって強度的には十分)、なかなか使いやすかったです。
但し、側面の穴加工は組立ててから現物合わせしないと位置が正確には出ないので「穴あけ加工が楽」のメリットは享受できませんでした。
作成した基板を収めるのに必要最小限のサイズで、小型スピーカ分のスペースもなんとか確保したのですが、以前のコメントに書いたようにスピーカを接続すると発振してしまうのでスピーカ及びスピーカ用アンプICは未実装のままでケースに入れました。(アンプICをつけないなら乾電池は2本でもOKなのですが・・^^;)
内部の写真と概観がこれです。
https://piclabo.byte.jp/pic/image/BatDetector/BD1CaseInside.jpg
https://piclabo.byte.jp/pic/image/BatDetector/BD1Case01.jpg
https://piclabo.byte.jp/pic/image/BatDetector/BD1Case02.jpg
Posted by さと at 2006年08月14日 00:15
--------------------------------------------------
前回製作基板のケースの話は前置きでこれからが本題です。
バッドディテクターの2作目を開発するにあたり、なるべく小型にすることを目標にしました。
今回の設計の要点(目標)は
1)前回の反省からスピーカ出力はせず、またボリューム(結構場所を食う)も省略する。
2)ボタン電池式にしようかとも思いましたが、充電できないというディメリットのため、電源は乾電池にする。
3)乾電池も場所を食うのでニッカド電池2本で動作するようにする。
4)2.4Vでレールツーレールくらいに出力を振るために増幅回路はトランジスタで組む。
(2,4V動作の単電源レールツーレールのオペアンプは入手困難・・あるかも不明)
5)超音波マイクは高価かつ大きいので小型コンデンサマイクで可聴音以上まで特性が伸びているものを使用する。(たまたま秋月さんから購入していた小型コンデンサマイクは20KHzを越えてもセンスできている)
6)サンプリング周波数は切り替え式とし3通り程度に切り替えられるようにする。(バンドパスフィルタまでは切り替えしない・・ということで妥協^^;)
です。
まず、前回からの開発環境の変化として回路シミュレータであるSPICEを導入しました(^^)
SPICEによってPC上で増幅率や周波数特性をモニタしながら回路を試行錯誤できるため設計がずっと楽ちんになりました(^^)/
マイクアンプ部の回路がこれで
https://piclabo.byte.jp/pic/image/BatDetector/BD2SimKairo.gif
出力をシミュレートしたものがこれです。
https://piclabo.byte.jp/pic/image/BatDetector/BD2SimOutSig.gif
https://piclabo.byte.jp/pic/image/BatDetector/BD2SimOutFreq.gif
前回の一番の課題であったノイズについては、オシロで確認もできず(プローブを繋ぐいだだけでノイズがすごい)、難航しましたが試行錯誤した結果、次のことがわかりました。
1)A/Dサンプリング周期とPWM出力周期は1:Nの関係にないとPWM出力の影響がA/D値に
現れる(パスコンで排除しきれない)
2)A/DとPWMの周期を合わせただけでは駄目で何かしらの同期が重要になる。
例えば無音時のA/D変換タイミングとPWM出力の立上り/立下りが重なるとノイズが発生する。
1は前回BDでもクリアしていることですが、2が非常に重要かつ同期タイミングは電源電圧や配線の引き回しからの影響を受けるようで結局は試行錯誤して最適値を見つけました。
うまく調整すると無音時は出力も無音かガイガーカウンタのようにポツ・ポツというような音(A/D変換のLSBが変化する程度)までになりました。
シミュレータで確認後、ブレッドボードで確認している様子がこれで
https://piclabo.byte.jp/pic/image/BatDetector/BreadBoardBD2.jpg
完成した回路図がこれです。
https://piclabo.byte.jp/pic/image/BatDetector/BatDetectoerV002.pdf
Posted by さと at 2006年08月14日 01:42
--------------------------------------------------
【ソフトウェア編】
先のコメントで書いたように今回は3通りのサンプリング周波数に切替えられるようにしたのですが、現状態を認識できるように1個のLEDで「1回点灯」「2回点灯」「3回点灯」のパターンを繰り返す表示を行うようにしています。
また切替えスイッチを押した時もピッ音の回数でどの状態になったかわかるようにしました。
LED表示やキーセンス(当然チャッタリング防止もソフト処理)をA/D変換ループ内に入れ、かつ、切替え処理以外のどのルートを実行した場合でもステップ数がきっちり同じになるようにする必要があります。
また、サンプリング周波数の上限はなるべく高くしたいのでこのループ処理は1ステップでも短くなるようにする必要があります。(この辺の開発工程が面白いのですが^^)
前回のBD製作時に発見したA/D変換中断の裏技を使ったこともあり、結果としてサンプリング周波数の上限は47.6KHzまで確保でき
ループステップ数 サンプリング周期
1) 70 28.57KHz
2) 52 38.46KHz
3) 42 47.62KHz
の3通りを切替えできるようにしました。(PICのクロックは内蔵8MHz←電源電圧からするとPICの規格外だけと動作している^^;)
電源投入後は2の38KHzモードになり、スイッチを押す度に 2→3→1→2・・・ と切替わります。
前のコメントに書いたノイズ削減のためのA/D変換とPWM出力の同期パラメータはEEPROMの先頭から1バイトづつ48KHz、38KHz、28KHzの順番で設定していますので0〜35位の間でノイズが最小になるように調整します。(時間があれば、スイッチ操作で設定パラメータを変更できるようにしたい・・)
調整時にTVをつけていたりするとTVの音を拾います。前回作よりも増幅率を上げているので指先を擦る音が50cm以上離れても聞こえます。
製作したプログラムのHEXファイルがこれです。
https://piclabo.byte.jp/pic/prog/BatDetector200.hex
p.s.
そういえば子供の頃(うん十年前)、TVの裏に回ると水平同期の15.7KHzの音が聞こえました。
電気屋さんのTV売り場に行くと水平同期の音がうるさいくらいでした。
今、そんなことは全然気にならなくなったのはTVの性能が上がり音波や電波のノイズレベルが低下したためか、はたまた年と共に高音の可聴域が狭くなったためか^^;;
少なくとも今回製作したBDで聞こえるTVからの音は単一周波数が大きいわけでは無く、いろんな周波数が混じったノイズ的な音です。
TVからの電波ノイズを拾って聞こえているのか??とも思いましたが、BDを振って見たり、マイクの前で手を振るとドップラー効果でノイズ音が変化するので音波を拾っていることは確かです。
(ディテクターで周波数ダウンしていると可聴音域での普通の音よりもドップラー効果の効果が大きくなる)
Posted by さと at 2006年08月14日 02:53
--------------------------------------------------
うっ・・前の前のコメントで「バッドディテクター」と連呼しているけど・・「バットディテクター」の間違いです。^^;;;
果物なんかの良し悪しを(人の性格等も)ディテクトできる装置があったら面白いかもね(笑)
Posted by さと at 2006年08月14日 03:09
前の前のコメントの最後の部分で「TVからの音は単一周波数が大きいわけでは無く、いろんな周波数が混じったノイズ的な音です」と書きましたが、再度確認したところ、単一周波数の成分が大きいようです。
ドップラー効果の度合いもサンプリング周波数付近の音より小さいので水平同期成分の音も漏れているものと思います。
でも直接耳で聞いてみても何も聞こえない・・・きっと昔のテレビよりは漏れレベルが小さくなっているんだろう・・・と自分に納得させてみる^^;
Posted by さと at 2006年08月14日 11:25
--------------------------------------------------
【製作編】
始めの方で書いたように今回は小型で携帯性に優れたものにしたかったので、汎用基板(秋月さんから購入の両面タイプ)から切り出した小さな基板にまとめてみました。
抵抗はなるべく1/6Wの物を使いましたが、一部手持ちに無いため1/4Wも使用しています^^;。
製作した基板の写真はこれですが、部品は秋月さんと鈴商さん(スイッチ、コンデンサやイヤホンジャック等)からの購入部品です。
https://piclabo.byte.jp/pic/image/BatDetector/BD2Kiban001.jpg
https://piclabo.byte.jp/pic/image/BatDetector/BD2Kiban002.jpg
https://piclabo.byte.jp/pic/image/BatDetector/BD2Kiban003.jpg
https://piclabo.byte.jp/pic/image/BatDetector/BD2Kiban004.jpg
1/4Wの抵抗がでかく見えます(笑) ケースに入れる関係で高さをなるべく低くしたかったのでトランジスタの足もかなり短めです。
なぜ、こんな細長い基板に詰め込んだかというと・・・ケースには単三電池ケース(3本用のスイッチ付きタイプ)を使いたかったためです。
「レーザポインタの製作」の記事でも電池ケースを使いましたが電池ケースを使うメリットは
1)電池ホルダの実装を心配する必要がない(もともとが電池ホルダケースなので当然ですね)
2)一般的な汎用ケースに比べ安い。^^
3)電源スイッチ(電源用のコードも)まで付いている。
4)街で持ち歩いていてもあまり違和感がない。(アルミケースだと流石に人目が気になります)
5)加工もそこそこし易い(小さくまとめる必要はありますが)
もともと電源コード用にあった穴を大きくし、イヤホンジャック(基板側に実装)用にし、LEDとコンデンサマイクは新たに穴を空け瞬間接着材で固定しました。
スイッチ(鈴商さんから購入したものでストロークが小さくクリック感がGood)の穴も空け、スイッチの軸を削ってケース面と合わせました(概観上、ほとんど目立たない^^)
https://piclabo.byte.jp/pic/image/BatDetector/BD2Case001.jpg
https://piclabo.byte.jp/pic/image/BatDetector/BD2Case002.jpg
https://piclabo.byte.jp/pic/image/BatDetector/BD2Case003.jpg
蓋をした時の外観がこれです。
https://piclabo.byte.jp/pic/image/BatDetector/BD2Case004.jpg
https://piclabo.byte.jp/pic/image/BatDetector/BD2Case005.jpg
かな〜り(「な」にアクセント)かっこ良くありませんか?(笑)
Posted by さと at 2006年08月14日 12:41
--------------------------------------------------
久々の書き込みです^^;
購入自体は結構前なのですが秋月電子さんからPSoCの書き込み環境であるPSoC MiniProgを購入しました^^/
前回のPIC12F683を使った2号機では小型化すること及びバンドパスフィルタの帯域を動的に切り替えるのが難しいことから結局バンドパスフィルタは省略しましたが、CYPRESS社のPSoCを使えばバンドパスフィルタの帯域を動的に変更することが可能で周辺アナログ回路もチップ内のアナログブロックを使うことで実現できそうです。
そこでPSoC(CY8C29466を使用)を使ったフィルタの評価として 2Pole Pair Band Pass Filter を評価してみました。
PSoC Designerに付いているエクセルで設計したバンドパスフィルタの特性が
https://piclabo.byte.jp/pic/image/BatDetector/PSoC/filter44KDesign.gif
です。
評価する上では当然実際の周波数特性を測定したいところですが周波数をスイープして特性を計る高価な測定器等は当然ないし、ホワイトノイズ発生器もないので、PSoCで32ビットの乱数発生(PRS32)させ、擬似的なホワイトノイズをつくりバンドパスフィルタの特性を測定してみました。
波形は
https://piclabo.byte.jp/pic/image/BatDetector/PSoC/filter44Kout.gif
こんな感じで黄色が擬似ホワイトノイズでピンクがバンドパスフィルタの出力です。
FFTをかけると
https://piclabo.byte.jp/pic/image/BatDetector/PSoC/filter44KoutFFT.gif
こんな風になり、設計した特性に近いことが確認できました(細かいギザギザは入力したホワイトノイズが擬似的なためと思います)。
PSoCの偉い所は、このバンドパスフィルタの帯域をプログラムで動的に変更できるところです^^
バンドパスフィルタの前段に1個アンプをかませましたが、今回の評価で使用したアナログ回路は全て(擬似ホワイトノイズ発生器も含め)PSoCチップ内のリソースを使って実現しています。
PSoC・・・恐るべし^^ ・・・でもfreeのCコンパイラが無い・・^^;
Posted by さと at 2007年04月01日 14:47
--------------------------------------------------
今回評価した2Pole Pair Band Pass FilterのPSoC DesignerでのDevice Editort状態は
https://piclabo.byte.jp/pic/image/BatDetector/PSoC/PSoCDesignerFilter44K.gif
でアナログSCプロックを4個使っています。(加えてPGA用にCTブロック1個)
アナログCTブロック1個でPGA(プログラマブル ゲイン アンプ)を構成できますが増幅率の上限が48倍であることから、マイクからの音の増幅のためにはPGAが2個以上必要でしょうし、A/D変換(6-Bit SAR ADC)のためにアナログSCブロックが1個、D/A変換のためにも最小限アナログSCブロックが1個必要になります。
2ch化してステレオバッドディテクタを作るのはPSoC1個では流石に難しそうです。(ディジタルブロックはいっぱい余っているんですけどねぇ〜)
しかし、このプログ・・「PICマイコンは面白い」なのにPSoC使っていいんだろうか?
以前もPICに関係ない白色LED化とかレーザポインタの製作とか書いているので、(私が)面白そうなことであれば何でも有りということでokとしましょう(笑)
Posted by さと at 2007年04月01日 16:08
PSoCでのBD実現実験の続編です。
マイク入力→PGA(48倍)→PGA(8倍)→バンドパス→A/D(DELSIG8)→DAC8 で処理していますが、A/D変換の速度上限32Kspsがネックとなりナイキスト式ディテクタの実現はなかなかうまく行きません。
A/DをSAR6(逐次比較方式)するとサンプリングの上限が40Kspsまで上がるのですが、SAR6ではサンプルホールドをきちんといていないようで、変化の激しい信号には適さないようです。
A/D→D/A変換しなくてもサンプルホールドさえ出来れば目的は達成するのですが、PSoCでサンプルホールドを実現する方法が??^^;;(アナログブロック出力の最終段アンプがサンプルホールド動作しているとの情報を見つけたのでクロックを遅くしてみましたがそれっぽい出力にはならなかった^^;)
PSoCのA/Dはどれを使うか迷うくらいいろんな種類がありますが、高速できちんとサンプルホールドできるA/Dが一種類あった方が助かるのに・・・
Posted by さと at 2007年05月06日 23:35
--------------------------------------------------
趣旨から外れてしまいますが、SCBLOCKにはモジュレータ機能がありますので、こいつを使ってやると外付け不要でいきなりヘテロダインできます。バンドパスフィルタなり、ローパスの1段目をそのまま使ってやることもできますので、アナログブロックが節約できます。(このテクニックはPSoCを使ったワンチップ電波時計でも利用されています)
1チャンネルで2カラム使うとして、
PGA=>PGA=>BPF(兼ヘテロダイン)=>
で、あとSCBLOCKが2個余ってますので何かに使えるかも?
あと、内蔵発振器を使った場合、ジッタの影響をもろに受けて音が汚くなりますので、外部に水晶発振器を用意して、そちらからクロックをもらうようにしたほうが良いと思います。
Posted by JUNK-BOX at 2007年05月21日 19:10
--------------------------------------------------
コメントありがとうございます。
(有名な方からのコメント・・・インターネットは素晴らしい^^)
ASCブロックでのモジュレータ機能のことを言われていると思います。
以前試して見たのですが、マイクからの信号(外付けマイクアンプ無し)をPGA2段で増幅するとAGNDからのオフセットずれ(DC成分)が結構発生し、結果としてモジュレーション後の信号はモジュレーション周波数成分がほとんど・・と言う結果になり、使用を見合わせていました。
PGAを交流結合(DC成分カット)すればいいのでしょうが、そのためには前段のPGA出力を一旦、外部ピンに出し、外付けコンデンサ経由で次段PGAへ入れる必要があり(他の方法が思いつかなかった)外部部品を極力無くす・・という思想に反するため、A/D→D/Aの方法を模索していました。
先日、sample holdのアプリケーションノート「analog___sample_and_hold_in_variations___an2350_12.pdf」を発見し、今まで悩んでいたことがすんなり解決し(こんな簡単にS/Hが出来たとは・・)、40KHzの入力信号に対して39KHzでS/Hした結果、出力信号成分は1KHzに大きなピークが現れることを確認できました。
ナイキスト方式は(理想的には)サンプリング周波数との差分の周波数成分だけが現れるのが特徴です(ヘテロダインはプラス/マイナスの2つの成分が現れ、DC成分にも弱い)
あとは時間と気力があれば完成しそうですが、これが最大の問題かも・・・
Posted by さと at 2007年05月22日 02:26
--------------------------------------------------
なるほど。電波時計できる程度なので、ほとんど
問題ないと思っていました。
>今まで悩んでいたことがすんなり解決
あっ、ありましたね。これに限らないですけど、PSoCって「○○ができない〜」と思っていると、アプリケーションノートで「!」と思うような解決策が提示されて、自分の頭の固さを思い知らされることが多いです。
・・・もっと精進せねば・・・
Posted by JUNK-BOX at 2007年05月22日 10:40
by skyriver (2021-06-25 02:09)