在MATLAB中填充函数

时间:2015-02-08 10:27:27

标签: matlab

我在MATLAB中解释函数fill时遇到问题,我有一个文件的PSD,我想改变它的背景,如:

[xPSD,f] = pwelch(x,hanning(4096),2048,4096*2 ,fs);
    plot(f,10*log10(xPSD));

x= f(100:150);
y= 10*log10(xPSD(100:150))
fill(x,y,'y')

结果是正确的方向但不是我需要的: image

我想让颜色告诉x轴像: made with MS paint

是他们的一种方法

2 个答案:

答案 0 :(得分:2)

一个有效的解决方案是:

[xPSD,f] = pwelch(x,hanning(4096),2048,4096*2 ,fs);
plot(f,10*log10(xPSD));
hold on

x= f(100:150);
y= 10*log10(xPSD(100:150));

yMax = ylim;
yMax = yMax(2);
x = x'; % Use this line only in the case that the size(x, 1) > 1
X = [x fliplr(x)];
Y = [y' ones(1, length(y)) .* yMax];
fill(X, Y, 'y')

您缺少的是fill方法查找要填充的区域。在上面的代码中,区域由成对的点定义。对于该区域的第一个(即下部),我们有x向量和y个点。第二个区域(即上半部分)由反向矢量x定义(图像是你的铅笔首先开始向下部分的权利,然后是上部的左边)以及上限的点数。你的轴。

编辑:

来自MATLAB的handel数据的最小例子:

load handel;
x = y; % Just to be consistent with the OP
fs = Fs; % Just to be consistent with the OP

[xPSD,f] = pwelch(x,hanning(4096),2048,4096*2 ,fs);
plot(f,10*log10(xPSD));
hold on

x= f(100:150);
y= 10*log10(xPSD(100:150));

yMax = ylim;
yMax = yMax(2);
x = x'; % Use this line only in the case that the size(x, 1) > 1
X = [x fliplr(x)];
Y = [y' ones(1, length(y)) .* yMax];
fill(X, Y, 'y')
xlim([0 200]) % To focus on the result

结果是:

enter image description here

答案 1 :(得分:1)

是的,总有办法;) 在您的情况下,您只需要在xy中添加两个点,这些点将转到情节的顶部:

x = f(100:150);
y = 10*log10(xPSD(100:150))

% Add two points
Y = ylim;
x = [x(1) ; x(:) ; x(end)];
y = [Y(2) ; y(:) ; Y(2)];

% Display filled area
fill(x,y,'y')

最佳,