Custom DFT function for even and odd samples
    11 views (last 30 days)
  
       Show older comments
    
I'm trying to create a custom DFT function using circshift for even and odd samples but the odd part is not working. I appreciate if someone can help.
function X_k = my_DFT(x,N)
L = length(x);
if N < L
    error(' N < L')
elseif N > L
    xn = zeros(1,N); %zero padding
    xn(1:L) = x;
else % N == L
    xn = x;
end
if rem(N, 2) == 0 
n = 0 : N-1;
k = 0 : N-1;
CoefMatrix = exp(1i * (2*pi/N) * k' * n);
X_k = CoefMatrix * xn';
X_k = circshift(X_k',N/2);
else
n = 0 : N-1;
k = 0 : N-1;
CoefMatrix = exp(1i * (2*pi/N) * k' * n);
X_k = CoefMatrix * xn';
X_k = circshift(X_k',N/2 + 1); %?
end
end
2 Comments
Answers (1)
  Nadia Shaik
    
 on 3 Feb 2022
        Hello,
It is my understanding that you are trying to create a custom DFT function for even and odd samples of the input using circshift function. 
You may refer to the below mentioned code example:
function X_k = my_DFT(x,N)
L = length(x);
if N < L
    error(' N < L')
elseif N > L
    xn = zeros(1,N); %zero padding
    xn(1:L) = x;
else % N == L
    xn = x;
end
if rem(L, 2) == 0 
n = 0 : N-1;
k = 0 : N-1;
CoefMatrix = exp(1i * (2*pi/N) * k' * n);
X_k = CoefMatrix * xn';
X_k = [X_k(1) circshift(X_k(2:end)',N-1)];
else
n = 0 : N-1;
k = 0 : N-1;
CoefMatrix = exp(1i * (2*pi/N) * k' * n);
X_k = CoefMatrix * xn';
X_k = circshift(X_k',N); %?
end
end
  I hope it helps you.
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!