I am trying to transmit OFDM signal in pass-band based on RRC filter, but what I noticed that the signal before the RRC filter is completely different compared with signal after the RRC filter (It means the signal is destroyed when using RRc filter). I tried to follow the signal without using any channel, I noticed the issue starts when using the RRC filter. For example, I used only the system as follows:

signal --> ifft --> upsampling --> RRC filter --> RRC filter --> downsampling --> fft --> received signal

What is expected is the received signal equals to signal, but I get very different results.

what I get is a different signal. Why ? should that be equal? I think I must be the same. Finally , when I delete the filter, Everything is OK.


2 Answers 2


I checked your code in my PC, you need just to delete the delay added before the filter. For example, you can use:

U_aft_fil = U_aft_fil(fil_delay+1:end);  

Then when filtering it again at the receiving side, you delete it again :

U_r_fil = U_r_fil(fil_delay+1:end);

Good luck

  • $\begingroup$ Yes, I get BER = 0; Thank you very much. $\endgroup$
    – Fatima_Ali
    Jun 19, 2020 at 12:31
  • 1
    $\begingroup$ Nice answer, Zeyad. I'll just conclude what you explained to me in the comments under my answer: This works here, because your channel is really only the RRC, designed to have zeros in the right places. If your channel also incorporates actual frequency-selectivity in the band of interest, then that OFDM receiver needs to correct that, too. And, because a real-world channel has unknown, and non-integer-sample delay, you will need to have a working OFDM synchronization at work before you can decimate so that the Nyquist properties make the RRCs "invisible" to the OFDM system. $\endgroup$ Jun 20, 2020 at 12:06

In the above code, x must equal y,

No, not at all.

  1. your x is time domain, but your y is frequency domain.
  2. You're filtering the signal. That changes it. Even if you compared y to the input of ifft, they cannot be the same.
  3. You're adding delay in the upsampled version: twice the group delay of your RRC, and once your fil_delay zeros, but then you're just decimating the result down without compensating that delay.
  4. Your decimation isn't a multiple of the delay, and therefore, it will lead to a fractional sample delay in the output. That's normal, and a real OFDM receiver has to deal with that, but your system is not a full OFDM receiver, it's just the FFT – hence, you'll never see the same input as output.

The fact that you have a delay in there that happens to be half the RRC length kind of suggests you might have been trying to compensate filter delay, but instead you're adding more delay.

Also, upsample just inserts zeros between each input sample, so I doubt this is actually the operation you're looking for.

smaller remarks, which don't affect functionality:
  • Filtering with the same RRC twice is the same as filtering with the RC once. THe order doesn't matter, you can add your delay afterwards or before or between. (but I really think you're doing something wrong when adding the delay at all. You need to do the exact opposite)
  • $\begingroup$ Comments are not for extended discussion; this conversation has been moved to chat. $\endgroup$
    – Peter K.
    Jun 20, 2020 at 18:07

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.