I've seen in practice taking an FFT of a signal, then transforming it by the 2nd, 4th, etc. power (depending on signal type) to determine the baud rate. I'm trying to implement this in my code, but am lost as to what a transform of the 2nd power is. It appears to be some sort of non linear transform and not simply squaring of the FFT values.
As noted in the following link, baud rate is estimated from "the spectrum of the signal after nonlinear processing." In their case, as noted in the first three sentences of the section entitled "Proposed Spectral Approach for Bit Time Estimation" - p. 916), the nonlinear processing is the first derivative followed by an absolute value operation:
Others have proposed/analyzed estimation using different nonlinear operations, such as squaring of the signal or using higher derivatives. Obtaining the references for the above paper and doing a thorough search would be a good place to start to learn more.
I'll bet that the idea was roughly as follows:
- Baud rate detection is done via the autocorrelation function of the input
- A correlation is expensive to perform, much more than multiplication.
- A correlation in the time domain is equal to a multiplication in the Fourier domain
- An auto-correlation in the time domain is equal to squaring in the Fourier domain
But remember that the FT is complex-valued. Ignoring the phase from the FFT will cause unpredictable results after the IFFT. That the phase into account, and the result of your IFFT should be real again (minus rounding errors)