我正在使用MATLAB来查找信号的峰值数。我试图绘制用N点移动平均滤波器滤波的信号的峰值数,N从2到30.(我还考虑在结果数组的开头没有应用滤波器时的峰值数)我的数据数组(从csv导入并具有0到1之间的双值)大约有50k点。当我使用数组切片提供部分数据,即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);
但我得到:
我意识到问题是我使用的int8。它最多只能达到127,这导致我的大结果为127。
把它变成双重解决了这个问题。