В Matlab у меня есть сигнал длительностью 600 секунд, и я применил к нему БПФ (быстрое преобразование Фурье) за 500 секунд с 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
Я хотел бы знать, делаю ли я что-то неправильно или невозможно получить значения амплитуды из БПФ, когда сигнал не является чистой синусоидальной волной.Я читал, что только энергии одинаковы в обеих областях, но не амплитуды.Однако я не нашел никакой достоверной информации, чтобы подтвердить это.