DFS IDFS 离散傅里叶级数

                             DFS IDFS  离散傅里叶级数

要将信号进行时域到频域的变换,那么就离不开dfs  要变回去又离不来 Idfs  下面就是 matlab 实现的两个函数

很简单 用公式  下面是代码:

function [Xk] = dfs(xn,N )
n = [0: 1: N-1];
k = n;
WN = exp(-j*2*pi/N);
nk = n'*k ;
WNnk = WN.^nk;
Xk = xn*WNnk;
end

下面是idfs代码:

function[xn] = idfs(Xk, N)
n = [0 :1: N-1] ;
k = n;
WN = exp(-j*2*pi/N);
nk = n'*k;
WNnk = WN.^(-nk);
xn = Xk* WNnk/N;
end

其应用 给出周期方波                                   x(n) =    1                 mN <=  n <= mN + L -1                                                  0                mN  + L <= n <= (m+1)N -1            m 为0  -1 +1 。。。。。                       L/N为占空比   给出X (k) 的曲线 这里要注意的是要进行fftshift  搬移之后才会形成对称的图形   才能形成 k = [-N / 2 : N /2] ;  且没有那么长那就用0 补  代码中一共实现了四种长不同L值的变换 代码实现:

clf ;
L = 5 ;
N = 20 ;
xn  =[ones(1,L) zeros(1,N-L)];
k = [-N/2:N/2];
Xk = dfs(xn, N);
magXk = abs([Xk(N/2 + 1:N ), Xk(1:N/2+1)]);
subplot(221);
stem(k, magXk);
xlabel('k');
ylabel('Xk');
title('L = 5 , N = 20 wave ');

L = 5 ;
N = 40 ;
xn  =[ones(1,L) zeros(1,N-L)];
k = [-N/2:N/2];
Xk = dfs(xn, N);
magXk = abs([Xk(N/2 + 1:N ), Xk(1:N/2+1)]); % 这个的目的就有点类似于fftshift
subplot(222);
stem(k, magXk);
xlabel('k');
ylabel('Xk');
title('L = 5 , N = 40 wave ');

L = 6 ;
N = 40 ;
xn  =[ones(1,L) zeros(1,N-L)];
k = [-N/2:N/2];
Xk = dfs(xn, N);
magXk = abs([Xk(N/2 + 1:N ), Xk(1:N/2+1)]);
subplot(223);
stem(k, magXk);
xlabel('k');
ylabel('Xk');
title('L = 6 , N = 40 wave ');

L = 7;
N = 20 ;
xn  =[ones(1,L) zeros(1,N-L)];
k = [-N/2:N/2];
Xk = dfs(xn, N);
magXk = abs([Xk(N/2 + 1:N ), Xk(1:N/2+1)]);
subplot(224);
stem(k, magXk);
xlabel('k');
ylabel('Xk');
title('L = 7 , N = 20 wave ');
    
    

《DFS IDFS 离散傅里叶级数》

 

    原文作者:DFS
    原文地址: https://blog.csdn.net/wangming520liwei/article/details/34135713
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