在MATLAB中填充两条曲线之间、特定点之间的区域

在MATLAB中填充两条曲线之间、特定点之间的区域,matlab,Matlab,我有一个PSD图,我试图在MATLAB中计算和填充两个不同频率范围(8-30 Hz和70-100 Hz)的两条曲线之间的区域 这是我用来生成图的代码,其中f=频率和Zm,Z代表两种情况的Z分数: plot(f,Zm,f,Z,'LineWidth',2) xlim([0 100]); xlabel('Frequency (Hz)'); ylabel('Normalized Power'); 我相信我需要使用trapz函数来计算面积,使用fill函数来填充空间,但我不确定如何使用这些函数在特定频率

我有一个PSD图,我试图在MATLAB中计算和填充两个不同频率范围(8-30 Hz和70-100 Hz)的两条曲线之间的区域

这是我用来生成图的代码,其中
f
=频率和
Zm
Z
代表两种情况的Z分数:

plot(f,Zm,f,Z,'LineWidth',2)
xlim([0 100]);
xlabel('Frequency (Hz)');
ylabel('Normalized Power');
我相信我需要使用
trapz
函数来计算面积,使用fill函数来填充空间,但我不确定如何使用这些函数在特定频率之间进行计算


为了使事情进一步复杂化,我只想对频率为8-30Hz的ZmZ区域进行着色

这是正在讨论的情节:


要计算面积,类似的方法可能会奏效:

r1=(f>=8).*(f<=30);
r2=(f>=70).*(f<=100);
area=trapz(f(r1),Zm(r1)-Z(r1))+trapz(f(r2),Zm(r2)-Z(r2));
和第二个类似

如果只想填充Zm小于Z的区域,可以使用相同的代码,但在for循环中添加If。比如:

for i=1:length(f1)-1
    if Zm1(i)<Z1(i) && Zm1(i+1)<Z1(i+1)
        fill([f1(i) f1(i+1) f1(i+1) f1(i)],[Z1(i) Z1(i+1) Zm1(i+1) Zm1(i)],'blue');
    end
end
i=1时的
:长度(f1)-1

如果Zm1(i)用于计算面积,类似的方法可能会起作用:

r1=(f>=8).*(f<=30);
r2=(f>=70).*(f<=100);
area=trapz(f(r1),Zm(r1)-Z(r1))+trapz(f(r2),Zm(r2)-Z(r2));
和第二个类似

如果只想填充Zm小于Z的区域,可以使用相同的代码,但在for循环中添加If。比如:

for i=1:length(f1)-1
    if Zm1(i)<Z1(i) && Zm1(i+1)<Z1(i+1)
        fill([f1(i) f1(i+1) f1(i+1) f1(i)],[Z1(i) Z1(i+1) Zm1(i+1) Zm1(i)],'blue');
    end
end
i=1时的
:长度(f1)-1

如果Zm1(i)这就是我最终使用的代码(建议的组合):

%//填充低频段之间的区域
f1=f(r1)';%'//Zm1(i-1)
邻域=[f1(i-1),f1(i);Zm1(i-1),Zm1(i);Z1(i-1),Z1(i)];
t=calct(邻域);
输出(:,end+1)=内部(t,邻域);
结束
其他的
%//否则y2高于y1,我们需要加上这一点。但首先
%// ...
%// ... 如果上一点不是这样,那么添加
%//交叉路口。

如果i>1&&Z1(i-1)这就是我最终使用的代码(建议的组合):

%//填充低频段之间的区域
f1=f(r1)';%'//Zm1(i-1)
邻域=[f1(i-1),f1(i);Zm1(i-1),Zm1(i);Z1(i-1),Z1(i)];
t=calct(邻域);
输出(:,end+1)=内部(t,邻域);
结束
其他的
%//否则y2高于y1,我们需要加上这一点。但首先
%// ...
%// ... 如果上一点不是这样,那么添加
%//交叉路口。

如果i>1&&Z1(i-1)相关:。另外,我对你的问题做了一些修改,如果你不同意,请随意修改。@AndrasDeak:那是我需要的完美参考资料。工作得很好!很高兴听到它:)如果你的最终解决方案与Arzeik的答案有很大的不同,你应该考虑将自己作为另一个答案(特别是如果它有什么不重要的地方)。不过,我仍然不确定如何计算面积。我只想要ZmZm的高频区域。我应该单独问这个问题吗?@SaraA是的。请将其作为一个单独的问题提问,因为您已经解决了当前问题中概述的问题。另外,在这种情况下,请接受您自己的答案(self-accepts延迟24小时,所以您必须明天这样做)相关:。另外,我对你的问题做了一些修改,如果你不同意,请随意修改。@AndrasDeak:那是我需要的完美参考资料。工作得很好!很高兴听到它:)如果你的最终解决方案与Arzeik的答案有很大的不同,你应该考虑将自己作为另一个答案(特别是如果它有什么不重要的地方)。不过,我仍然不确定如何计算面积。我只想要ZmZm的高频区域。我应该单独问这个问题吗?@SaraA是的。请将其作为一个单独的问题提问,因为您已经解决了当前问题中概述的问题。同样,在这种情况下,请接受你自己的答案(self-accepts延迟24小时,所以你明天必须这样做),这非常有效!我唯一不同的做法是使用“&”符号代替r1=(f>=8&f=70&fTo使事情更加复杂,我忘了提到我只想对频率为8-30Hz的ZmZ区域进行着色。知道如何添加此条件吗?这非常有效!我唯一不同的做法是使用“&”符号r1=(f>=8&f=70&fTo使事情更加复杂,我忘了提到我只想对频率为8-30Hz的ZmZ区域进行着色。知道如何添加这个条件吗?