Matlab FFT - 缩放y轴

时间:2018-05-27 08:38:44

标签: matlab signal-processing fft

作为数据基础,我测量了伏特的数据。 Matlab现在将用于执行FFT。 我有以下问题: - FFT后纵坐标轴上有什么单位?还伏? - 如何正确缩放?通过隐藏负频率(奈奎斯特),我实际上必须加倍幅度,对吗? - 我是否必须再次使用20 * log10(FFT)将FFT的所有值相乘以表示db中的纵坐标?

非常感谢您的支持! 弗兰克

Matlab示例:

load('TimeDomain.mat')%loading of the time domain signal
L=2500; %length of the signal
Fs=500000;%sampling frequency
N=2^nextpow2(L);%scale factor
t=(0:L-1)*10^-3;%time domain array
f=linspace(0,Fs/2,length(t));%frequency domain array 

FFT=abs(fft(Timedomain,N));   
figure(1)
plot(f,FFT(1:2500))

1 个答案:

答案 0 :(得分:1)

是的,在FFT之后,纵坐标轴的单位仍然是伏特。 您可以通过除以信号采样数来缩放它,然后确实可以乘以2(分别代表频率0Fs/2的第一个和最后一个元素除外)将所有光谱绘制在正极。

然后,如果要以dB绘制,可以使用函数mag2db,该函数将应用您所说的公式。

我在您的代码中发现了一些怪异之处,因此我建议进行一些修复。我的Timedomain信号是1 V时的100 kHz正弦。

Fs = 500000;                    % sampling frequency
L = 2500;                       % length of the signal
t = (0:L-1)/Fs;                 % time domain array
f = linspace(0, Fs/2, L/2+1);   % frequency domain array

Timedomain = cos(2*pi*100000*t); % Input signal

FFT = abs(fft(Timedomain)/L);
FFT(2:L/2) = 2*FFT(2:L/2);

%% Plots
subplot(2,1,1);
plot(f, FFT(1:L/2+1)); xlabel('Frequency (Hz)'); ylabel('Tension (V)');
subplot(2,1,2);
plot(f, mag2db(FFT(1:L/2+1))); xlabel('Frequency (Hz)'); ylabel('Tension (dBV)');

这将返回:

scaling_y