User talk:Muaddib
Application/Goals
Introduction
Sometimes a DSP application will call for signal detection of an intermittent signal (only present in the spectrum part of the time). A simplistic way to detect signal is by way of a frequency domain threshold, when an FFT bin exceeds that threshold the signal is 'detected'. Using a 'dumb' threshold would be a first obvious choice for triggering a detection event. The threshold level is the same across the entire spectral window and it is set to a value above the observed noisefloor, but below the minimum level of a particular signal we are trying to detect. With this simple approach (a straight line across the spectrum), a detection event is triggered anytime the threshold is exceeded. Ideally our threshold would only trigger on the specific signals we want to detect, those signals may be clustered together in frequency in a range or band contained within the spectral observation window. If we restrict the detection criteria to only a simple level threshold, some signals within our observation window may trigger a detection in error (since we only want to detect signals in a subband of our observation window) If we can restrict the threshold to not only power, but also frequency, we can still look at a large frequency range and see what else is present, but only trigger a detection if the threshold is crossed within the defined portion of spectrum.
Goals
Generate Synthetic RF Spectrum with Intermittent Carriers
- broadband noise
- narrowband signals with intermittent behavior
- a large wideband signal
Set Visual Boundary Lines around a segment of the Frequency Spectrum and a Threshold Level
- Visualize the Synthetic RF Spectrum in the Frequency Domain
- Create an adjustable threshold (horizontal line) that is displayed in the frequency window and also can be manually adjusted by the user.
- Add upper and lower frequency boundaries (vertical lines) which will restrict the threshold trigger to signals within the boundary box.
- use python conditional statements to trigger a file recording when the threshold is crossed (detection)
Generate 'Synthetic RF Spectrum'
In the following example we will: Generate a synthetic signal for testing. It is assumed that you are comfortable enough in GNURadio to understand what these blocks are doing.
This portion of the flowgraph:
- generates gaussian noise for the overall noisefloor (simulating environmental broadband noise)
- Simulates a wideband carrier by lowpass filtering a noise source that is uncorrelated with the noise in the overall spectrum
- Creates two narrowband carriers which are each modulated by square waves of different frequencies to simulate intermittent transmissions
Create A Visual Utility to Set Detection Boundaries for Frequency and Level
This portion of the flowgraph is where we get creative with Vectors.
Start by considering a simple case of vector length 9, where the vector values are [-1000,-1000,-1000,-1000,+1000,-1000,-1000,-1000,-1000]. On a plot, we get a shape like this ____|____ where the flat part at the bottom is 8 values of -1000 and one value in the middle (index 5) with value +1000. In GNURadio when we represent baseband samples as RF signals in the frequency domain (QT Frequency Sink) we limit the y-axis of the observation window to defaults of +10dB and -140dB, because we won't likely be able to receive signals greater than say +20 on a relative scale with common A/D's in SDR's. Therefore, if we insert a vector into a QT Vector GUI with values that exceed our viewing window, we will only see a vertical line in the window for the value of +1000. We can use that line as a boundary using some array logic in with python expressions.