背景

在信号处理或图像重建中,我们常用 傅里叶变换 来分析信号的频率特性。傅里叶变换其实是一个 线性算子(线性变换),因此它可以写成一个矩阵与向量相乘的形式。


1. 什么是 E = fftc(eye(N),1)

在 MATLAB 中:

1
E = fftc(eye(N),1);

这段代码的含义是:对单位矩阵 eye(N) 的每一列,在第1维上应用中心化的傅里叶变换(fftc 代表 centered FFT,即变换后频率是居中的)。

这实际上是在构造一个 N×N 的线性变换矩阵,它表示 一维傅里叶变换操作(作用在第1维)。


2. 线性变换的角度理解傅里叶变换

一个向量 $\mathbf{x}$,我们可以写成:

$$\mathbf{x} = x_1 \mathbf{e}_1 + x_2 \mathbf{e}_2 + \cdots + x_n \mathbf{e}_n = I \mathbf{x}$$

其中 $\mathbf{e}_i$ 是单位基向量,第 $i$ 个元素为 1,其余为 0。

令 $\mathcal{F}$ 表示傅里叶变换算子,那么:

$$\mathcal{F} \mathbf{x} = \mathcal{F}(x_1 \mathbf{e}_1 + x_2 \mathbf{e}_2 + \cdots) = x_1 \mathcal{F}(\mathbf{e}_1) + x_2 \mathcal{F}(\mathbf{e}_2) + \cdots$$

也就是说,

$$\mathcal{F} \mathbf{x} = \mathcal{F} (I \mathbf{x}) = (\mathcal{F} I)\mathbf{x}$$

这说明,只要你知道 $\mathcal{F}(\mathbf{e}_i)$ 对每个 $\mathbf{e}_i$ 的作用,就知道了整个 $\mathcal{F}$ 对任意 $\mathbf{x}$ 的作用。

因此我们可以写出:

$$\mathcal{F} = \text{fftc}(\text{eye}(N), 1)$$

3. MATLAB 中的实现含义

1
E = fftc(eye(N), 1);
  • eye(N) 是 $N \times N$ 的单位矩阵,每列是一个单位基向量;
  • fftc(eye(N), 1) 表示对每一列向量做第1维的中心化傅里叶变换;
  • 所以 E 的第 $i$ 列是 $\mathcal{F}(\mathbf{e}_i)$;
  • 因此,E * x 就等价于对向量 x 施加一维傅里叶变换。

4. 小示例

1
2
3
4
5
6
7
8
N = 4;
E = fftshift(fft(eye(N)), 1);   % 简化版 fftc
x = [1; 2; 3; 4];
y = E * x;

% 验证是否等价于 fftshift(fft(x))
y_direct = fftshift(fft(x));
disp(norm(y - y_direct)); % 应该接近 0

5. 总结

  • 傅里叶变换是一个线性变换,可以表示为矩阵乘法;
  • fftc(eye(N), 1) 构造出这个变换的矩阵形式;
  • 用于理解和分析变换结构,或做高阶操作如 Kronecker 产品、多维构造等。