4 * Created on: 2015/03/10
8 #ifndef _DEMODULATOR_H_
9 #define _DEMODULATOR_H_
11 #include "framework.h"
14 void init_demodulator(void)
22 void radio_demodulate_wide_FM( short idata[], short qdata[], short* left, short* right )
25 * ワイドFMの復調アルゴリズムを実行する。
27 * 受信IFデータは複素情報となっており、それぞれidata[], qdata[]引数として渡される。
28 * いずれの引数も[-1..1) の閾値を取る。なお、それぞれの配列要素数は WIDE_FM_OVERSAMPE 個である。
30 * 復調オーディオデータはステレオであり、左右データをそれぞれ*left, *right引数に返す。
31 * いずれの引数も[-1..1) の閾値を取る。
33 * IFはオーバーサンプルされているがオーディオはされていないので、1/WIDE_FM_OVERSAMPEの
34 * デシメーション処理をしなければならない。
42 void radio_demodulate_non_wide_FM( int idata, int qdata, short* left, short* right )
47 * 現在の復調モードを取得し、そのモードに応じて適切なアルゴリズムを実行する。
48 * 以下のコードはスケルトンなので、適切なアルゴリズムを実装すること。
50 * 受信IFデータは複素情報となっており、それぞれidata, qdata引数として渡される。
51 * いずれの引数も[-1..1) の閾値を取る。
53 * 復調オーディオデータはステレオであり、左右データをそれぞれ*left, *right引数に返す。
54 * いずれの引数も[-1..1) の閾値を取る。
57 switch (radio_api_getARM_mode()){
58 case radio_mode_NFM : // ナローFM復調
61 case radio_mode_AM : // AM復調
69 *left = *right = sqrtf( q*q + i*i )/65536;
73 case radio_mode_SAM : // 同期AM復調
74 // 動作テスト用880Hz生成プログラム。
78 static short phase = 0;
80 f = sinf( 2 * 3.14 * phase / 32768 ) * 32767 * 0.999;
87 case radio_mode_USB : // USB復調
90 case radio_mode_LSB : // LSB復調
93 case radio_mode_CW : // CW復調
103 #endif /* _DEMODULATOR_H_ */