当前位置:  开发笔记 > 编程语言 > 正文

在MATLAB中将FFT的幅度缩放2

如何解决《在MATLAB中将FFT的幅度缩放2》经验,为你挑选了1个好方法。

我刚读了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示例



1> Suever..:

乘以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.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有