我在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')
结果是正确的方向但不是我需要的:
我想让颜色告诉x轴像:
是他们的一种方法
答案 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
结果是:
答案 1 :(得分:1)
是的,总有办法;)
在您的情况下,您只需要在x
和y
中添加两个点,这些点将转到情节的顶部:
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')
最佳,