我刚读了Mablab教程的例子,试图研究FFT函数.任何人都可以告诉我,最后一步,为什么P1(2:end-1) = 2*P1(2:end-1)
.在我看来,没有必要乘以2.
Fs = 1000; % Sampling frequency T = 1/Fs; % Sampling period L = 1000; % Length of signal t = (0:L-1)*T; % Time vector %-------- S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t); %--------- X = S + 2*randn(size(t)); %--------- plot(1000*t(1:50),X(1:50)) title('Signal Corrupted with Zero-Mean Random Noise') xlabel('t (milliseconds)') ylabel('X(t)') Y = fft(X); P2 = abs(Y/L); P1 = P2(1:L/2+1); P1(2:end-1) = 2*P1(2:end-1); f = Fs*(0:(L/2))/L; plot(f,P1) title('Single-Sided Amplitude Spectrum of X(t)') xlabel('f (Hz)') ylabel('|P1(f)|') Y = fft(S); P2 = abs(Y/L); P1 = P2(1:L/2+1); P1(2:end-1) = 2*P1(2:end-1); plot(f,P1) title('Single-Sided Amplitude Spectrum of S(t)') xlabel('f (Hz)') ylabel('|P1(f)|')
Matlab示例
乘以2的原因是返回的频谱fft
关于DC分量是对称的.由于它们显示单侧振幅谱,因此每个点的振幅将加倍,以说明数据在光谱另一侧的贡献.例如,单侧幅度pi/4
是幅度pi/4
加上幅度at -pi/4
.
跳过第一个样本,因为它是DC点,因此在频谱的两个边之间共享.
因此,例如,如果我们fft
用幅度为0.7的50Hz正弦曲线和振幅为1的120Hz正弦曲线来观察它们的示例信号.
Fs = 1000; % Sampling frequency T = 1/Fs; % Sampling period L = 1000; % Length of signal t = (0:L-1)*T; % Time vector S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t); % Compute the FFT Y = fft(S); % Compute the amplitudes amplitude = abs(Y / L); % Figure out the corresponding frequencies f = Fs/L*[0:(L/2-1),-L/2:-1] % Plot the result plot(f, amplitude)
当我们绘制这个图时,你会看到它是对称的,原始输入幅度只能通过组合光谱两侧的幅度来实现.
他们所做的稍微更明确的版本将是以下两个光谱的总和
P1(2:end-1) = P1(2:end-1) + P2((L/2+2):end);
但是,根据定义,频谱是对称的,选择简单地乘以2.