当峰值不等距时使用梳状滤波器

时间:2014-08-20 21:05:21

标签: matlab filter

我正在尝试使用梳状滤波器来清理我的光谱,我想获得一个峰值为20%或更高的峰值的光谱,其中包含其他零点,但我不确定如何使用梳状滤波器指定这一点,因为文档中显示的大多数示例似乎都是等距离的峰。我正在使用

[pks,locs] = findpeaks(x,'MINPEAKHEIGHT',20/100*max)

如何正确应用梳状滤镜?

1 个答案:

答案 0 :(得分:0)

您的代码对我来说很好。我修改了doc(取here)中的示例,其中峰值不等距,并且它不考虑小于最大值高度的20%的峰值。也许我没有得到你的问题。无论如何这里是代码:

clc
clear

x = linspace(0,1,1024);
Pos = [0.1 0.13 0.15 0.23 0.25 0.40 0.44 0.65 0.76 0.78 0.81];
Hgt = 4*[4 5 3 1 5 4.2 2.1 4.3 3.1 5.1 0.6];
Wdt = [0.005 0.005 0.006 0.01 0.01 0.03 0.01 0.01 0.005 0.008 0.005];
PeakSig = zeros(size(x));
for n = 1:length(Pos)
    PeakSig = PeakSig + Hgt(n)./(1 + abs((x - Pos(n))./Wdt(n))).^4;
end

[pks,locs] = findpeaks(PeakSig,'MINPEAKHEIGHT',20/100*max(Hgt(:)));

%pks = pks/max(pks(:))

plot(x,PeakSig/max(pks(:))), 
hold on
%  Offset values of peak heights for plotting
plot(x(locs),(pks/max(pks(:))+0.01),'k^','markerfacecolor',[1 0 0])
line([0 x(end)],[0.2 0.2],'Color','k','LineWidth',2);
hold off

enter image description here

这是你在找什么?