[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linrad] DSP Question


>I've begun to picture the complex LO as a phasor that rotates. To my
>understanding,  it will be positive during half of it's rotation and
>negative during the other half. Does that mean that this replica will change
>as the phasor rotates, or are you referring to the direction in which the
>phasor rotates?
When I say positive or negative range, I mean positive or negative 
A real signal, let's say a carrier at 7 MHz, has a positive component at 
7 MHz, and a negative one
at -7 MHz. This is what causes the image responses when you do a mixing.
To eliminate one or the other component, you need an analytic 
description of the signal, which is
done with the two components I and Q. That's why they are so used. They 
permit you to multiply
two analytic signals, having just the sum as a  result, the difference 
is gone. 
Let's make an example for a direct conversion Rx :

Carrier at 7 MHz,   LO at 7 MHz, both real signals, which means carrier 
at +7 and -7 MHz,
Lo at +7 and -7 MHz.  Now multiply them together. The result is a 
combination of the 4 frequencies :
(+7) + (+7) = +14 MHz
(+7) + (-7)  =  0 MHz
(-7) + (+7)  =  0 MHz
(-7) + (-7)  = -14 MHz
The 14 MHz are easily filtered away with a low pass filter, but the DC 
component is nasty, because
you have the original LSB and USB of the 7 MHz carrier irremediably 
mixed together, as the zero IF
is composed of the original +7 MHz signal pushed down to zero, having 
thus its USB going from
zero to let's say 3 kHz, and the LSB going from zero to -3 kHz, _AND_ 
the -7 MHz component
pushed up to zero, with the LSB going from zero to +3 kHz, and the USB 
going from zero to -3 kHz.
At this point there is on this earth no way to separate USB from LSB.

Now keep the carrier at 7 MHz as a real signal, but make the LO an 
analytic signal, with just the positive
component. For this, you need to have the LO described by I and Q. What 
happens now ?
(+7) + (+7) = 14 MHz
(-7) + (+7) = 0 MHz
The component at zero IF isn't anymore the composition of two different 
signals, LSB and USB keep
their identities separate. In this example, you will have the LSB from 
zero to +3 kHz, and the USB
from zero to -3 kHz. They can now be individually selected, which can be 
called, with a loose term,
"demodulation". Leif is right in saying that it is not a true 
demodulation, as it is not an information
superimposed on a carrier, but let's use the word conventionally.

Of course, as the resulting 14  MHz and 0 MHz signals do lack their 
respective negative components,
they also are analytic signals, which means they must be described by I 
and Q.

Hope you are still with me ...:-) But if you sketch all this on paper, 
it is much more intuitive.

>Do I need to do this bandpass filtering before I do the complex FFT below,
>or can I use filtering in the frequency domain? If I do filter it here,
>should I decimate the sample to a lower sampling rate before doing the FFT?
The example above is of course for an hardware half-complex mixer, as 7 
MHz are intractable in
software. Working at much lower frequencies, if you do a low pass 
filtering in the the time domain,
before the FFT, then you can downsample, and perform the FFT at the 
reduced sample rate, with
performance advantages.

>I think I understand what you are saying, but let me make sure.  A graph
>would be helpful, but I'll try and explain my understanding in words.
>Lets say that I do a 1024 point complex FFT and the (complex) bins are
>numbered from 0 to 1023.  The contents of bins 0 to 511 represent the USB
>signal and bins from 1023 to 512 represent the LSB.
>To receive USB, I replace bin 1023 with the complex conjugate of bin 0, bin
>1022 with the CC of bin 1, 1021 with CC of bin 2 and so forth.
>To receive LSB, I replace bin 0 with the CC of bin 1023, 1 with the CC of
>bin 1022, etc.
Perfect ! You have grasped it exactly. It could be argued that may be 
there are other methods,
more computationally efficient to recover  (notice : I didn't say 
'demodulate' :-) the wanted audio,
but that is what I consider the most mathematically "elegant"...  and in 
any case if you want to
apply a bandpass or band reject filter, this is more easily done in the 
frequency domain.

>Thanks for the info on your SDRadio.  I downloaded the program and it looks
>pretty impressive. Is the source code of at least the demodulation
>available? A lot of time, I can understand an algorithm better if it's
>expressed in code, even if it's not in a language that I use.
The source code is not posted on a Web site, but I send it to those who 
ask for it. I will send
it to you as attachment to a private message. The compiler used is the 
C++Builder V6 from Borland,
and the sigproc package used is what you use as well, the Intel Signal 
Processing Library.

73  Alberto  I2PHD