Re: Noise squelch for FM modes
Posted: Sat May 29, 2021 9:48 am
Do you have a simple signal generator, Simon? (As if I need to ask. A spare Lime can provide what is needed.)
Generate a very weak FM modulated signal with variable amplitude and variable modulation. To a large extent a second SDRC running its TX can do that. It's just for confirmation that the noise squelch works.
Split the demodulated FM audio into low pass filtered audio for output and a noise squelch channel. Optionally put some delay on the audio channel. The filter should have 40dB to 60 dB attenuation below about 3500 Hz with "0dB" attenuation about 4600 Hz. For the audio low pass filter "0dB" to about 3500 and 50 dB-ish at 4600 - or even tighter. It doesn't matter much.
for( int i = 0; i < InLength; i++ )
{
FTYPE mag = MFABS( sqbuf[ i ] ); // get magnitude of High pass filtered data
// mag is the squelch control exponential filter squelch magnitude.
m_SquelchAve = ( 1.0f - m_SquelchAlpha ) * m_SquelchAve
+ m_SquelchAlpha * mag;
}
Fish around for a good value range for the squelch setting. It is VERY good and insanely fast acting. Once you get the range it is not overly sensitive to set it but it picks up sub dB signal level changes down where there is noise on the demodulated signal. It is very sensitive to SNR so you can pretty reliably select the SNR you want and ignore EMI noise changes.
The only thing that spoofs it is intentional noise jamming. So a combination of signal amplitude squelch and noise squelch may be required where sophisticated jamming is expected.
{^_^}
Generate a very weak FM modulated signal with variable amplitude and variable modulation. To a large extent a second SDRC running its TX can do that. It's just for confirmation that the noise squelch works.
Split the demodulated FM audio into low pass filtered audio for output and a noise squelch channel. Optionally put some delay on the audio channel. The filter should have 40dB to 60 dB attenuation below about 3500 Hz with "0dB" attenuation about 4600 Hz. For the audio low pass filter "0dB" to about 3500 and 50 dB-ish at 4600 - or even tighter. It doesn't matter much.
for( int i = 0; i < InLength; i++ )
{
FTYPE mag = MFABS( sqbuf[ i ] ); // get magnitude of High pass filtered data
// mag is the squelch control exponential filter squelch magnitude.
m_SquelchAve = ( 1.0f - m_SquelchAlpha ) * m_SquelchAve
+ m_SquelchAlpha * mag;
}
Fish around for a good value range for the squelch setting. It is VERY good and insanely fast acting. Once you get the range it is not overly sensitive to set it but it picks up sub dB signal level changes down where there is noise on the demodulated signal. It is very sensitive to SNR so you can pretty reliably select the SNR you want and ignore EMI noise changes.
The only thing that spoofs it is intentional noise jamming. So a combination of signal amplitude squelch and noise squelch may be required where sophisticated jamming is expected.
{^_^}