如何分析和可视化3D速度场?

时间:2017-01-31 01:41:48

标签: matlab vector data-visualization physics

我正在尝试使用Computational fluid dynamics区域中的最佳实践技术来分析和可视化velocity field

给出6个移动粒子阵列'位置和速度:分别为x,y,zvx,vy,vz

我希望可视化并计算诱导速度字段及其属性,例如:curldivergenceisosurfaces等。

以下是volume visualization函数的简洁脚本,我可以在不调用meshgrid的情况下使用它(以避免插值和更多噪音)。

最终,我不确定的事情之一是如何从空间的50个点明智地创建网格,第二个是如何使用CFD方法来显示速度场,而不管少量的数据点。

close all
rng default
t=0.1:0.1:10;
x = sin(t)'; 
y = cos(t)'; 
z = t.^0.2';
vx=y;vy=x;vz=z;

figure
subplot(2,3,1);
quiver3(x,y,z,vx,vy,vz);
hold on
streamribbon({ [x y z] }, {vx},{vy},{vz});

subplot(2,3,2);
[curl_val, cav] = curl([x,y,z],[vx,vy,vz]);  
surfc([x,y,z],cav);
subplot(2,3,3);
surfc([x,y,z],curl_val);

w = sqrt( vx.^2 + vy.^2 + vz.^2 );
subplot(2,3,4);
quiver3(x,y,z,vx,vy,vz);
streamtube({ [x y z] }, {w});

subplot(2,3,5);
quiver3(x,y,z,vx,vy,vz);

subplot(2,3,6);
surfc([x,y,z],[vx,vy,vz]);

enter image description here

当我在real data上运行上述脚本(不包括数据生成)时,我会得到以下非常有用的图表:

enter image description here

1 个答案:

答案 0 :(得分:10)

我强烈怀疑这里的问题是数据,而不是可视化技术。但总的来说,问题是以下一个或多个问题:

1)您没有足够的数据来捕捉潜在的动力学(空间动力学的运行频率高于您采样的空间频率)

2)数据对于您收集的数据点数量而言太嘈杂。

3)流量基本上是湍流,因此希望不会出现类似层状的情节。

当您在数据可视化方面遇到问题时,第一条经验法则总是抛弃任何试图以任何方式逼近导数(或渐变)的可视化。原因是当你试图用真实数据逼近导数时,噪声几乎总是使估计无意义。例如,假设我们有一个被一些噪声破坏的余弦,我们试图用数字估计数据的导数

figure
% Create a signal 
dt  = .1;
t = 0:.1:10;
x = cos(t);

% Add some noise 
y = x + .5 * randn(size(x));

% Compute the first order approximation of the derivatives of the signals 
dx = diff(x)/dt;
dy = diff(y)/dt;

% Plot everything
subplot(2,1,1)
plot(t,x,t,y)
axis tight
subplot(2,1,2)
plot(t(2:end),dx,t(2:end),dy)
axis tight

enter image description here

在显示原始数据的第一个图中,噪声看起来不好,但是当我们查看衍生估计时!哎呀...噪音确实​​被放大了。因此,请忘记流的高阶特性,例如卷曲和涡度,这需要数据的梯度。

那么在这样的情况下我们能做些什么呢?基本上,只需查看原始数据。如果有一个模式,它将揭示自己。例如,让我们从3个不同的角度来看待你的原始速度向量:

data = dlmread('data.csv','\s')
x = data(:,1);
y = data(:,2);
z = data(:,3);
vx = data(:,4);
vy = data(:,5);
vz = data(:,6);

close all
figure
subplot(1,3,1);
quiver3(x,y,z,vx,vy,vz);
view([1,0,0])
subplot(1,3,2);
quiver3(x,y,z,vx,vy,vz);
view([0,1,0])
subplot(1,3,3);
quiver3(x,y,z,vx,vy,vz);
view([0,0,1])

enter image description here

唯一看起来有点结构化的是最后一个情节。然而,该情节告诉我们,我们可能还有湍流(除了噪音)以应对。

具体来说,从视图3来看,你肯定会在一个紧紧拥抱物体的流中进行速度测量。在这种情况下,您的测量结果可能太紧了......而且可能在边界层。如果是这种情况(测量位于边界层中),那么您可以在流中获得时变效果,这意味着在没有时间分量的情况下查看任何内容都没有意义。 "很好"你的答案中的情节只有当流动是层流时才真正有用,我们可以看到这些漂亮,一致的流线。如果它是湍流,那么无论你多么努力,流动中都没有可辨别的模式。

总而言之,我不认为您能够为您的数据找到一个很好的可视化,因为您使用的传感器太嘈杂,或者流动太紊乱。

顺便一提......考虑一下当我们从你的" nice"中查看原始速度向量时会发生什么。数据集:

enter image description here

那,我的朋友,是一个训练有素的家养宠物。你手上有一只野山狮。