我尝试使用以下MATLAB代码生成Morlet小波功率谱的影响锥:
cone = conofinf('morl',1:365,LenSig,[],'plot');
然而,我得到的只是一个奇怪的阴影区域,由两条直线限定。对于Morlet小波功率谱,它看起来不像是一个影响锥。
我做错了什么?
答案 0 :(得分:1)
我猜你想在小波变换的边界输出COI。在这种情况下,您必须将最后一个参数指定为非空向量,但要使用坐标,您需要计算COI,例如
cone = conofinf('morl',1:365,LenSig,[1 LenSig],'plot');
我有类似的任务,这就是我所做的:
figure;
% plot wavelet transform / scalogram
imagesc(t,scales,WT);
axis square;
colorbar;
% annotate axes and title
title('Coefficients of continuous wavelet transform');
xlabel('Time (or space) b');
ylabel('Scales a');
% get cone of influence
% Here, you have to specify points at which you want to calculate COI
% as the last parameter:
cone = conofinf(wname,scales,LenSig,[1 LenSig]);
% combine left and right edges
cone = [cone{1}(:,floor(1:LenSig/2)) cone{2}(:,ceil(LenSig/2):end)];
% previous steps give you an area under COI
% you can see it with: figure; imagesc(cone);
% now, we want to get the border of this area
coi = zeros(1,LenSig);
for idx = 1:LenSig
valcoi = find(cone(:,idx)==1,1,'last');
if ~isempty(valcoi)
coi(idx) = f(valcoi);
end
end
% now plot COI border on top of your wavelet transform
hold on;
plot(t,coi,'k','LineWidth',1.5);
hold off;
或者,您可以在COI下填充区域,但这有点像黑客并且它并不理想。为此,您需要hatchfill function(此处为example如何使用它)。在路径上使用此功能后,您可以像这样使用它:
[~,h] = contourf(t,scales,cone*max(WT(:)),[1 1]*max(WT(:)));
hPatch = findobj(h, 'Type', 'patch');
hh = hatchfill(hPatch, 'cross', 45, 10);