Assuming we have $N$ symbols to transmit encoded in block $k$, enter image description here

Performing $N$−iFFT at the transmitter, we now have enter image description here

The resulted signal $x(k)$ has length of $N$. inserting a cyclic prefix $CP$ of size $D$, the length of signal will be $N+D$ instead of $N$.

Assuming we have channel $h$ of length $L$, the convolution of signal with channel can be written as:

$y = h*x_{CP}(k)$ = $Hx_{CP}(k)$ ,

where * is the convolution operation and $H$ is toeplitz matrix of size $(N+D+L),(N+D)$ built in matlab as below :

H = toeplitz([h(1) zeros(1,length(x_cp)-1) ], [h.' zeros(1,length(x_cp)-1) ]).'; 

As known, the signal $y$ has now the length of of $D+N+L$. However, the useful signal has the length of $N$ which is equivalent to $s(k)$

What I am asking about is the toeplitz matrix $H$ equivalent into $y$ after removing the delays $L$ and cyclic prefix $D$? In other words, If I can write the $y$ in matlab as y = y(D+1:end-L+1); whose length becomes $N$ now, how can I write $H$ equivalent into this part ?


1 Answer 1


What you mean might be circulant matrix instead of toeplitz matrix. See section 3.4.4 in https://web.stanford.edu/~dntse/Chapters_PDF/Fundamentals_Wireless_Communication_chapter3.pdf about how the circular convolution in OFDM is represented by matrix operations (eq 3.130 onwards).

First, in almost all standard OFDM systems, you can assume $D \le L$. The cyclic prefix will be less than or equal to maximum multi-path delay, so as long as $D \le L$, the linear convolution $x * h$ gets converted circular convolution of $x$ and $h$.

When $y_c = H x_{cp}(k)$, you only need to take $N$ original elements for $x$. $H$ is size $N \times N$. This is because you have already re-written the circular convolution in matrix form. Each row of $H$ will do dot-product with $x$ to generate $y_c[n]$. Like that there will be $N$ values of $y_c$ corresponding to each row of $H$.

$y$ is of length $N+L +D-1$. As you correctly mentioned $y_c = y(D+1:D+N)$.

Equivalent $H$ (size $N \times N$):

h(0) 0 0 ... h(L-1) h(L-2) .. h(1)

h(1) h(0) 0 0 ... h(L-1) h(L-2).. h(2)

h(2) h(1) h(0) 0 .. 0 0 h(L-1) h(L-2) .. h(3)




0 0 0 ... h(L-1) h(L-2) .. h(2) h(1) h(0)

MATLAB command to generate above $H$:

Assuming $h$ is the vector representing channel having $L$ non-zero values.

H = toeplitz([h zeros(1,N-L)][h(1) zeros(1,N-L) flip(h(2:L))])

For a small example where $N=4, L=2, D=1$

$x = [x0, \,x1,\, x2,\, x3]$

$h = [h0\,,h1]$

$y = [x3h0\;, x3h1+x0h0\;, x0h1+x1h0\;, x1h1+x2h0\;, x2h1+x3h0\;, x3h1]$


h0 0 0 h1

h1 h0 0 0

0 h1 h0 0

0 0 h1 h0

  • $\begingroup$ Thank you for your feedback .. When I take the original signal $x$ whose length is $N$ which is equivalent to $y(D+1:D+N)$, how can I take the correspondent $N x N$ matrix of $H$ ? for example is it $H(D:D+N,D:D+N)$? $\endgroup$
    – Fatima_Ali
    Commented Mar 17, 2020 at 10:38
  • $\begingroup$ No it is H itself. As I mentioned in my answer, the way I wrote H is NxN. I will edit my answer to explicitly highlight it. $\endgroup$
    – jithin
    Commented Mar 17, 2020 at 11:20
  • $\begingroup$ But $H$ itself is not $N x N$ , H should be be $(N+D x N)$. I mentioned in my question how we can can create $H$ using matlab. Is that what you mean by $H$ ? $\endgroup$
    – Fatima_Ali
    Commented Mar 17, 2020 at 11:29
  • $\begingroup$ Understood now. What you need is H=toeplitz([h0 h1 .. h(L-1) ] [h0 0...0 h(L-1) h(L-2)..h(1)]). I will edit my answer to add more details. $\endgroup$
    – jithin
    Commented Mar 17, 2020 at 12:11
  • $\begingroup$ OK .. thank you so much. Yes .. that what I need .. Exactly $\endgroup$
    – Fatima_Ali
    Commented Mar 17, 2020 at 13:40

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.