Почему число пиков моего сигнала остается неизменным, когда я увеличиваю n в фильтре скользящей средней n-точки, когда данные большие? - PullRequest
0 голосов
/ 15 апреля 2019

Я использую 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);

Я ожидаю сюжет, подобный этому, когда даны целые данные: expected

но я получаю:

plotted

1 Ответ

0 голосов
/ 18 апреля 2019

Я понял, что проблема в том, что я использую int8.Это может занять только 127, и это привело к тому, что мои большие результаты были равны 127.

Превращение в двойное решает проблему.

...