I'm struggling with particular (corner) case of interpolation of complex signal, in connection with OFDM modulation.

While I assume that guard sub-carriers are always used, I'm studying a case when all sub-carriers are used. So, lets take for example case with 8 sub-carriers. Particular case where I'm struggling is when ofdm symbol is created from following freq coefficients: ofdm_sym = ifft[0 0 0 0 1 0 0 0]

Here we get only sub-carrier on lowest frequency and result of this operation would give numbers below: 0.12500 -0.12500 0.12500 -0.12500 0.12500 -0.12500 0.12500 -0.12500

Doing FFT on this vector, would give input to ifft, as expected. But, what I have tried is to upsample this vector. In a somewhat straightforward test I've interleaved zeros between this numbers, and then applied low pass filtering (interpolation using poly or spline give same results). But, as this is marginal case, where imaginary components signal are always zero, result of upsample/interpolation is real signal, and thus my upsampled signal is not what I have wanted to get. Then I have tried to run ifft, uspample/interpolation with complex input to ifft. However, my upsampled signal always have two freq components (one positive and negative). From my tries to understand this scenario, I've realized that sine waves here are sampled at exactly two points per period, and that results with ambiguity on complex exponential that would fit through that points.

And at the end, I do not know how this upsample operation should be handled, and what I'm missing here, and I would appreciate if somebody could provide some insight what is wrong with my thinking.

Comment for the end: I can generate upsampled signal using upsampling in IFFT (but without splitting that N/2 coefficient in two).


1 Answer 1


There are a few things that don't add up.

Firstly, if you have the sequence [0 0 0 0 1 0 0 0] mapped on your subcarriers, then you are not using all subcarriers.

Second, if you are using Matlab, the 5th element of the sequence above (so 1) doesn't correspond to the first subcarrier in your OFDM signal (unless you are not doing an ifftshift before computing ifft). In this case, your first subcarrier is the first 0 that appears in that sequence. So in summary, [positive_band center_frequency negative_band], this is how the baseband signal should be constructed on Matlab. I am not sure how it is handled on Python.

Third, I followed your methodology, but what you want to achieve is not clear to me. Can you summarize your specific goal? So you want to interpolate your OFDM symbol in the time domain, or in the frequency domain?

  • $\begingroup$ I'm using Octave, but gets to same thing as Matlab. But, yes, I'm currently looking only one carrier. And I want to excite only carrier on the lowest negative frequency. What I'm I'm looking to achieve, is how I can upsample this signal (only subcarrier of lowest negative frequency). It seems that I know how to do it in frequency domain, but I'm struggling to understand what I'm missing to do it properly in time domain. $\endgroup$
    – schnajc
    Aug 25, 2021 at 12:35
  • $\begingroup$ Just to clarify things little further. I'm aware that by default (without fftshift) Matlab/Octave in first half of vector have positive frequency. When I've said first component, I meant lowest negative frequency, not DC. $\endgroup$
    – schnajc
    Aug 25, 2021 at 12:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.