■気の迷い メニューに戻る■
各種製作記事、電池の比較実験やLED関係、ほか記事は↑↑↑




PICマイコン使用
JR方式/関東私鉄MSK方式(NEC方式)両対応
インテリジェント空線信号キャンセラー」の製作

部品代 約1300〜1800円

* 記事を掲載 2008/4/10
* プログラム Ver1.01に更新 2008/4/14

 今回は「インテリジェント空線信号キャンセラー」の製作です。

 「空線信号キャンセラー」機能は最近の“マルチバンド受信機”には必須機能と言われるほど需要の高い機能になりました。
 その昔はこのような機能は無線機・受信機の標準機能ではなく、必要な人のみ「自作」するのが一般的でしたが、「無線の受信を趣味とする人」の裾野の広がりと共に市販の“マルチバンド受信機”も多機能・高性能になり「空線信号キャンセラー」機能搭載機も多くなって手軽に空線信号の乗った鉄道無線を楽しめるようになりました。

 しかしひと口に「空線信号」と言っても無線の世界には何種類もあり、そのうち鉄道無線に限って言えば「JR方式」「関東私鉄方式」の2方式が主なものです。
 そして「JR方式」は単純なトーン方式なので検出(デコード)は容易でその為の回路も過去にいくつも書籍やHPなどで公開されてきました。
 「関東私鉄方式」は単純なトーン方式ではなく、MSKデータ通信という一種のデジタル通信が行われていて簡単には検出(デコード)できません。この「データ音」の一部をトーンとみなして「JR方式」と同様にトーン検出で空線を判別している受信機がほとんどです。

 受信機の外にとりつけるタイプの「空線信号キャンセラー」でも両方式に対応していると言われている回路が公開されていますが、それらや受信機内蔵機能もほとんどは「スイッチによるトーン周波数切替」でしかなく、両方の空線信号に自動追従するものがありません。

 そこで今回は無線機の外(イヤホン端子など)にとりつけるアダプター型で、「JR方式」「関東私鉄方式」の両方の方式に対応して自動切換え・自動追従する機能をPICマイコンのプログラムで実現し、複雑な機能でありながら部品数の少ないコンパクトな回路に仕上げてみました。

 また、トーン検出方式の空線信号キャンセラーは過去にいくつも作り現在も使用中ですが、最近受信環境が少し悪化して受信音に周期的なノイズが乗るようになりました。
 そこでノイズ対策として「少々のノイズでも自動識別して空線状態はホールドする機能」が欲しくなり、今回のプログラム式の空線信号キャンセラーの製作に至ったという経緯もあります。
 ノイズに強く固定運用はもとより、列車に乗っての移動運用でも安定して動作する空線信号キャンセラーができました。

■ 主な機能
● JR方式(トーン)/NEC方式(MSK)自動切換え
● NEC方式各社線対応 (空線信号断続型[南北線]はスイッチ切替必要)
● JR「通話テスト信号」もキャンセル / 「一斉呼」信号による起動にも対応
● 誤判断防止機能、移動運用時のノイズ誤動作防止機能搭載(…限界はあります)

■ 動作確認路線
JR西日本
 ・東海道線(京都線/神戸線)
 ・奈良線
 ・関西線
 ・大阪環状線
 ・阪和線
 ・東西線/学研都市線
 ・おおさか東線
関東私鉄・地下鉄
 ・東急線
 ・京王線
 ・西武線
 ・小田急線
 ・都営 新宿線
 ・都営 三田線
 ・東京メトロ 南北線 [断続型]


■ 空線信号と検出原理

 無線通信では、普通は「通話していない時には電波は出ていない」のが一般的です。
 この方式だとふだん通話の無い時には無線機・受信機からは音声は出ていないので待機中は静かですし、通話を自動録音する場合でも「音声信号を検知したら録音がはじまるテープレコーダー」(今はICレコーダーやパソコンのソフト)等を繋いでおけば通話が始まったら自動的に録音してくれます。通話があった時のみ録音してくれますから一日中テープを回しておく必要がありませんし、後で聞くときには通話ぶんだけまとめて一気に聞けます。

 ところが「空線信号」がある方式の無線ではそうはゆきません。

 「空線信号」がある方式の無線では、通話が行われていない期間には「現在この回線は通話がありません、空いています」という意味を表す信号が常に流れています。その信号を「空線信号(あきせんしんごう)」と呼びます。

 JRの列車無線のうち、比較的列車運行本数の多い地域などで使用されている「A/Bタイプ」と呼ばれる方式では空線信号として2280Hzの「ピー」という音が常に流れています。

 関東の私鉄ではMSK方式のデジタルデータが「ガラガラ・ピー」という感じの音として繰り返し聞こえます。(鉄道会社により音は多少異なります)

 関東以外の私鉄やJRでもCタイプと呼ばれる列車無線(乗務員無線も)では空線信号はありませんし通話が無い時には電波は出ていません。

● JR方式

 JRのA/Bタイプ列車無線は300MHz帯を使用する複信方式の無線システムで、基地局側と列車側の周波数が異なり、Aタイプは受話器を持って電話のように「もしもし、はいはい」と同時に通話ができ、Bタイプは基地局側からの電波は出っ放しですが列車側はプレストークボタン(PTT)を押している間は受信機から音は出ませんので通話の最後に「どうぞ」を言って相手と交互に話します。列車側が話している(送信している)間は指令側は話しても送信中の列車の人には聞こえません。

 空線期間には基地局側から「2280Hzの空線信号」が出ています。

 A/Bタイプの列車無線にはそのほかに以下の機能別トーンが割り振られています。

基地 → 列車 列車 → 基地
空線 2280 Hz 中央呼 2300 Hz
一斉呼 1960 Hz 応答 2300 Hz
個別呼 2400 Hz 割込 1600 Hz
試験良 800 Hz 試験 800 Hz
ゾーン識別トーン 88.5 Hz 107.2 Hz 131.8 Hz

 このうち今回識別するのは「空線信号 2280Hz」「一斉呼 1960Hz」「試験良 800Hz」の3つです。

 「空線信号 2280Hz」は検知した場合は空線信号キャンセラーの音声出力をOFFにします。

 「一斉呼 1960Hz」は通話(通信)が始まる冒頭に指令側から流されます。本物の列車無線機ではこの信号を受信した場合に無線機から音声を出すように設計されているようです。本機でも一斉呼信号を受信したら音声出力をONにします。
 本物ではこの信号を受信しない場合はもし通話が行われていても音声出力はONにしないようです。「空線信号が受信できなくなったら音声を通す」というキャンセラー的な動作では無いという事ですね。尼崎列車事故の際に「一斉呼トーンを受信しなかった時でも通話音を聞く方法の乗務員の間に伝わる裏技がある」と一部報道で流れたアノ方法はこの音声出力カットを回避するやり方ですね。結局尼崎事故とは関係無い内容でしたけど。(この製作記事とも関係無い・・・)

 「試験良 800Hz」は列車側の「試験」ボタンを押されて800Hzの試験トーンが送信された場合、基地局から「試験電波は受信した、良好である」と自動的に折り返し送信されるトーンです。通常の無線機のように音声で「通話テストをお願いします、感度明瞭度いかがですか?」といちいち指令を呼び出して話す必要を無くしています。空線信号キャンセラー付きの受信機でもこの試験良の「ポー!」という音はキャンセルしていませんのでそのままスピーカーから出てしまいます。「時々ポーって鳴るけど受信機の故障?」と思われた方もいらっしゃるのではないでしょうか。本機ではこの試験良トーンもキャンセルすると共に、試験良信号を受信している間はJRの空線信号受信表示のLEDを点滅させて試験良受信中をお知らせします(^_^)

 「個別呼 2400Hz」は今回は判別しません。
 私は今まで一度も個別呼トーンを聞いたことが無いからです。少なくとも関西圏のJRでは使用されていないので割愛します。
 基地側「個別呼」→呼ばれた列車側「応答」操作で特定の動作をするようなのですが、実際に運用されているかどうか、また「応答」操作をしない列車側はどのような動作をするのか確認できていません。
 もし個別呼信号で通話が開始されたとしても、本機では「通話検知」機能で音声信号はONになります。(ここは本物のJR列車無線機と動作が違います)

※ もし関東のJR路線などで「個別呼」が多用されているのでしたら運用例をお教えください。プログラムのバージョンアップ等の際に対応させるかもしれません。

 PICプログラムでは以下のように各信号波形の一周期の時間を計測して周波数を検知します。

● 関東私鉄方式

 関東私鉄方式は別名「NEC方式」と呼ばれています。無線機納入業者がNECだから・・・だそうです。
 VHF 150MHz帯を使用する複信方式が多いようで、電話のように指令側と列車側が「もしもし、はいはい」と同時に通話ができます。
 関東私鉄でも100KHz帯を使用する長波無線を使用した路線もあり地下鉄等はほとんどがそうですが、今回はVHF使用の路線のみで受信確認を行っています。(鉄道の長波受信は面倒なので…)

 関東私鉄方式の場合、空線期間には「1200bps MSK方式」のデータ通信が行われています。
 スピーカーからは「ピーギャギャ!ピーギャギャ!ピーギャギャ!」という感じのデータ音が連続して聞こえてきます。
 「ピー」の部分は実際のデータ通信では無く「ビット同期」といってデジタル信号に乱れが無いよう正しく通信できるようにタイミングをあわせる為の信号部分です。「ギャギャ!」のところが実際のデジタルデータ(フレーム同期+データ本体)です。

 通話がはじまる冒頭では「ギャギャギャ…ギャギャギャ」と少し長い目のデータが数度流されます。
 これはデジタル信号で通話相手の列車を特定する呼び出し信号が流されているようです。呼び出された列車の運転席では何か呼び出しトーンが鳴っているのでしょうか? 特定の列車の運転士がすぐに無線にかかるようなので電話機のような個別呼び出しが実装されているようですね。
 この信号を復号すればパソコン上に呼び出された列車番号を表示する装置なども作れそうですね。(今回は関係無いですが)
 今回の空線信号キャンセラーではデジタルデータの中身は復号していませんので、この呼び出し信号で音声出力をONにする操作はしていません。
 簡単にデータを“眺めて”みた限りではこの呼び出し信号も鉄道会社毎に少し違いがあるようですので、簡単にデータパターンを1つ特定してそれで呼び出し信号だと認識させるだけではうまくゆかない気がします。

 具体的に1200bpsのMSK信号とはどのようなものか説明します。
 1200bpsとは 1200 bit per second すなわち毎秒1200ビットのデータ通信速度を表します。MSKは Minimum Shift Keying の略で「ミニマムシフトキーイング」と読むデジタルデータ伝送方式の一種です。ある一定の波形を基本とし、そこから最低限の変化で別の状態を作り、その2つの波形でデジタルデータの1と0を表す方式です。

 実際の通信データの波形はこのようになっていて、位相が連続する形で1または0を表す波形を切り替えながら送信しています。
