10-20-2008 09:54 AM - edited 10-20-2008 10:01 AM
Hi Steve,
Yes, QAM is quite tricky. I've tried this with all kind of sound cards and the result turns out to be to be pretty much the same. Using a direct demodulation technique, the lower QAM takes fewer tries to group together. For instance, 16 QAM takes about 5 out of 10 sampling attempts. 32 takes 5 out of 20 attempts. While 64 QAM becomes impossible.
However, I was able to have some lucks with Adaptive Equalizer. It works close to perfect. Three problems with this technique: (1) Unfortunately, the difference betwen adaptive equalizer demod vs.the regular demod is that adaptive equalizer doesn't provide any synchronization preamble search. So even though I'm getting clean constellation reading but I'm not able to use the data due to multiple phase ambuiguities. (2) Due to reason (1), adaptive equalizer demod block does will not provide any phase ambiguity fix so the output bits results will not make sense. (3) It doesn't automatically allign to ideal symbol location automatically, the end user have to manually hit set/reset when he/she sees it. I need to do this all automatically to save times, most of the end users here are technicians, they're not engineer so they wouldn't know what to do when they see it.
Also, would you happen to know if there is anyway to redefine the state definition for PSK or QAM demodulator block? For instance with an 8PSK:
Symbo 0 -> 0 degree
Symbo 1 -> 45 degree
Symbo 2 -> 90 degree
Symbo 3 -> 135 degree
Symbo 4 -> 180 degree
Symbo 5 -> 225 degree
Symbo 6 -> 270 degree
Symbo 7 -> 315 degree
It doesn't appears to have mapped this way at all. Instead, it appears to have mapped them to some predefined factory setting so right now I'm stuck with not able to decoding. Would you happened to know the factory state definition for 8PSK, 16 QAM, 32 QAM, 64 QAM, 256 QAM, and 512 QAM by any chance? I couldn't locate this anywhere in the document that was shipped with the installation disc. It would be nice to know this information so I can remap the symbol output back to where it belongs.
Thanks
10-21-2008 10:17 PM
Hi lavalava,
The symbol map is predefined and I have posted a simulation example that describes 16 QAm and how the symbols map in a simulation VI. The symbol mapping is defined in a manner such that transitions between adjacent points involve only changing 1 bit. You can define your own QAM symbol map and there is an example that does this which I included below. I was not able to run your most recent code since I was missing the audio sample5.vi and it was configured to stream from the sound card. I tried to modify the VI to read from the previous 64 QAM file that you posted without luck. Are you able to demodulate the 64 QAM signal by implementing the Equalization? Let me know if you have any questions about creating your own symbol maps.
How to Create a Custom QAM Symbol Map Using Modulation Toolkit
http://digital.ni.com/public.nsf/allkb/65790619262D402B86257260000C912D
RF Simulation Demo: QAM Symbol Mapping
http://zone.ni.com/devzone/cda/epd/p/id/5100
10-27-2008 02:13 AM
Thanks Steve,
Quick question, when I actively sampling the input audio ....let's say 15,000 samples/ch, between each 15,000 samples I don't seem to get continuous reading. MT seems to drop a small portion toward between the ending and beginning of each 15,000 sample in a loop. Would you know if there is anyway to buffer it so that it would not drop when capturing in continuous mode? I can get by for now using a playback mode but contiuous mode seems quite hard to achieve, not sure if there is a way to go about doing this.
10-27-2008 04:52 PM
Guys,
I'm getting error when creating a custom symbol map for 32 QAM, I've tried everything and still no avail. Any suggestions?
10-27-2008 07:47 PM
Hi lavalava,
To address your 2nd last post, it sounds like you are reading in the 15,000 points that you are specifying, but then you are processing those points and once processing finishes, you read another set of 15,000 points. The way to get around this issue is by taking advantage of the producer-consumer loop structure. You can find a template for this in LabVIEW by looking under File>>New... and then choosing VI>>From Template>>Frameworks>>Design Patterns>>Producer/Consumer Design Pattern (Data). This template uses queues to pass data between the parallel while loops. The top loop (producer) will loop acquiring data and putting it into the queue (a FIFO in RAM). The lower loop (consumer) will remove data from the queue and process it as fast as it can. This setup allows the acquisition to occur at a rate that is independent of the data processing. The one issue to look out for is that the queue can build up, which after a long period of time can slow down your computer, so try to balance the rate data is being put into the queue with the rate data is being removed from the queue while taking into account the duration of the run time. Please let me know if my assumption is incorrect, but this should help your issue.
Looking now at the 32 QAM with a custom map, you were very close to getting it working. This case is not documented very well and I will be working to improve the documentation after discovering how to set this up. You will need to put negative numbers into the array for the nonexistent values of the constellation. For your scenario this would mean negative values would be in each corner. This issue does not arise when the QAM number can be created by a square 2 dimensional array.
10-28-2008 01:21 PM - edited 10-28-2008 01:26 PM
Steve,
Thanks for the suggestion using producer/consumer configuration. When I searched the example finder, the only related example shown is MT niRFSA QAM Continuous Demod.vi, unfortunately we don't have the PXI addon so we can not run this example. As a matter of fact, it wouldn't open at all. However, we have purchased licenses of MT so is there anyway you could please post this example? A picture snapshot will do just fine. I'm not quite farmiliar with using produer/consumer configuration.
Thanks
10-28-2008 09:57 PM
Hi Steve,
File getAudioInputAndDemodQAM0.vi is what I'm having problem with it. It's really the same concept as getAudioInputAndDemodQAM1.vi, except I did what you suggested with master/slave configuration and it didn't seems to like it for some reasons, could you please give me some hints as to why there is queing error?
10-28-2008 09:57 PM
10-28-2008 10:03 PM - edited 10-28-2008 10:04 PM
Also, I can't seem to get the file "getAudioInputAndDemodQAM1.vi" to align the receiving symbols to its ideal symbol location. Could you please tell me if there is anyway to do it ?
Is it possible that the modulation schemes involved layering of two different modulation types: 8PSK on top of 64QAM?
Is this the reason why it keeps rotating instead of centering? Again, I didn't have this problem using the Agilent Vector Signal Analyzer machine so this tells me it must be doable. Am I missing something here?
10-28-2008 10:08 PM - edited 10-28-2008 10:16 PM
And when I use MT to modulate, is it possible to modulate 2 different modulations scheme as shown in the red marks above?
For instance, if I modulate a bspk and 8psk together, I can easily map the 0 and 1 of bpsk to 0 and 4 on an 8PSK so that's pretty easy since they're both sharing common denominator but 8PSK on top of 64 QAM would not yield perfect square, instead, I'll always get ...urgh, a circle. Is it possible to do it with MT and will it transmits as a circle as shown in the red diagram above instead of square?
thanks