• 締切済み

信号のビット数制限、って出来ますか?

double型での演算で、使用bit数を制限することってできますか? 何をしたいかと言うと、Cで検討した演算をH/Wに落としたいとき 信号のビット幅をどのくらいにしたら、精度がどのくらい得られるかを Cで検討したいのですが・・・ 以上のようなことが、可能なのかもどうか分かりませんが、現状 皆目検討がつきません。 どうぞよろしくお願いいたします。

みんなの回答

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

基礎とする演算(加減乗除など)ごとに指定したビット数に丸める処理を追加した演算関数を用意すれば可能ではないでしょうか。 簡単な方法だと仮数部の下位ビット部分を0に置き換える処理を追加するとか。これはdouble変数を64ビット整数型とみなして適当なマスクと & を取ることで実現できますね。 ただ精度評価は数式レベルでちゃんと有効桁数を評価する方が良いかと思いますけど。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ビット演算で00000001と1の頭に0を付ける?

    https://www.grapecity.com/japan/powernews/column/clang/019/page02.htm ビット演算子 表1にCのビット演算子を掲げておきます。ビット演算とは言っても、扱う値はバイト単位などCの一般的な整数のデータ型です。ビット演算子は、それらの値をビット単位で計算します。 ビットシフト演算(<< >>)~2倍と1/2 例えばunsigned char型の1は、2進数では"00000001"という形のビット列(ビットパターン)になります。これを1桁左にずらす(シフトする)と"00000010"となります。ずらしてあふれた左端の0は消え、空いた右端には0が入ります。 "00000001"は10進数の「1」、"00000010"は10進数の「2」です。つまり、ビット列を左に1桁シフトすると値は2倍になるのです。 -----------------------------------------  以上ですが、C言語の、ビット演算の解説の抜粋です。ビット演算はまだ覚えたてですが、"00000001"整数1の頭にわざわざ、0を沢山 つける目的は何なのでしょうか!?  よろしくお願いします。

  • 64ビットと32ビットの違い

    C言語を使っているのですが、32ビット版のgccでコンパイルして実行できるファイルが、64ビット版のgccだと違う結果が出てきます。どちらのgccでも使える汎用性のあるファイルは書けないのでしょうか? 因みにstdio.h、math.h、stdlib.hのライブラリを使っていて、倍精度(double)と整数(int)を使っています。配列は宣言時に「*a」とでも宣言して、mallocで作っています。 漠然とした質問ですがよろしくお願いします。

  • 入出力のビット深度の違い

    デジタル信号をやりとりする場合、サンプリング周波数が違って"Lock"しなければ、全く入出力ができませんが、ビット深度に関しては入出力側の一致は全く必要ないものだと思っていました。 実際にデジタル信号を入力して録音できる機器は二つしか持っていませんが(オーディオインターフェースを除く)、一方はサンプリング周波数が違うと全く受け入れず、一方は32kHz, 44.1kHz, 48kHz, 88.2kHz, 96kHzいずれの信号でも44.1kHzに変換して受け入れてしまいます。前者はTASCAM DR-100MKII、後者はYAMAHA CDR-HD1300です。 しかし、どちらもデジタル信号が16bitであろうと、20bit, 24bitであろうとお構いなしに受け入れます。逆に、DR-100MKIIで44.1kHz/24bit録音に設定して、16bit信号を入れても同様です。 私は本来そういうものだと思っていたのですが、これはその機器の仕様によってたまたまそうなっているだけなのでしょうか?それとも、原理的に出力と入力のビット深度は一致する必要がないものなのでしょうか? もちろん、24bit→16bitでは下位ビットが切り捨てられ、16bit→24bitでは下位ビットが無信号になるだけで、結局16bitの伝送になるのだと思いますが。 なお、各種のサンプリング周波数/ビット深度の信号を出力するためには、Behringer SRC2496を使用しました。

  • ビットデータの取得方法について

    32    24 23  16 15    87    0 +--------+--------+--------+--------+ |11000111 |11000111 |11000000 |00000000 | +--------+--------+--------+--------+ ↑のようなビット情報から 24-34bitの1byteにデータa 22-23bitの2bitにデータb 16-21bitの6bitにデータc 14-15bitの2bitにデータd がつめられている場合 データa,b,c,dを参照するためにCで (1)シフト演算で参照する方法 (2)構造体のビットフィールドで参照する方法 をご教授いただけないでしょうか?

  • php と C# の ビット演算

    PHPでビット演算をしていますが、 PHPでたとえば、 c = a >> b でビット演算した値と、 C#で演算した値と aの値を大きくした場合、 4000000000以上? は結果が違ってきます。 C#とPHPではビット演算のアルゴリズムが違うのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • HDLでの回路設計

    入力信号A(2bit) 制御入力信号C 出力X1、X2 Cが0→AをX1にそのまま出力 Cが1→Aの上位ビットをX2に出力 この機能を持つ切り替え回路をHDLで設計したいと思うのですが、 いまひとつよく分かりません。 Aを連接演算で表す(?)とかAを右に1シフトさせて、それを1bitの X2に出力する(ビット幅が違うけど大丈夫なのだろうか?)など、 考えてみてもそれをどう書けばいいのかわかりません。 根本的に考え方が違っているのかもしれませんが・・・。 教えていただけないでしょうか。お願いします。

  • ビデオ信号の周波数帯域について

    ビデオ信号では周波数インターリーブ方式により3MHz以上において色信号と輝度信号は交互の周波数帯を占めています。それをくし型フィルタなどを用いて分離して処理を行うと理解しています。 ここで疑問があります。色信号の帯域は1.5MHzですが、輝度信号の帯域は4.2MHzです。人の目は色よりも輝度に敏感ということで色信号は帯域制限をかけているようですが、周波数インターリーブを用いることで結局は色信号と輝度信号を分離できるように思います。なぜ色信号は帯域制限をかける必要があるのでしょうか。 理解が誤っている場合はその点を指摘していただけると助かります。

  • 浮動小数点(エクセス64形式)、倍精度(64bit)仮数部は何bit?

    タイトルの通り、エクセス64形式の倍精度(64bit)のときの指数部、仮数部がそれぞれ何bitなのかわかりません。IEEE形式のものと、単精度(32bit)のものは調べられたのですが・・・ (421C 1999 9999 99A0) 等、いくつかエクセス64形式で表記された値があり、これを実数でいくつになるか確認するためです。 よろしくお願いします。

  • タイマICを使ったPWM信号の作り方

    周波数:約100Hz(精度悪くても良いです) デューティ比:10%~90%ぐらい タイマIC入力:5V PWM信号:5V・20mA以下 以上の仕様でPWM信号を出力する回路を自作したいのですが、 どのようなタイマICを使うのが良いでしょうか? タイマIC555を検討したのですが、デューティ比50%以上しか作れないようでした。 よろしくお願いします。

  • ビット演算を理解するための参考書を探してます

    ビット演算を理解するための参考書を探してます。 基本情報技術者の午後問題のC言語において、次のリンク先の問題のようにビットを使ったプログラム問題がさっぱり分かりません。 http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H10a2/pm07.html そこで、今までビット演算系の問題に触れていなかったためだと思い、 ビット演算のプログラムを扱った詳しい参考書を探しています。 基礎から上記URLの問題レベルまでの内容のものが特に良いです。 回答よろしくお願いします。