Я пытаюсь найти метод определения гауссовых пиков по данным подсчета фотонов. ось x — это количество фотонов для каждого пятна, а ось y — подсчитанные пятна.

Я использовал функцию findpeaks для поиска пиков. Сплошная линия создана сголайфилтом.

hgcs = sgolayfilt(hgc, 10, 41);
plot(hgc); hold on;plot(hgcs)
findpeaks(hgc, 'MinPeakDistance', 20)

Пики, которые я хочу восстановить, расположены примерно на 40, 80, 120 и 160.

Вопрос 1: Существуют ли какие-либо функции или алгоритмы, которые могут определить количество пиков и их расположение?

Вопрос2: После 160 есть небольшие особенности. Некоторые из них могут оставаться пиками, следующими за первыми четырьмя пиками. По крайней мере, мы знаем, что положения пиков квазипериодичны. Можем ли мы также найти больше пиков?

ОТВЕЧАТЬ

Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech , ME, M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.

Я отказался от оценки параметра ширины и просто выбрал амплитуду и местоположение с одинаковой шириной.

Попробуй это:

D = load('hgc.mat');
hgc = D.hgc;
x = linspace(0, numel(hgc), numel(hgc));
hgcs = sgolayfilt(hgc, 10, 41);
figure
plot(x,hgc)
hold on
plot(x,hgcs)
hold off
grid
[pks,locs,w] = findpeaks(hgc, 'MinPeakDistance', 20, 'MinPeakProminence',5);
gausfcn = @(b,x) b(1).*exp(-(x-b(2)).^2 * 0.05);
for k = 1:numel(locs)

СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