Adding DCS - #1137
Conversation
Make it so you can listen to multiple CTCSS or DPL tones on a single channel. Add search mode S in Tone -> Search for CTCSS or DPL tone on that channel Tone = 0 -> Do nothing no gate
…s channel number instead of the transmissions tg number. Since all calls for multichannl are recorded under the top channels channel id.
…o recieved within callTimeout. This makes sense, and helps it stop flapping open/closed or being stuck open all the time and eating CPU
…me Out, show when we close naturally.
Tone squelch refactor & DCS Let's get this party started.
|
7b85068 Tone-related functions have been removed from global_structs.h and re-homed into a new tone_manager. This should also help with troubleshooting/compiling in the future as global_structs.h is widely included across the whole project. |
Co-authored-by: Copilot <copilot@github.com>
|
98a5d58 The new custom squelch block residing at Even if that collision is unlikely, OOT blocks should follow There are other OOT t-r blocks to transition to |
Co-authored-by: Copilot <copilot@github.com>
|
742550a - Remove vestigial code regarding a previous notched-reference implementation that is no longer present, as well as references to a non-existent While otherwise unused,
|
Co-authored-by: Copilot <copilot@github.com>
|
e864c5a - Removed mutex from CTCSS and DCS main Guards remain where appropriate, such as between reset() and get_verdict(). |
Co-authored-by: Copilot <copilot@github.com>
|
8b10b13 - When an explicit CTCSS or DCS tone was set, a side analysis was conducted on the unselected mode for debugging purposes. For this to have useful value, it would require simultaneous use of CTCSS and DCS tones in the same transmission, which is an improbable configuration to use as a default. Even for debugging purposes, the non-indicated tone type would never clear the other squelch, so the additional resource cost doesn't have the ability to do thing it might purport to address (e.g. notify the user that a DCS-only channel was enabled by a specific CTCSS tone). This does not change search mode, which will continue to analyze both tones separately and report back the highest confidence winner. |
|
b8a0756 - CTCSS behaved largely the same regardless of whether it was gating on a single tone, or operating in an open search mode. It would lead to odd scenarios where short transmissions would successfully open squelch, but the detection algorithm would be unable to finish scoring the probable tone. This eliminates search in single-tone/single-frequency configurations. If the received CTCSS tone opens squelch, it does not need additional scoring as it already is the correct tone. This should speed up tone recognition for short duration calls, and ensure that they send the tone data downstream upon conclusion. |
|
02bc53d - Bring DCS to functional parity with the CTCSS decoder where it has a better split between single-code gating and open search. When a code is input into the channel.csv, only the indicated code and its cyclic alias will be recognized (e.g. D023N and D047I have identical bitstreams). Previously, the DCS block recognized the indicated code and its inverse (e.g. D023N and D023I) as well as both cyclic aliases (D047I and D047N). Single-code enabled channels should no longer "latch on" to incorrect, but otherwise valid DCS codes and get stuck that way. When in search mode, the existence of a valid DCS code should always take precedence over probable CTCSS tones detected by the gnuradio block. This is for multiple reasons:
|
|
56b40d5 - Per ongoing reports in discord, squelch options seem to have issues with interference from adjacent channels. Initial investigation shows that the filter used by the channelizer is likely too wide and shows overlap with neighboring channels. This small edit should establish a passband across the center +/- 5200 Hz, and establish a stop band at the boundary, not a couple kHz inside the next channel. |
|
I have been unable to get this branch to work after numerous attempts, and after being told it was me, my config, or my channel file... . I finally decided to get my RF Service monitor out to try to make sense of what's going on, and I spent days doing so. I'm running a BladeRF xA4 (With a modifed source block to actually use libbladeRF) with a 22Mhz bandwidth covering 54 UHF channels. With the help of Claude, we found that both the PL and DCS blocks were subjected to low frequency interference on the pipe to the PL/DCS decoders that prevented proper decodes of PL and DCS signals. A a dedicated 55Hz highpass pre-stage was added to protect the PL decode and DCS's loose lowpass+highpass combo was replaced with a properly designed, tightly-centered bandpass — 4th-order Butterworth, 100–170Hz passband filter. The cause of the interference may be unique to my BaldeRF , but adding these filters should pose no harm to other receivers and can only be a positive change. There was also a logic bug in how it computed its noise floor from the two immediately-adjacent table entries, and for 114.8. Many of my channels used PL 114.8 so this explains a lot for me. This was corrected as well. I now have this running, and everything is finally working well. I am going to try to attach all four files that were modified although I suspect it wont work. More info on what was found: The floor-selection algorithm bug (114.8Hz-specific) — this had nothing to do with interference at all. It was a pure logic bug: decode mode computed its noise floor from the two immediately-adjacent table entries, and for 114.8, those neighbors (110.9, 118.8) happened to sit close enough that the tone's own real signal leaked into them, poisoning the floor used to judge itself. We proved this with a controlled bench test — the correct tone consistently failed while a mismatched tone passed, against the same real signal. Fixed by searching outward for a properly-spaced floor reference instead of always using the fixed ±1 neighbors. For DCS, by contrast, the interference was the only root cause we ever found — every other layer (codeword math, parsing, class-key logic, timing, sync detection) was individually traced and confirmed correct, with nothing else wrong. Here's the list of the files that were changed. trunk-recorder/gr_blocks/ctcss_squelch_ff.h trunk-recorder/gr_blocks/ctcss_squelch_ff.cc trunk-recorder/gr_blocks/dcs_squelch_ff.h trunk-recorder/gr_blocks/dcs_squelch_ff.cc Summary ctcss_squelch_ff.cc.txt |
No description provided.