If you need assistance, please send an email to forum at 4hv dot org. To ensure your email is not marked as spam, please include the phrase "4hv help" in the subject line. You can also find assistance via IRC, at irc.shadowworld.net, room #hvcomm.
Support 4hv.org!
Donate:
4hv.org is hosted on a dedicated server. Unfortunately, this server costs and we rely on the help of site members to keep 4hv.org running. Please consider donating. We will place your name on the thanks list and you'll be helping to keep 4hv.org alive and free for everyone. Members whose names appear in red bold have donated recently. Green bold denotes those who have recently donated to keep the server carbon neutral.
Special Thanks To:
Aaron Holmes
Aaron Wheeler
Adam Horden
Alan Scrimgeour
Andre
Andrew Haynes
Anonymous000
asabase
Austin Weil
barney
Barry
Bert Hickman
Bill Kukowski
Blitzorn
Brandon Paradelas
Bruce Bowling
BubeeMike
Byong Park
Cesiumsponge
Chris F.
Chris Hooper
Corey Worthington
Derek Woodroffe
Dalus
Dan Strother
Daniel Davis
Daniel Uhrenholt
datasheetarchive
Dave Billington
Dave Marshall
David F.
Dennis Rogers
drelectrix
Dr. John Gudenas
Dr. Spark
E.TexasTesla
eastvoltresearch
Eirik Taylor
Erik Dyakov
Erlend^SE
Finn Hammer
Firebug24k
GalliumMan
Gary Peterson
George Slade
GhostNull
Gordon Mcknight
Graham Armitage
Grant
GreySoul
Henry H
IamSmooth
In memory of Leo Powning
Jacob Cash
James Howells
James Pawson
Jeff Greenfield
Jeff Thomas
Jesse Frost
Jim Mitchell
jlr134
Joe Mastroianni
John Forcina
John Oberg
John Willcutt
Jon Newcomb
klugesmith
Leslie Wright
Lutz Hoffman
Mads Barnkob
Martin King
Mats Karlsson
Matt Gibson
Matthew Guidry
mbd
Michael D'Angelo
Mikkel
mileswaldron
mister_rf
Neil Foster
Nick de Smith
Nick Soroka
nicklenorp
Nik
Norman Stanley
Patrick Coleman
Paul Brodie
Paul Jordan
Paul Montgomery
Ped
Peter Krogen
Peter Terren
PhilGood
Richard Feldman
Robert Bush
Royce Bailey
Scott Fusare
Scott Newman
smiffy
Stella
Steven Busic
Steve Conner
Steve Jones
Steve Ward
Sulaiman
Thomas Coyle
Thomas A. Wallace
Thomas W
Timo
Torch
Ulf Jonsson
vasil
Vaxian
vladi mazzilli
wastehl
Weston
William Kim
William N.
William Stehl
Wesley Venis
The aforementioned have contributed financially to the continuing triumph of 4hv.org. They are deserving of my most heartfelt thanks.
Registered Member #207
Joined: Sat Feb 18 2006, 05:14PM
Location:
Posts: 45
Hello,
I'm praying to the RF gods, here. Lets see if someone can fill in a couple holes in my understanding.
I am designing a circuit to recover data symbols from a FSK modulated RF signal. However, it seems my understanding has lead me into a couple brick-walls of confusion. Also, it seems my knowledge of sampling continuous time signals isn't what it used to be. Here's my situation.
Carrier Frequency: 2.25 MHz (it's actually a down converted IF frequency) Symbol Rate: 4800 symbols per second Operational Bandwidth: 12.5 KHz
Note: The operational bandwidth is determined not only by the FSK modulation scheme, but by filtering that is done prior to transmission. Regardless, the signal is specified to fulfill an emission mask of 12.5 kHz bandwidth on the carrier.
I'm not sure how I should go about sampling my continuous wave such that I can recover the digital data portion of it. Not to mention, what should my minimum sampling rate be to prevent aliasing? The Nyquist criterion reflects that I should sample the data at a frequency of at least twice the signal bandwidth.
- Does that mean I should be sampling at least 25,000 times per second (2 times 12.5 kHz)? Or, is it based upon the symbol rate (2 times 4.8kHz)?
- The digitizing sub-system I've put together that's responsible for digitizing the RF data provides me with I/Q data at a clock rate of 18 MHz (eg: 18 million samples per second), but it's tied into an adjustable decimation stage. Should my decimation stage be set to capture I/Q data at a rate of 25,000 times per second to fulfill the nyquist criterion? (eg: 18MHz / 720 = 25k)
How is digitization normally done? Anyone have any good links or resources for this kind of thing?
Registered Member #72
Joined: Thu Feb 09 2006, 08:29AM
Location: UK St. Albans
Posts: 1659
It all depends ...
Assuming your symbols are aligned and ISI-free, the final sampling rate only has to be 4800
However, if they are not aligned, but still ISI-free, it's quite usual to sample at 9600, and use the half-sample times to servo the sampling times into alignment.
If they aren't ISI-free, eg the transmitter has applied some sort of filtering, then you will need to inverse filter, and you will need to sample at over twice Nyquist, or north of 25kHz.
That's all assuming you have a nice clean channel. If you want to filter out your wanted channel fom noisy djacent channels, then you will need to sample at more than twice the total bandwidth of all the channels that are getting through your IF filter with significant energy.
How are you down-converting from your 2.25MHz IF? Analogue to IQ basebands, sub-sampling at a suitable sub-mutliple+0.25 of the IF, sampling at 9MHz (so the IF is fs/4 for convenient downmix?
Registered Member #207
Joined: Sat Feb 18 2006, 05:14PM
Location:
Posts: 45
Thanks for the information, Dr. Slack. That's exactly what I was looking for.
There's a significant receiver front end prior to the digitization of my IF at 2.25MHz, so I *shouldnt* need to worry about adjacent channel interference, or any noise from outside the operational bandwidth of channel I'm interested in. However, thanks for reminding me that inverse filtering is required. What I'm receiving will be far from ISI-free. Thus, inverse filtering will definitely need to be applied.
I'm converting from my 2.25MHz IF using a stand-alone digitizing subsystem IC from Analog devices. It does the analog to digital conversion, then translation into I-Q data automatically. It also provides decimation if need be. I've chosen a sampling clock of 18MHz for my 2.25MHz IF signal. My question about sample rate was an attempt to figure out how much further I should decimate my signal down from the native 18MHz sample clock.
Thanks again for your help, Dr Slack.
I guess the next step is compensation for imperfect carrier and sampling frequencies (eg: the reality of my IF not being *exactly* 2.25MHz, or my sampling clock not being *exactly* 18MHz). I suppose I'll have to come up with an algorithm that compensates my I-Q data. Otherwise, I wouldn't be seeing the same part of the IF frequency each time I take a sample. I assume this would help any phase noise issues or frequency jitter issues I have in my IF and sampling clocks as well... then onto the inverse filter, etc.
Registered Member #72
Joined: Thu Feb 09 2006, 08:29AM
Location: UK St. Albans
Posts: 1659
I notice that your chosen 18MHz sampling is an integer multiple of 4800. That's convenient, but not essential.
I would assume that the clock frequency is more or less right, decimate to your channel bandwidth of >25kHz, then do the ISI filter, then do symbol timing recovery. Even without doing clock frequency sync you can assume that your symbols will stay in sync for many 100s or 1000s of symbols, assuming even modest accuracy for the 18MHz and the 4800, which is job done if the data is bursted, or nearly done if it's continuous.
Of course most of this is buried in your doozy AD chip. I'm sure they have app notes on how to use it. Any advice I gave would be based on first principles, which might all be moot if the chip contains everything you need to get from RF to bits.
Registered Member #207
Joined: Sat Feb 18 2006, 05:14PM
Location:
Posts: 45
Thanks again for your help, Dr Slack. You're right. I'm lucky enough to have *most* of the grunt work done in the chip.
Taking this thread slightly off topic now: Do you have any suggestions for forming my inverse filter? Obviously, I have the coefficients of the filter that encodes the symbol stream to baseband (prior) to transmission. And, I'm at the step, with respect to receiving and demodulation, that I have access to baseband, again.
However, I can't seem to turn my baseband back into a symbol stream effectively.
My encoding filter isn't anything fancy, it's simply a raised cosine filter. Google provides a lot of good links for filtering with a RCF, but not too much on inverse-filtering.
Registered Member #72
Joined: Thu Feb 09 2006, 08:29AM
Location: UK St. Albans
Posts: 1659
A raised cosine filter is ISI-free, so no inverse filter to design.
If you have FSK at baseband, it's not going to look obviously like data. You will need to demodulate it to frequency, or to phase changes, and sample those.
Registered Member #207
Joined: Sat Feb 18 2006, 05:14PM
Location:
Posts: 45
Yeah, sorry. When I was referring to ISI earlier, I was intending to convey some value of sampled baseband that sits between two symbol states due to the "blending" (in the time domain) a raised cosine filter does. I understand this isn't the conventional understanding of ISI. And I agree that a raised cosine filter would remove ISI from a circuit. The way I was referring to it was not correct.
I mean, with a symbol rate of say 4800 symbols per section, if I were able to sample my baseband at *exactly* center symbol, I would receive a value that is directly proportional to whichever symbol was received at that time. However, if my sampling time is off, I'll be capturing some value that is "off symbol".
And, as you mentioned, due to the "lowpass" nature of a raised cosine filter, there's really nothing I can do to restore a perfect series of impulse functions, versus time, that represent my symbol stream. Naturally, this is because I would have to make an "inverse filter" that adds an infinite number of high frequency components to my baseband signal. Thus, undoing the raised cosine.
However, I was hoping there was something I could do such that it would be easier for me to determine center symbol. Or at least a different approach.
Even if I "demodulate it to phase changes", if i'm not sampling my baseband at center symbol, i'm going to be at some intermediate between-symbol state that isn't easily resolvable to the reality.
Registered Member #72
Joined: Thu Feb 09 2006, 08:29AM
Location: UK St. Albans
Posts: 1659
It's not so much that a rasied cosine filter removes ISI, it's that it doesn't add it. When a link has to work at maximum efficiency, most bits per occupied Hz and most receiver resistance to noise, a root riased cosine is used at both transmitter and receiver. The product of both filters is then a raised cosine, meeitng the ISI free criterion.
The official way to servo your sampling instants onto the correct symbol timing is to use a "Costas Loop". All professionals do it like this. Wikipedia has an entry on it, but it's far too vague to be useful. It points to other papers which might be more help, though a quick look at the "practical" one looked heavy going, and was for BPSK rather than FSK. The principles are the same, but it's one removed from what you need.
However, it turned out that many moons ago, before I'd met said loop, I had to demodulate some data, and invented what I called the "velocity method", which is rather more intuiitive. Sample the demodulated signal at perhaps 10x the symbol rate, then plot its absolute rate of change against a time axis modulo the symbol period. The method is based on the observation that the speed will tend to peak mid-way between symbols, and will be lower, or zero, depending on the data, at the symbol sample points. Once you've collected data for several 10s of symbols, the pattern will emerge, and you can adjust your sampling times accordingly.
In retrospect, the velocity plot is just the differential of the better-known eye-diagram, which also shows you where to sample.
This site is powered by e107, which is released under the GNU GPL License. All work on this site, except where otherwise noted, is licensed under a Creative Commons Attribution-ShareAlike 2.5 License. By submitting any information to this site, you agree that anything submitted will be so licensed. Please read our Disclaimer and Policies page for information on your rights and responsibilities regarding this site.