I have Implemented Cyclostationary detector for spectrum sensing in AWGN channel in Matlab but I am getting vague result. As it performance doesn't vary with change in SNR. Its very strange result for me. I don't know what mistake I am doing in it. I am attaching my codes please have look and comment. Here I am finding cyclostationary feature of signal for its detection. Firstly I tried to Out FFT of a signal then shift its frequency by +alpha of tranform and -alpha to its conjugate. Then I multiplied both to taken sum of all. Thats how all theory explain about cyclostationary feature detection I will very grateful if somebody can help me in this.
function Pd=Cyclo_AWGN(Pf,snr_avg,n,N,Sim_Times)
% Pf= Probablity of false alarm
% n= length of data
% N= length of fft
% Sim_Times= Iteration
ln=0:n-1;
Over_Num = 0;
Th_awgn= sqrt(-2*log(Pf)/n); % threshold
for kk = 1:Sim_Times
phi= randi([-180,180],1,n);
phi=phi*2*pi/360;
x=sin(0.32*pi*ln+phi);
Recv_Signal = x; % Recived Signal
Noise_awgn = randn(1,n)+1i*randn(1,n);
AvgPower_Noise_awgn=sum(abs(Recv_Signal).^2)/snr_avg; %average power of noise
std_Noise_awgn = sqrt(AvgPower_Noise_awgn);
Noise_awgn = std_Noise_awgn*Noise_awgn;
norm_signal_awgn = Recv_Signal/std_Noise_awgn; %Normalized signal sample
norm_noise_awgn = Noise_awgn/std_Noise_awgn; %Normalized Noise sample
Recv_sig_awgn = norm_signal_awgn + norm_noise_awgn; % Normalized received signal for detection
X=zeros(2*N+1);
Y=zeros(2*N+1);
Ts=1/N;
for f=-N:N
d=exp(-j*2*pi*f*ln*Ts);
xf= Recv_sig_awgn.*d;
n_r=n:-1:1;
X(f+N+1)=sum(xf(n_r));
Y(f+N+1)=conj(sum(xf(n_r)));
end
alpha=10;
f=5;
f1=f+floor(alpha/2)+(floor(-((N-1)/2)):floor((N-1)/2));
f2=f-floor(alpha/2)+(floor(-((N-1)/2)):floor((N-1)/2));
S(kk)=sum(X(f1+N+1).*Y(f2+N+1))/N;
S(kk)=abs(S(kk))/n;
if S(kk)>Th_awgn
Over_Num = Over_Num +1; %decide 1 or 0, present or absent
end
end
Pd = Over_Num / Sim_Times; % Simulated Pd}