Return-Path: Received: (qmail 2368 invoked from network); 17 Dec 2004 15:09:45 -0000 Received: from unknown (HELO ptb-spamcore02.plus.net) (192.168.71.3) by ptb-mailstore01.plus.net with SMTP; 17 Dec 2004 15:09:45 -0000 Received: from mailnull by ptb-spamcore02.plus.net with spamcore-l-b (Exim 4.32; FreeBSD) id 1CfJng-000A2s-HF for dave@picks.force9.co.uk; Fri, 17 Dec 2004 15:13:53 +0000 Received: from [192.168.67.2] (helo=ptb-mxcore02.plus.net) by ptb-spamcore02.plus.net with esmtp (Exim 4.32; FreeBSD) id 1CfJng-000A2p-BN for dave@picks.force9.co.uk; Fri, 17 Dec 2004 15:13:48 +0000 Received: from post.thorcom.com ([193.82.116.20]) by ptb-mxcore02.plus.net with esmtp (Exim) id 1CfJjg-000Kd1-7i for dave@picks.force9.co.uk; Fri, 17 Dec 2004 15:09:40 +0000 Received: from majordom by post.thorcom.com with local (Exim 4.14) id 1CfJjM-000276-Ps for rs_out_1@blacksheep.org; Fri, 17 Dec 2004 15:09:20 +0000 Received: from [193.82.116.30] (helo=relay.thorcom.net) by post.thorcom.com with esmtp (Exim 4.14) id 1CfJjM-00026x-Bs for rsgb_lf_group@blacksheep.org; Fri, 17 Dec 2004 15:09:20 +0000 Received: from mail.nrtco.net ([216.168.96.52]) by relay.thorcom.net with esmtp (Exim 4.41) id 1CfJjB-0002If-Dx for rsgb_lf_group@blacksheep.org; Fri, 17 Dec 2004 15:09:20 +0000 Received: from nocturna-y1zrar (nrtcorback-216-168-120-103.nrtco.net [216.168.120.103]) by mail.nrtco.net (8.12.10/8.12.1) with SMTP id iBHFFUHC012588 for ; Fri, 17 Dec 2004 10:15:31 -0500 Message-Id: <3.0.6.32.20041217100912.00c6f248@magma.ca> X-Sender: ve2iq@magma.ca X-Mailer: QUALCOMM Windows Eudora Light Version 3.0.6 (32) Date: Fri, 17 Dec 2004 10:09:12 -0500 To: rsgb_lf_group@blacksheep.org From: Bill de Carle In-Reply-To: <41C2DE97.6030908@freenet.de> References: <3.0.6.32.20041216165631.00c70d20@magma.ca> <3.0.6.32.20041216165631.00c70d20@magma.ca> Mime-Version: 1.0 X-SPF-Result: relay.thorcom.net: 216.168.96.52 is neither permitted nor denied by domain of magma.ca X-Spam-Score: 0.0 (/) X-Spam-Report: autolearn=no, Subject: Re: LF: AFRICAM 5.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Checker-Version: SpamAssassin 2.63 (2004-01-11) on post.thorcom.com X-Spam-Status: No, hits=0.0 required=5.0 tests=none autolearn=no version=2.63 X-SA-Exim-Scanned: Yes Sender: owner-rsgb_lf_group@blacksheep.org Precedence: bulk Reply-To: rsgb_lf_group@blacksheep.org X-Listname: rsgb_lf_group X-SA-Exim-Rcpt-To: rs_out_1@blacksheep.org X-SA-Exim-Scanned: No; SAEximRunCond expanded to false X-Spam-Filtered: by PlusNet SpamCORE (v3.00) Content-transfer-encoding: 8bit At 02:26 PM 12/17/2004 +0100, you wrote: >Thanks Bill for the new AFRICAM - I will try later to run it in a DOS >box under WinXP, or reanimate my stoneage notebook. AFRICAM doesn't run well under Windows, even in a "DOS" box - I find it makes errors when it measures the internal CPU clock speed, and when it measures the sound card (and possibly even the Sigma-Delta interface?) sampling rate. Looks like Windoze is taking a lot of machine cycles in long enough blocks that I can't service all interrupts in the usual time. It runs properly if you boot to DOS and avoid Windows altogether. >As I am playing with >a faster version of MSK for keyboard-to-keyboard communications, I >appreciate your work as a nice test suit. >On this occasion: Do you use one of the "classic" MSK >demodulators/decoders like "de Buda" or "Massey/Hodgart", or is it the >same basic approach as for other PSK modes (chain of decimators+low pass >filters, and observe the phase of the complex output signal) ? The way I do it is to multiply the incoming audio with a phasor rotating at the nominal carrier frequency (800 Hz). The result has sum and difference components. Let's say, for example, we are running at MS100 (10 bits per second). The difference component will be either +2.5 Hz or -2.5 Hz. The sum will be around 1600 Hz. The basic idea is to measure the difference frequency. Unfortunately the high freq component in the mixer output causes problems so I take it (mostly) out by basically adding up 10 samples (at 8200 samples per second) - which makes an effective and cheap lowpass filter. I just use a 10-slot running average accumulator and sum the complex values into it as they appear, subtracting the reading from 10 samples ago each time as well. Then I measure the low frequency component by taking the phase at each sample point, seeing how much the phase increased or decreased from the previous sample point, then fitting a regression line to the increasing or decreasing phase values. The slope of the line is how many degrees (radians) the phase increased per sample averaged over the bit time. That is easily translated into the frequency of the mixer's output, but all I really care about is the polarity. Plus slope means a "1" was received, minus slope means a "0". I use the actual numerical slopes to estimate how far off the carrier we are tuned, but that is secondary to the detection process. The linear regression works better than a straight average over the bit time because it does a better job of making the answer independent of the jitter (noise) at each sample point. A better way is to break it up into two channels staggered one with respect to the other by one bit time. Then you can multiply each channel by a 2.5 Hz phasor to reduce the difference freq to DC, and simply add them up over two consecutive bit times to get the phase. The original bitstream can then be reconstructed from the two polarities in the two staggered channels. The problem is that way works only when we have a good phase for the local oscillator clock at 800 Hz - and it is difficult to get it from the signal when the SNR is poor. Also, it depends strongly on the Tx sending pure MSK, which most people will not be able to do. I think the FSK approach is a good compromise to start testing with. You might want to download the latest version of MSKGEN.COM from my website. It uses a soundcard to make pure MSK, but if you invoke it with "NOMOD" it outputs a pure 800-Hz carrier. Run that through *the same* soundcard for calibration. I tried sending MSK from one soundcard to another at 800 Hz - it doesn't work well at low baudrates because the darned soundcards are *way* off in their sampling rates. The stability is OK, but the absolute errors are unacceptable and it would be too much trouble to trim them. 73, Bill VE2IQ