Custom DFT function for even and odd samples

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 commentaires

l=length(x);
if(l<N)
x=[x zeros(1,(N-1))];
else if(l>=N)
x=[x(1:N)];
end
Excuse me I dont think this would work...

Connectez-vous pour commenter.

Réponses (1)

Nadia Shaik
Nadia Shaik le 3 Fév 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.

Catégories

En savoir plus sur MATLAB dans Centre d'aide et File Exchange

Produits

Version

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by