ブロックを積みながら(159) Scilab/Xcos、整数(Integer)パレットその1

Joseph Halfmoon

前回で「ブロック多過ぎ」行列パレットを切り上げ先に進めました。進めた先は「整数パレット」です。地味、とっても地味。しかしまあ、無いと困る場合もあるのでこの辺で練習しておきます。ただね、Scilab/Xcosの基本は実数型です。複素数型も結構簡単に扱えるけれども、地味な整数の方は扱いがメンドクセーです。

※「ブロックを積みながら」投稿順 index はこちら

※動作確認にはWindows 11のパソコン(64bit)上にインストールしたScilabの以下バージョンを使用しています。

Scilab 2024.0.0

整数(Integer)パレット

Integerパレットの全貌が以下に。「整数」を対象に処理を行うことができるブロックどもが集められてます。その半分くらいは電子工学(デジタル)向け?なブロックだったりもしますが。

IntegerPalette

今回は、上記のパレットから以下のブロックについて練習してみます。

    • CONVERT — Data Type Conversion
    • BITCLEAR — Clear a Bit
    • BITSET — Set a Bit
    • EXTRACTBITS — Bits Extraction
    • INTMUL — Integer matrix multiplication

練習に使用したフローは以下です。IntegerDUT1
左上の正弦波ブロックがテストデータの発生源です。振幅300、位相0、周波数1Hzの正弦波(勿論double型)を発生してくれます。設定はこんな感じ。sineWave300

CONVERT

最初にやってみるのは、実数正弦波を整数に、そして整数を再び実数に戻して表示してみることです。まずは実数から整数(符号無8ビット)への変換が以下に。CONVERT_d_u8

整数といって一種類である筈もなく、符号付、符号無の両方で32ビット、16ビット、8ビット幅の3種類が使えるみたいです。また変換先の型から溢れる事態がままある筈なので、その時の処理の指定も必須。上記ではサチュレーション(飽和)を指定してます。

以下は逆に符号無8ビット整数から実数へ戻す設定です。CONVERT_u8_d

こうして実数正弦波を符号無8ビット整数にし、再び実数波形に戻したものが以下に。CONVERTr

符号無に押し込めたので、マイナス側はバッサリ0に飽和してます。そしてプラス側のピークも255のところで飽和。

BITCLEAR

実験したBITCLEARの設定は以下です。BITCLEAR

符号無8ビット整数の最上位ビット7を無条件にゼロクリアしています。その結果が以下に。BITCLEARr

サチュレーションのようなスムースなものにはならず、128のところでばっさりやってつぎはぎした波形が得られました。当たり前か。

BITSET

実験したBITSETの設定は以下です。

BITSETこんどは符号無8ビット整数の最上位ビット7を無条件に1に立ててます。その結果が以下に。BITSETr

当然得られたのはBITCLEARの時の波形に「128ゲタを履かせた」波形です。

EXTRACTBITS

次は一部ビットの取り出しです。EXTRACTBITS

入力される符号無8ビット整数の下4ビットを取り出してます。結果が以下に。EXTRACTBITSr値が良く読めんな。。。

INTMUL

最後は符号無8ビット整数同士の掛け算です。掛けるのは固定値「4」です。設定が以下に。INTMUL

結果のグラフが以下に。INTMULr

当然だけれども、もとの波形で64以上の値のところから上はサチってます。結果、ほぼほぼ矩形波みたいな見た目に。ショウガナイ。

ブロックを積みながら(158) Scilab/Xcos、行列(Matrix)パレットその3 へ戻る

ブロックを積みながら(160) Scilab/Xcos、整数(Integer)パレットその2 へ進む