szechyjs / dsd

Digital Speech Decoder
Other
681 stars 267 forks source link

Fix the C4FM demodulation in P25 Phase 1 #19

Open szechyjs opened 10 years ago

szechyjs commented 10 years ago

From Boatanchor on RR:

Fix the C4FM demodulation in P25 Phase 1. (GFSK works perfectly, but C4FM mode doesn't work at all for many users).

EdFuentetaja commented 10 years ago

I'll take a look at this. The C4FM output makes many mistakes, even with strong an clean signals. Shouldn't be like this.

Has anybody tried already the C4FM from GNU Radio?

Regards,

Ed

EdFuentetaja commented 10 years ago

Hellow. I'm experimenting with a demodulator based on a Gaussian fit. The idea is to model the analog sample values of each of the 4 possible symbols with a Gaussian and then see which one fits better the given input. Seems to be working better than the original approach.

Wonder if anybody would be interested?

EdFuentetaja commented 10 years ago

Hello, I've spent some more time on this, specifically focused on P25 signals. The Gaussian fit makes an improvement but even for ideal reception conditions the BER doesn't go lower than 0.5%. Why it's not zero has been nagging me for quite some time. This is what I've learned so far:

Now, I don't think that the brute-force approach is the right one for a practical system and I'm not sure I should continue on that line. I have no clue what a "stochastic gradient clock recovery" algorithm looks like and I'm no expert in those matters, but if there's anyone able to came up with some hints I might be able to dedicate some more time to this.

Kind regards,

EdFuentetaja commented 8 years ago

Hello. I had the chance to dedicate the last few weeks to this issue. I can confirm that the errors I'm observing on P25 demodulation got their root cause in the poor symbol synchronization. I have developed an efficient method to estimate precisely the sampling timing error on C4FM signals, both phase and frequency, and with that I can correct the sampling timing on the fly and demodulate a P25 signal over extended periods of time with 0% BER. The method is based on the analysis of the times the signal crosses by zero. I think it's innovative and not trivial for me to explain how it works so my plan now is to write a document and share it for review. The method will replace the original DSD "getSymbol" without additional side effects, hopefully.

szechyjs commented 8 years ago

@EdFuentetaja thanks for the hard work. Look forward to seeing what you've come up with.