Reply by adi_sharma1984●December 12, 20082008-12-12
Hi all please help
>
>hi all pleases see the sample matlab code i just created showing above
>problem
>
>________________________________________
>
>close all
>clear all
>clc
>
>z=zeros(1,256);
>zd=0;
>x1=[];
>z3=[];
>pak_loc=[];
>pak_loc_1=[];
>pak_dis=[];
>map_bins=[];
>
>%%%%%%%%%%%%%%%usr1%%%%%%%%%%%%%%%%%%%%%%%%%%%
>for k=1:50
>%%%%%%%%%%%%%%%%%paking 32 bins left 32 bins right% center dc
>zero%%%%%%%%%
>x=(floor(2*rand(1,64))-.5)/(.5)+j*(floor(2*rand(1,64))-.5)/(.5);
>x1=[x x1];
>
>for n=97:128
> z(n)=x(n-96);
>end
>for n=130:161
> z(n)=x(n-97);
>end
>t=fftshift(z);
>map_bins=[map_bins z];
>dtd=fft(t,256);
>%%%%%%%%%%%%%%subcarrier mapping%%%%%%%%%%%%%
>subm_d=[];
>subm_l=[];
>subm_l=[dtd];
>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>%%%%%%%%%%%256 point ifft of localized and
>disterbuted%%%%%%%%%%%%%%%%%%%%%
>iff_out_l=ifft(subm_l,256);
>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>%%%%%%%%%%cyclic prefix%%%%%%%%%
>out_l_s=[];
> out_l_s=[iff_out_l(193:256) iff_out_l]; %%%%%%%%%one ofdm symbol with
>cyclic prefix
>%%%%%%%%%%%%%%%%%50 symbol packet%%%%%%%%%%%%% 1 symbol is 320 samples
>long
>pak_loc_1=[pak_loc_1 out_l_s];
>end
>
>%%%%%%%%%%%%%%%%%%%%preamble for usr1%%%%%%%%%%%%%%%%%%%%%%%%%%%
>a= 1+j;
>b=-1+j;
>c=-1-j;
>d= 1-j;
>
>p_all=[d d c a d d b d d d a c a a c a c c d b...
> d d c a d d b d d d a c a a c a c c d b...
> d d c a d d b d d d a c a a c a c c d b...
> a a d b a a c a a a b d b b d b d d a c...
> c c b d c c a c c c d b d b b d b b c a...
> 0 ...
> c a b b c a a a c a d b d b b b b d c c...
> b d a a b d d d b d c c c a a a a c b b...
> a c d d a c c c a c b b b d d d d b a a...
> c a b b c a a a c a d d d b b b b d c c...
> d b c c d b b b d b a a a c c c c a d d];
>
> ff_1=zeros(1,256);
> ff_2=zeros(1,256);
> d2=p_all(1:2:201);
> d1=p_all(1:4:201);
> ff_2(129+(-100:2:100))=sqrt(2)*d2;%%%%%long preamble
>
> usr1_pre=fft(ff_2,256);%%%%%%%%%%%%%fft of usr1
>
> ot1=[usr1_pre];
>
> i_ot1=ifft(ot1,256);
>
> c_iot1=[i_ot1(193:256) i_ot1];
>
> preamble_cp_usr1=c_iot1; %%%%%%%long preamble
>
> pak_usr1_preamble=[preamble_cp_usr1 pak_loc_1];
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> ci1=[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .5*j]; %%%%%%%%%%channel
>
> fil_ch_out=filter(ci1,1,pak_usr1_preamble);
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>
> %%%%%%%%%%%%channel estimation
>cp_long_pre=fil_ch_out(1:320);
>long_pre=cp_long_pre(65:end);
>
>ff_long_pre=fft(long_pre,256);
>long_usr1=ff_long_pre;
>
>ratio_usr1=long_usr1./usr1_pre; %%%%ratio of recived preamble to the
>known preamble
>
>ratio_usr1=ratio_usr1(1:2:end);
>%%%%interpolating
>inter_r_us1=[];
>for n=1:length(ratio_usr1)-1
> inter_r_us1=[inter_r_us1 ratio_usr1(n)
>(ratio_usr1(n)+ratio_usr1(n+1))/2];
>
>end
>inter_r_us1=[inter_r_us1 ratio_usr1(128) ratio_usr1(128)];
>
>ch1_fr=fft(ci1,256);
>
>figure(1)
>hold on
> plot(abs(log(inter_r_us1)),'linewidth',4)
> plot(abs(log(ch1_fr)),'xg')
> hold off
> title('channel in green to estimated channel in blue')
> axis([1 256 -2 2])
>
> %%%%%%%%%%%%%%lms_equil%%%%%%%%%%%%%%%%
> l8=320;
> data=fil_ch_out(321:end);
> w=ones(1,256)./inter_r_us1; %%%%w=estimated channel
> errtt=[];
> for n=1:50
> dat=data((n-1)*l8+1:n*l8);
> dat1=dat(65:end);
> dat_f=fft(dat1,256);
>
> eq_dat_f=dat_f.*w;
>
> dat_t=ifft(eq_dat_f,256);
>
> figure(2)
> plot(dat_t,'x')
> %%%%%%%%%%%%%%%detector
> detc=[];
> for n=1:256
> dc_tmp=dat_t(n);%%%%%%%%%%%%%input to detector
> sinng=sign(real(dc_tmp));
> if sinng==1
> if real(dc_tmp)<0.5
> rl_tmp=0;
> else
> rl_tmp=1;
> end
> else
> if real(dc_tmp)>-0.5
> rl_tmp=0 ;
> else
> rl_tmp=-1;
> end
> end
> sinng=sign(imag(dc_tmp));
> if sinng==1
> if imag(dc_tmp)<0.5
> ig_tmp=0;
> else
> ig_tmp=1;
> end
> else
> if imag(dc_tmp)>-0.5
> ig_tmp=0 ;
> else
> ig_tmp=-1;
> end
> end
> tmp_d=rl_tmp+i*ig_tmp;
> detc=[detc tmp_d]; %%%%%%%%%%%%%%%%output of detector
> end
> figure(3)
> plot(detc,'x')
> title('detector plot')
> axis([-2 2 -2 2])
>
> err_t=detc-dat_t; %%%%error of detector to data in time domain
>
> err_f=fft(err_t,256);%%%%%error back in freq domain
> errtt=[errtt err_f];
> figure(4)
> subplot(2,1,1)
> plot(abs(err_t));
> subplot(2,1,2)
> plot(abs(err_f));
> w_up=(dat_f.*conj(err_f)); %%%new weights in freq domain
> w=w+0.01*(w_up);%%%%weights update lms algrothim
> end
> figure(5)
> plot(abs(errtt))
>
> ___________________________________
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>_____________________________________
>Do you know a company who employs DSP engineers?
>Is it already listed at http://dsprelated.com/employers.php ?
>
Reply by adi_sharma1984●December 11, 20082008-12-11
hi all pleases see the sample matlab code i just created showing above
problem
________________________________________
close all
clear all
clc
z=zeros(1,256);
zd=0;
x1=[];
z3=[];
pak_loc=[];
pak_loc_1=[];
pak_dis=[];
map_bins=[];
%%%%%%%%%%%%%%%usr1%%%%%%%%%%%%%%%%%%%%%%%%%%%
for k=1:50
%%%%%%%%%%%%%%%%%paking 32 bins left 32 bins right% center dc
zero%%%%%%%%%
x=(floor(2*rand(1,64))-.5)/(.5)+j*(floor(2*rand(1,64))-.5)/(.5);
x1=[x x1];
for n=97:128
z(n)=x(n-96);
end
for n=130:161
z(n)=x(n-97);
end
t=fftshift(z);
map_bins=[map_bins z];
dtd=fft(t,256);
%%%%%%%%%%%%%%subcarrier mapping%%%%%%%%%%%%%
subm_d=[];
subm_l=[];
subm_l=[dtd];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%256 point ifft of localized and
disterbuted%%%%%%%%%%%%%%%%%%%%%
iff_out_l=ifft(subm_l,256);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%cyclic prefix%%%%%%%%%
out_l_s=[];
out_l_s=[iff_out_l(193:256) iff_out_l]; %%%%%%%%%one ofdm symbol with
cyclic prefix
%%%%%%%%%%%%%%%%%50 symbol packet%%%%%%%%%%%%% 1 symbol is 320 samples
long
pak_loc_1=[pak_loc_1 out_l_s];
end
%%%%%%%%%%%%%%%%%%%%preamble for usr1%%%%%%%%%%%%%%%%%%%%%%%%%%%
a= 1+j;
b=-1+j;
c=-1-j;
d= 1-j;
p_all=[d d c a d d b d d d a c a a c a c c d b...
d d c a d d b d d d a c a a c a c c d b...
d d c a d d b d d d a c a a c a c c d b...
a a d b a a c a a a b d b b d b d d a c...
c c b d c c a c c c d b d b b d b b c a...
0 ...
c a b b c a a a c a d b d b b b b d c c...
b d a a b d d d b d c c c a a a a c b b...
a c d d a c c c a c b b b d d d d b a a...
c a b b c a a a c a d d d b b b b d c c...
d b c c d b b b d b a a a c c c c a d d];
ff_1=zeros(1,256);
ff_2=zeros(1,256);
d2=p_all(1:2:201);
d1=p_all(1:4:201);
ff_2(129+(-100:2:100))=sqrt(2)*d2;%%%%%long preamble
usr1_pre=fft(ff_2,256);%%%%%%%%%%%%%fft of usr1
ot1=[usr1_pre];
i_ot1=ifft(ot1,256);
c_iot1=[i_ot1(193:256) i_ot1];
preamble_cp_usr1=c_iot1; %%%%%%%long preamble
pak_usr1_preamble=[preamble_cp_usr1 pak_loc_1];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ci1=[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .5*j]; %%%%%%%%%%channel
fil_ch_out=filter(ci1,1,pak_usr1_preamble);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%channel estimation
cp_long_pre=fil_ch_out(1:320);
long_pre=cp_long_pre(65:end);
ff_long_pre=fft(long_pre,256);
long_usr1=ff_long_pre;
ratio_usr1=long_usr1./usr1_pre; %%%%ratio of recived preamble to the
known preamble
ratio_usr1=ratio_usr1(1:2:end);
%%%%interpolating
inter_r_us1=[];
for n=1:length(ratio_usr1)-1
inter_r_us1=[inter_r_us1 ratio_usr1(n)
(ratio_usr1(n)+ratio_usr1(n+1))/2];
end
inter_r_us1=[inter_r_us1 ratio_usr1(128) ratio_usr1(128)];
ch1_fr=fft(ci1,256);
figure(1)
hold on
plot(abs(log(inter_r_us1)),'linewidth',4)
plot(abs(log(ch1_fr)),'xg')
hold off
title('channel in green to estimated channel in blue')
axis([1 256 -2 2])
%%%%%%%%%%%%%%lms_equil%%%%%%%%%%%%%%%%
l8=320;
data=fil_ch_out(321:end);
w=ones(1,256)./inter_r_us1; %%%%w=estimated channel
errtt=[];
for n=1:50
dat=data((n-1)*l8+1:n*l8);
dat1=dat(65:end);
dat_f=fft(dat1,256);
eq_dat_f=dat_f.*w;
dat_t=ifft(eq_dat_f,256);
figure(2)
plot(dat_t,'x')
%%%%%%%%%%%%%%%detector
detc=[];
for n=1:256
dc_tmp=dat_t(n);%%%%%%%%%%%%%input to detector
sinng=sign(real(dc_tmp));
if sinng==1
if real(dc_tmp)<0.5
rl_tmp=0;
else
rl_tmp=1;
end
else
if real(dc_tmp)>-0.5
rl_tmp=0 ;
else
rl_tmp=-1;
end
end
sinng=sign(imag(dc_tmp));
if sinng==1
if imag(dc_tmp)<0.5
ig_tmp=0;
else
ig_tmp=1;
end
else
if imag(dc_tmp)>-0.5
ig_tmp=0 ;
else
ig_tmp=-1;
end
end
tmp_d=rl_tmp+i*ig_tmp;
detc=[detc tmp_d]; %%%%%%%%%%%%%%%%output of detector
end
figure(3)
plot(detc,'x')
title('detector plot')
axis([-2 2 -2 2])
err_t=detc-dat_t; %%%%error of detector to data in time domain
err_f=fft(err_t,256);%%%%%error back in freq domain
errtt=[errtt err_f];
figure(4)
subplot(2,1,1)
plot(abs(err_t));
subplot(2,1,2)
plot(abs(err_f));
w_up=(dat_f.*conj(err_f)); %%%new weights in freq domain
w=w+0.01*(w_up);%%%%weights update lms algrothim
end
figure(5)
plot(abs(errtt))
___________________________________
_____________________________________
Do you know a company who employs DSP engineers?
Is it already listed at http://dsprelated.com/employers.php ?
Reply by adi_sharma1984●December 10, 20082008-12-10
Hi All,
I am trying to simulate a SC-Frequency domain LMS equalizer.
Now since it is SC the detection has to be in time domain although the
channel estimation is in frequency domain so i follow these steps
1) Multiply data -> data_f (in frequency domain) with weights in frequency
domain
2} Convert data in time domain data_t by ifft and pass it through
detector.
3) compute the error (detector - data_t)
4) convert the error back in frequency domain (by fft or error)->err_f
5) update weighs by weights=weights+Mu*(data_f*conj(err_f)) where Mu is
step size
6) now multiply new weight with next set of data and repeat the process
Am i doing something wrong as error never decreases no matter what i do
and it increases rapidly with each run.
Any kind of help is highly appreciated as this is making me crazy.
Regards
Aditya
_____________________________________
Do you know a company who employs DSP engineers?
Is it already listed at http://dsprelated.com/employers.php ?