离散傅里叶变换
{ X ~ ( k ) = DFS [ x ~ ( n ) ] = ∑ n = 0 N − 1 x ~ ( n ) e − j 2 π N k n k = 0 , 1 , . . . , N − 1 x ~ ( n ) = IDFS [ X ~ ( k ) ] = 1 N ∑ n = 0 N − 1 X ~ ( k ) e j 2 π N k n n = 0 , 1 , . . . , N − 1 \begin{cases} \tilde{X}(k)=\textbf{DFS}[\tilde{x}(n)]=\sum\limits_{n=0}^{N-1}\tilde{x}(n)e^{-j\frac{2\pi}{N}kn}\quad k=0,1,...,N-1 \\ \tilde{x}(n)=\textbf{IDFS}[\tilde{X}(k)]=\frac{1}{N}\sum\limits_{n=0}^{N-1}\tilde{X}(k)e^{j\frac{2\pi}{N}kn}\quad n=0,1,...,N-1 \end{cases} ⎩ ⎨ ⎧X~(k)=DFS[x~(n)]=n=0∑N−1x~(n)e−jN2πknk=0,1,...,N−1x~(n)=IDFS[X~(k)]=N1n=0∑N−1X~(k)ejN2πknn=0,1,...,N−1
自定义dfs()
function [Xk] = dfs(xn)
% 离散傅里叶级数变换
% Xk:离散傅里叶级数
% xn:待变换序列
% N:序列变换长度
N = length(xn);
n = 0:N-1;
k = 0:N-1;
nk = n'*k;
Wn = exp(-1j*2*pi/N);
Xk = xn*Wn.^nk;
end
自定义idfs()
function [xn] = idfs(Xk)
% 离散傅里叶级数逆变换
% Xk:离散傅里叶级数
% xn:待变换序列
% N:序列变换长度
N = length(Xk);
n = 0:N-1;
k = 0:N-1;
Wn = exp(1j*2*pi/N);
nk = n'*k;
xn = (Xk*Wn.^nk)/N;
end
例子:
clear;
xn = [7, 5, 6, 4, 3, 2];
N =length(xn);
n = 0:N-1;
k = 0:N-1;
Xk = dfs(xn);
xn_return = idfs(Xk);
figure('color', 'w');
subplot(221)
stem(n,xn, 'filled');
title('原始序列 xn');
subplot(222)
stem(n,abs(xn_return), 'filled');
title('逆变换后的序列 xn\_return');
subplot(223)
stem(k,abs(Xk), 'filled');
title('离散傅里叶级数 |Xk|');
subplot(224)
stem(k,angle(Xk), 'filled');
title('离散傅里叶级数 ∠Xk');