# EmbeddedANC-STM32F767 このシステムは組み込み用開発ボードNUCLEO STM32F767にANC機能を組み込んだ試作品である。 またWikiにはその他試作に利用したボードのメモ書きと開発を中止した理由を掲載している。場合によってはSTM32である必要がないため、一度目を通して貰えるとありがたい。詳しくはWikiへ。 ## システム構成 |||| |:----|:----|:----| |ボード|NUCLEO-STM32F767ZI|https://www.st.com/en/evaluation-tools/nucleo-f767zi.html?ecmp=tt9470_gl_link_feb2019&rt=db&id=DB3171#resource| |テキストエディタ|VisualStudioCode(Arduino環境)|https://qiita.com/mmt/items/7dd1a2f312334a6cd600| |IDE|ArduinoIDE| | |ライブラリ|Arduino_Core_STM32|https://github.com/stm32duino/Arduino_Core_STM32| | |ArduinoSTL|https://github.com/mike-matera/ArduinoSTL| ||SMSIS|https://arm-software.github.io/CMSIS_5/General/html/index.html| # NUCLEO STM32F767採用理由 - RAMが512kbyteもあり、容量が大きくなりなすいオーディオデータとフィルタを格納できるため - FPUを搭載しており、対応ライブラリで書くことで高速な実数計算が可能になるため - ベースはArduino言語で書け、複雑な設定はHALライブラリにアクセスすることで補えるため - もしArduino言語では設定できない部分があってもSTM純正のCUBE IDEならば簡単に設定でき、応用が効きやすいため - 安い # 回路 以下にポート表を示す |対応ピン|ポート名|目的| |:----|:----|:----| |PB1|A6|audioInErrPin| |PC2|A7|audioInRefPin| |PB2|D27|biasPin| |PA4|A13|audioOutPin| ## テキストで簡単回路図 外部から入ってきた生の信号をADCで変換し、767内部でLMSを適応している。ADCに入力するため交流に7500Hz程度のローパスフィルタをかけた後(ADCは3.3V_MAXなので)+1.65Vバイアスをかけているが、本来ならオペアンプやトランジスタで構成すべき回路である(電圧レベルが落ちるため) - F767-A6pin <= [+バイアス1.65V,D27,10kΩ*2] <= [簡易ローパスフィルタ7500Hz(0.1μF,220Ω)] <=audioInErr - F767-A7pin <= [+バイアス1.65V,D27,10kΩ*2] <= [簡易ローパスフィルタ7500Hz(0.1μF,220Ω)] <=audioInRef - F767-A13 => [十分な容量のコンデンサ] => audioOut # 何が出来ているのか 二次経路及びハウリング経路の補正を行っていない、2マイク運用ANCにて正弦波のノイズキャンセルを確認したが、Cancel後の波形のRMSが0に近づくに従ってフィルタが発散してしまう。ただし、このバグは正規化LMSアルゴリズムの欠陥なので修正可能 # TODOリスト - 2次経路の補正を加えたANCを実装する - IMCフィードバックも実装する - 回路をオペアンプに置き換える