Почему амплитуды БПФ в частотной области занижены во временной области? - PullRequest
0 голосов
/ 10 июля 2019

В Matlab у меня есть сигнал длительностью 600 секунд, и я применил к нему БПФ (быстрое преобразование Фурье) за 500 секунд с No = 1024 выборками (4,096 секунды данных), чтобы получить амплитудуосновная частота (скачок мэра в частотной области).Однако, сравнивая его со значением амплитуды во временной области, отмечу, что оно имеет гораздо меньшее значение.Это показано на следующих графиках:

Red lines delimitates the signal segment where FFT where applied.

|FFT| vs Frequency. The sampling frequency is fm=250 Hz.

Как видно, амплитуда в частотной области почти на один уровень нижевременной области.Я проделал тот же тест в других сегментах и ​​сигналах, но так и не получил правильные или разозначаемые значения.

Основной код сегмента для генерации графика следующий:

%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

Я хотел бы знать, делаю ли я что-то неправильно или невозможно получить значения амплитуды из БПФ, когда сигнал не является чистой синусоидальной волной.Я читал, что только энергии одинаковы в обеих областях, но не амплитуды.Однако я не нашел никакой достоверной информации, чтобы подтвердить это.

1 Ответ

1 голос
/ 10 июля 2019

Визуальная амплитуда сигнала во временной области может состоять из конструктивных помех от множества спектральных пиков в частотной области. Это вмешательство может быть конструктивным или разрушительным в зависимости от относительных фаз. Таким образом, амплитуда (выглядит периодической) формы волны во временной области не всегда может быть определена простым просмотром спектра амплитуд в частотной области.

...