// テスト用の擬似ダイオード検波
float i, q;
- q = qdata / (32768.0*65536);
- i = idata / (32768.0*65536);
+ q = qdata;
+ i = idata;
- *left = *right = sqrtf( q*q + i*i )*32768*65536;
+ *left = *right = sqrtf( q*q + i*i );
}
break;
static void unpack_non_wide_fm( unsigned int pri_ch, unsigned int sec_ch, int* idata, int* qdata, int* valid_iq )
{
+ static unsigned int debug_count = 0;
+ static unsigned int debug_izero = 0;
+ static unsigned int debug_qzero = 0;
+
// インデックス分け
if ( sec_ch & 0x02 ) // bit1が1ならindex = 1
{
+ if ( debug_count < 1000 )
+ {
+ debug_count++;
+ if ( pri_ch & 1 << 29 )
+ debug_izero++;
+ if ( sec_ch & 1 << 29 )
+ debug_qzero++;
+ }
+ else
+ {
+ syslog(LOG_NOTICE, "number of sign bit = %d, %d", debug_izero, debug_qzero);
+ debug_count = 0;
+ debug_izero = 0;
+ debug_qzero = 0;
+ }
// IQデータはbit[29:2]に格納されている
- *idata = (pri_ch << 2); // プライマリ・チャンネルの場合はマスク不要
+ *idata = (pri_ch << 2) & 0xFFFFFFF0;
*qdata = (sec_ch << 2) & 0xFFFFFFF0;
// IQデータが有効であると通知する
*valid_iq = TRUE;