(この図では実際に電波に乗っているサイン波の形は省略しています)

 1200bps MSK波形の場合、マーク(1)の場合の1200Hz波形、スペース(0)の場合の1800Hz波形のほかに、マーク(1)からスペース(0)に変わる時とスペース(0)からマーク(1)に変わる時にそれぞれ1440Hzに相当する波形が現れますので、この3種類の周波数特性を持つ信号を検知した場合は「1200bps MSKデータである」と識別します。
 重ね重ね・・・ですが、今回は正しくデジタルデータの1と0を復号するのではなく、あくまでJR方式等と混在で「その信号の有無」を検出する方法をとります。

 ここで1つ。
 頭の回転の速い方なら「一周期の時間を測るのではなく、信号の山1つや谷1つの時間だけ測れば"1200Hzの半分の時間"と"1800Hzの半分の時間"の2種類しか存在しなくなり、1440Hzに対応する検出部は必要なくなるのでは?」とお気づきになられるでしょう。
 理論的には正解!です。
 「理論的には」と言うのは、あくまでこの信号が伝送されてくるのはアナログ回路を使用したアナログ音声通信システムであり、受信されたサイン波形は電波状態によりかなり揺れていてこの図のような理想的なデジタル波形ではありません。
 アナログ波形からPICマイコンに入力するデジタル信号に変換した場合、1つの信号波形のデューティ比は正しく50%ではなくかなりの「ゆらぎ(誤差)」があります。その為に山の長さが長かったり、逆に谷の長さが長かったりと計算値の長さとは異なる場合が多く「山だけ」「谷だけ」では正確な測定に向いていません。(デジタルデータを取り出すなら別のロジックで1か0かが判定できれば良いのでそれでもOKなのですが…)
 本機では信号の「周波数」を知りたいわけですので、アナログ的なゆらぎでも誤差の少ない「山から谷までの区間全部で一周期」を測定することにしています。


■ 判定理論とプログラム

 JR方式/関東私鉄方式での空線信号の検出周波数については上の項で必要なものが出てきました。

