DFS IDFS 离散傅里叶级数

来源:互联网 发布:淘宝可以用什么支付 编辑:程序博客网 时间:2024/04/30 17:15

                             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)]); % 这个的目的就有点类似于fftshiftsubplot(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 ');        



 

0 0
原创粉丝点击