The sampling rate for our transmitter is defined by the channel - 8000 samples/s. This is a multiple of the baud rate at 4800 bits/s (8-PSK at 1600 baud, 5 samples per symbol), but not at 2400 bits/s (4-PSK at 1200 baud, 20/3 samples per symbol). Generating at the lowest common multiple of the baud rate and channel sample rate (i.e. 24000 samples/s for 2400 bits/s), and then decimating to 8000 samples/s, would give good results. However, this would require considerable computation. A shortcut is to use slightly shaped pulses, instead of simple square ones. We can achieve the effect of pulse transitions at the 1/2 and 2/3 sample points by adjusting the first sample of each new pulse. The adjustment is simple. We need the effect of being 60 degrees or 120 degrees through a sine wave cycle at the Shannon rate at the sample point. This simply means we need to step by 0.25 or 0.75 of the actual step size on the first sample of those pulses which should start at the 1/3 or 2/3 sample positions. The logic and computation needed for this is much less than the computation needed for oversampling at 24000 samples/second. The square or lightly shaped pulses are filtered by a pulse shaping filter, as specified in the V.27ter spec. - a root raised cosine filter with 50% excess bandwidth.
The carrier is generated using the DDS method. Using 2 second order resonators, started in quadrature, might be more efficient, as it would have less impact on the processor cache than a table lookup approach. However, the DDS approach suits the receiver better, so then same signal generator is also used for the transmitter.