在Matlab中,我收到了600秒的信号,并应用了 在500秒内对其进行FFT(快速傅立叶变换),以No = 1024个样本(数据为4.096秒)为单位,以获取基频的幅度 (市长在频域中尖峰)。但是,比较时 它具有时域中的振幅值,我注意到它有一个 低得多的价值。如下图所示:
可以看出,频域中的幅度几乎比时域低一个幅度。我在其他细分市场和信号中都进行了相同的测试,但从未获得正确或可剃化的值。
用于生成图形的主要段代码如下:
%Substract the mean from the signal W, where W(su,1) is the time vector, and W(su,2) is the sampling vector.
Xo(su,1)=W(su,1);
Xo(su,2)=W(su,2)-mean(W(su,2));
% Window Time Duration(Seconds):
TT1=No/fm;
% Time instant(Seconds):
h=500;
%Time Instant at the end of the Window(Seconds):
Tf=h+TT1;
%Focused Signal Segment:
sub3=(h*250):((h+TT1)*250);
%Applying Hamming Windows to the Signal:
for g=h*250:(h+TT1)*250
w(g)=0.54-0.46*cos(2*pi*g/No);
Xo2(g,2)=Xo(g,2)*w(g);
end
%Getting Frequencies and the FFT of Xo2:
[freqP, xdftP, psdxP] = Mide_FFT_PSD(Xo2(sub3,1:2),fm);
%Plotting the Results:
po={'blue' , 'red' , 'green' , 'yellow'};
%Plot 1:
plot(W(:,1),W(:,2))
LineHandle1=plot(allAxesInFigure(1),[h h],get(gca,'YLim'),'Color','red','LineStyle',':');
LineHandle2=plot(allAxesInFigure(1),[Tf Tf],get(gca,'YLim'),'Color','red','LineStyle',':');
xlabel('Time (s)'); ylabel('Amplitude (g)'); title('Electromyogram of insect pump');
grid on
%Plot 2:
plot(freqP,xdftP,'Color',po{2})
xlabel('Frequency (Hz)'); ylabel('Amplitude (g)'); title('Amplitudes from FFT Window');
grid on;
其中Mide_FFT_PSD.m执行以下操作:
function [freq, xdft, psdx, phase] = Mide_FFT_PSD(datalist,fActual)
%Compute FFT & PSD
Fs = fActual;
x = datalist(:,2);
% x = datalist(:,1);
N = length(x);
freq = 0:Fs/length(x):Fs/2;
xdft = fft(x);
xdft = xdft(1:floor(N/2)+1);
psdx = (1/(Fs*N)) * abs(xdft).^2;
psdx(2:end-1) = 2*psdx(2:end-1);
psdx = psdx';
xdft = 1/length(x).*xdft;
xdft(2:end-1) = 2*xdft(2:end-1);
xdft = xdft';
phase = unwrap(angle(xdft));
xdft = abs(xdft);
end
我想知道我做错了什么吗? 当信号出现时,无法从FFT获得幅度值 不是纯正弦波。我读到只有能量是 在两个域中都相同,但幅度却不相同。但是我还没有 找到了任何严格的信息来确认这一点。
答案 0 :(得分:1)
在时域中,波形的可见振幅可以由频域中多个频谱峰值的相长干涉组成。取决于相对相位,这种干扰可能是相长的或相消的。因此,(总是看起来是周期性的)时域波形的振幅不能总是仅通过查看频域中的幅度谱来确定。