スキップしてメイン コンテンツに移動

メディアンフィルタ

Blue Pill STM32のADCで可変抵抗の電圧値を得るプログラムを作ってみました。得られたデータをパソコンでプロットしてみると(Arduinoのシリアルプロッタが便利です)、かなりノイズが乗っていることが分かりました。たとえばこの電圧値でディレイエフェクトのディレイタイムをコントロールするとディレイタイムが小刻みに変動するので変調が掛かったような音になってしまいます。プロットしたデータをよく見ると一定周期で急峻なピーク性のノイズが入っていることが分かりました。なぜそのようなノイズが入ってくるのか?はとりあえず置いといてw、そういったノイズにはメディアンフィルタが効くことは周知です。ネットを検索すると

3×3メディアンフィルタの高速アルゴリズム

というものが見つかりました。アルゴリズムの解説だけでサンプルコードが無いのでCで書いてみました。

サンプルコード

サンプルコードは画像用ではない一般的な9個のデータ用のメディアンフィルタの実装です。アルゴリズムの解説に沿ったプログラムの流れにしたのでアルゴリズムの解説と合わせて見てもらうと分かり易いです。
サンプルコードは9個のバッファにランダムな数値を入れてそれを並べ変えて中央値が取れていることを確認するだけの単純なものです。

クイックソートと比べて約2.5倍くらい速くなりました。これでスパイク性のノイズはきれいに取れましたが全てのノイズが消えることはありません。メディアンフィルタが速くなった分、さらに平均化フィルタも追加したところかなり安定したデータになりました。ノイズは3/4096くらいまで抑えられました。0.07%ですからまずまずでしょう。

コメント

このブログの人気の投稿

中国製ゲルマニウムトランジスタ

Aliexpressで購入したゲルマニウムトランジスタです。AC128のセカンドソース(らしきものw)です。最近の安い中華ゲルマエフェクターで使われているようです。10個で送料込み¥1000くらいでした。そもそもCANタイプのトランジスタは現行品でも高いので1個¥100ならお買い得でしょうか。 テスターでhfeを測定した結果 20,36,34,37,40,67,149,190,214,216, かなりのバラつき具合です。hfeが高いのも欲しかったので丁度良かったのですが・・・ 20とかは動くんでしょうか?

Blue Pill FX Projects~デジタルディレイ~

■$2の格安マイコンボードBlue Pill STM32を使って、E.ギター用のデジタルディレイを作りました。 モノラル-シングルエフェクトです。ノーマルディレイ、アナログディレイ、リバースディレイのどれか1つをトグルスイッチで切り替えられます。 ・最長ディレイタイム        ・ノーマルモード : 425ms (周波数特性:7kHz)       ・アナログモード : 800ms (周波数特性:1.5kHz)       ・リバースモード : 420ms (周波数特性:7kHz) ・消費電力 DC9V 55mA 音は普通のディレイです。ノーマルモードの周波数特性が7kHz(-6db)なのでBBDやPT2399よりはクリアな音です。S/NはPT2399ディレイと同じくらいです。 このデジタルエフェクターに使用した小型のマイコンボードです。海外のホビーマイコンユーザーの間でBlue Pill(青い錠剤)と呼ばれているものです。大きさ23mm x 55mmの基板でエフェクターケース(1590B/TD6-11-3)に余裕で入ります。Aliexpressなら$2(+送料)で手に入ります。日本国内ではAmazonやaitendoで取り扱いがあります。米国ではebayで見つかります。"STM32F103C8T6"で検索します。  マイコンボード のスペック   ■STMicroelectronics製STM32F103C8T6(Cortex-M3 32ビットARMマイコン) ■動作クロック 72MHz ■プログラムFlash 64k ■SRAM 20k ■ADC 12ビット 2系統 ■DACなし このMCUにはDACが内蔵されていません。そこでDual PWM DACという方法でアナログ信号を出力しています。疑似DACといったところでしょうか。2本の抵抗と1個のコンデンサでデジタル信号をアナログ信号へ変換する面白い回路です。 あと、このマイコンボードの他にプログラムを書き込む為のプログラムライターが必要になりますが、詳しくは別の記事で書いているので参照してください。プログラムライターもAliexpressでなら$2程度で入手できます。

Blue Pillマイコンボードへプログラムを書き込む (1)

 STM32CubeProgremmer  Blue Pillマイコンボードへブログラムを書き込むためには、まず書き込み用のソフトウェアが必要です。今回はSTマイクロ社の純正ソフトウェアSTM32CubeProgremmerを使います。このソフトウェアはSTマイクロ社のサイトからダウンロードできますが、ダウンロードする前にユーザー登録が必要になります。登録は無料です。利用についても全く無料ですが、ユーザー登録するとその後にちょこちょこと広告メールが送られてくるようになります。それが嫌な方は各自で対処してください。本音をいえばこの程度のソフトウェアはユーザー登録なしで公開して欲しいです。ちなみにフリーウェアではstm32flashというソフトウェアがあるのですが、今のところwin64版しかありません。 STM32CubeProgremmerのインストールは指示に従って行えば特に問題はないと思います。  プログラムの書き込む手順  Blue Pillマイコンボードのジャンパー設定をプログラム書き込みモードへ変更します。 USBシリアルモジュールとBlue Pillマイコンボードをケーブルで配線して、USBシリアルモジュールをパソコンと接続します。 STM32CubeProgrammerを起動してUARTとPortを設定します。 ・Prot番号(COM番号)はパソコンが自動で割り振るので上のスクショと同じ番号にはならないと思います。 ・パソコンでCOMポートを複数使用している場合は、ドロップダウンリストでPort番号を変更してください。 ・Portに"No COM...(No COM Detected)"と表示される場合は、USBシリアルモジュールがパソコンから認識されていないので、ドライバをインストールしてください。 ※充電専用のUSBケーブルは使用できません。100均で買ったUSBケーブルを使っている方は要注意です。 次にBlue Pillマイコンボードのリセットボタンを押してから、STM32CubeProgrammerのConnectボタンを押します。UART接続ではConnect(接続)ボタンを押す直前にマイコンボードのリセットするという約束があるので