Я использую MATLAB, чтобы найти число пиков сигнала.
Я пытаюсь построить число пиков сигнала, отфильтрованного с помощью фильтра N-точечной скользящей средней, N изменяется от 2 до 30 . (Я также учитываю количество пиков, когда фильтр не применен на начало результирующего массива) Мой массив данных (импортированный из csv и имеющий двойные значения от 0 до 1) имеет около 50 тыс. точек. Когда я даю часть данных, то есть 100, 500 или 1000 точек, используя разрезание массива, количество пиков уменьшается, как и ожидалось. Однако когда я даю целые данные или даже 2000 баллов, число пиков остается неизменным на уровне 127.
Я изменил количество данных, передаваемых фильтру, чтобы выяснить, почему это происходит. Я изменил закомментированные строки, как показано в комментарии, и попытался. Когда менее 1000 точек данных, данный участок был в порядке.
Вот сигнал
https://www.dropbox.com/s/e1bkcjn5ta5q610/exampleSignal.csv?dl=0
Пожалуйста, импортируйте его из 4-го элемента в конец, в начале он содержит какие-то странные данные, я их не взял, VarName1 - имя вектора импортируемого столбца
numberOfPeaks = zeros(30,1,'int8');
pks = findpeaks(VarName1); % VarName1(1:1000,:) (when no filter applied)
numberOfPeaks(1) = size(pks,1);
for i=2:30
h = 1/i*ones(1,i,'double');
y = filter(h,1,VarName1); % VarName1(1:1000,:)
numberOfPeaks(i) = size(findpeaks(y),1);
end
plot(1:30,numberOfPeaks);
Я ожидаю сюжет, подобный этому, когда даны целые данные:
но я получаю: