Best way to resample an OFDM signal without interpolating + filtering?

I am working on a custom transceiver with a sampling rate of 3.84 MHz (256 OFDM subcarriers at 15 kHz, although 56 subcarriers are null). I would like to resample the signal to 5 MHz, in order to use a pair of USRPs N210 to communicate each other, among other things.

I can't resample this signal using an interpolation plus filtering approach, as it should be computed in real time (I would need to interpolate the signals up to 480 MHz...).

So I tried an FFT-based approach described by Jim Clay here. To sum up, I first compute the FFT of the signal with length 960 (decimation factor), then I pad the frequency content with zeros, and finally I compute the time domain 5 MHz signal by computing the IFFT with length 1250 (upsampling factor). In this way, I am able to resample the signals by 125/96. I don't know how to explain this, but it is like many samples are sampled at the proper time, whereas many of them not. I mean, there is a time synchronization problem.

I realized that I was using exactly the same number of subcarriers and subcarrier spacing as 3 MHz LTE channels, so I decided to test my resampling approach in a much more mature open source platform like OpenAirInterface (OpenAirInterface allows to deploy an LTE testbed, so I can connect a commercial LTE device like my phone to a base station deployed on an SDR radio).

As my mobile phone does not recognise <5 MHz LTE channels, I decided to resample one 5 MHz channel from 7.68 MHz to 10 MHz (instead of resampling from 3.84 MHz to 5 MHz). My mobile phone was able to decode the signal transmited by the base station (in fact, it got connected to the network and I achieved the same throughputs in the downlink channel I got with the default sampling rate). However, I think that I'm facing exactly the same problem I got with my transceiver. The signal received by the base station from my phone seems not to be syncronized, so the base station drops most of the data. In addition, the base station logs report that there is a time desynchronization, and that this desynchronization varies over the time. However, if I choose an output sampling rate multiple of the original one (for instance, 15.36 MHz and 30.72 MHz), then it works perfectly on both downlink and uplink communications.

I am just beginning to study signal processing, so I recon that maybe this is a dumb question, but I can't figure out why I am not able to resample the signals in this way.

Is there something wrong with my way of resampling the signal? Is there a better way to do this? Can't I resample the signals to a sampling rate which is not an integer multiple of the subcarrier spacing?

I can't resample this signal using an interpolation plus filtering approach, as it should be computed in real time (I would need to interpolate the signals up to 480 MHz...).

Fallacy! Using a rational resampler doesn't require going to the common multiple of in- and output rate. The magic of polyphase filtering allows to operate at a lower rate.

In fact, I'm just trying out the rational resampler GNU Radio comes with:

and on my slightly dusty AMD Phenom PC, it achieves 14 to 20 MS/s, depending on the fractional BW I specify (0.1 to 0.48).

However, I'm on your side with the FFT approach – only that you already have an OFDM system and hence, your OFDM modulator can do the job for you.

Now, 5 MS/s would be 333.333… carriers of spacing 15 kHz. So, if we can't live with 0.1% rate mismatch at the transmitter, there's no trivial way to hit exactly 5 MHz at a carrier spacing of 15 kHz.

The solution is easy:

Generate a 15 MHz wide OFDM signal (with still only 200 carriers occupied) by using a 1000-FFT. (no, I hear that regularly, it's not necessary that FFTs have power-of-two lengths. Only small prime factors.) That'll be roughly an increase in computational power needed for the FFT in the OFDM transmitter, but it should be in an order below 10, and in my experience, the FFT isn't even the worst part of a software-based OFDM transmitter (channel coding is).

I happen to have made an approximate graph of how much energy is in sidelobes of sincs over full subcarrier distances for another question:

If you can live with all the energy between the 56. and the ca 700. place in that graphic aliasing over into your used carriers, you don't need to filter at all when downsampling by a factor of 3.

You probably would still want to do some filtering, but this graph means that you can use a lot less great filters. Basically, anything with roughly a 1 MHz transition width and maybe 23 to 36 dB out-of-band attenuation (go for minimum OOB energy, ie. a Dolph-Chebychew window-based design, if you want to really optimize). That's not going to be a long filter, and hence not put much load on your system. In my test, 11 taps might suffice, and 31 looks pretty good.

Even 31 taps can be handled pretty well with FFT filtering at 5 MHz output rate (again, polyphase maths allows us to run the decimation filter at the target rate rather than the source rate).

• Could you please share the details how you performed upsampling e.g., in OpenAirInterface. If I understand correctly, you have take the time domain signal at transmitter on which IFFT is already done and then (a) do FFT, (b) append zeros,(c) do IFFT again and send to the receiver. Is it correct? Can I do the upsampling at the receiver side using the frequency domain symbols received? Any idea, please?
– Dave
Commented Feb 5, 2023 at 0:44
• Hi @Dave! Not quite following you there. If you have symbols in frequency domain, the upsampling in time domain would do exactly nothing but insert zeros around the values you already have. So, if you need to do that, insert zeros around your frequency-domain data. Commented Feb 5, 2023 at 14:20