● 周波数検出

 JR方式/関東私鉄方式の両方に対応する為にはどのような周波数を検知して、その検知結果をプログラム処理するのに必要な情報をここで改めて整理してみましょう。
 これが今回検知する周波数の一覧です。結構凄いでしょ(^^;

 もしこれをハードウェアで作るとなると、周波数検知IC 567を必要な周波数ぶん6個並べて個別に周波数検知を行い、その出力信号を別のロジック回路で判定させたり保持させたりとかなり大変な回路になってしまうでしょう。
 しかし本機ではPICマイコン(12F629)を使用することで、周波数の判別やその後の論理処理などを全て右の写真の小さな8ピンICで行います。

 さて、周波数検出ですが、「2280Hz」と数字では出ていても実際にはアナログ信号のゆらぎ・誤差などで正確にその周波数が検出されるわけではありません。
 その為に本機では検出された周波数を上記のどの信号か判定するプログラム部分で「ゆとり」を持たせ、ある幅まではその信号であると判定させています。上の図の薄い色の部分が「ゆとり」の部分です。

 プログラムで入力波形から1つの波形の時間を計測し「2280Hz(に近い)周波数だ!」と検知しただけでは正しく空線信号などを検知していることにはなりません。
 通常の音声波形の中には様々な周波数成分が混ざっていて、通話中の人間の音声にも2280Hzという周波数成分は含まれています。
 また無音中に聞こえる「サー」というホワイトノイズには「全ての周波数成分が含まれている」とされています。

 ですので単純に「ある信号に合致する周波数の音を検出した」では無く、「それが一定期間続いているから、何らかの意味を持つ信号が送出されている」という判断をプログラムで行います。
 本機プログラムでは「連続して約100msecに達する」事を判定基準として、各信号種別毎にカウンタを持たせてそれが約100msec続いた時に達するカウント値になれば「ある信号を連続受信した」として次の『判定ロジック』に操作を受け渡します。

 これで細かなノイズ等による誤作動は取り除けます。
 しかしこれだけではやはり音声中に含まれる似た周波数成分の音での誤反応や、「NEC方式の通話中に割り込んで流れる2〜3回のMSK信号(結構邪魔)」でも音声出力をOFFしてしまって使い勝手の悪いものになります。

 そこでせっかくPICマイコンでプログラムを作るのですから、この周波数検出部とは別に「状態判断プログラム」を作ってやって、電子頭脳を持ったインテリジェントな空線信号キャンセラーにしてやる事にしましょう。

● 状態判定

 状態判定部では、周波数検出部で検出した「信号種別」を元にもう1つ別の「判定カウンタ」を用意して「ある周波数情報が一定期間(回数)続いて、はじめてその状態(空線とか通話とか)であると判定してモードを切り替える」という動作をします。

 単純に「空線信号の周波数だよ」ではなく「空線信号が一定期間続いていて、他の信号では無いよ」という判断を行うわけです。

 また、1つの周波数条件が連続せずに、別の周波数条件と交互になったりした場合は「不安定」としてカウントをリセットしてまたはじめからカウントし直すことで、ノイズやごく短い他の周波数を検出した際にそれを誤カウントしてしまう事を防いでいます。
 安定して1つの周波数条件が続かない場合は以前の判定を保持したままにします。

 これで移動運用などでの少し長い受信音の乱れ(ノイズ)などによる誤判定はほとんど減らしてしまえます。
 またNEC方式の通話音中に割り込むMSK信号音での誤OFFや、JR通話中に列車側から割り込んで送信された中央呼音(2300Hz)を空線信号(2280Hz)と誤認識して出力をOFFにしてしまう事もほとんど回避できます。(信号受信が長い場合は回避できません)

● 路線判定シフト

 更に『気の迷い』的な「ここは突っ込んで作ろう!」機能として、「JRシフト」と「NECシフト」という二種類の論理的な動作モードを組み込んでいます。

 JR無線を受信している時には基本的には「NEC空線信号は聞こえない」はずですので高感度で判定すると通話音声中の似た周波数成分をすぐに検知して「誤作動の元」になってしまいます。そこでJRの空線信号を受信した時には「JRシフト」として誤って音声中のNEC空線信号と似た周波数を検出しにくくします。逆にNEC空線信号を受信した場合にはJR空線信号は検出しにくくする事で誤作動を防止します。
 あくまで「検出しにくくする」だけで常に両方の検出プログラムは動作していますので、JR無線を聞いていて乗り換えてNEC無線を使用している私鉄に乗って受信機のチャンネルも変えた(もしくはその逆)という場合にでも自動的に検知してモードが切り替わります。

● 電源ON後、最初はニュートラルモード(どちらでも無い)です
 JR判定/NEC判定は規定値でおこないます。
 JR一斉呼/JRテスト信号の検出は行いません。純粋に「空線信号」待ちです。

● もし「JR空線信号」を受信したら「JRシフト」に変更します
 JRC空線信号を受信した場合の判定を速くします。(NECシフトからの復帰)
 空線状態から抜けて通話状態になるのは「JR一斉呼」信号を受信した場合は即時に、また「その他(通話音声)」を連続受信した場合のみです。
 通話中のNEC空線信号と同等の周波数成分での誤作動防止の為、NEC判定は長時間判定とします。JRシフトに切り替わっている状態でNECの無線(空線信号)を受信した場合、切り替えに数秒必要とします。
 JR一斉呼/JRテスト信号の検出は「空線信号を受信して音声出力をカットしている期間」のみ行います。

● もし「NEC空線信号」を受信したら「NECシフト」に変更します
 NEC空線信号を受信した場合の判定を速くします。(JRシフトからの復帰)
 空線状態から抜けて通話状態になるのは「その他(通話音声)」を連続受信した場合のみです。(多少の頭切れがあります)
 通話中のJR空線信号と同等の周波数成分での誤作動防止の為、JR判定は長時間判定とします。NECシフトに切り替わっている状態でJRの無線(空線信号)を受信した場合、切り替えに数秒必要とします。
 JR一斉呼/JRテスト信号の検出は行いません。
※ 断続モード対応について
 NEC方式採用路線のうち一部では、空線信号が連続ではなく断続的に送信されています。(地下鉄南北線で確認)
 断続型では通常のNEC方式の検出では正しく判断ができませんので、オプションスイッチをONにすることでNEC方式の受信プログラムは「断続型対応」の動作をします。
 この場合は通常のNEC方式の判断より全体的に甘い目になり、ノイズなどに弱くなりますので断続型の路線で受信される場合以外はオプションスイッチは必ずOFFの状態で使用してください。
 尚、頒布用の完成品ではオプションスイッチはとりつけていません(スイッチはありません)。必要な方のみご自分でスイッチを購入してとりつけてください。

●その他(通話音声)検出について
 一般的な空線信号キャンセラーとは異なり、「空線信号が切れた」(検出できなくなった)ですぐに音声出力をONにするのではなく、「その他」と区分する上記それぞれの意味のある周波数成分以外の信号(グレーの範囲)をカウントして「音声通話・または無音中のわずかなノイズ等による何らかの音声信号」を検出してそれが連続した場合に「空線状態では無い」と判定します。
 受信状態が悪く空線信号とノイズが交互に検出される場合などは各信号を検出した時点でカウンタがリセットされますので状態を変更するまでのカウントアップが行われずにモードは切り替わりません。かなり長いノイズで無い限りはノイズが原因で空線信号受信中に通話中モード(音声出力ON)にはなりません。
 これによりノイズや受信状況での瞬間的な断続が起こることなどを防止しています。
 音声通話が行われている期間は人間の音声の特性から「その他」カウントが非常に早く進みますので確実な判定が行えます。

 ただこのシフト機能の弊害(副作用?)として、JR無線を受信(JRシフト中)していて通話中に長い「MSK信号に似た音」を受信した場合、どうしても「私鉄空線」と判断はしてしまいます。JR無線の中で長時間の無音(誰も喋っていない)期間に起こりやすく、もしJRの通話受信中にMSKと判定するとモードはNECシフトに切り替わります。そのまま通話や無音が続いた場合は「通話」と判断して音声出力は再度ONになりますが、モードはNECシフトのままなので通話終了後にJR空線信号を受信しても音声カットまで数秒かかります。(私鉄モードで遅延時間を延ばしているため)
 受信機の音声回路の特性や、路線毎の送信機の特性、またJRの指令室内の雑音状況にもより無音期間中に誤ってMSKと認識するかどうかは条件次第のようですが、長時間指令員が黙ってしまうような場合は誤作動する可能性があります。
 逆に私鉄無線を聞いていてNECシフト、通話中にJR空線信号と誤判断する事はほぼ確認されていません。(テスト環境では条件が揃わないだけかも)

 回避策としては、JRシフトからNECシフトに切り替わった場合、逆にNECシフトからJRシフトに切り替わった場合は一定時間(10秒以上くらい?)はニュートラルモードに戻して各判定を高速で行うようにしてしまう等、プログラムの追加が考えられます。
 今回公開しているプログラムVer1.0では対応はしていませんが、後日バージョンアップする場合があります。

● ジェネラルフロー

 「インテリジェント空線信号キャンセラー」のプログラムフロー全体図は右のようになります。

 実際にはもう少し細かく分かれていますが、ここでは全体の流れを把握する為に簡略化したフローチャートを示します。

 電源が入るとPICが動作を開始し0x000番地からプログラムが実行されます。
 まず最初にPIC本体の機能や動作指定を行って今回の回路用に動くよう初期化します。
 続けて今回のプログラムで使用する変数を初期化したりパラメータの初期設定を行います。

 初期設定の段階で「ハードウェアが壊れていないか?」を確かめるのも重要な要素で、本機ではLEDが3個付いていますからこれが壊れていなくて正しく点灯するか3個を順番に点滅させる事を3回繰り返します。これを「ランプテスト」と言います。
 ランプテストを行う事でLEDが玉切れになっていないか確認できますし、PICのプログラムが正しく起動した事を使用者に知らせる事ができます。

 その後にニュートラルモードで受信信号の周波数チェックを開始します。
 動作開始時(電源ON時)は音声出力はONになりますので、受信機が繋がっていて空線信号を受信していたら本機の出力に繋がったスピーカーなどから空線信号音が聞こえます。
 これも動作テストの一環で、ここで音声が聞こえない場合は音声スイッチング用のトランジスタまわりが故障しているとわかります。
 音声はこの後の「空線信号判定」が正しく行われるとカットされますので、そこでまたプログラムの正常動作と音声カット回路が正常であると確認できるわけです。

 PICマイコン(や、工業用の組み込みマイコン)の場合は豪華な表示装置(CRTディスプレイや液晶パネル)などが付いていない機器に入れてしまう事が多いので、このような方法で故障個所の判断が簡単にできるように仕様を考えるのもハードウェアに密接するプログラマのお仕事の1つです(^^;

● 周波数測定プログラム

 周波数測定部はPICのタイマー機能・割り込み機能は使わずに単純にプログラムでパルス幅をカウントします。

(1) パルスが下がるのを待ちます。
 立ち上がりの瞬間からカウントを開始するためです。

(2) パルスが立ち上がったらカウンタをリセットして次の立下りを待ちます。

(3) 下がったらここで半分。(デューティ比が50%ならちょうど半分でも…)

(4) 立ち上がりの瞬間を待って、その時点でのカウント値はパルスの一周期×8μ秒。
 これで次の周波数判定へ進みます。

 各カウントループ中でカウンタがオーバーフローしてしまった場合は「無音」または「測定範囲外の低周波」を検出したとして周波数判定部を飛ばして「その他 PC(パルスカウンタ)」に進みます。

 この方法では周波数測定を終えて周波数判定に進んだ場合は必ず入力パルスは上がっている状態で、そこから後の判定などを終えて再度この周波数測定ルーチンに来た時にはパルスはまだその周期の山の部分です。
 従ってそこからこのルーチンで立下りを待ち、立ち上がった所からのパルス幅を検出することになりますので実際にはすべての入力パルスのうち半分のパルス数だけを検査していることになります。

 ハードウェアのタイマー/カウンタ機能などを使えば各パルスの立ち上がりまたは立下り毎の間隔を必ず毎回測ることができますが、今回はそこまで厳密に調べる必要もなく、タイマーは使用しないというルールで測定ルーチンを考えていますのでこのような方法になっています。
 単純にこの後の「100msec続いたか?」で数える回数(閾値)を半分にするだけで済むのですから。
 あまり良い例ではありませんが、「何事もマニュアル通りにしなくても良い」という見本でしょうか(^^;

● 受信状況判断プログラム


★ トーン信号識別ロジック
 単に一回「xxxxHzのパルスを見つけたよ!」だけでは「今受信している音声信号はxxxHzの連続音だ」とは判断できません。
 そこで「パルス数カウンタ(PC)」というカウンタを用意してやって、見つけたパルスの数をカウントして「一定の数だけ連続したらその周波数の信号音だと認めよう」という判断ルーチンを作ります。

 パルス数カウンタ(PC)は
PC_NEC_MSK…… NEC MSK タイプのパルスをカウントする
PC_JR_AKI …… JR空線信号 タイプのパルスをカウントする
PC_JR_YOBI…… JR一斉呼出 タイプのパルスをカウントする
PC_JR_TEST…… JR試験良好 タイプのパルスをカウントする
PC_OTHER……… その他(通話音や無音) タイプのパルスをカウントする
の合計5種類を用意しています。

 周波数判定部でカウントされたパルス幅カウンタの値を元に、「そのパルス幅はどのタイプのパルスと合致する?」かを順次判定して、合致したパルス数カウンタ(PC)を+1します。

 各パルス数カウンタ(PC)には「100msec連続するのに必要な時間」が周波数の逆数で求められますので、その数値に達した時点で「100msec連続した」と判断できるわけです。

 但し、その種類のパルスだけ数えているのならその回数で100msecで正しいのですが、間にノイズや不安定な入力で他のパルス幅のものが混ざっていたらどうなるでしようか?
 それぞのカウンタ(PC)がバラバラに数値をアップさせてゆき実際の100msecを過ぎてもどのカウンタも閾値に達していない状況になりますね。
 でも大丈夫。
 ここでは別に「絶対100msecごとに判定を下せ!」という命令は誰からもされていないので、「バラバラになった場合は『真っ先に閾値に達した者の勝ち!』ルールである」という事にして、ノイズ混じりでもなんでもいいのでどれかが閾値に達するまでに最もその存在確率が高かった物をその期間の信号とする。という判断にしています。
 説明しやすいようにこれを「徒競走方式」・・・とここでは勝手に命名します。

 正確なタイマー割り込みで100msec等に時間を区切って、その時点で5種類の各PCに対して「存在確率計算」をして出てきた数値(%)で最も高い物を勝ちとする・・・という非常に論理的かつ教科書的なルーチンでも良いわけですが、タイマー割り込みなどを使わずに徒競走方式で判定しているわけです。
 タイマー方式だと「5人のランナーが20秒間に何メートル走れるのかを競う。20秒後に最も長距離走った人の勝ち!」というルールになります。「一定時間のうちに」というのは良くプログラムで使用される判断方法ですね。
 対して徒競走方式は「5人のランナーが100メートルの距離を走る。最も先にゴールラインを超えた人の勝ち!(走るスピード、ゴールするまでの時間はその人達次第…)」というルールになります。
 どちらも速く走った人が勝ちという部分では同じですね。(人の場合は持久力等で違いが出るかもしれませんが、タイマー式の判定時間を徒競走式のゴール時間とほぼ同等にしてやれば違いはほとんど無くなります)

★ モード判定ロジック
 こうして約100msecおきに「その期間はどのタイプの信号を受信しているか」が決められますので、次に「その信号がどれだけの時間続いているか」を判定します。

 実はノイズ等が少なければこのパルス数カウンタ(PC)だけでの判定で音声出力をON/OFFしてもかなりイイ感じに動作します。
 ちょうどトーン検出IC NE567の出力くらいの感じなのでこの出力に多少のCRタイマー回路などを付けて遅延させてやればそれでも空線信号キャンセラーはできると思います。
※ プログラム・ソース中でEQU設定値を書き換えると「モード判定ロジック」部を飛ばして「単純に検出トーンでモードを切り替える動作」にもなります。アセンブル環境をお持ちの方はその部分を変更したPICを焼いて試してみるとLEDが音声入力にあわせてパラパラと切り替わったりする様子を確認できます。(まぁ、動作試験用なのですが…)

 しかしやはり単なるトーン検出だけではノイズに弱かったり、人間の音声中に含まれる各トーンに似た周波数の音にも反応してしまってブツブツと途切れることもあります。

 そこでこのトーン検出状態がどれくらい継続しているかで「正しくモード切替(判断)をする」というプログラムを作って「知能を持った?」(は、少し言い過ぎ)高性能な空線信号キャンセラーにしましょう。

 認定カウンタ(CT)は
CT_NEC_MSK…… NEC MSK タイプの連続時間をカウントする
CT_JR_AKI …… JR空線信号 タイプの連続時間をカウントする
CT_JR_YOBI…… JR一斉呼出 タイプの連続時間をカウントする
CT_JR_TEST…… JR試験良好 タイプの連続時間をカウントする
CT_OTHER……… その他(通話音や無音) タイプの連続時間をカウントする
の合計5種類を用意しています。

 また各モードを認定するカウンタの閾値(どれだけ連続したら認めるか)は「可変」にしています。
 これは上のほうで説明したJRシフトNECシフト時にノイズ・誤作動防止の為に関係無いモードの検出を遅らせることができるよう、モード切替に応じて閾値ほ自由に変更できるようにするものです。
JR_B_NINTEI …… JR-B の認定判定回数を可変にする為
NEC_NINTEI …… NEC MSK の認定判定回数を可変にする為
OTHER_NINTEI……その他 の認定判定回数を可変にする為
の合計3種類を用意しています。

 これらの識別ロジックをフローチャートにすると右のようになります。

 文章で書くとややこしいですが、図にすると簡単ですね(^^;

 右のフローチャートは「JR空線」の部分ですが、実際はほかに「JR一斉呼」「JR試験良」「NEC MSK」部や「その他」部などがほほ同じような内容でプログラム中には並んでいます。

 それぞれの違いは各カウントの閾値やモードが確定した後に他モードのカウンタの閾値を書き換えるなど、そのモードに特化した部分がそれぞれ異なります。

 また「JR一斉呼」と「JR試験良」はモード判定が「JR空線」となっていて音声OFFの期間中のみしか判断しないようにもなっています。

 ほか、実際のプログラム・ソース中にはここで紹介していない細かなルーチン等もあります。

 JR/NECシフト切替(相手の検出を遅らせる書き換え機能)は最初に設計しはじめた時には考えていなかった(それぞれを検出するだけ)のですが、各判定カウンタの満了判断値を自由に変更できるようにしてテストを重ねているうちに、「JRの通話中にNEC判定する確率が多いなぁ」等と実際に使用した際の不具合を見ながら思いついたもので、誤作動を少なくする為の改良を重ねているうちにここにたどり着きました。
 写真は開発・テスト中の様子です。
 8ピンPICではなくピン数の多いPICに液晶パネルを繋いだ汎用開発用ボードとブレッドボード上に仮組みしたアナログ回路を繋いでテストを行っています。

表示は判定カウンタ1桁(英文字)+検知カウンタ3桁
| NEC空線 | JR空線 | JR試験良 | その他 |
 NEC空線信号を受信している様子です。(下の文字は判定結果表示)
 [JRテスト]と[その他]の検知カウントも少し動いていますね。

 JR空線信号を受信している様子です。
 [その他]の検知カウントが少し動いていますが他は0です。ノイズが増えると[その他]が増えます。

 JR試験良好信号を受信している様子です。受信状態が悪くちょっと音がワウっているので周波数外れで[その他]カウントも少し上がっていますね。

 通話中「その他信号」の検知結果です。その他がガンガン回ります。
 近い周波数の音を検知して空線信号の各カウンタもちょろちょろ回りますが判定には至りません。


 だいたいプログラムの仕様も決まり、テストボードでのバグ取りも終わった所で目的の8ピンPIC 12F629に移植して本番回路の作成です。


■ 回路の設計

 今回の回路図です。
▼回路図をクリックすると拡大表示

● 音声入力アンプとデジタル化
 OPアンプ(オペアンプ)LM358を使用した5倍アンプ(左側・反転増幅回路)で音声信号を増幅します。
 ほとんど聞こえるか聞こえないか程度の小さな音量から、スピーカーが音割れする程度の音量まで対応します。入力音量調節の必要はありません。

 LM358の右半分(コンパレータ・反転出力回路)で音声信号をPICマイコンに受け渡す為のデジタル信号に変換しています。

● PICマイコン
 MICROCHIP社PIC 12F629を一個使用します。
(他の8pinタイプのPICでも良いですが、今回はこれ)
 複雑な機能は全て「プログラム」という目に見えない部分で処理してしまいますので、回路図中ではPICまわりは非常にシンプルです。
 クロックも内蔵の4MHzオシレータを使用していますので外部に発振子をとりつける必要はありません。内蔵オシレータ程度の精度でじゅうぶんです。

 プログラムは本ページで公開しています。ご自分でPICライターをお持ちの方はHEXファイルを、プログラム内容を書き換えて使用されたい場合にはASMソースファイルをダウンロードしてください。
 尚、プログラムの著作権は放棄していません。個人で遊ばれる為に使用される場合は無償ですが、販売用途・また営利使用される場合は必ずご連絡ください。

● LED表示
 LEDは三個使用します。
 「私鉄」「JR」「通話」の3モードをそれぞれ表示します。色はご自由に!
 「JR」は試験良信号を受信中は点滅します。
※ 順番を変えたい!とか私鉄とJRの区別無く一個の「空線」LEDにしたい!などの場合は適宜プログラムソース中の対応ビット設定を書き換えてアセンブルしてください。

 モード表示用なので「同時には一個しか点灯させない」というルールで電流制限抵抗は一個にしています。
 もしプログラムを改変して複数個同時に点灯させる場合は回路図も書き換えてください。(個別に抵抗を)

● 音声キャンセルスイッチ
 音声を出す/出さないを切り替えるスイッチ部はトランジスタによるスイッチにしています。
 トランジスタのベース電圧の有無でアンプ動作をON/OFFする基本的な回路ですが、単純にベース抵抗をPICマイコンに繋いだだけではON/OFF時に「ブツッ!」とか「ボッ!」という感じのかなり大きなノイズが発生してしまいます。
 これは音声出力OFFの時は出力は約0Vになっていますが、ONになるとトランジスタのコレクタの電位(音声入力から来ている)に急に上がるためにスピーカーに大きな音を発生させる電気信号が流れるからです。
 スピーカーを壊してしまうような大電力は受信機のイヤホン/スピーカー端子からは出ていないものの、かなりの耳障りですので積分回路を挟んでON/OFF時の電圧変化を滑らかにしています。

● 電源部
 PICマイコンは約3V〜5.5Vで動きますし、LM358も3V〜30V程度と電源幅には余裕があるのでニッケル水素充電池×4本の最低4V程度から定格外ですがまぁPICが壊れない範囲の6Vくらいまでなら本回路は動作します。

 受信機が固定機で「電源出力を持っている」とか、ハンディ受信機だけど家で固定運用するのに「安定化電源を繋いでいる」など、空線信号キャンセラーも受信機に繋いで24時間運用するものとして、本機の電源部は三端子レギュレータ78L05で直流7V〜15V入力型としています。

 電源装置が無い場合はDC 9〜12V出力のACアダプターを回路図通りの電源部に繋ぐか、78L05を取り払って5VのACアダプター(秋月で600円の奴とか、携帯電話のACアダプターとか)で直接5Vを与えてやるなど、作られる方次第です。

 消費電流は10mA〜20mA(状態による)程度ですので、単三電池×2本からDC/DCコンバータで昇圧してもほとんどの昇圧回路でじゅうぶん動作させられるでしょう。
 持ち運び用の小型ケースに組み込む場合は単四電池とDC/DCコンバータでも一日くらいは連続動作させられそうです。

● 電源スイッチと音声切り替えスイッチ
 空線信号キャンセラーの定番ですが、電源スイッチを切った場合は回路中の音声ON/OFF回路が働かなくなるのでスピーカーから音声が出なくなります。
 それでは不便ですので音声出力を「電源ONの時はキャンセラー回路に」「電源OFFの時は入力をバイパスさせる」為の連動スイッチにしておきます。

● 入力端子・出力端子
 回路図では単純に「音声入力」「音声出力」としてそれぞれ1つの端子で書いていますが、単に受信機とスピーカー(イヤホン)の間に接続するだけではなく「スピーカーで聞きつつ、録音機に繋ぎたい!」などの希望もあるでしょう。

 ここでは一番基本形の回路図を示しただけで、そのあたりの拡張・改造は作られる方のご自由に行ってください。

 また「通話時にリレーを働かせて、他の機器(テープレコーダー等)を動作させたい!」等の場合はPICの2番ピン(音声回路用出力)や5番ピン(通話LED出力)などのHレベル信号を拾ってトランジスタ等を動作させる回路を追加すると良いでしょう。
 リレーなどを使用すると消費電流も多くなりますので電源部の三端子レギュレータは定格100mAの78L05では電流不足になる事も考えられます。改造する場合は電源容量なども含めて回路を考えてください。


■ 基板設計と製作

 「必ずこの通りに作らなければならない!」というわけではありませんので予めご了承ください。今回製作した基板の一例です。
 専用基板を使用しなくても、この程度の規模の回路ならユニバーサル基板(穴空き基板)の上に組み立ててもすぐにできてしまいます。

■部品面
■パターン面

 基板に部品を実装した状態は右の写真のようになります。
 LEDを曲げているのはケースに入れた時に前側にLEDを出す穴を空けているためです。ご自分のケースにあわせて実装してください。

 PICはICソケットを使用して載せていますので、プログラム変更・バージョンアップの際に簡単に抜いて交換できます。

 基板サイズは5cm×3cmとコンパクトですので、色々なケースに簡単に入れる事ができるでしょう。

● 部品表



インテリジェント空線信号キャンセラー 部品一覧

写真 部品名 詳細 単価
(参考価格)
PIC
12F629-I/P
 PICマイコンです。
 お店で販売されている物はプログラムされていません。
 プログラムを書き込む必要があります。
168 円
LM358N  2回路入りOP AMP 40 円
ICソケット
8ピン
 8ピンのIC用ソケットです。
 PICマイコンの抜き差し用に使用します。

 LM358にも使用するなら2個購入しましょう。
25 円

2個なら
50円
78L05  三端子レギュレータです。
 定格 5V / 100mA
※ 7805や78M05とピン配置が逆です!
30 円
2SC2120  Ic = 800mA のNPNトランジスタです。
 500mA以上のNPNトランジスタなら他のものでも結構です。
25 円
LED
赤・黄・緑
足の長いほうが+
 直径5mmのLEDです。
 各モード表示用に3個使用します。
 色はお好みでご自由に!
21円×3
63 円
抵抗  1/4W または 1/8W のカーボン抵抗
 誤差 5%(金) または 10%(銀) 品 (各5円)
30 Ω  [橙-黒-黒-金]   ×1本
160 Ω  [茶-青-茶-金]   ×1本
200 Ω  [赤-黒-茶-金]   ×1本
330 Ω  [橙-橙-茶-金]   ×1本
1K Ω  [茶-黒-赤-金]   ×1本
10K Ω  [茶-黒-橙-金]   ×2本
20K Ω  [赤-黒-橙-金]   ×1本
100K Ω  [茶-黒-黄-金]   ×1本
合計9本
9本で
45 円
アルミ電解
コンデンサ

足の長いほうが+
100μF / 16V  15円×2本= 30円
220μF / 16V  20円×2本= 40円
合計4本
4本で
70 円
積層セラミック
コンデンサ
0.1μF / 50V  21円×4本= 84円
合計4本
4本で
84 円
スイッチ  トグルスイッチ / 2回路・2接点
 写真はミヤマ MS-245

※ ケースにあわせてご自由に
155 円
3.5φPHONE
ジャック
 3.5φモノラルPHONEジャック (一個 80円)
 スピーカーを内蔵する場合は必ずスイッチ機能つき
※ ケースにあわせてご自由に
80円×2
160 円
2.1φ電源
ジャック
 2.1φのDC電源ジャックです。
※ ケースや使用する電源にあわせてご自由に
60 円
  ケース  ケースはお好みにあわせて 100〜 
500 円
 その他、ユニバーサル基板、配線材(ケーブル)、ハンダ、ビス類など適宜
(パック品の一部を少しずつ使用するものとしての費用)
約 300 円
合 計 1300〜1800

● プログラムのダウンロード


 こちらから「インテリジェント空線信号キャンセラー」プログラムをダウンロードできます。

インテリジェント空線信号キャンセラー PICプログラム

HEXファイル ターゲット: PIC 12F629
お手持ちのPICライターでそのまま書き込めます
AKISEN_101.HEX
プログラム 全ソース ターゲット: PIC 12F629
アセンブラ: MPASM
AKISEN_101.asm
※ 「右クリック」→「対象をファイルに保存(A)」でファイルを保存してください。
※ ソースは TAB = 4です、4TAB以外では表示が崩れる場合があります。
  インターネットのブラウザ、メモ帳などのソフトでは表示が崩れます。
※ プログラムの著作権は放棄していません。ダウンロードしたプログラムを個人で遊ばれる為に使用される場合は無償ですが、販売用途・また営利使用される場合は必ずご連絡ください。
更新履歴
Ver1.00 2008/4/10 公開
Ver1.01 2008/4/14 NEC方式の識別をより良くなるようパラメータの一部変更
 PICプログラマー/ライターをお持ちで無い方の為に「プログラム書き込み済みPIC」を頒布いたします。
 本ページの「専用基板、完成基板、組み立て完成品の頒布 」の項をご覧下さい。

【お知らせ】 記事公開から3ヶ月経過しましたので、頒布は終了しました。

● 製作例


● 携帯用/固定用兼用オールインワン型
 スピーカー・録音出力端子を装備し、電源は単四電池×4本または外部入力の両用と「持ち運びできる」「固定でじっくり使える」の両方に使えるよう最初に作ったタイプです。今でも動作試験機を兼ねています。

 電池を単四×4本とした事でサイズが少し大きくなってしまったのが難点ですが、必要な機能は全て盛り込んでいるので当面は私の使用するメイン機となりそうです。

● アダプター型
 受信機と外部スピーカー(または録音機)との間に挟むタイプの「アダプター型」です。
 出力端子は1つだけの基本回路図通りの製作です。

 入力端子は3.5φジャックではなく、直接ケーブルを出して先に3.5φプラグをつけています。
 どうせ受信機のイヤホン端子に繋ぐのでここをジャックにして中継ケーブルを別途用意するくらいなら、直づけケーブルにしておいても不便ではありません。
 ケースの上側に少し余裕がありますので超小型スピーカーを組み込んでしまうのも良いでしょう。

 このケース(タカチSW-75)は実は100円ショップダイソーの「耳元スピーカー」と幅がちょうど良く、スピーカーを上に置いて使えます。
 スピーカーを載せるとこんな感じになります。

 まるで誂えたようにぴったりですね。

 このままスピーカーを両面テープで固定してしまっても良いくらいです(^^;
● スピーカー一体型
 悪ノリして作ってしまったのがこちらの「スピーカー一体型」です。
 どうせケースを買って小型スピーカーを内蔵させるなら、元からスピーカーのほうに回路を入れてしまおう!という手抜き方針ですね(^^;
 今まで作ったいくつかの空線信号キャンセラーもこういう感じにスピーカーに内蔵してしまいました。

 本当は白いスピーカーに入れたかったのですが最寄のダイソー数件を回りましたがどこも黒しか売っていませんでした。(上の写真の白いのは別の用途で使っているので流用は…)
 仕方なく黒を買ってきて工作しはじめたわけですが、どうも黒いケースからLEDの頭がニョキっと出ているのもおかしな感じなのでLEDは奥に隠してしまって、表面に貼るシールのデザインを透過型照明タイプにしてみました。
 明るい部屋ではちょっと見づらいですが、黒いボディとあいまってちょっとだけ高級感が出ていませんか?


■ 専用基板、完成基板、組み立て完成品の頒布

 感光基板で専用基板を焼きましたので若干枚あまりが出ました。
 専用基板のご要望が多いので追加製作しました。
 PICにプログラムを書き込む環境が無い方の為に「プログラム済みPIC」の頒布も行います。

 また製作例として組み立てた完成品も今回いくつかお分けすることができます。
 実費でお譲り致しますのでご希望の方は頒布情報ページよりお問い合わせください。

※ ケース入り完成品は全てお譲りすることができました。

[ 頒布情報ページはこちら ]

*** お知らせ ***

 現在は2008/7/7製作ぶんの「専用基板」「PIC」の頒布を行っています。
 残りわずかですので品切れの際はご容赦ください。

 尚、次回製作の予定はありません。


■ まとめ

 「インテリジェント空線信号キャンセラー」の製作はいかがでしたでしょうか。

 JR方式/私鉄方式(NEC方式)の両対応・自動認識機能を持った空線信号キャンセラーというものは世界初(?)なのではないかと自負しています。

 ノイズや受信状況の変化にもかなり強く、プログラム中のパラメータを自由に変更して頂く事で作られる方オリジナルの個性をもった空線信号キャンセラーを組み立てることもできます。

 また「自分は東京には住んでいないので関東私鉄方式は不要だ」という方はNEC方式の識別部をカットしてよりJRに特化した空線信号キャンセラーとする事も可能です。
 プログラム冒頭の
; **** 禁止動作等の設定
; 禁止動作設定 bit 0:NEC判定禁止, 1:JR判定禁止 7:ロジック判定禁止
INH_SET_dataEQUB'00000000'
※ 改行位置を少し変えてあります
部分を
INH_SET_dataEQUB'00000001'
にすることで「JR専用」になりますし、
INH_SET_dataEQUB'00000010'
にすることで「私鉄(NEC方式)専用」になります。

 またこの設定はメモリーに書き込んでから各ルーチンで参照していますので、プログラムの一部を変更すれば、オプションスイッチを現状の「断続型対応」機能ではなく「JR/NEC方式切り替えスイッチ」とする事もできますね。自動識別ではなく任意に方式を切り替えられる空線信号キャンセラーとする事も可能です。

 いくらPICプログラムで状態判定や識別を行っているとはいえ、元の音声入力があまりにもノイジーであったりレベルの変動が激しかったりした場合には空線状態を判定できずに「通話」としてしまう場合があります。
 プログラムの判別できない信号にはさすがに無力ですので、ある程度はちゃんと空線音として聞こえる範囲で使用してください。プログラム式とはいえ神様のように万能ではありません。

 空線信号キャンセラー以外にも音声入力中の様々なトーン信号を検出する用途に応用が利きますので、PICを使って音識別をする技術のひとつの方法として役立てば幸いです。

[後日談]
 ・・・ということで、見た目はほとんど同じ(シールが違うだけ)でプログラムだけ変えた『某市消防・火災指令選択受信装置』です。
 消防無線というと、火災でけではなく人命救助や交通事故、その他ボヤや危害の排除まで様々な消防活動の内容が無線で連絡されますが、消防団員のように火災以外の案件は関係無い人も居ます。
下の写真のほうは依頼されて作った
スピーカー一体型『指令通話選択受信装置』↓
 たいていの場合は消防団員には電話(最近は携帯電話)で出動連絡が来ますが、人によっては消防無線を受信して出動に備えている場合もあります。
 そんな場合でも夜寝ている間も無線機をつけていると自分に関係無い内容の通信で目を覚ます事もあるので普通は夜は無線は切って電話がかかってきたら出動というパターンが多いのですが、この装置があれば無線の電源は入れておいて「火災指令」があった場合のみ特定の指令喚起音を検出してスピーカーから音声を流します。
 電話がかかってくる頃には既に着替え中・・・という感じですね。

 その後はタイマー動作で一定時間後に音声をOFFにするモードと、音声を検出してタイマーを延長するモードの二種類の復帰モードを備えています。

 音声中からある特定のトーンやパターンを検出する基礎技術は既にインテリジェント空線信号キャンセラーに盛り込んであるので、こういう変更機種の製作時間は非常に短く済みます。
 鉄道無線用では使っていないちょっと別の手法で、火災トーンと似た救急トーンなどを排除する機能なども盛り込んでいます。

 テスト運用をしていますが某市の救急指令や警戒出動などには無反応、火災指令だけでうまく起動しています。
 ついでにプログラムのテストで地元の大阪市消防の指令トーンも検出できる機能も追加して、某市と大阪市両用で受信テスト中です。
 その後対応音を増やして、私の済んでいる地域の近くでは大阪市/東大阪市/大東市/八尾市/豊中市/茨木市(火災と警戒)/高槻市/吹田市(全ての一斉指令同一)/神戸市の各消防局・消防本部の火災指令トーンに対応させています。
 基本的には上記各消防のその他災害や救助出動トーンには反応しません。


 インテリジェント空線信号キャンセラーの回路図と全く同じもので、このように違う機能の装置も作れるという例でした。



「迷い箱」は各ページの記事用と、項目別の総合投書ページがあります。
このページの記事内容に関するご意見・ご質問、談話等はこのページに、
このページに直接関係の無い話題は↓の各項目別に投書してください。
回路・デンキ・改造 電池・バッテリー・充電器
ライト・ランプ・LED 一般「迷い箱」過去ログ

【投稿受付終了】
 本ページ(この記事専用)の『迷い箱』(投稿コーナー)の受付は終了しました。
 現在は過去の投稿の閲覧のみ可能です。

 いつも拝見させていただいています。この程度の少ない部品で、再現性の高い製作・実験すばらしいですね。この製作、緊急地震速報の受信に応用できないかなと思い投書させていただきます。
 緊急地震速報は、大きなゆれが来る前に、地震が来ることを直前に知らせるもので、放送などでも速報が伝達されています。例えば、NHKの緊急地震速報のページを見ると、番組の途中でも所定のチャイムのあと速報の内容が流されることが書かれており、そのページでもチャイム音が聞けるようになっています。
 今回の製作品で、このチャイム音が検出できれば、常時無音で待機でき、いざというときに、地震の揺れがくることを事前に知ることができる場合があり、無料で利用でき、一般の人々にも非常に有用ではないかと思われます。実現可能性があるか少々ご検討いただければと思います。
 なおこのようなものが実用化されていないか調べてみたところ、日本キャステムとアレクソンという会社で製品化されているようです。
青梅特快 様
お返事  いつもご覧いただきありがとうございます。

 まず結論から言いますとこの回路を使用しての緊急地震速報チャイムの検出回路化は可能です。
 中のプログラムを変えるだけですね。

 但し、今回掲載しているソースリストをちょっと書き換えたくらいではその用途には対応できません。
 その理由はNHKのチャイム音が多くの周波数成分を含んだ複合音声信号な為、単純にどれかのトーンを検出しただけではそのチャイム音だと判定できないからです。

 複合トーンや「チャイム音」のようなある特定音階の連続(つまり曲)を検出して判定する全く別のプログラムになります。

 消防無線の指令選択装置では「チャイム音」の検出専用プログラムも開発していますので、そちらのほうの技術を応用すれば地震速報チャイムに対応できる可能性は高いです。
(但しこちらのプログラムは用途が用途ですし、お金を貰って開発していますので非公開です)

 確かTVの「緊急放送信号(ピロピロピロ…というデータ信号音)」を受信して自動的に他の機器を動作させる回路の製作記事を公開されていた方がいらっしゃいましたが、あれは皆さん作られたのでしょうか?

 確かに本基板・回路は極限まで部品を少なくしていますので過去のほかのどの回路よりも製作は容易だと思います。(PICさえご自分で焼ければ)
 回路図はそのままでプログラムはHEXファイルのみ公開(ソースは非公開)として、記事を読まれた方が必ず組み立てる方の自己責任で使用するという事を守って頂けるのでしたらそのうちに製作記事を載せられるかもしれません。
 実際に地震が来て装置が運悪く作動せずに人や家財に損害が出た場合「お前の回路を信じて作ったのに動作しなかった、責任を取れ!」なんて言われるのはご勘弁願いたいですから。
お返事 2008/7/24
 
 小田急線をワッチするために作ってみました。
 オペアンプ部のフィードバックに0.01μを抱かせてノイズに強くし、PICマイコンは手持ちのF675を使いました。ソース変更はデバイス指定の修正だけでOKでした。出力はリレーにして、歯切れ良く動いています。
 すばらしいですね。NE567が不要というところに惹かれました。

 外ではVX3を使っているのですが、これで自宅でも快適にワッチできます。
BWT 様
お返事  独自の味付けで製作されていますね。

 オペアンプの1段目は部品を追加すれば各種のフィルタに展開可能ですので、用途によって最適なものに変えられると良いですね。

 12F675だとANSEL(9FH)が初期値[-0001111]でA/D or DIGITALポートが全てA/D入力に割り振られていませんか?(冒頭のデバイス設定の書き換えだけでは無理なはず)
 ANSELの設定を変えないとGP0〜GP2とGP4はアナログ入力になっていて出力に使えませんよね。内部回路図によるとそのままでもデジタル入力には使えるようですが。
 そのままだとGP0〜GP2に接続されているLEDが光らないと思うのですが、光ってますか?
お返事 2008/6/21
投稿  勝手ながら、いろいろとアレンジして楽しませていただいております。

>そのままだとGP0〜GP2に接続されているLEDが光らないと思うのですが、光ってますか?

 LEDはきちんと光っています。
 電源ON時のテストも正常です。(3つが順に光る)

 断続モード切替がおかしい感じで、ピンオープンなのに断続モードになっているようです。今はソースをいじって、断続モードと通常モードの設定値を同じにして逃げています。(悪い対処方法ですが)

 ポート種別宣言を正しく指定してやれば直りそうですね。アドバイスありがとうございます。確かにANSELは0x0000を指定してやらないとデジタルI/Oにならないようです。これは仕様書で確認していましたが、初期値はデジタルI/Oだと思い込んでいたのでそのままです。修正してみます。

 また、出力ピンのH/L極性を逆にしてみようとも考えています。リレーを使っているので、逆極性にしてあげれば、電源OFFでスルーになるようにできます。このままでもPNPでドライブしてやればOKですが。
BWT 様
お返事  12F675の回路図を見ると、GPIOのA/D,DIGITAL兼用ポートではANSELの設定に関係無く「TRISIO設定を出力にするとデジタル出力ポートになる」ようですね。出力バッファのトライステート制御信号を強制的にONにしてしまうのでA/D入力で使用していてもGPIO出力バッファのHかLの信号出力が繋がってしまい、もしアナログ入力回路に接続されているとショートして最悪はPICを破壊してしまう可能性があります
 もちろんA/D入力もGPIO出力がHなら3FFですし、Lなら0しか返ってきません。
 今まであまり深く考える事無くA/Dに割り振るポートはTRISIO入出力設定も「入力」で使っていましたから何も問題が無かったようですが。

 尚、「内部プルアップ回路」はA/D入力に割り振られたピンでは動作しないよう禁止される回路になっています。
 従ってA/D設定のままの入力ピンでは「断続モード切替がおかしい感じで」となるのは正常です。プルアップもプルダウンも無くオープンになっていますから入力が不安定になっています。

 12F675使いの間では「675では必ずANSEL設定を行う」が定説です。
 12F629の代わりに12F675を使用される場合はちゃんとANSEL設定を行ってください。

 リレーで電源OFF時にはスルーというのは空線キャンセラーではよく使われる方法ですね。
 今回の回路では電池電源で持ち歩く用にも使う為に作りましたので、ミュート中はずっとリレーのコイル電流を流しているのは電池を早く消耗させるので良くない方法として採用していませんが、固定機としてAC電源などから電源を取る場合は万が一停電してもスピーカーから音は出るので便利ですね。
 もちろん、停電しても受信機がバッテリー等で動いていれば・・・
お返事 2008/6/25
投稿  PIC12F675に対応すべく、「CLRF ANSEL」をTRISIOのポート使用設定のところに追加しました。
(ANSELのバンクがTRISIOと同じだったゆえ)

 断続モードスイッチのピンがプルアップされたのを確認しました。
 また、動作モードも仕様通りになったようです。

 貴重なソースを公開していただいているおかげで、手持ちのデバイスを活用できました。
 PICは触りだしたばかりで極めて簡単なプログラムしか組めないのですが、つくづくすごいチップなんだなと感心しています。
 また、このチップを活用されている方が沢山おられるのも納得できました。
 ありがとうございました。
BWT 様
お返事  PICはよく使われていますが、過去の普通のCPUに比べるとかなりクセがあるので使いづらい面もあります。(慣れればOKですが)

 書籍や過去の文献、ネット上の情報が多いので同様のマイクロコントローラの中では「誰でも容易に使える可能性が高い」という意味ではトップクラスの石なので、色々と遊んでPICの面白さを体験してみてください。
お返事 2008/6/27
 
 以前からこの手の制作物を手掛けてきました者です。

 最初はLCフィルター、567を経てVR-150→IC-R5で満足してました。
 でも、いろいろと不満を抱えていたところにこの回路と出会い、早速制作してみました。

 今まではICレコーダーを使用して録音していたため、2072でIC-R5のキャンセラーで音声のみを検出して、リレーをドライブしていました。
 さらに携帯音楽プレーヤーも聞きながら無線が入ったらL側だけ無線に切り替える回路も含むのでかなり複雑でした。

 この回路に切り替えて簡素化でき、IC-R5でキャンセルできなかった所でも安定してました。
 今までJR一筋でしたが、MSK機能も付いたことで私鉄もチャレンジしようと考えてます。

 でも、いきなり変な信号音を出し続けたり、MSKの信号音が気になるなど、今後の改良がぜひとも望まれるところもありました。
 今後ともぜひ安定化動作を目指して改良をお願いしたいところです。
 今回はとても有意義な回路をご提供いただきありがとうごさいました。
バッシブフィルター世代 様
お返事  記事をご覧になられて自作されたのですね。ありがとうございます。
 空線状況と連動してPICの出力が切り替わりますので、そういった音声切替や録音機の操作には向いていると思います。(ヘッドフォンの無線⇔音楽切り替え機は私も以前作りました、また作ろうかな?)

 1つの目的の為に最適化して作ってみましたが、まだまだ改良点はあると思います。
 NE567やRCフィルター型など色々と作られた方ならそれぞれに良い点悪い点が有ることはご存知だと思います。
 今回のPICを使ったプログラム式にもこの方式の良い点もあれば悪い点があると思います。

 「変な音」というのがちょっとどのような音か具体的にわかりませんが、回路自体は音を発する機能は無いので入力されている音に何か問題がある(ノイズが多いとか混変調でトーン音がへにょってるとか…)のでしょうね。それが変な音として聞こえているのだと思います。

 JRではゾーン(または送信範囲)の切り替え点の駅や線路上で空線信号音が「ピー」ではなく「むにょむにょむにょ…」のような感じに聞こえる場所ではほとんど無力です。「むにょ」のように人間にも明らかに変な音として聞こえなくて「ピー」が「ヒー」か「シー」のように聞こえる区間でもその音に乗っている周波数の高いノイズの為に「その他音声」と判定する時があります。後者はやはりOPアンプ部にローパスフィルターでも組んでやれば改善されるかもしれませんが「むにょ」対応は難しいですね。

 MSKの音がウルサイというのは他にも作られた方から要望が出ています。
 安定して動作するようにMSK信号が入感してからOFFになるまでの時間を長い目に取っているので、通話終了時のMSK信号音が「ギャラピー・ギャ」と2フレーズ目のはじめくらいまで聞こえるのが邪魔だとか。
 これを一瞬の「ピ」くらいでOFFにすることも可能です。しかしそうしていないのは本文中に書いている通りです。

 JRのほうも同様の考え方ですが(こちらは少し早くて0.5秒程度)、突然音も無くOFFにすると(実際はごく短時間は出ますが)空線信号を受信したのでOFFにしたのか誤作動でOFFになったのかが容易にわかるよう、少しだけJR空線トーン/MSK信号音を聞かせた後にOFFにするようにしています。
 JRのほうは下でも書きましたようにそのような動作が実際の車両に搭載されている本物の列車無線機と同じような動作になる…という意味もこめています。

 ですので、有名メーカー製のハンディ受信機の空線信号キャンセラー機能に慣れられた方には「切れるのが遅いのでやっぱり市販品と違って低性能ですね!」とか評価が低く感じられているようです。(そういう酷評も実際に使った方からの貴重な評価のうちですから)

 またこれは全くの想定外の使い方ですが「JR⇔私鉄をスキャンさせているとキャンセルしきれない事がある」というご連絡も頂きました。
 パラメータの変更で対応できるので近日中にそういう別対応のパラメータかプログラムも掲載したいと思います。

 基本的には1波受信に対してノイズ等に対して安定するようにという信号判定プログラムとJR/NECシフトでの強化を行っていますが、「JR/NECシフトのせいで」受信波をJRから私鉄に切り替えた時や私鉄からJRに切り替えた時にしばらく次のタイプの空線信号を判別するまでは遅らせてるのは記事中に書いた通りです。
 今回の製作ではJR⇔私鉄の切替は列車に乗っていてJRと私鉄間を乗り換える時に受信機のチャンネルを変更する、または家で1波固定受信をしていて気が向いたらチャンネルを操作して変える、という程度で考えていました。それなら無線機をいじってチャンネルを変えた時に数秒間切り替えた先の空線トーン/データ音が聞こえてから空線モードに切り替わりますから、これも今回の設計思想である「トーン音を検出したからOFFにしたと人間が確認できる事」に沿った動作と言えます。

 たぶん私の受信録音方法が「家に居ない間も自動録音させておく」という方法なので連続キャリアを強制スキャンさせる方法では通話があっても勝手にチャンネルが切り替わって正しく通話が行われているものを録音できないから、という考えで設計しているからでしょう。
 「連続キャリアをスキャンさせたい」という方は「無線機の前で聞いているから、何か音声(通話)が聞こえれば手動でスキャンを止めるから大丈夫!」と全然平気だそうです。それもそうですね(^^;

 世の中の受信方法は千差万別ですから、その全てに対して一台で通用する機械を開発できればそれこそ数万円でも売れる(?)装置になると思いますが、そんな夢の機械はまず無理ですからそれぞれのシーンに合わせて特化したもので対処するしかないですね。

 これから使用されてみて、変更点や改善点などがありましたらまたお教えください。
お返事 2008/4/30
 
 気の迷い様、通販して頂きました専用基板とPICで空線キャンセラーを完成させましたのでご報告させて頂きます。

 久しぶりに半田ごてを握って汗をかきながら組み立てにほぼ丸一日かかりました。抵抗を付け間違えたりミスもありましたが完成させて電源を入れたらLEDが点滅したのを見て一安心しました。

 まずは家でDJ-X3で受信出来るJR4チャンネルを受信してみてLEDが黄色になるのを確認しました。完成しても動作するか確認するまでは心配でしたが上手く行ったようです。家は駅から離れているので結構ノイズが多く指令の声も聞き取り難いんですけどザラザラ感の強い音の中から空線信号を判別出来るのには驚いています。なかなか通話が無く本当に通話が聞こえるのか不安でしたがやっと列車の通話が有ってその時にピーとスピーカーから呼び出し音がしてLEDが緑になった時にはやったー!って感動しました。

 私鉄無線は家では受信出来ないので通勤で乗ってる小田急で実験してみましたが電波を受信出来る場所まで行けばLEDが赤になりました。列車に乗っていると結構ノイズが多いんですが判別しています。昨日小田急に乗っている間に通話が無く通話確認は出来ませんでしたが連休明けに確認してみます。

 帰りに東海道線列車に乗っていたら運が良かったのか自分の乗っている列車車掌と指令で通話が有りまして、車掌室の様子を見ていると現用の列車無線機と気の迷い様の空線キャンセラーの動作がほとんど同じタイミングでこれも感動しました。列車無線機の通話中LEDと同時に空線キャンセラーのLEDが切り替わるのは自分も列車無線機を持っているみたいな気分になりますね。まだケースは仮組みなので適当な塗料を見繕って列車無線機と同じ色で塗ろうと思っています。完成したらデジカメ写真をお送りします。

 今までは旅客一斉放送は受信していましたがピー音が邪魔で本家鉄道無線はほとんど聞いてませんでしたがこれを機に聞いてみたいと思います。
 専用基板の通販が無ければ自分では作ろうと思わなかったでしょう。良い物を開発されて通販までして頂いて有難うございました。
東鉄5621 様
お返事  東鉄5621様、無事完成して動作もちゃんとして良かったですね。

 かなりノイズには強く作っていますので、多少のザッ!とかザーという感じのノイズがあっても空線トーンを検知するはずです。
 ノイズが多いとスイッチを入れた最初や通話状態から空線に切り替わる時に多少切替時間がかかるかもしれません。

 JR向けの動作はJRの列車に積まれているBタイプ無線機を見てなるべく同じような動作になるように調整しています。
 ただのマニアックな仕様・・・と言われればそれだけですが、空線信号を受信した時に空線モードに切り替わるタイミングは普通の空線キャンセラー付き受信機やNE567等を利用したトーン検出型のキャンセラーより遅くしています。
 実機では誤作動防止の目的でしょうが、空線信号を受信しても瞬間的に切り替わらずに2〜3秒は緑色のLEDが点灯したままで空線トーンがスピーカーから聞こえています。2秒程度なのか3秒程度なのかは無線機の製造時期か中の調整かで違いがあるようで、確認したものでは2秒弱のタイプと3秒強のタイプに大きく分かれているようでした。
 さすがに3秒も続くと耳が痛いので本機では約1秒程度に設定しています。(ノイズが多いとカウント時間も長くなります)
 「ピッ」程度の短さでカットする事も出来ますが、なるべく「実車で乗務員に聞こえている雰囲気を再現できる」ような仕様としています(^^;
 耳障りであればPICのプログラム変更(パラメータ変更)で短くできますのでメールにてご連絡ください。(但し短いと誤判定の可能性が高まります)

 実際、PICを複数お申し込みで「1つはそのまま、1つは××仕様で」というご依頼もあります。
 PICを使用した利点で、パラメータを変えたPICを差し替えれば機能が簡単に変えられるというのも完全ハードウェア製作のトーン検出キャンセラーと違うところですね。

 ご自分でPICライターをお持ちで、パラメータ変更をしてすぐにPICに書き込む事が出来る方なら実際に使ってみて自分好みにアレンジされるのも容易です。
 PICプログラマー(ハードウェア)をお持ちで無い方でも、この基板くらいの電子工作ができる方なら部品代1000円くらいで作れるシリアル接続式の簡単なPICライターの製作記事がネットに沢山出ていますので、ネット記事を参考にされてこの機会にPICライターを作ってみるというのも面白いと思いますよ。
 検索キーワード→「JDMライター」または「JDMプログラマー」

 書き込む際のライティングソフトはもちろん無料でネットで入手できますし、プログラム開発環境(パラメータを変更するならこれも必要です)もMICROCHIP社のHPから無料でダウンロードできます。
お返事 2008/4/27
 
 いやはや凄いですね。
 PIC629の様な小規模なマイコンでこれまでの事ができるとは。
 音声入力の信号を扱うとの事で一体どうやって検知するのかと思っていましたが思っていたよりずっとすっきりした回路で特殊な部品も使わずに実現されている事に驚きました。読んでいくとなんとなく「ははぁこうやるのか」と思えるのですが、検証も含め1から考えて作るとなるとかなり大変だったのではないかと思います。高価な計測器ではなく音声加工ソフトを使用して信号解析するという発想は無かったです。
 ハードもさることながらソフトのほうも自動モード切替などインテリジェントの名の通り機能が盛りだくさんでただただ感心するばかりです。
 黒スピーカ一体型の出来も良いですね。本当にそういう製品としてあるのかと思うぐらいです。
Mojo 様
お返事  Mojo様、ご覧いただきありがとうございます。

 目的によっては複雑な回路や専用ICなどを使用しなければならなくなりますが、そうでない物・回路で作ってしまえるならそのほうが楽ですし、公開する記事としてはなるべくどこでも入手できる(または互換品が手に入る)部品を使うように心がけています。
 よほど特殊な物で無い限りは、「手持ちの部品箱に入っている部品」で設計とテストをしますので、「気の迷い」で出て来る回路の場合はほとんど同じような部品ばかり使う事になります(^^;

 目的とその目的を達成する為の「動作の素」をよく理解すれば回答にたどり着く道は何本もありますから、その中から手軽な一本を選ぶと今回のような形になりました。
 MSKに対応した空線信号キャンセラーを作る方法はほかにもあるでしょうが、これくらいの部品数で作ってしまえる程度が「自作」で作る場合はお手軽で良いですよね。

 プログラム済みPICの頒布なども好調(?)で、回路を自作されている方も多くいらっしゃいますので、主に関東方面でですが色々なケースに入ったインテリジェント空線信号キャンセラーが生まれている事でしょう(^_^)

 実は最近「オペアンプ入りPIC」なんていう物も発売されていますので、こういうアナログ信号を扱う回路や精密な電圧測定を行う充電器・放電器を作るにはワンチップでできてしまうんじゃないか?とちょっと野望をめぐらしています。
お返事 2008/4/21
 
 すばらしいですね!

 でも、関東地方の皆様には悲しい?お知らせもございます
http://www.jreast.co.jp/press/2007_1/20070706.pdf
(要アクロリーダ)

 当地(水戸支社管内)の駅では、山手線や中央線が止まっていても上り方面の乗客に対して何の案内もしてくれませんので致命的打撃です…
のら猫 様
お返事  東京近郊にお住まいの方なら既に聞けなくなって体感されているとは思いますが、東京では既に山手線がデジタル無線に切り替わっていますし、他路線もデジタル無線への切り替え工事が進んでいますね。
 首都圏ではJRの列車無線が聞けるのはあと少しですから、今のうちに聞き貯めしておきましょう(^^;

 いずれは私鉄もデジタル無線に変わるでしょうが、JRよりは遅いようですので今回の関東私鉄対応の空線信号キャンセラーはこれから需要も高まるのではないかと・・・
 ノイズも少なく安定して受信できている方なら空線信号キャンセラー付きの広帯域受信機でも大丈夫でしょうけど。

 水戸まで離れると山手・中央線の抑止状況をアナウンスしてくれないのですか。
 乗務員向けに情報伝達くらいは行われているけれども、旅客に対してアナウンスが無いだけなのか、乗務員向けにさえ特に知らされていないのか。どちらにせよ上り列車に乗った後で目的地にたどり着けないような事になると不便ですね。
お返事 2008/4/15
 
 製作記事の公開、ありがとうございます。

 なるほど、波形の周期をカウントして測定する方式ですね。
 PICでFFT処理なんて出来るのかな?なんて、勝手に勘違いしておりました。

 ひとつ気になった事があります。それは「NECシフト」。
 首都圏や関西圏の無線はじっくり聞いてないもので実情をよく理解しておりませんが、こちら(山形新幹線)の場合、列車の個別呼び出し対応の為、呼び出し時や通話中にFSK信号が入ります。
 もしかするとこれに「反応」してしまいそうです。
 MSK信号の判定・処理部を含めない「JR専用」にするのが良いのでしょうけど、・・・後述の理由があるので・・・ソース拝見し勉強しようと思います。

 そのFSK信号、CoolEdit(いつの間にかAdobe社に買い取られていたのですね。)等のソフトのFFT機能を使用して、周波数やシフト,伝送速度を解析しようと試みているのですが、結論が出ていません。
(これデコードできると通話中の列車の列車番号が読み取れるはずなのです。)

 BASICで作ったプログラムでFSK信号を合成しWAVファイル化し、そのデータをFFT解析し推定しようといういたずらも試みているのですが・・・なかなかうまく行かないものです。(スペクトルを見るとMSKではないようです。)
jr7cwk 様
お返事  PICの処理速度で動作する物…という縛りで考えるとこのような方法になりますね。
 超高速のアナログ信号処理対応のDSPなんかで作ればA/D変換した後に浮動小数点演算を使ってフーリエ変換するプログラムを組んで、周波数分布を測定してやって・・・とか面白い事もできるでしょうが、そういう複雑な処理でなくてもたった100円ちょっとのCPU(MPU)で、数百バイト(ワード)程度のプログラムで作れてしまう方法が有る事にPICなどマイクロコントローラーの面白さがあると思います。

 山形新幹線の個別呼び出し信号についてですが、5秒以内のデータ音では誤作動は起きません。5秒を超えるとアウトです。
 「JRシフト」に入っている状態ではMSK信号を約5秒以上連続受信しないとNEC空線とはみなしませんから、その付加通信データ音が5秒以上も続くようなものならNEC空線と判断してしまいますね。
 個別呼び出しや何らかの制御音だとだいたい1〜2秒ほど「ピギャーキャラキャラキャラ」みたいな音が出ているものは確認していますが、これでは短すぎてJRシフト中にNEC信号と誤認することはありません。

 東京以北では受信したことが無いので、もし山形新幹線の制御・呼び出し信号が5秒以上もある長いものだとちょっと困りますね。

 その信号はFSK信号らしいという事ですが、4800bpsや9600bps程度の高速通信なのでしょうか?(まだ未確認だという事ですが)
 4800bpsを超えると「ピギャ」という音より「ガー」というノイズに似た信号音になりますのでかなり雰囲気も違ってきます。2値FSK等ではなく4値とかだと面倒ですね。

 あと、解析はソフトが「数字を出してくれる機能」に頼ると複数周波数が含まれるMSKやFSKだと多分うまくゆかないと思います。
 通信データ用の専門のアナライザならちゃんと答えを出してくれるでしようが(データビット列まで出してくれるでしょう)、音楽・音声用のソフトではこういうデータ音の解析にはソフトの持っている機能はあまり役に立つとは思えません。あくまで私の経験としてですが。

 音声・音楽ソフトの波形表示機能をただの「デジタルストレージ」(デジタルオシロスコープ)として使用するだけのほうが便利が良かったりしますよ。
 たとえばフリーソフトのAudioCityの画面ではJRの空線信号の録音ファイルの一部をこのように拡大して、1つの波形の山から山をドラッグして選択すると画面下の情報表示部には
のように選択部分の時間の長さが表示されます。
 この場合1周期が0.000439秒ですから、約2278HzでだいたいJR空線信号の2280Hzを観測しているという事がわかります。
 1山だけだとどうしても誤差が大きいのて、同じ波形の連続部分があればできるだけ多くの山をまとめて幅を計って、後から山の数で割ればより正確な数値が求められますよね。
 幅の広いところや狭い所などを測定すればだいたいの使用周波数や通信データのビットレートは求められます。

 同じように波形を観測してそれがMSKなのかFSKなのか、また別の方式なのか等も「目で」確認することができます。

 そこそこ高価なデジタルオシロスコープを買わなくても、パソコンと音楽・音声用ソフトだけで可聴範囲の電気信号なら“それなりに”調べられますよ。
お返事 2008/4/13
投稿  早速のご返事ありがとうございます。

>100円ちょっとのCPU(MPU)で、数百バイト(ワード)程度のプログムで作れてしまう方法が有る
 そのちょっとしたアイディアに行き着くまでが大事なのですね。ですが、さすがです。
 やはり、PIC覚えないと損ですね。

>5秒以内のデータ音では誤作動は起きません。
 すいません、本文ちゃんと読んでいなかったようです。
 100mSに満たないものなので大丈夫そうです。

>FSK信号らしい
 ギャッギャッという低速なものです。
 FFTした結果が下記アドレスのような感じですが、1500Hzの副搬送波を600Hzで振幅変調したような感じで、1500Hzにピークと、そこから600Hz離れた900Hzと2100Hzにスペクトルが立っている感じです。
http://www2.jan.ne.jp/~jr7cwk/radio/r_radio/atis1.gif
(FFT画面のカーソル欄、変な周波数示してますが、実際にはマウスで動かせます。また一応、ご紹介のあったソフトのような事も出来ます・・・生波形の部分。)

 このイメージには示していませんが、このソフト、「声紋」モードと呼べばいいのか、横軸が時間,縦軸が周波数,色がスペクトルの強度といった表示方法が可能です。

 ただFSK信号を解析するとなるとFFTのデータサイズ絞る必要があり、そうなると周波数の分解能が下がるので、データ(1,0)の可視化とまでは行かないみたいですね。
jr7cwk 様
お返事  その波形で見るくらいのスピードなら、復号方法が確定できればPICで読み込むのは可能だと思います。
 周波数変調(ゼロクロス法などで検波可能)だけでなく、振幅変調(振幅もデータに関係)しているのならアナログ回路のほうでちょっと工夫が必要ですね。

 2値FSKなら声紋表示のような時間−周波数分布画面でかなり綺麗に「割れた」画面が見れるはずですが、そうでないとすると別の何かかもしれませんね。
 うまく調べられて、PICのような物かPCの音声入力機能を利用したプログラムなどで列車番号の表示システムが作れると本当に楽しそうですね。
お返事 2008/4/13
 

■ 「気の迷い」気になる実験・報告一覧ページに戻る

(C)「気の迷い」 Kansai-Event.com
本記事の無断転載・転用などはご遠慮下さい