On Mar 16, 3:22�pm, "algora" <cgalgora@n_o_s_p_a_m.uclv.edu.cu> wrote:
> hello, any of you has experience with different methods for symbol
> synchronization so you can help me to implement one of them in a receiver
> for bpsk modulation?
> i've implemented a costas loop for carrier recovery and the code i've found
> for symbol synchronization is too heavy and takes too much time. this is
> the matlab code:
>
> tnow=del*oversampling+1; tau=0; xs=zeros(1,length(y)); � � � � � %
> initialize variables
> tausave=zeros(1,length(y)); tausave(1)=tau; i=0;
> mu=0.05; � � � � � � � � � � � � � � � � � �% algorithm stepsize
> delta=0.1; � � � � � � � � � � � � � � � � �% time for derivative
> while tnow<length(y)-del*oversampling � � � % run iteration
> � i=i+1;
> � xs(i)=interpsinc(y,tnow+tau,del); � � � � � % interpolated value at
> tnow+tau
> � x_deltap=interpsinc(y,tnow+tau+delta,del); �% get value to the right
> � x_deltam=interpsinc(y,tnow+tau-delta,del); �% get value to the left
> � dx=x_deltap-x_deltam; � � � � � � � � � � % calculate numerical
> derivative �
> � tau=tau+mu*dx*xs(i); � � � � � � � � � � �% alg update (energy)
> � tnow=tnow+oversampling; tausave(i)=tau; � � � � � � �% save for plotting
> end
>
> pam_rx=xs; � � � � � � � � � � � � � � � % Decis�o de S�mbolo Recebido
>
> bits_rx=pam_rx>0; � � � � � � � � � � � � %Estima��o dos bits recebidos;
>
> ah, the interpsinc function is:
> function y=interposinc(x, t, l, beta)
> % interpolate to find a single point using the direct method
> % � � � �x = sampled data
> % � � � �t = place at which value desired
> % � � � �l = one sided length of data to interpolate
> % � � � �beta = rolloff factor for SRRC function
> % � � � � � � = 0 is a sinc
> if nargin==3, beta=0; end; � � � � �% if unspecified, beta is 0
> tnow=round(t); � � � � � � � � � � �% create indices tnow=integer part
> tau=t-round(t); � � � � � � � � � � % plus tau=fractional part
> s_tau=srrc(l,beta,1,tau); � � � � � % interpolating sinc at offset tau
> x_tau=conv(x(tnow-l:tnow+l),s_tau); % interpolate the signal
> y=x_tau(2*l+1); � � � � � � � � � � % the new sample
>
> if any of you have an idea of how i can do it without doing so many
> interpolations, please help me.
Change the timing compensation to something simpler,
like a zero-order, first-order, or a polynomial interpolator.
The performance depends on your oversampling factor
and your target SNR.
Reply by algora●March 16, 20112011-03-16
hello, any of you has experience with different methods for symbol
synchronization so you can help me to implement one of them in a receiver
for bpsk modulation?
i've implemented a costas loop for carrier recovery and the code i've found
for symbol synchronization is too heavy and takes too much time. this is
the matlab code:
tnow=del*oversampling+1; tau=0; xs=zeros(1,length(y)); %
initialize variables
tausave=zeros(1,length(y)); tausave(1)=tau; i=0;
mu=0.05; % algorithm stepsize
delta=0.1; % time for derivative
while tnow<length(y)-del*oversampling % run iteration
i=i+1;
xs(i)=interpsinc(y,tnow+tau,del); % interpolated value at
tnow+tau
x_deltap=interpsinc(y,tnow+tau+delta,del); % get value to the right
x_deltam=interpsinc(y,tnow+tau-delta,del); % get value to the left
dx=x_deltap-x_deltam; % calculate numerical
derivative
tau=tau+mu*dx*xs(i); % alg update (energy)
tnow=tnow+oversampling; tausave(i)=tau; % save for plotting
end
pam_rx=xs; % Decisão de Símbolo Recebido
bits_rx=pam_rx>0; %Estimação dos bits recebidos;
ah, the interpsinc function is:
function y=interposinc(x, t, l, beta)
% interpolate to find a single point using the direct method
% x = sampled data
% t = place at which value desired
% l = one sided length of data to interpolate
% beta = rolloff factor for SRRC function
% = 0 is a sinc
if nargin==3, beta=0; end; % if unspecified, beta is 0
tnow=round(t); % create indices tnow=integer part
tau=t-round(t); % plus tau=fractional part
s_tau=srrc(l,beta,1,tau); % interpolating sinc at offset tau
x_tau=conv(x(tnow-l:tnow+l),s_tau); % interpolate the signal
y=x_tau(2*l+1); % the new sample
if any of you have an idea of how i can do it without doing so many
interpolations, please help me.