File Exchange

## Boolean Algebra Toolbox , ver. 2.2

version 1.0 (6.05 KB) by

Generate nbc and gray code, boolean evaluation and display truth-table. The "bool"-class for conveni

Updated

Boolean Algebra Toolbox is a small set of functions for easy generation of boolean nbc and gray sequences for sets of boolean variables.
[X1 X2...]=NBC(N) will generate a table of Natural Binary Code where the output is a set of bool-objects.
[X1 X2 X3]=NBC(3) yields:

» [x1 x2 x3]=nbc(3)

x1 =

0101 0101

x2 =

0011 0011

x3 =

0000 1111

and BGRAY(3) yields:

» [x1 x2 x3]=grayc(3)

x1 =

0110 0110

x2 =

0011 1100

x3 =

0000 1111

The constructor for the bool-class works as this:

» x=bool([1 inf 0 -1 0 nan])

x =

1101 01

of course, the constructor can also have a bool object as an argument.

B2H(X) is a function which converts a binary vector to hex string (length(X)=2^n is required).

The operators used are
+ : or
| : or
* : and
& : and
~ : not
' : not
/ : xor

you can use inequalities as well:
< > <= >= == ~=

some functions used by the bool class:

b2d : "bool" to decimal
b2h : "bool" to hex
display : display object
double : convert to double array
flip : flip the entire boolean object string
flip4 : flips the overall nibble position
flip4i : flips the bit positions for each nibble
flip8 : same as flip4 but for bytes
flip8i : same as flip4i but for bytes
horzcat : bit string concatenation, works with mixed objects (as [0 x1 1 nan x2])
length : length of the bit-string/bool-object
size : size of object in bits, nibbles, bytes, words, etc... depending on structure.
subsasgn : assign with indicies
subsref : pick out bits from the object string with indicies (subscripted reference).

Last but not least, the truth-table function which displays the truth-table for a boolean function with its set of variables. For instance:

» [x1 x2 x3]=nbc(3);
» func=x1'*x2+x3'/x1+x1*x2'*x3;
» btab(func,x1,x2,x3)

+-------------+----------+
| x1 x2 x3 | func(*) |
+-------------+----------+
| 0 0 0 | 1 |
| 1 0 0 | 0 |
| 0 1 0 | 1 |
| 1 1 0 | 0 |
| 0 0 1 | 0 |
| 1 0 1 | 1 |
| 0 1 1 | 1 |
| 1 1 1 | 1 |
+-------------+----------+

»

I know that there might be some strange stuff goin on with the order (little/big endian a.s.o.), which is one of the reasons I implemented the flip-functions.
Please mail me for suggestions of if you encounter any problems!

More toolboxes can be found at:

http://www.etek.chalmers.se/~e8rasmus/eng/matlab_programs.html

Pat

### Pat (view profile)

Hi - don't know what might have changed between 2007, the time of the last previous post, and R2010B that I'm using but I had add the following islogical() clause to the end of bool.m

.
.
.
elseif isbool(x)
y=x;
elseif islogical(x)
y=x;
else
error('Input must be numeric.')
end

Without this change an expression such as:

(a+b)'==a'*b'

crashes.

I could correct the code (I found that Rasmus is no longer at the email address given) but I'm new to Matlab and am now sure what the protocol is.

Shyang-Wen Tseng

It is very useful and saves me a few days to get the idea to program the same functions. Thank you.

Jon Dallimore

could perhaps stand a little bit of tidying up but otherwise VERY useful. Saved me about a weeks work on my dissertation by generating grey code for me.

Rasmus Anthin

de Morgan's theorem is easy to test:

[a b]=nbc(2);
(a+b)'==a'*b'
(a*b)'==a'+b'

In both cases matlab will respond with bool object "1".

deweir willie

how to work boolean algebra and demargins therem, it sames confusing.

MATLAB 5.2 (R10)