# circular convolution or matrix multiplication

Started by April 17, 2009
```Hi,
I'm currently doing project on OFDM based. I want to transmit my signal
through a Rayleigh channel. assume that the received signal should be
y(t)=x(t)*h(t)+n(t) or Y(f)=X(f)H(f)+N(f).

I understand that in order to get y(t), we need to do a convolution
between x(t) and h(t). let say, after IFFT in OFDM part, then I change the
signal into serial where the data is in time domain. Now, I don't want to
do the convolution part, where from my understanding convolution in time
domain is multiplication in freq. domain.

I came across this matlab codes % Rayleigh fading
h = sqrt(0.5)*( randn( 1, symbols_per_frame) + j*randn(
1,symbols_per_frame) );
% complex noise
noise = sqrt(variance)*( randn(1,symbols_per_frame) +
j*randn(1,symbols_per_frame) );
% in all
y = h.*x + noise;

so my questions now are:

1. Is the matrix multiplication means circular convolution where it need
me to change the time domain data back to freq. domain by FFT {x(t)}?

2. If I already do the FFT of the data, it is means that I don't needs to
FFT it again at the receiver, right?

3. is the h in the above code is valid to implement? how can I define the
doppler from the code?

TQ

```
```On Apr 17, 7:58&#2013266080;am, "nhusna" <nhu...@ic.utm.my> wrote:
> Hi,
> I'm currently doing project on OFDM based. I want to transmit my signal
> through a Rayleigh channel. assume that the received signal should be
> y(t)=x(t)*h(t)+n(t) or Y(f)=X(f)H(f)+N(f).
>
> I understand that in order to get y(t), we need to do a convolution
> between x(t) and h(t). let say, after IFFT in OFDM part, then I change the
> signal into serial where the data is in time domain. Now, I don't want to
> do the convolution part, where from my understanding convolution in time
> domain is multiplication in freq. domain.
>
> I came across this matlab codes % Rayleigh fading
> &#2013266080;h = sqrt(0.5)*( randn( 1, symbols_per_frame) + j*randn(
> 1,symbols_per_frame) );
> &#2013266080;% complex noise
> &#2013266080;noise = sqrt(variance)*( randn(1,symbols_per_frame) +
> j*randn(1,symbols_per_frame) );
> &#2013266080;% in all
> &#2013266080;y = h.*x + noise;
>
> so my questions now are:
>
> 1. Is the matrix multiplication means circular convolution where it need
> me to change the time domain data back to freq. domain by FFT {x(t)}?
>
> 2. If I already do the FFT of the data, it is means that I don't needs to
> FFT it again at the receiver, right?
>
> 3. is the h in the above code is valid to implement? how can I define the
> doppler from the code?
>
> TQ

I'm not going to read your code, but realize that in real life,
The FFT is a fast version of the DFT, which is for periodic
discrete-time signals both in time and in frequency.

So how do you make sure that your simulation is realistic?

Julius
```
```>I'm not going to read your code, but realize that in real life,
>The FFT is a fast version of the DFT, which is for periodic
>discrete-time signals both in time and in frequency.
>
>So how do you make sure that your simulation is realistic?
>
>Julius
>

Usually, we will assume that the signal is periodic first in simulation to
make the simplification of the analysis system (I guess...)
```
```On Apr 19, 10:51&#2013266080;pm, "nhusna" <nhu...@ic.utm.my> wrote:
> >I'm not going to read your code, but realize that in real life,
> >neither your channel nor your signal is going to be periodic.
> >The FFT is a fast version of the DFT, which is for periodic
> >discrete-time signals both in time and in frequency.
>
> >So how do you make sure that your simulation is realistic?
>
> >Julius
>
> Usually, we will assume that the signal is periodic first in simulation to
> make the simplification of the analysis system (I guess...)

What you need is to learn about "fast convolution," in particular
of how a periodic operator can be applied to a non-periodic
signal (or channel).

Julius
```
```Let me try to give comment to your second question.

> 2. If I already do the FFT of the data, it is means that I don't needs
> to FFT it again at the receiver, right?

In real system, signal is always be in time domain when transmitted
within channel.

Unless your concern is just creating Rayleigh channel model (which will
not be used in overall OFDM system), you can not discard FFT block in
receiver just because you have done it in channel model.

After doing FFT and multiplication with H(f) in channel model, you
should IFFT back that signal so the output of channel model is in time
domain again.

IMHO, it is important to make good system partition when creating a
relative large system model.

Felis
```
```TQ for all the comments. I have a question if we are using convolution
function, for example, given
x=[1 2 3 4] and h=[1 2 3 4 5],
y1=conv(x,h) =[1     4    10    20    30    34    31    20]
where the size of y=x+h-1

now, if I want to do the circular convolution, the size of matrix x and h
should be the same as x+h, so I set x=[1 2 3 4 0 0 0 0 0] and h=[1 2 3 4 5
0 0 0 0]
y=ifft(fft(x).*fft(h))
y2=y1

so my question is let say x is transmitted bit and h impulse response. the
size of h is bigger than x. usually, at the channel part, we will do
convolution between transmitted signal and channel response. if we do
circular conv., we will padding the transmitted bit with zero. so, at the
receiver, how can we extract back the signal since the size is already
increase? can we just take y2=[1 4 10 20] since the original size of x is
4?

```
```>Hi,
>I'm currently doing project on OFDM based. I want to transmit my signal
>through a Rayleigh channel. assume that the received signal should be
>y(t)=x(t)*h(t)+n(t) or Y(f)=X(f)H(f)+N(f).
>
>I understand that in order to get y(t), we need to do a convolution
>between x(t) and h(t). let say, after IFFT in OFDM part, then I change
the
>signal into serial where the data is in time domain. Now, I don't want
to
>do the convolution part, where from my understanding convolution in time
>domain is multiplication in freq. domain.
>
>I came across this matlab codes % Rayleigh fading
> h = sqrt(0.5)*( randn( 1, symbols_per_frame) + j*randn(
>1,symbols_per_frame) );
> % complex noise
> noise = sqrt(variance)*( randn(1,symbols_per_frame) +
>j*randn(1,symbols_per_frame) );
> % in all
> y = h.*x + noise;
>
>so my questions now are:
>
>1. Is the matrix multiplication means circular convolution where it need
>me to change the time domain data back to freq. domain by FFT {x(t)}?
>
>2. If I already do the FFT of the data, it is means that I don't needs
to
>FFT it again at the receiver, right?
>
>3. is the h in the above code is valid to implement? how can I define
the
>doppler from the code?
>