The transmit path
Linrad also transmits. SSB is generated by an FFT-based speech processor and modulator; CW is generated by keying a carrier. The SSB chain uses six FFTs with 50 % overlap, applying filtering in the frequency domain and AGC, clipping and ALC in the time domain. The author describes it in z_SPEACH_PROCESSOR.txt.

SSB: the six-FFT speech processor#
The microphone samples (mictimf) are transformed, frequency-shifted so the passband centre is at bin 0, and filtered to the desired bandwidth (micfft). Muting is applied in the frequency domain, then an inverse FFT returns to the time domain (cliptimf) where AGC, RF clipping and muting are applied. A second forward FFT re-filters the clipped signal (clipfft), an inverse FFT builds alctimf and a bidirectional fast-attack / slow-release detector produces the ALC voltage, which is applied so the peak power never exceeds 1.00. Finally the signal is resampled to the output rate; a forward/inverse FFT pair removes the small resampling distortion, and the complex I/Q is sent to the output.
Because the transforms overlap by 50 %, the total delay is roughly three transform spans (~80 ms for TX), well inside the ~120 ms end-to-end SSB budget.
In the source
Mic forward FFT and micfft assembly are in tx.c; the numbered steps run in txssb.c: frequency-domain muting tx_ssb_step2() — txssb.c:52; reverse FFT + AGC/clip/mute tx_ssb_step4() — txssb.c:102; re-filter forward FFT tx_ssb_step5() — txssb.c:466; ALC detector tx_ssb_step6() — txssb.c:562; apply ALC tx_ssb_step7() — txssb.c:698; start/resample tx_ssb_step8() — txssb.c:746; resampling clean-up use_tx_resamp() / resample_tx_output() — txssb.c:776. The six FFTs and the sampling-rate chain (mictimf → cliptimf → alctimf → tx_resamp) are enumerated in z_SPEACH_PROCESSOR.txt.
CW keying#
In CW mode the key waveform (tx_mic_key) is resampled and used to key the carrier / sidetone; hardware PTT and keying are handled alongside.
In the source
do_cw_keying() — tx.c:658 (resamples tx_mic_key, sets tone_key, calls hware_hand_key()); CW buffer timing tx_cw_buftim() — tx.c:614. tx_mode selects TXMODE_SSB / TXMODE_CW (txdef.h:211).
Output, test and file transmit#
run_tx_output() drives the output thread; tx_send_to_da() writes the resampled I/Q. A two-tone / spectrum TX test mode and transmit-from-disk are also provided.
In the source
Output driver run_tx_output() — tx.c:958; D/A write tx_send_to_da() — tx.c:818; open do_tx_open() — tx.c:92; file transmit disk2tx() — tx.c:211; TX test in txtest.c and tx_graph.c. Threads THREAD_TX_INPUT / THREAD_TX_OUTPUT (thrdef.h:54). Speech-processor setup values (TX_SETUP_MICAGC, TX_SETUP_RF1CLIP, TX_SETUP_ALC) are in txdef.h:33.