作为数据基础,我测量了伏特的数据。 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))
答案 0 :(得分:1)
是的,在FFT之后,纵坐标轴的单位仍然是伏特。
您可以通过除以信号采样数来缩放它,然后确实可以乘以2(分别代表频率0
和Fs/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)');
这将返回: