How do you implement Direct Sequence Spread Spectrum (DSSS) to synchronize the spreading rate with the symbol rate when there is a non-integer but rational relationship between the two?
There is no requirement that Direct Sequence Spread Spectrum (DSSS) have an integer number of chips per symbol, nor for the repetition rate of the code to be synchronous with the data (although this is often done). So in this case you have a spreading sequence with a code of some particular length that is running at 6.138Mcps that is multiplied by your data at the lower rate of 8192 symbols/second. This would not change typical approaches in the receiver to demodulate the DSSS signal, where you would perform the same multiplication and integrate over a data symbol duration (correlator). Along with all the usual approaches to timing and carrier recovery and signal acquisition such as three half chip spaced correlators for Early-Prompt-Late or if processing allows block FFT-based fast acquisition.
One example where this is done is described in this link:
I assume your challenge is how to do the spreading specifically in your case, knowing that you simply multiply the two waveforms as I show above. One approach to do this is to resample your data to match the chip rate and then multiply sample by sample:
Notice that the relationship between the chip clock and data clock is 6138000/8192 which is exactly $749 + 137/512$
A simple way to do this is to use a 9 bit counter that rolls over at 512, such that you send 749 chips for every sample and then add 137 to your counter at the end of each data symbol ($count[n] = (count[n-1] + 127) mod 512$)- if the counter rolls over then add one more chip to that data symbol. The first 5 data symbols and the counter value at the end of each symbol would proceed as follows:
Symbol 1: counter = 0+ 137 no rollover : 749 chips
Symbol 2: counter = 137 +137 = 274 no rollover: 749 chips
Symbol 3: counter = 274 + 137 = 411 no rollover: 749 chips
Symbol 4: counter = 411 + 137 = 548 rollover 548%512= 36: 750 chips
Symbol 5: counter = 36 + 137 = 173 no rollover: 749 chips