ソフトの砂場(DTMF)

最終更新日:1999年01月17日

 [1]を参考に、プッシュホンの(ピポパという)ダイアル音の波形を表計算ソフトで作成し、フーリエ変換してみます。

キー3の音の振幅スペクトル

DTMF

 プッシュホンのダイアル音には、DTMF方式が用いられています。これは、二つの周波数の音を合成したものです。ダイアルの各キーに、下表の周波数の音が割り当てられています。例えば、1のキーには、697Hzと1209Hzの二つの音が割り当てられています。1のキーを押すと、この二つの音を合成した音が鳴ります。

各キーと割り当てられた周波数(Hz)
1209 1336 1477
697 1 2 3
770 4 5 6
852 7 8 9
941 # 0 *

この音の波形を見ると、下図のようになります。

キー1の音の波形データ

 このデータを次のように生成しました。ここでは8KHzのサンプリング周波数でサンプリングしたものとします。表計算ソフトで、下図のような表を作ります。左端の列は何番目にサンプリングしたデータかを表し、2列目からはキーの1, 2, 3, ...のそれぞれについて、サンプリングしたときに得られるであろう値を計算しています。計算式は、単に二つの周波数の正弦波を加算したものです。式中の697や1209は上の表の周波数、8000はサンプリング周波数です。

Excelによるデータ生成

 これを、離散フーリエ変換して、その振幅スペクトルを求めると、最初の図のように二つのピークを持つ波形が選られます。この二つのピークは(当然のことながら)、もとになった二つの正弦波の周波数です。

実装

 離散フーリエ変換と振幅スペクトルを求める処理は、[1]をもとに作成しました。グラフ表示するプログラムは、Yamada,Kさんが作成された、「Win32用 基本グラフィックス・クラスライブラリ GLIBW32 ver1.21」を使用しました。このライブラリは高度な機能を備えているのですが、前回に引き続き今回も、最低水準を行くような利用方法になっています ^^;

実行

 今回は、標準入出力を用いるプログラムとして作成したので、コマンドプロンプトから実行することになります。波形データがhakei.datとすると、波形をグラフ表示するには:

graph -connect < hakei.dat

離散フーリエ変換して振幅スペクトルを求めたものをグラフ表示するには:

dft < hakei.dat | amp | graph

のように実行します。

 サンプリング周波数が8KHzで、サンプリングしたデータを256個とすると、離散フーリエ変換した結果は、8000/256=31.25Hzの高調波からなります。それぞれの音の周波数が、何次の高調波になるかを計算すると、次のようになります。実際には次数は整数なので、ここで求めた次数に近い次数の高調波が強く現れることになります。

周波数 高調波次数
697 22.3
770 24.6
852 27.3
941 30.1
1209 38.7
1336 42.8
1477 47.3

 各キーを押したときの波形データと、離散フーリエ変換した結果を、別ページに一覧で示します。

ダウンロード

ファイル名 dtmf.lzh
バージョン 1.0
ファイルサイズ 163Kバイト
OS Windows NT 4.0 (Windows 95/98でも動作すると思いますが未確認です)
アーカイブの内容 dft.exe ... 離散フーリエ変換 実行形式
amp.exe ... 振幅スペクトル計算 実行形式
graph.exe ... グラフ表示 実行形式
d0-256.txtなど ... 各キーを押したときのサンプリング結果のデータ
dtmf.xls ... 上記データの計算用Excelファイル
dtmf.txt ... 簡単な説明
備考

雑感

 今回は、二つの正弦波を合成し、それをサンプリングして離散フーリエ変換して元の正弦波と比較するという、結果が一致してあたりまえのことを行っています。ただ、実際にプログラムを作って動かし、理解が深まったような気になって満足する^^;、という目的は達成しているのでよしとしましょう。

参考文献・リンク

  1. 坂巻佳壽美, 見てわかるディジタル信号処理, 工業調査会, 1998
  2. Yamada,K, Win32用 基本グラフィックス・クラスライブラリ GLIBW32 ver1.21

ホーム