c966f1cb5a
Add sizeToContents in ChannelGUI and FeatureGUI, called when widget is rolled, so we can remove resizing code from all of the individual channels and features. In RollupContents, use minimumSizeHint for calculated size, so that minimumWidth can come from .ui file. In DeviceGUI::sizeToContents(), call adjustSize(), so Device GUIs start out at minimum needed size (which should restore appearance prior to last patch). In stackSubWindows, use available space for channels if no spectrum/features present. In stackSubWindows, fix spectrum from being sized too big, resulting in scroll bars appearing. Reset user-defined channel width in stackSubWindows, when channels are removed. Don't stack maximized windows. There's one hack in Channel/FeatureGUI::maximizeWindow(). It seems that when maximimzing a window, QOpenGLWidgets aren't always paint properly immediately afterwards, so the code forces an additional update. I can't see why the first call to paintGL doesn't work. |
||
---|---|---|
.. | ||
CMakeLists.txt | ||
nfmmod.cpp | ||
nfmmod.h | ||
nfmmodbaseband.cpp | ||
nfmmodbaseband.h | ||
nfmmoddcs.cpp | ||
nfmmoddcs.h | ||
nfmmodgui.cpp | ||
nfmmodgui.h | ||
nfmmodgui.ui | ||
nfmmodplugin.cpp | ||
nfmmodplugin.h | ||
nfmmodsettings.cpp | ||
nfmmodsettings.h | ||
nfmmodsource.cpp | ||
nfmmodsource.h | ||
nfmmodwebapiadapter.cpp | ||
nfmmodwebapiadapter.h | ||
readme.md |
NFM modulator plugin
Introduction
This plugin can be used to generate a narrowband frequency modulated signal. "Narrowband" means that the bandwidth can vary from 1 to 40 kHz.
Interface
The top and bottom bars of the channel window are described here
1: Frequency shift from center frequency of transmission
Use the wheels to adjust the frequency shift in Hz from the center frequency of transmission. Left click on a digit sets the cursor position at this digit. Right click on a digit sets all digits on the right to zero. This effectively floors value at the digit position. Wheels are moved with the mousewheel while pointing at the wheel or by selecting the wheel with the left mouse click and using the keyboard arrows. Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2.
2: Channel power
Average total power in dB relative to a +/- 1.0 amplitude signal generated in the pass band.
3: Channel mute
Use this button to toggle mute for this channel.
4: Channel spacing presets
Clicking on the "CS" button will apply RF bandwidth, AF bandwidth and FM deviation settings according to the channel spacing scheme selected in the combo box as follows:
CS (kHz) | RFBW (kHz) | AFBW (kHz) | FM Δ (±kHz) | β |
---|---|---|---|---|
5 | 4.8 | 1.7 | 0.7 | 0.43 |
6.25 | 6 | 2.1 | 0.9 | 0.43 |
7.5 | 7.2 | 2.5 | 1.1 | 0.43 |
8.33 | 8 | 2.8 | 1.2 | 0.43 |
12.5 | 11 | 3 | 2.5 | 0.83 |
25 | 16 | 3 | 5 | 1.67 |
40 | 36 | 9 | 9 | 1 |
- All these settings apply the Carson's rule: RFBW = 2 × (FMΔ + AFBW)
- The 12.5 and 25 kHz channel spacings correspond to standard 11F3 and 16F3 settings respectively and are widely accepted and mostly used
- For spacings lower than 12.5 kHz values are empirically built using Carson's rule from β=0.43 which is the only standard provided
- For spacing higher than 25 kHz values are derived from an old 36F9 standard.
When you are lost with the RF, AF bandwidths and FM deviation settings you can always come back to these standards and generally get good results.
When changing the RF bandwidth the channel spacing selection in the combo box is adjusted to fit within this bandwidth.
5: Audio Filters
- The slider controls the bandwidth in khz of the modulating signal filtered before modulation.
- The "P" switch button next activates or de-activates pre-emphasis (fixed 120 μs)
- The rightmost button next activates or de-activates 300 Hz highpass filter when no CTCSS nor DCS is active
6: RF bandwidth
This is the bandwidth in kHz of the channel signal filtered after modulation.
7: Frequency deviation
This is the peak FM deviation in ±kHz that will be effective for nominal (1.0) audio volume
8: Volume
This is the volume of the audio signal from 0.0 (mute) to 2.0 (maximum). It can be varied continuously in 0.1 steps using the dial button.
9: Level meter in %
- top bar (beige): average value
- bottom bar (brown): instantaneous peak value
- tip vertical bar (bright red): peak hold value
You should aim at keeping the peak value below 100% using the volume control
10: Input source control
10.1: Tone input select
Switches to the tone input. You must switch it off to make other inputs available.
10.2: Morse keyer input select
Switches to the Morse keyer input. You must switch it off to make other inputs available.
10.3: Tone frequency (kHz)
Adjusts the tone frequency from 0.1 to 2.5 kHz in 0.01 kHz steps
10.4: Audio input select and select audio input device
Left click to switch to the audio input. You must switch it off to make other inputs available.
Right click to select audio input device. See audio management documentation for details.
10.5: Audio input compression
Toggles the compressor for the audio input.
11: Audio feedback
Activate or de-activate the input source audio feedback
12: Audio feedback volume
Adjust audio feedback volume
13: CTCSS switch
Checkbox to switch on the CTCSS sub-audio tone
14: CTSS tone frequency
Select the CTCSS sub-audio tone in Hz among these values
15: CW (Morse) text
Enter the text to be keyed when Morse input is active and in text mode
16: Clear CW text
Clears the CW (Morse) text
17: Morse keyer controls
17.1: CW keying speed
Sets the CW speed in Words Per Minute (WPM). This is based on the word "PARIS" sent 5 times. For 5 WPM the dot length is 240 ms. In other terms the dot length is calculated as 1.2 / WPM seconds. The dot length is used as the base to compute other timings:
- Element (dot or dash) silence separator: 1 dot length
- Dash: 3 dot lengths
- Character silence separator: 3 dot lengths
- Word silence separator: 7 dot lengths
17.2: Dots keying
Switch this button to send dots continuously
17.3: Dashes keying
Switch this button to send dashes continuously
17.4: Text keying
Switch this button to send the text typed into the text box (14)
17.5: Text auto repeat
Switch this button to auto repeat the text keying
17.6: Text play/stop
Use this button to stop sending text. When resuming keying restarts at the start of text
18: Use keyboard for morse keying
⚠ WARNING: this is not really useful if you do not use a proper Morse keyer with direct audio feedback. There is a significant audio delay either with the direct monitoring or by monitoring the transmitted signal so keying with this audio as feedback is not practical
18.7: Activate morse keys keyboard control
This disables text or continuous dots or dashes. Toggle input from keyboard. Occasionnaly the focus may get lost and you will have to deactivate and reactivate it to recover the key bindings.
18.8: Iambic or straight
Choose iambic or straight keying style. When straight is selected the dot or dash key may be used.
18.9: Register dot key
Click on the button and while selected type a character or character and modifier (Shift + key for example) to select which key is used for dots. The key or key sequence appears next (here dot .
)
18.10: Register dash key
Click on the button and while selected type a character or character and modifier (Shift + key for example) to select which key is used for dashes. The key or key sequence appears next (here dot .
)
19: Audio file path
The path to the selected audio file to be played or dots if unselected
20: Audio file play controls
20.1: Audio file select
Opens a file dialog to select the audio file to be played. It must be mono 48 kHz F32LE raw format. Using sox a .wav file can be converted with this command: sox piano.wav -t raw -r 48k -c 1 -b 32 -L -e float piano.raw
20.2: Audio file loop
Audio replay file at the end
20.3: Play/pause file play
Toggle play/pause file play. When paused the slider below (17) can be used to randomly set the position in the file when re-starting.
21: Play file current position
This is the current audio file play position in time units relative to the start
22: Play file length
This is the audio file play length in time units
23: Play file position slider
This slider can be used to randomly set the current position in the file when file play is in pause state (button 18.3)
24: DCS switch
Checkbox to switch on the DCS (Digital Code Squelch) sub-audio modulation.
25: DCS code
This is the DCS octal code (0..511 in decimal 0..777 in octal)
26: DCS positive modulation
When checked the "1" bits are represented with positive shift frequency and "0" with negative shift. When unchecked (negative modulation) this is the opposite.