我需要协助制作一个漂亮的轮廓图。我有来自水下滑翔机的数据,在这种情况下,从海洋表面反复潜水和爬升到大约30米。
我认为我的问题是内插数据,我不知道如何继续。这是我迄今为止生成的密度等值线图。
使用此代码
生成密度的等高线图 module DisplayDriver(
output reg [8:0] data,
output reg en,
output reg rs,
output reg rw,
output reg debug,
input clk,
input reset
);
parameter s0=0,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6,s7=7,s8=8,s9=9,s10=10,normal = 11;
reg [3:0] state; // 4 bit for max 11 combinations s0-s10 and normal
reg [3:0] state; // 4 bit for max 11 combinations s0-s10 and normal [next State]
reg [1:0] en_timeout; // 2 bit for en high to low to high cylce
reg [13:0] timeout; // 14 bit
initial
// begin init
begin
en_timeout <= 2'b00;
timeout <= 14'b00000000000000;
init <= 4'b000;
data <= 8'b00000000;
en <= 1'b1; //active low
rs <= 1'b0;
rw <= 1'b0;
state <= 4'b0000;
next_state <= 4'b0000;
debug <= 1'b0;
end
// end of init
always @(posedge clk)
//begin of everything that needs the clock
begin
if(en_timeout > 0) //begin timeout stack
begin
en_timeout <= en_timeout -1;
en <= ~en;// if en_timeout = 2 -> en = 0; if en_timeout = 1 -> en = 1;
end
else if (timeout > 0) timeout <= timeout -1; //end timeout stack
if(timeout == 0)state <= next_state;
end //end of everything that needs the clock
always @(posedge reset)
begin
en_timeout <= 2'b00;
timeout <= 14'b00000000000000;
init <= 4'b000;
data <= 8'b00000000;
en <= 1'b1; //active low
rs <= 1'b0;
rw <= 1'b0;
state <= 4'b0000;
next_state <= 4'b0000;
debug <= 1'b0;
end
if(timeout == 0)
begin //Begin of Initiation state machine
case(state)
s0:
begin
end
s1:
begin
end
s2:
begin
end
s3:
begin
end
s4:
begin
end
s5:
begin
end
s6:
begin
end
s7:
begin
end
s8:
begin
end
s9:
begin
end
s10:
begin
end
normal:
begin
end
endcase
end //End of Initiation state machine
endmodule
我希望绘图具有平滑的轮廓线。一旦我将轮廓图看起来很好,我会将其叠加在盐度和温度散点图上。
请让我知道如何制作更好看的轮廓图。
插值是一个问题吗?或者我对数据进行网格划分的方式?
非常感谢!如果您使用过这些数据,请具体说明并提供代码示例。
以下是时间,深度和密度的matlab数据:https://www.dropbox.com/s/agi70zh7haggf07/data.mat?dl=0
答案 0 :(得分:1)
问题是缺少一堆内插数据。我的意思是Z
有一堆NaN
s:
xlin = linspace(min(time),max(time),500);
ylin = linspace(min(depth),max(depth),500);
[X,Y] = meshgrid(xlin,ylin);
Z = griddata(time,depth,density,X,Y);
%surf(X,Y,Z) %also interesting
spy(isnan(Z));
结果:
您的输入数据在某种程度上是不明确的,griddata
放弃了。这就是原因:
>> sum(isnan(density))
ans =
3174
修复原始数据中的NaN
,您最有可能修复该情节。
我扔掉了你的NaN
:
inds=~isnan(density);
time=time(inds);
depth=depth(inds);
density=density(inds);
看看结果如何。结果是您的原始代码已经对我好了!
左边是原文,右边是de NaN
版本:
那么......也许你的日期时间转换已关闭?或者您的时间限制,未在原始代码中显示?