有关离散傅里叶级数(DFS)我之前也写过一些博文,例如:离散周期信号的傅里叶级数(DFS)
这里我再次给出标准公式。
分析式:
其中:
综合式:
这里我必须先声明,关于分析式和综合式前面那个系数1/N,到底在分析式的前面还是综合式的前面,不同的书籍定义还不一样,这个我们无所谓了。这里先以这里为准!
先看看分析式,使用MATLAB进行编程时,我们可以使用循环嵌套的方式编程,但是这样做不高效并且很麻烦,这不是我们提倡的做法,我们提倡使用向量化编程,我顺手推到了一下向量化编程的形式:
这里声明,n,k都是行向量,x以及X都是列向量的前提下推导的。
给出手稿版,写的不太详细,但是我想看我这篇博文的人肯定都是本专业的人,所以应该是能看懂的,只需点播而已:
根据这个最后的形式,我们给出dfs的函数程序,为了编程方便,我们同时约定X以及x也为行向量吧。
1
2
3
4
5
6
7
8
9
10
11
12
13
14function [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函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14function [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;
上面的推导可谓是一目了然,那么下面给出一个小例子,来体会下这两个函数的应用。
1
2
3
4
5
6
7clc;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
最后
以上就是忧心牛排最近收集整理的关于【 MATLAB 】离散傅里叶级数(DFS)及 IDFS 的 MATLAB 实现的全部内容,更多相关【内容请搜索靠谱客的其他文章。
发表评论 取消回复