【 MATLAB 】离散傅里叶级数(DFS)及 IDFS 的 MATLAB 实现

举报
李锐博恩 发表于 2021/07/15 05:04:30 2021/07/15
【摘要】 有关离散傅里叶级数(DFS)我之前也写过一些博文,例如:离散周期信号的傅里叶级数(DFS) 这里我再次给出标准公式。 分析式: 其中: 综合式: 这里我必须先声明,关于分析式和综合式前面那个系数1/N,到底在分析式的前面还是综合式的前面,不同的书籍定义还不一样,这个我们无所谓了。这里先以这里为准! 先看看分析式,使用MATLAB进行编程时,我们可以使用...

有关离散傅里叶级数(DFS)我之前也写过一些博文,例如:离散周期信号的傅里叶级数(DFS)

这里我再次给出标准公式。

分析式:

\tilde X(k) = DFS[\tilde x(n)] = \sum_{n = 0}^{N-1}\tilde x(n)W_N ^{nk}

其中:

W_N = e^{-j \frac{2\pi}{N}}

综合式:

\tilde x(n) = IDFS[\tilde X(n)] = \frac{1}{N}\sum_{k = 0}^{N-1}\tilde X(k)W_N^{-nk}

这里我必须先声明,关于分析式和综合式前面那个系数1/N,到底在分析式的前面还是综合式的前面,不同的书籍定义还不一样,这个我们无所谓了。这里先以这里为准!

先看看分析式,使用MATLAB进行编程时,我们可以使用循环嵌套的方式编程,但是这样做不高效并且很麻烦,这不是我们提倡的做法,我们提倡使用向量化编程,我顺手推到了一下向量化编程的形式:

这里声明,n,k都是行向量,x以及X都是列向量的前提下推导的。

给出手稿版,写的不太详细,但是我想看我这篇博文的人肯定都是本专业的人,所以应该是能看懂的,只需点播而已:

根据这个最后的形式,我们给出dfs的函数程序,为了编程方便,我们同时约定X以及x也为行向量吧。


  
  1. function [Xk] = dfs(xn,N)
  2. % Computes Discrete Fourier Series Coefficients
  3. %______________________________________________
  4. % [Xk] = dfs(xn,N)
  5. % Xk = DFS coefficients array over 0 <= k <= N - 1
  6. % xn = One period of periodic signal over 0 <= n <= N - 1
  7. % N = Fundamental period of xn
  8. n = [0:1:N-1]; % row vector for n
  9. k = [0:1:N-1]; % row vector for k
  10. WN = exp(-j*2*pi/N);
  11. nk = n'*k;
  12. WNnk = WN .^ nk; %DFS matrix
  13. Xk = xn * WNnk;


下面研究IDFS,同样给出手稿版推导向量化编程方案:

上面少了一个负号,在所有的n*k的值前面加一个负号即可。

直接给出MATLAB函数:


  
  1. function [xn] = idfs(Xk,N)
  2. % Computes Discrete Fourier Series Coefficients
  3. %______________________________________________
  4. % [xn] = idfs(Xk,N)
  5. % Xk = DFS coefficients array over 0 <= k <= N - 1
  6. % xn = One period of periodic signal over 0 <= n <= N - 1
  7. % N = Fundamental period of xn
  8. n = [0:1:N-1]; % row vector for n
  9. k = [0:1:N-1]; % row vector for k
  10. WN = exp(-j*2*pi/N);
  11. nk = k' * n;
  12. WNnk = WN .^(- nk); %IDFS matrix
  13. xn = (Xk*WNnk)/N;

上面的推导可谓是一目了然,那么下面给出一个小例子,来体会下这两个函数的应用。


  
  1. clc;clear;close all;
  2. xn = [0,1,2,3];
  3. N = 4;
  4. Xk = dfs(xn,N)
  5. xn = idfs(Xk,N)

Xk =

   6.0000 + 0.0000i  -2.0000 + 2.0000i  -2.0000 - 0.0000i  -2.0000 - 2.0000i


xn =

   0.0000 - 0.0000i   1.0000 - 0.0000i   2.0000 - 0.0000i   3.0000 + 0.0000i

 

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/83449896

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。