データは符号付きまたは符号なしている場合は、またあなたの固定小数点データのスケーリングに依存し。 floatを使用して32ビットの固定小数点データを表現すると、指数を格納するビットがいくつかあるので、いくつかの数字が失われます。私は本当にあなたがこの32ビット変換を行うなぜあなたは、このステップをスキップして、あなたがこの32ビット変換を主張する場合は、
g_analog_input_chL_mean = (float)(*rx_block_pointer[buffer_cntr] << 8)/(float)(0x7FFFFFFF);
注意を使用
g_analog_input_chL_mean = (float)(*rx_block_pointer[buffer_cntr])/(float)(0x7FFFFF);
そのIを書くことができているので、理解していません10進数を書くよりも入力ミスが多い16進数を常に使用します。あなたは、ADC値が符号なし形式を持っている場合は、同じ表現を使用することができるよりも最大の符号付き整数ではなく、2147483648
2147483647であることから、確かに間違っているが、符号ビットに含まれている:
g_analog_input_chL_mean = (float)(*rx_block_pointer[buffer_cntr])/(float)(0xFFFFFF);
または
g_analog_input_chL_mean = (float)(*rx_block_pointer[buffer_cntr] << 8)/(float)(0xFFFFFFFF);
最終ポイント:ADC値は1にスケーリングされない場合があります。したがって、式全体を最大浮動小数点値で乗算する必要があるかもしれません。
EDIT
私は今、32ビットへの移行の必要性を見ます。コンパイラはfloatに変換するときに正しい符号の解釈を実行できます。ありがとう、訂正のために。
'rx_block_pointer'とは何ですか? –
「24ビットの固定小数点データ」は、既知の標準ではありません。誰もが望むように自由に実装することができます。したがって、コーデックのドキュメンテーションが正確に「24ビットの固定小数点データ」が***にどれくらいの意味を示すのかを正確に教えてください。 –
「最善の方法」とはどういう意味ですか?最速?最も正確?ご覧のとおり、入力は24ビットの2の補数です。どのような出力が必要ですか? [-1:1]?私が見る唯一の問題は、0x7fffffの場合、1よりもわずかに少ない数を出力することです。 – geza