关于使用 matlab fft 的数学示例的额外解释

A. *_*ort 2 matlab fft

有人可以解释为什么 fft 的结果需要除以采样点的数量(信号的长度)?

该示例可以在此页面上找到:https : //fr.mathworks.com/help/matlab/ref/fft.html

Fs = 1000;            % Sampling frequency                    
T = 1/Fs;             % Sampling period       
L = 1500;             % Length of signal
t = (0:L-1)*T;        % Time vector

S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
Y = fft(S);

P2 = abs(Y/L);

P1 = P2(1:L/2+1);
Run Code Online (Sandbox Code Playgroud)

为什么他们包括这个操作:P2 = abs(Y/L);

他们为链接中的每个示例执行此操作。

另外,如果他们必须在每次 fft 计算后执行该操作,他们为什么不直接在内置 fft 函数中包含该操作?在某些情况下,最好不要执行该额外操作吗?

谢谢!

Cri*_*ngo 5

从 DFT 及其逆的定义(来自维基百科)可以看出:

DFT方程

IDFT方程

DFT 和它的逆之间的差异是指数中的符号和归一化项1/N。但请注意,将 this1/N放在何处无关紧要,它可以放入前向变换中,并且仍然会保留IDFT(DFT(f))==f. 事实上,有些人通过1/sqrt(N)在两个变换中的每一个之前放置它们来使这些对称。

它通常放在逆变换之前的原因是你可以做这样的事情IDFT(DFT(f)DFT(g)) == f*g(使用*卷积)。如果 DFT 具有1/N归一化项,则通过频域计算卷积需要一个额外的操作。所以这只是方便。

但是当使用 DFT 来检查信号功率等时,人们可能希望将此归一化添加到前向变换中。DFT 产生的值取决于信号强度及其长度。归一化消除了对长度的依赖。例如:

>> fft(ones(1,4))
ans =
   4   0   0   0

>> fft(ones(1,8))
ans =
   8   0   0   0   0   0   0   0
Run Code Online (Sandbox Code Playgroud)

但添加了规范化:

>> fft(ones(1,4))/4
ans =
   1   0   0   0

>> fft(ones(1,8))/8
ans =
   1   0   0   0   0   0   0   0
Run Code Online (Sandbox Code Playgroud)