RTTY at 300+ bps in Max

notes

After a few vexing timing issues I have been able to send and decode RTTY (technically AFSK audio frequency shift keying ) in Max at 300 baud. Click hear to listen to an example of a 13 word message at 300 bps (300 baud)

The js object adds significant delays (on the order of a few milliseconds) – so I replaced the encoder with a coll and that cleaned up the timing problems when encoding. This patch demonstrates the issue:

Also… You can use threshold~ instead of snapshot~to feed binary pulse amplitude detection logic into edge~ – but you need to run the signal through average~ to prevent the amplitude from repeatedly dropping to zero at the signal frequency. Like this:

Is it better than snapshot~? it seems to be, but who knows – at these speeds it would probably be better to write the whole thing in gen~

There are a few other things – like using counter~ instead of phasor~ to drive the decoder clock. This allows you to restart the clock, when the onset of the start bit is detected – and you can add a variable amount of delay to find optimal point in the signal vector to read the pulse. At 300 bps, at 96k SR, each pulse is 320 samples (3.1 milliseconds) –

I’ll write more on this later –

The Katja Vetter article on Beat-Slicing was helpful – along with several Max tutorials on Audio control rates, and envelope followers.

Local Patches are in;

tkzic/ max teaching examples/

  • rtty-send10.maxpat
  • rtty-recv9a.maxpat

 

Applying PID control to Media coverage of politics

(photo from wikidpedia.com)

This idea came from a student, Bernardo Limon Villarreal, who suggested recording the sounds of people on the stock market trading floor – categorizing the sounds by how they match simultaneously occuring market trends , ie., optimistic, pessimistic, up, down, neutral, panic, etc.,

A speaker system feed some of these sounds back to the trading floor in an attempt to psychologically influence traders’ behavior.

Later on I started thinking about the idea of “horse race” stories in media coverage of politics. There is a theory (conspiracy) that its in the best interest of corporate media for political races to be close. So, for example, if Republicans are leading, then the “media” will air stories which favor Democrats in an effort to sway public opinion against Republicans. A continuous feedback mechanism which tries to maintain a ‘close race’.

This idea is similar to how a phase locked loop or PID controller maintains a constant temperature given varying environmental factors. It would be interesting to build a media “machine” which uses the results of opinion polls as the sensor input and always targets a 50/50 result by producing stories which with positive or negative bias, as needed.

In some ways this represents a fundamental principle of advertising.

decoding RTTY in Max

Using a local clock

(update 12/18/2013) Here is a video that shows acoustic coupling between to computers running RTTY in Max at 12.5 bits/second

Next version will have better syncing within the patch (i.e.., sample accurate timing, instead of [metro], [delay], and [snapshot]

original post

Have added stop and start bits to ascii rtty signal and reversed mark and space to the normal setting.

The current local test patches are:

tkzic/max teaching examples/

  • rtty-sim7.maxpat
  • rtty-recv7.maxpat

Accurate communication only works at very low speeds – around 11 bits/sec.  The timing on the receive side is very critical. The way it works now, is that it uses the first start bit, after a period of inactivity, to reset the clock. The ‘delay’ setting for the clock seems to be the key factor in whether the bits get read as characters.

I think that any speed increases at this point will require sample accurate timing on both send and receive sides. But as a proof of concept we have a decent start.  Its also possible that the filtering/bit detecting could be improved – but again, this is a matter now of precise timing adjustments at the sample level – and using more frequent and accurate clock adjustments on the receive side to maintain sync.