DSPRelated.com
Forums

Modified Jakes, OFDM implementation

Started by abouzeidtarek June 3, 2009
Hi,

I am trying to simulate on Matlab a Rayleigh channel for my OFDM signal.

I am using the code below to generate the channel coeficients.

The output of this code is a matrix in this case:
h = (modified_jakes1(100,2000,10,3,100,0))
is 100 coefficients and 3 multipath chanel.(is this correct?)

how can i filter my time domain signal with these coefficient? any idea how to equilize the signal afterwards?

any idea or Tipp would be very helpful!

Thanks!

-
function [chann,fm,doppler_rate]=modified_jakes(v,fc,fs,U,M,segma)

% Ali Jamoos
% Equipe Signal & Image, UMR 5131 LAPS, universitBordeaux1
% 351 Cours de la libation, 33405 Talence Cedex, France
% email: a...@laps.u-bordeaux1.fr

% ----------
% Generation of U uncorrelated Rayleigh fading channels according to the modified Jakes model:
% [P. Dent, G. Bottomley and T. Croft, "Jakes fading model revisited," IEE Electronics Letters, pp.1162-1163, June 1993]
% ----------

% Version (2)
% Last updated 11/02/2005

% v: Vehicle speed in kmph
% fc: Central carrier frequency in MHz
% fs: Symbol frequency in ksps
% U: Number of sub-carriers or sub-channels
% M: Number of channel coefficients to generate
% segma: Variance of the channel coefficients
% chann: channels coefficients matrix of size U by M
% fm: Maximum doppler frequency in Hz
% doppler_rate: Doppler rate or fading rate
% Example:
% --------
% [chann,fm,doppler_rate]=modified_jakes(100,2000,10,3,10000,0);

fm=(1e3/3600)*v*fc/3e2; % maximum doppler frequency in Hz
doppler_rate=fm/(fs*1000);
No$; % number of distinct oscilators
NN=4*No; % total number of osillators
omega_m=2*pi*fm; % maximum doppler frequency
H=hadamard(No); % Walsh_Hadamard codes, to generate uncorrelated channels

for n=1:No
theta(n)=rand*2*pi; % Randomly generated initial phases
end

for u=1:U
sum=0;
t=1/(fs*1000):1/(fs*1000):(1/(fs*1000))*M; % sampling frequency
for n=1:No
omega_n=omega_m*cos(2*pi*(n-0.5)/NN);
sum=sum+H(u,n)*(cos(pi*n/No)+j*sin(pi*n/No))*cos(omega_n*t+theta(n)); % sum of No distinct oscillators
end
T=sqrt(2/No)*sum;

T=repmat(10.^(segma/20),1,M).*T; % Define the variance of the channel (segma) in dB.

chann(u,:)=T; % the u'th sub-channel
end

% Plot the Rayleigh envelope for the first channel
figure(1)
plot(10*log10(abs(chann(1,:).^2)),'m')
hold on
plot(repmat(10*log10(var(chann(1,:))),M,1),'g')
ylabel('Rayleigh Envelope in dB');
xlabel('Time');
Hi,
>
>I am trying to simulate on Matlab a Rayleigh channel for my OFDM signal.
>
>I am using the code below to generate the channel coeficients.
>
>The output of this code is a matrix in this case:
>h = (modified_jakes1(100,2000,10,3,100,0))
>is 100 coefficients and 3 multipath chanel.(is this correct?)
>
>how can i filter my time domain signal with these coefficient? any idea how to equilize the signal afterwards?
>
>any idea or Tipp would be very helpful!
>
>Thanks!
>
>-
>function [chann,fm,doppler_rate]=modified_jakes(v,fc,fs,U,M,segma)
>
>% Ali Jamoos
>% Equipe Signal & Image, UMR 5131 LAPS, universit� Bordeaux1
>% 351 Cours de la lib�ration, 33405 Talence Cedex, France
>% email: a...@laps.u-bordeaux1.fr
>
>% ----------
>% Generation of U uncorrelated Rayleigh fading channels according to the modified Jakes model:
>% [P. Dent, G. Bottomley and T. Croft, "Jakes fading model revisited," IEE Electronics Letters, pp.1162-1163, June 1993]
>% ----------
>
>% Version (2)
>% Last updated 11/02/2005
>
>% v: Vehicle speed in kmph
>% fc: Central carrier frequency in MHz
>% fs: Symbol frequency in ksps
>% U: Number of sub-carriers or sub-channels
>% M: Number of channel coefficients to generate
>% segma: Variance of the channel coefficients
>% chann: channels coefficients matrix of size U by M
>% fm: Maximum doppler frequency in Hz
>% doppler_rate: Doppler rate or fading rate
>% Example:
>% --------
>% [chann,fm,doppler_rate]=modified_jakes(100,2000,10,3,10000,0);
>
> fm=(1e3/3600)*v*fc/3e2; % maximum doppler frequency in Hz
> doppler_rate=fm/(fs*1000);
> No$; % number of distinct oscilators
> NN=4*No; % total number of osillators
> omega_m=2*pi*fm; % maximum doppler frequency
> H=hadamard(No); % Walsh_Hadamard codes, to generate uncorrelated channels
>
> for n=1:No
> theta(n)=rand*2*pi; % Randomly generated initial phases
> end
>
> for u=1:U
> sum=0;
> t=1/(fs*1000):1/(fs*1000):(1/(fs*1000))*M; % sampling frequency
> for n=1:No
> omega_n=omega_m*cos(2*pi*(n-0.5)/NN);
> sum=sum+H(u,n)*(cos(pi*n/No)+j*sin(pi*n/No))*cos(omega_n*t+theta(n)); % sum of No distinct oscillators
> end
> T=sqrt(2/No)*sum;
>
> T=repmat(10.^(segma/20),1,M).*T; % Define the variance of the channel (segma) in dB.
>
> chann(u,:)=T; % the u'th sub-channel
> end
>
> % Plot the Rayleigh envelope for the first channel
> figure(1)
> plot(10*log10(abs(chann(1,:).^2)),'m')
> hold on
> plot(repmat(10*log10(var(chann(1,:))),M,1),'g')
> ylabel('Rayleigh Envelope in dB');
> xlabel('Time');

>how can i filter my time domain signal with these coefficient? any idea how to equilize the signal afterwards?

Hi,

You can use matlab's filter command to filter your time domain samples. see

>> help filter

Well for equalisation you need to have the pilot inserted in the transmitted signal. If inserted then you can try the very simple "Least square" channel estimation to estimate your channel then by simple division you could perform equalization.