parra
Newbie level 6
pll to decode ask signal
Hi,
I've got a amplitude modulated signal which comes from a RFID transponder, which after doing some filtering looks similar to the one on the attached picture. This signal is sampled with the help of an analog/digital converter (sample frequency 80kHz) and for further processing there is a DSP.
My question now: What would be the best and most effective way of demodulating the signal (so, for the example image, that the output of my DSP would be 101101000110)?
So far I've done it this way:
a) check if there has been a zero crossing:
-> sample[n-1]>=0, sample[n]<0 means falling edge
-> sample[n-1]<=0, sample[n]>0 means rising edge
b) counting the samples until the next zero crossing occurs. According to the sampling rate, there are usually eight samples per bit.
-> if 12 or less samples until next zero crossing, it has to be a 0 (when falling edge) or 1 (rising edge)
-> if 13...20 samples, it has to be a 00 (when falling edge) or 11 (rising edge)
-> if 21 or more samples, it has to be a 000 (when falling edge) or 111 (rising edge)
(other cases are don't care - there aren't more than three 0's or 1's in a row)
Of course I could add some adaptive threshold to improve performance when there is noise, but all in all the algorithm works.
Though - this algorithm just based on counting zero crossings somehow looks a bit rough and primitive to me. As I'm relatively new to all this digital signal processing and demodulation stuff, am I missing a more effective (error performance, processing time) way of demodulating such a signal?
Thanks for any suggestions,
parra
Hi,
I've got a amplitude modulated signal which comes from a RFID transponder, which after doing some filtering looks similar to the one on the attached picture. This signal is sampled with the help of an analog/digital converter (sample frequency 80kHz) and for further processing there is a DSP.
My question now: What would be the best and most effective way of demodulating the signal (so, for the example image, that the output of my DSP would be 101101000110)?
So far I've done it this way:
a) check if there has been a zero crossing:
-> sample[n-1]>=0, sample[n]<0 means falling edge
-> sample[n-1]<=0, sample[n]>0 means rising edge
b) counting the samples until the next zero crossing occurs. According to the sampling rate, there are usually eight samples per bit.
-> if 12 or less samples until next zero crossing, it has to be a 0 (when falling edge) or 1 (rising edge)
-> if 13...20 samples, it has to be a 00 (when falling edge) or 11 (rising edge)
-> if 21 or more samples, it has to be a 000 (when falling edge) or 111 (rising edge)
(other cases are don't care - there aren't more than three 0's or 1's in a row)
Of course I could add some adaptive threshold to improve performance when there is noise, but all in all the algorithm works.
Though - this algorithm just based on counting zero crossings somehow looks a bit rough and primitive to me. As I'm relatively new to all this digital signal processing and demodulation stuff, am I missing a more effective (error performance, processing time) way of demodulating such a signal?
Thanks for any suggestions,
parra