# DFT和IDFT分析

7 篇文章 0 订阅

DFT：离散傅里叶变换

## 定义

#### DFT的定义

x ( n ) x(n) 是一个长度为 M M 的有限长序列，则定义 x ( n ) x(n) N N 点离散傅里叶变换为
X ( k ) = D F T [ x ( n ) ] = ∑ n = 0 N − 1 x ( n ) W N k n         ( k = 0 , 1 , . . . , N − 1 ) X(k) = DFT[x(n)] = \sum\limits_{n = 0}^{N - 1} {x(n)W_N^{kn}} \ \ \ \ \ \ \ (k=0, 1, ..., N-1)

#### DFT的定义

X ( k ) X(k) 的离散傅里叶逆变换（Inverse Discrete Fourier Transform, IDFT）为
x ( n ) = I D F T [ X ( k ) ] = 1 N ∑ n = 0 N − 1 X ( k ) W N − k n         ( n = 0 , 1 , . . . , N − 1 ) x(n) = IDFT[X(k)]=\frac{1}{N} \sum\limits_{n = 0}^{N - 1} {X(k)W_N^{-kn}} \ \ \ \ \ \ \ (n=0, 1, ..., N-1)

## DFT的矩阵分析

1. 对于每一个 X ( k ) X(k) 的计算，为两个向量的内积形式

2. 对于 k = 0 , 1 , . . . , N − 1 k=0, 1, ..., N-1 ,则 X ( k ) X(k) 的计算可以看做向量 x ( n ) x(n) 一个矩阵的乘积，我们一般讲这个矩阵称作DFT矩阵 X ( k ) = D F T [ x ( n ) ] = ∑ n = 0 N − 1 x ( n ) W N k n = x ( n ) ∗ P         ( k = 0 , 1 , . . . , N − 1 ) X(k) = DFT[x(n)] = \sum\limits_{n = 0}^{N - 1} {x(n)W_N^{kn}} = x(n)*P \ \ \ \ \ \ \ (k=0, 1, ..., N-1) P = [ W N 0 ∗ 0    W N 0 ∗ 1    . . . W N 0 ∗ n W N 1 ∗ 0    W N 1 ∗ 1    . . . W N 1 ∗ n . . . W N k ∗ 0    W N k ∗ 1    . . . W N k ∗ n ] P= \left[ \begin{array}{l} W_N^{0*0}\ \ W_N^{0*1} \ \ ...W_N^{0*n}\\ W_N^{1*0}\ \ W_N^{1*1} \ \ ...W_N^{1*n}\\ ... \\ W_N^{k*0}\ \ W_N^{k*1} \ \ ...W_N^{k*n}\\ \end{array} \right]

3. 同理，对于IDFT的运算，同样会有一个对应的IDFT矩阵，且和DFT矩阵有如下的关系: x ( n ) = I D F T [ X ( k ) ] = 1 N ∑ n = 0 N − 1 X ( k ) W N − k n = 1 N X ( k ) ∗ Q ( k = 0 , 1 , . . . , N − 1 ) x(n) = IDFT[X(k)]=\frac{1}{N} \sum\limits_{n = 0}^{N - 1} {X(k)W_N^{-kn}} =\frac{1}{N} X(k)*Q \\ (k=0, 1, ..., N-1) Q = [ W N − 0 ∗ 0    W N − 0 ∗ 1    . . . W N − 0 ∗ n W N − 1 ∗ 0    W N − 1 ∗ 1    . . . W N − 1 ∗ n . . . W N − k ∗ 0    W N − k ∗ 1    . . . W N − k ∗ n ] Q= \left[ \begin{array}{l} W_N^{-0*0}\ \ W_N^{-0*1} \ \ ...W_N^{-0*n}\\ W_N^{-1*0}\ \ W_N^{-1*1} \ \ ...W_N^{-1*n}\\ ... \\ W_N^{-k*0}\ \ W_N^{-k*1} \ \ ...W_N^{-k*n}\\ \end{array} \right]

4. P P Q Q 的形式进行分析，则可得到如下结论:
Q = P ∗ Q = P^{*}
其中， P P D F T DFT 矩阵， Q Q I D F T IDFT 矩阵，且 P P Q Q 均为对称阵。
P P Q Q 的第一行和第一列全为1。

5. P P Q Q 应用于DFT和IDFT中，则有
X ( k ) = D F T [ x ( n ) ] = x ( n ) ∗ P x ( n ) = I D F T [ X ( k ) ] = 1 N X ( k ) ∗ Q = 1 N x ( n ) ∗ P ∗ Q 1 N x ( n ) ∗ P ∗ Q = I N X(k) = DFT[x(n)] = x(n)*P \\ x(n) = IDFT[X(k)]=\frac{1}{N} X(k)*Q =\frac{1}{N} x(n)*P*Q \\ \frac{1}{N} x(n)*P*Q = I_{N}
P ∗ Q = N ∗ I N P*Q = N * I_{N}
说明 D F T DFT 矩阵 P P I D F T IDFT 矩阵 Q Q 均为正交矩阵 A ∗ A H = E A*A^{H}=E ）。
这两个矩阵的每一行（列）都是有个基，在N个方向上都有不同的基向量。
因此， D F T DFT I D F T IDFT 都是一种正交变换。

## 相关的代码分析

%% Prepare
clc;
close all;
clear;

%% Define the signal
N = 8;
x = [0:N-1];

%% Generate the vector of n and k
N = length(x);
n = [0:N-1];
k = [0:N-1];

%% Generate the twist-factor W
imag_unit = sqrt(-1);
W = exp(-1*imag_unit*2*pi/N);

%% Generate P matrix
P = W.^(n'*k);

%% DFT transformation
X_P = x*P;
X_fft = fft(x);
X_err = norm(X_P - X_fft)

%% Generate Q matrix
Q = conj(P);

% IDFT transformation
x_Q = 1/N * X_P * Q;
x_ifft = ifft(X_fft);
x_err = norm(x_Q - x_ifft)

%% Test: P*Q == N*I_n
I_n = eye(N);
left = P*Q;
right = N*I_n;
err = norm(left - right)

%% Generate P and Q using dftmtx
P_dftmtx = dftmtx(N);
P_err = norm(P_dftmtx - P)

Q_dftmtx = conj(dftmtx(N));
Q_err = norm(Q_dftmtx - Q)


• 2
点赞
• 0
评论
• 18
收藏
• 一键三连
• 扫一扫，分享海报

03-12 3415

12-16 4040
02-19 999
03-09 3万+
04-06 7914
10-24 2295
09-11 6179
11-16 1万+
02-28 1万+
01-14 2万+
04-18 799
10-31
10-02 637
11-07 1759