【 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 xn
-
-
n = [0:1:N-1]; % row vector for n
-
k = [0:1:N-1]; % row vector for k
-
WN = exp(-j*2*pi/N);
-
nk = n'*k;
-
WNnk = WN .^ nk; %DFS matrix
-
Xk = 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 xn
-
-
n = [0:1:N-1]; % row vector for n
-
k = [0:1:N-1]; % row vector for k
-
WN = exp(-j*2*pi/N);
-
nk = k' * n;
-
WNnk = WN .^(- nk); %IDFS matrix
-
xn = (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
文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。
原文链接:reborn.blog.csdn.net/article/details/83449896
- 点赞
- 收藏
- 关注作者
评论(0)