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
Soda0x02 A&W® Root
Beer0x04
Berryblue0x08 Bubble
Gum0x10 Buttered
Popcorn0x20 Cafe
Latte0x40
Cantaloupe0x80
Cappuccino0xFF Caramel
AppleSo to represent "Hello World"
with only the above jelly beans, we would require a whopping 50 jelly
beans:H
= Cantaloupe, Bubble Gum,
Licoricee
= Cafe Latte, Cantaloupe, Berryblue, A&W® Cream Soda,
Licoricel
= Cafe Latte, Cantaloupe, Berryblue, Bubble Gum,
Licoricel
= Cafe Latte, Cantaloupe, Berryblue, Bubble Gum,
Licoriceo
= Cafe Latte, Cantaloupe, Berryblue, Berryblue,
Licorice
(space) = Cafe Latte,
LicoriceW
= Cantaloupe, Buttered Popcorn, A&W® Cream Soda, A&W® Root
Beer, Berryblue,
Licoriceo
= Cafe Latte, Cantaloupe, Berryblue, Berryblue,
Licoricer
= Buttered Popcorn, Cafe Latte, Cantaloupe, A&W® Root Beer,
Licoricel
= Cafe Latte, Cantaloupe, Berryblue, Bubble Gum,
Licoriced
= Cafe Latte, Cantaloupe, Berryblue,
LicoriceOf 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,
LicoriceTwo 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,
Licoricee
= Carmel Corn, A&W® Cream Soda,
Licoricel
= Carmel Corn, Bubble Gum,
Licoricel
= Carmel Corn, Bubble Gum,
Licoriceo
= Carmel Corn, Berryblue, Licorice
(space) = Cafe Latte,
LicoriceW
= Cantaloupe, Buttered Popcorn, A&W® Cream Soda, A&W® Root
Beer, Berryblue,
Licoriceo
= Carmel Corn, Berryblue,
Licoricer
= Buttered Popcorn, Cafe Latte, Cantaloupe, A&W® Root Beer,
Licoricel
= Carmel Corn, Bubble Gum,
Licoriced
= Carmel Corn, LicoriceWe 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
|