Giter VIP home page Giter VIP logo

Comments (5)

EdFuentetaja avatar EdFuentetaja commented on August 20, 2024

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

from dsd.

EdFuentetaja avatar EdFuentetaja commented on August 20, 2024

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?

from dsd.

EdFuentetaja avatar EdFuentetaja commented on August 20, 2024

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:

  • By far, the best approach for the signal equalization (what you do to the signal after FM demodulation and before attempting to digitize it) is the "integrate and dump filter." This is the recommended approach on the P25 TIA document and has also been mentioned in the forums. The current cosine filter doesn't do much on P25 signals.
  • The integrate and dump filter requires a very precise timing of the symbol sampling. The TIA document mentions a "stochastic gradient clock recovery" but doesn't elaborate in its details.
  • The current implementation of DSD does a clock recovery (see method "getSymbol") on P25 signals essentially by looking at the zero crossings. Zero-crossings are assumed that should happen in the middle of the symbol and thus the timing can be adjusted forward or backwards. This implementation does a decent job and it is extremely simple and fast. However I believe its limitations are the root of the high BER even on ideal conditions. Besides, DSD doesn't implement a proper integrate and dump filter.
  • Using kind of a brute-force approach to calculate the ideal timing for each sample and applying an integrate and dump filter I was able to reduce the BER to 0.05% on the afore mentioned ideal conditions. With this the audio errors are reduced to almost zero. This improvement confirms the idea that a better clock recovery is crucial to the quality of the demodulation for P25.

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,

from dsd.

EdFuentetaja avatar EdFuentetaja commented on August 20, 2024

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.

from dsd.

szechyjs avatar szechyjs commented on August 20, 2024

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

from dsd.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.