Comments (5)
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.
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.
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.
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.
@EdFuentetaja thanks for the hard work. Look forward to seeing what you've come up with.
from dsd.
Related Issues (20)
- cmake error
- No DSD ppa for Ubuntu 20.4? HOT 6
- error make HOT 23
- Error while building HOT 1
- Issue with Portaudio
- Audio Samples for validating
- Moto BP
- Unable to record and listen simultaneously
- help
- Strange Audio Output HOT 5
- NXDN96 issues
- dsd: error while loading shared libraries: libmbe.so.1 HOT 1
- Improve exception safety with smart pointers
- Why not tetra, please add tetra decoding thank you
- Question to DMR Message Decode HOT 4
- severly garbaled audio HOT 3
- dsd cant connect with device
- Test files for NXDN and P25
- No audio output - An error occured while using the portaudio output stream HOT 1
- Binary fails to link: `Undefined symbols: "__ZN4itpp3VecIiE3setERKSs"`
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dsd.