Zadoff-Chu sequence concept

Zaddoff-Chu sequence has two main propoerties: 1- constant modulus 2- good correlation characteristics. Most of the papers claim that the autocorrelation of sequence has zero values for all shifted version of sequence except the lag=0. However, if you try to use the matlab code zadoffChuSeq(u,N) to varify this propoerties, you will find the small peaks at time axis. This means it is not perfrectely sequqnce as they calimed. Did I miss somthing?

4 Comments

Regarding the small peaks you’re seeing when using the MATLAB function zadoffChuSeq(u,N), it’s important to note that these could be due to numerical precision issues inherent in digital computation. Theoretically, the autocorrelation should be zero at all lags except zero, but in practice, due to finite numerical precision, you might not get exactly zero. This doesn’t mean that the sequence isn’t a Zadoff-Chu sequence, it’s just a manifestation of the limitations of numerical computations.
Thank you for the quick reply. If it's just numerical precision issues, we might observe some small peaks. However, if you try zadoffChuSeq(3,67), you'll notice very large peaks in the autocorrelation function around the zero-lag peak. The attached figure displays the output of the autocorrelation function. Do you have any recommendations?
As, you’re observing very large peaks around the zero-lag peak with zadoffChuSeq(3,67), it might be worth double-checking the implementation of the function for any potential errors or deviations from the theoretical formula. Additionally, ensure that the parameters used (such as u and N) satisfy the necessary conditions for a Zadoff-Chu sequence.
If after verification everything seems correct, then these large peaks might be an artifact of how MATLAB handles computations and displays plots rather than an issue with the sequence itself.
The image you attached indeed shows a prominent peak near x=60 and several smaller peaks throughout the plot. These peaks could be due to the reasons mentioned above.
ahmed youssef
ahmed youssef on 18 Apr 2024
Edited: ahmed youssef on 18 Apr 2024
Thank you again! I tried using Python with the same parameters (67,3). Here is the output using the same parameters. Note that the output of autocorrelation has been produced using Python code as well as manual implementation of autocorrelation. It gives the same result in each case.

Sign in to comment.

Answers (1)

The Zadoff-Chu sequences have the useful property of having zero cyclic autocorrelation at all nonzero lags. One fast way to check this property is shown below
N = 67;
x = zadoffChuSeq(3,N);
X = fft(x);
cR = fftshift(ifft(X.*conj(X))); % circular correlation
figure
plot((-(N-1)/2:(N-1)/2),abs(cR))
xlabel("Lag")
ylabel("Autocorreleation")

5 Comments

Thank you for your reply. While the theoretical premise holds true, practical considerations come into play when dealing with the incoming sequence at the receiver. This sequence experiences delays that measure the distance between the uplink and downlink in communication systems or the range of the target in radar systems. I have made modifications to your code accordingly. However, the resulting system, while achieving perfect correlation at zero lag, also gives peaks before the zero-lag condition.
close all
clc
clear
N = 67;
x = zadoffChuSeq(3,N);
X = fft(x);
del=10;
for i=del-1:-1:0
y=[zeros(i,1); x]; % received signal
Y=fft(y,N);
cR = fftshift(ifft(X.*conj(Y))); % circular correlation
figure
plot((-(N-1)/2:(N-1)/2),abs(cR))
xlabel("Lag")
ylabel("Autocorreleation")
end
Note the difference between circularly shifting a signal and linear shift. ZC sequence maintains the autocorrelation property if they are circularly shifted.
So in your code if you try y = circshift(x,i)
in the for loop, and plot the circular correlation, you should see the peak with no side lobes. The sidelobes (sinc-like) appear when you truncate your signal.
N = 67;
x = zadoffChuSeq(3,N);
X = fft(x);
del = 10;
for i = del-1:-1:0
y = circshift(x,i); % circularly shifted signal
Y = fft(y);
cR = fftshift(ifft(X.*conj(Y))); % circular correlation
hold("on")
plot((-(N-1)/2:(N-1)/2),abs(cR))
end
xlabel("Lag")
ylabel("Autocorreleation")
In practical scenarios, like synchronization in comms, we usually use xcorr (linear autocorrelation) while keeping in mind that there are sidelobes but the delay estimator is an asymptotically consistent estimator.
Thank you for your cooperation. You provided an example to illustrate the property of circular shifting in ZC sequences. However, if we combine your code with some delay, practically speaking, we may observe the appearance of sidelobes that cannot be neglected.
N = 67;
x = zadoffChuSeq(3,N);
X = fft(x);
del = 10;
delx=[zeros(del,1); x]; % received signal
for i = del-1:-1:0
y = circshift(delx,i); % circularly shifted signal
Y = fft(y,N);
cR = fftshift(ifft(X.*conj(Y))); % circular correlation
figure
plot((-(N-1)/2:(N-1)/2),abs(cR))
end
xlabel("Lag")
ylabel("Autocorreleation")
Note that the delx is no longer a ZC sequence.
But this is the real case. Am I miss somthing?

Sign in to comment.

Asked:

on 18 Apr 2024

Commented:

on 18 Apr 2024

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!