Как выполнить fft в Matlab и получить все фазы для 36 выборок измерения? - PullRequest
0 голосов
/ 01 апреля 2019

Я работаю над проведением спектрального анализа для измерения более 45 лет, оно проводилось раз в год.

Я выбрал Matlab для всей операции, потому что это часть проекта.Как я понял из всей информации в Интернете, мне нужно использовать функцию fft () для моих данных.Затем я попробовал код прямо с веб-страниц MATLAB.Это ниже. Я уже пробовал это и пытался найти пики на моем графике, но они меняются в зависимости от количества выборок (nfft).Таким образом, насколько я понимаю, это должно влиять только на «гладкость» сюжета.И я не понимаю, правильно ли я получаю фазу, вывод unwrap () смутил меня ..

y1=-35000-[631.39 630.54 630.99 631.37 631.14 630.78 631.51 631.00 630.92 630.32 631.46 630.90 629.96 630.69 630.66 630.72 630.52 630.94 631.24 630.97 631.07 631.21 631.38 631.13 630.11 631.15 630.25 629.93 630.51 630.23 630.91 630.20 630.43 629.39 631.52 630.04 ]'
y2=detrend(y1)
fs=36
%nfft=1024
nfft=length(y2)
%% Fourier transformation
Y = fft(y2,nfft);
Pyy = Y.*conj(Y)/nfft;
f = 1000/nfft*(0:(nfft/2-1));
plot(f,Pyy(1:nfft/2))
title('Power spectral density')
xlabel('Frequency')

Fs = 36;
NFFT = length(y);

% Power spectrum is computed when you pass a 'power' flag input
[P,F] = periodogram(y,[],NFFT,Fs,'power');

magnitudeY = abs(Y);        % Magnitude of the FFT
phaseY = unwrap(angle(Y));  % Phase of the FFT

Я ожидаю, что выход будет достаточно мощным, чтобы предполагать фактическую фазу,В предыдущей работе было обнаружено около 7 фаз (вероятность их должна быть 30% и выше).Тем не менее, я не могу получить ни правильную фазу, ни процент - у меня всегда получается что-то меньше 1. И фаза должна быть 15,8, а у меня 18,7 (человек, который выполнял предыдущие расчеты, использовал программное обеспечение, которое недоступно онлайн).

...