700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【 MATLAB 】离散傅里叶级数(DFS)及 IDFS 的 MATLAB 实现

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

时间:2019-02-11 23:15:29

相关推荐

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

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

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

分析式:

其中:

综合式:

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

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

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

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

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

function [Xk] = dfs(xn,N)% Computes Discrete Fourier Series Coefficients%______________________________________________% [Xk] = dfs(xn,N)% Xk = DFS coefficients array over 0 <= k <= N - 1% xn = One period of periodic signal over 0 <= n <= N - 1% N = Fundamental period of xnn = [0:1:N-1]; % row vector for nk = [0:1:N-1]; % row vector for kWN = exp(-j*2*pi/N);nk = n'*k;WNnk = WN .^ nk; %DFS matrixXk = xn * WNnk;

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

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

直接给出MATLAB函数:

function [xn] = idfs(Xk,N)% Computes Discrete Fourier Series Coefficients%______________________________________________% [xn] = idfs(Xk,N)% Xk = DFS coefficients array over 0 <= k <= N - 1% xn = One period of periodic signal over 0 <= n <= N - 1% N = Fundamental period of xnn = [0:1:N-1]; % row vector for nk = [0:1:N-1]; % row vector for kWN = exp(-j*2*pi/N);nk = k' * n;WNnk = WN .^(- nk); %IDFS matrixxn = (Xk*WNnk)/N;

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

clc;clear;close all;xn = [0,1,2,3];N = 4;Xk = dfs(xn,N)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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。