OSDN Git Service

スケーリング機能実装。動作OK experimental_35188_floatingpoint
authorsuikan <suikan@users.sourceforge.jp>
Sat, 6 Jun 2015 06:27:32 +0000 (15:27 +0900)
committersuikan <suikan@users.sourceforge.jp>
Sat, 6 Jun 2015 06:27:32 +0000 (15:27 +0900)
trx305/framework.c
trx305/framework.h

index 6e5a840..f2e5d7f 100644 (file)
@@ -359,13 +359,28 @@ static void pack_af_sample( short left, short right, unsigned int * pri_ch, unsi
  */
 static void unpack_wide_fm ( unsigned int pri_ch, unsigned int sec_ch, int* idata, int* qdata )
 {
-    int command, data;
+    int command, data, exp, i, q;
 
 
         // iデータとqデータを抽出する。両者とも16bitで、bit14からbit29に格納されている
-    *idata = ( pri_ch << 2 ) & 0xFFFF0000;
-    *qdata = ( sec_ch << 2 ) & 0xFFFF0000;
+    i = ( pri_ch << 2 ) & 0xFFFF0000;
+    q = ( sec_ch << 2 ) & 0xFFFF0000;
 
+        // ブロック浮動小数点処理。expでスケーリングする。
+    exp = ( pri_ch >> 10 ) & 0x0F;
+    *idata = i >> exp;
+    *qdata = q >> exp;
+
+#ifdef DEBUG_BLOCK_FLOAT
+    {
+        static int tested = 0;
+        if ( (i & 0x80000000) && ! tested )
+        {
+            tested = 1;
+            syslog( LOG_NOTICE, "i: %8x, exp: %d, idata:%8x", i, exp, *idata);
+        }
+    }
+#endif
         // パラメータ・データを配列に格納する。
         // 配列インデックスは comaddr、データはcomdataから。
         // comdataはpri/secに分散している。
@@ -388,7 +403,7 @@ static void unpack_wide_fm ( unsigned int pri_ch, unsigned int sec_ch, int* idat
  * \param sec_ch セカンダリ・チャンネルからのデータ
  * \param idata 抽出したIデータ。[-1,1.0)の固定小数点形式。valid_iqが真の時のみ有効
  * \param qdata 抽出したQデータ。[-1,1.0)の固定小数点形式。valid_iqが真の時のみ有効
- * \param valid_iq IQデータが有効の時真、向こうの時は偽
+ * \param valid_iq IQデータが有効の時真、無効の時は偽
  * \detail
  */
 
@@ -422,11 +437,10 @@ static void unpack_non_wide_fm(  unsigned int pri_ch, unsigned int sec_ch, int*
 
 /**
  * \brief SHからのコマンドとパラメタを保存する
- * \param command
- * \param data
- * \details このルーチンはcfgファイルで宣言され、SPORT0 RX 割り込みハンドラとして登録される。
- * SPORT0 RX DMAがバッファの受信を終えるたびに呼び出される。
- * 割り込み専有時間を小さくするため、実際には、割り込みのクリアと受信タスクへの通知しかしていない。
+ * \param command コマンド種別
+ * \param data コマンドパラメータ
+ * \details このルーチンはSHからFPGA経由で受け取ったコマンドとそのデータを内部変数に格納する。
+ * 格納されたデータはユーザーが実装した復調アルゴリズムから、API経由で利用される。
  */
 static void set_command_data( unsigned int command, unsigned int data )
 {
index db7a927..619a312 100644 (file)
  *
  * コメントアウトすると機能がディセーブルになる
 */
- #define DEBUG_QUEUEDEPTH    // シリアルポートから、タスク間Queueの深さを表示させる
- #define DEBUG_DSPLOAD       // シリアルポートからDSP負荷率を表示させる
-#define DEBUG_COMMAND           // DSPに送られてくるコマンドの表示
-//#define DEBUG_COMMAND_API       // 復調器から使えるAPIのデバッグ用
+// #define DEBUG_QUEUEDEPTH    // シリアルポートから、タスク間Queueの深さを表示させる
+// #define DEBUG_DSPLOAD       // シリアルポートからDSP負荷率を表示させる
+// #define DEBUG_COMMAND           // DSPに送られてくるコマンドの表示
+// #define DEBUG_COMMAND_API       // 復調器から使えるAPIのデバッグ用
+// #define DEBUG_BLOCK_FLOAT       // WFMモードでブロック浮動小数点の整数化がうまく出来ているかダンプする。
 
 /**
  * \brief RX_IF受信SPORTバッファのDMAサイズ