DFS IDFS 离散傅里叶级数

深入理解数据库原理
以实战为基础,以数据库原理为基础,结合实战,深入理解数据库原理。
wangxiaoming

                             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 ');
    
    



 

wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值