Home |
Search |
Today's Posts |
#1
![]() |
|||
|
|||
![]()
I'm working on a telemetry board and wish to include software FSK1200
(MX-614's are getting harder to find). The official Bell 202 spec is out of print and hard to find as well, so I pieced this together from what I can find. Multimon won't decode the output, so I'm likely doing something wrong. This is supposed to be (once it works) my reference implementation before I port it to my telemetry board, so I'm trying to keep it as simple as possible. The program outputs 22050 hz 8-bit signed data to stdout; gcc fsk.c -o fsk -lm; ./fsk test; sox -s -b -r 22050 test -w test.wav Phase is coherent, and there are peaks at 1200 and 2200 in the spectrum analysis. Any help or suggestions would be appreciated. Robert Cicconetti KG4MVB -- begin fsk.c -- #include math.h #include stdio.h // $#@$#@ //#define BAUDRATE 1200 // octet rate is 150 octet / sec. (1200 / 8). BIT period is // .000666, or 1/1500 (10 bits per symbol, including start and stop). // BAUDRATE is therefor used improperly here; fixme. #define BAUDRATE 1500 #define MARK 1200 #define SPACE 2200 // For convenience when working with multimon #define SAMPLERATE 22050 double sendbyte(char a, double angle); int main (void) { // 8 bit output; encoder DAC is likely to be only 3 or 4 bit short outbyte; int i; double angle = 0; char test[]= "fm KG4MVB-0 to FFFFFF-0 SABM+"; for (i = 0 ; i 5000; i++) putchar(0); //PREAMBLE for (i = 0 ; i 24; i++) sendbyte(0, angle); for (i = 0 ; i 29 ; i++) { angle = sendbyte(test[i], angle); } for (i = 0 ; i 2; i++) sendbyte(0, angle); for (i = 0 ; i 50000; i++) putchar(0); return 0; } double sendbyte(char a, double angle) { // LSB first. Start bit MARK end bit SPACE // MARK is 1, SPACE is 0 // double phase_offset = 0; int freq, j = 0, i; char bit; for (i = 0; i 10; i++) { if (i == 0) bit = 1; else if (i == 9) bit = 0; else bit =( a (i-1)) & 0x1; if (bit == 1) freq = MARK; else freq = SPACE; phase_offset = angle - (double)2*M_PI*freq*((double)(j-1)/SAMPLERATE); while (j ((i+1)*SAMPLERATE)/BAUDRATE ) { angle = (double)2*M_PI*freq*((double)j/SAMPLERATE) + phase_offset; putchar((short)(0.5*sin(angle)*128)); j++; } } return angle; } |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
Info needed on "Taylor Modulation" from the 50's. | Boatanchors | |||
Pye Modulation Meter on eBay | Boatanchors | |||
for sale: UTC, VM-4, 300watt vari-tap modulation transformer | Boatanchors | |||
BIG MODULATION TRANSFORMER | Boatanchors | |||
Bell 202 modulation (AFSK1200) | Digital |