Category Image Jelly Belly™ Jelly Bean Modem Protocol (V.YUMbis)


from the gourmet-throughput dept.

I had an idea on how to design a Jelly Belly™ Jelly Bean Modem Protocol, which I call V.YUMbis (bis means twice and usually denotes data compression, which this protocol has).

The idea is to transmit information via a bunch of jelly beans. Several jelly beans in a particular order could generate a signal that could be processed by an operator and decoded with software. The operator's only role is to distinguish between flavors, while the software's role is to interpret the data from the flavor information collected.

First, assume you have an operator who is able to distinguish the flavor of each bean by taste alone. The jelly bean delivery system would drop a single jelly bean into a dish, and the operator would eat the bean and press the button that corresponds with the bean they just ate.

Here are the assumptions:

o There are 50 different flavors.
o The operator is 99% proficient in distinguishing one flavor from another.
o It takes one second to process one bean.

Since there are 50 different flavors (signals), we only need 9 beans to represent all possible byte combinations. It's also possible that a single flavor could represent multiple bytes. This is a lot slower than even the early modems that operated on 110 signals per second.

Another thing that must be kept in mind is that the operator cannot accept an unlimited number of jelly beans. Eventually the operator will "get full" and need to take a break. This is an important consideration because otherwise, there might be a little feed-back (yuck).

Also, error correction is an important consideration for more reasons than an regular modem is required to deal with. An operator may confuse the flavor of Cafe Latte with Cappuccino or Sizzling Cinnamon with Cinnamon. After several hundred jelly beans, flavor discrimination would become even more problematic.

Data compression is also very important. It must take bean frequency into account to allow enough diversity in the signal, which can improve flavor discrimination as well.

We also need a "stop bit" flavor. This allows the operator to distinguish between bytes (but not bites). It's important for the operator to tell when a new byte starts to avoid data collision. That way, even if flavor discrimination becomes a problem, at least we can reduce the number of bytes effected.

A good stop bit flavor would be Licorice because it is very distinct. The operator does not need to take special considerations with these flavors. The purpose of using Licorice is to ensure a good flavor to noise ratio because Licorice is unmistakable.

As stated earlier, to start out we really only need 9 data flavors and one stop bit flavor to fully represent 256 values. We'll see how to use the remaining 40 flavors in a moment.

0x01 A&W® Cream Soda
0x02 A&W® Root Beer
0x04 Berryblue
0x08 Bubble Gum
0x10 Buttered Popcorn
0x20 Cafe Latte
0x40 Cantaloupe
0x80 Cappuccino
0xFF Caramel Apple

So to represent "Hello World" with only the above jelly beans, we would require a whopping 50 jelly beans:

H = Cantaloupe, Bubble Gum, Licorice
e = Cafe Latte, Cantaloupe, Berryblue, A&W® Cream Soda, Licorice
l = Cafe Latte, Cantaloupe, Berryblue, Bubble Gum, Licorice
l = Cafe Latte, Cantaloupe, Berryblue, Bubble Gum, Licorice
o = Cafe Latte, Cantaloupe, Berryblue, Berryblue, Licorice
(space) = Cafe Latte, Licorice
W = Cantaloupe, Buttered Popcorn, A&W® Cream Soda, A&W® Root Beer, Berryblue, Licorice
o = Cafe Latte, Cantaloupe, Berryblue, Berryblue, Licorice
r = Buttered Popcorn, Cafe Latte, Cantaloupe, A&W® Root Beer, Licorice
l = Cafe Latte, Cantaloupe, Berryblue, Bubble Gum, Licorice
d = Cafe Latte, Cantaloupe, Berryblue, Licorice

Of corse, the above is a good example of how inefficient it is to only use 9 "baud" of data beans.

We can reduce the number of physical beans being transmitted by defining a value on the fly. To do this, we will transmit a special sequence:

Carmel Apple, Carmel Apple, Carmel Corn, Cafe Latte, Cantaloupe, Berryblue, Licorice

Two Carmel Apples would normally be an invalid value, so this allows us to use it as an "escape" sequence. We follow those by a Carmel Corn, which is to be defined. Then Cafe Latte, Cantaloupe, Berryblue, Licorice. So we are assigning Carmel Corn the value of Cafe Latte, Cantaloupe, Berryblue (0x64). So now, the earlier sequence that required 50 beans can now be represented in 36 beans.

H = Cantaloupe, Bubble Gum, Licorice
e = Carmel Corn, A&W® Cream Soda, Licorice
l = Carmel Corn, Bubble Gum, Licorice
l = Carmel Corn, Bubble Gum, Licorice
o = Carmel Corn, Berryblue, Licorice
(space) = Cafe Latte, Licorice
W = Cantaloupe, Buttered Popcorn, A&W® Cream Soda, A&W® Root Beer, Berryblue, Licorice
o = Carmel Corn, Berryblue, Licorice
r = Buttered Popcorn, Cafe Latte, Cantaloupe, A&W® Root Beer, Licorice
l = Carmel Corn, Bubble Gum, Licorice
d = Carmel Corn, Licorice

We still have to account for the "escape" sequence so our physical total is now 43, which is going in the right direction. We can assign even more escape sequences to reduce redundancy so our message gets even smaller.

Don't get excited about what you just saw. No compression scheme is infinite. This approach can reduce the number of required jelly beans to a smaller number, but there is a limit to how far we can compress. Mathematically, you need no less than 32 jelly beans to represent "Hello world" using the above compression scheme (remember to count all of the beans in the escape sequences as well).

Also remember that "Hello World" is all ASCII. A more diverse and random transmission would require a lot more jelly beans, even if the message was short, due to the signal diversity requirements. In addition, the above example does not really take error correction into account, which would also require even more jelly beans in the frame.

Still, it's promising and yummy!

Posted: Tuesday - May 03, 2005 at 09:53 AM | Permalink |  | |  |  |  |
Distractions


© Anthony Martin 1998-