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

Matlab 峰值不等距时使用梳状滤波器,matlab,filter,Matlab,Filter,我想用梳状滤波器来清除我的光谱,我想得到一个光谱,其峰值为主要峰值幅度的20%或以上,以便在其他地方包括为零,但我不确定如何使用梳状滤波器来指定这一点,因为文档中显示的大多数示例似乎都是针对等距的峰值。我正在使用 [pks,locs] = findpeaks(x,'MINPEAKHEIGHT',20/100*max) 我怎样才能正确地应用梳状滤波器呢?我觉得你的代码很好。我修改了DOC所取的例子,其中峰不是等距的,它不考虑峰值小于20%的最大值的高度。也许我没有正确回答你的问题。无论如何,代码

我想用梳状滤波器来清除我的光谱,我想得到一个光谱,其峰值为主要峰值幅度的20%或以上,以便在其他地方包括为零,但我不确定如何使用梳状滤波器来指定这一点,因为文档中显示的大多数示例似乎都是针对等距的峰值。我正在使用

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

我怎样才能正确地应用梳状滤波器呢?

我觉得你的代码很好。我修改了DOC所取的例子,其中峰不是等距的,它不考虑峰值小于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

这就是你想要的吗?

只是为了检查一下,这段代码会将光谱的其他部分归零吗?我的原始光谱非常嘈杂,我想把它归零,然后画出一个新的光谱,只包括这些峰。然后我还想保留这些值,以便使用ifft返回到时域