ОК, так вот моя провалил попытка сделать это. То, что вам нужно сделать, это построить спектр и определить самый большой пик - это среднее значение, а также второй по величине пик, который даст вам доминирующую частоту. Я заметил, что время выборки между точками не является постоянным, но будем надеяться, что это не мешает вещам, и это должно дать нам хороший сигнал.
BTW, я увеличил размер точки для БПФ, чтобы увеличить разрешение спектра, чтобы мы могли лучше понять, где находятся пики. Таким образом, давайте построим спектр и убедиться, что мы сдвигать спектр таким образом, что центральная частота находится в середине, а не слева:
N = 4096; %// FFT point size
F = fft(ssd(:,2), N);
Fs = fftshift(F);
mag = abs(Fs); %// Magnitude spectrum shifted
plot(1:N, abs(mag)); %// Plot the spectrum
Это то, что мы получаем, и я добавил в некоторых данных курсоры, чтобы помочь проиллюстрировать мою точку зрения:
![enter image description here](https://i.stack.imgur.com/WfTQ1.png)
Обратите внимание, что я вручную досматриваемого, где пики, потому что их сортировки и выбрав самый большой компонент не лучший способ делать вещи. Самый большой пик, очевидно, является значением постоянного тока, но большие значения, которые следуют за наибольшим пиком, могут не обязательно давать вам правильные результаты, как вы можете видеть здесь. Поэтому вы можете запустить его с помощью алгоритма обнаружения максимума, чтобы получить доминирующий пик, но я собираюсь избежать этого, чтобы дать вам результат.
Как видите, в смещенном спектре точки в точках 2018 и 2080 соответствуют нашим доминирующим пикам, а точка на 2049 - смещение/среднее значение постоянного тока. Таким образом, создайте новый сигнал, в котором мы будем копировать только эти три местоположения в частотной области, отменить сдвиг, взять инверсию, а также закрыть любые остаточные мнимые компоненты.
Вы также заметите, что длина вывода - это размер точки FFT. Вы хотите, чтобы удалить из дополнительных вывода и показывать только до тех пор, пока первоначальный сигнал содержит:
%// Create blank array
out_reconstruct = zeros(N,1);
%// Copy values over from shifted spectrum
out_reconstruct([2018 2049 2080]) = Fs([2018 2049 2080]);
%// Reconstruct in time domain and cap
out_reconstruct = real(ifft(ifftshift(out_reconstruct)));
out_reconstruct = out_reconstruct(1:size(ssd,1));
%// Plot
plot(ssd(:,1), ssd(:,2), ssd(:,1), out_reconstruct);
Мы получаем это:
![enter image description here](https://i.stack.imgur.com/sLUcR.png)
Как вы можете видеть, это ISN Хорошая реконструкция. В ваших данных существует высокая изменчивость, и поэтому для восстановления этих данных недостаточно одной доминирующей синусоиды. Тем не менее, среднее значение более или менее в порядке, а колебания между оригиналом и реконструированными одинаковы .... поэтому доминирующий материал работает, но высокая изменчивость здесь не моделируется.
Лучшее, что вы собираетесь с этим подходом, это синусоида, частота которого имеет наибольшую амплитудную характеристику. Это не будет правильно восстанавливаться с использованием сложных переменных данных. У вас есть пример сигнала, который мы видим? Я серьезно не вижу, как просто использовать среднее значение (которое в данном случае является смещением по постоянному току), а доминирующая частота поможет в достоверном восстановлении исходного сигнала. – rayryeng
@rayryeng Добавлены графики исходного сигнала, а также амплитудный отклик в вопросе. Я не понимаю, как я должен аппроксимировать исходный сигнал, и именно поэтому я спрашиваю. – Lightvvind
BTW, если у вас есть сложные переменные данные, компонент с самым сильным ответом, скорее всего, будет 0 Гц/DC. Возможно, вам захочется найти два самых больших компонента ... или, возможно, взять первый компонент и найти среднее из следующих 10 верхних компонентов ... или что-то в этом роде. Но да, я не вижу этого, как это можно сделать, просто используя доминирующую частоту и среднее значение. Лучшее, что вы получите, это синусоида на этой доминирующей частоте, вертикально компенсированная средним значением, если только это не так. Это имеет смысл для вас? Если да, я напишу ответ. – rayryeng