Прежде всего подготовьте свои данные: попробуйте передать данные через фильтр предварительного выделения:
y1 = filter([1 -1], 1, y);
Далее, просмотрите свои данные и удалите очевидные ошибки данных:
y1(1:3) = 0;
Анализ Фурье подходит только для квазипериодических сигналов.Таким образом, вы должны выбрать интервал квазистационарности и выполнить анализ на таких (возможно перекрывающихся) интервалах.Допустим, сигнал квазистационарен на 5000 баллов.И мы хотим выполнить анализ со сдвигом 100 пунктов:
sampleRate = 1/(x(2)-x(1));
frameSize = 5000;
frameShift = 100;
[signalSpectrogram, freqObs, timeObs] = spectrogram(y1, frameSize, frameSize-frameShift, pow2(nextpow2(frameSize)), sampleRate);
Давайте отобразим все результаты:
figure('NumberTitle','off', 'Name','The Spectral Analysis', 'Units','normalized', 'Position',[0 0 1 1]);
subplot(3,1,1);
plot(x,y);
grid('on');
xLim = xlim();
title('Original Signal');
subplot(3,1,2);
plot(x,y1);
grid('on');
title('Prepared Signal');
subplot(3,1,3);
imagesc(timeObs, freqObs, 10*log10(signalSpectrogram.*conj(signalSpectrogram)));
axis('xy');
axis([xLim 0 200]);
title('Prepared Signal Spectrogram');
В конце вы должны получить что-то похожее на: ![spectrogram](https://i.stack.imgur.com/U3uQY.png)