【问题标题】:Make a vertical spacing plot制作垂直间距图
【发布时间】:2017-10-24 14:19:05
【问题描述】:

我需要从一大块 A 扫描数据中生成 B 扫描数据。我收到的 A 扫描数据的排列方式是,行类似于 A 扫描数据每个点的幅度,而列代表收集的每个 A 扫描数据。 这是我的数据的样子:

4855    4641    4891    4791    4812    4812
4827    4766    4862    4745    4767    4785
6676    5075    6903    6879    6697    6084
7340    6829    7678    7753    7263    6726
6176    6237    6708    6737    6316    5943
12014   10467   10915   10914   10124   10642
8251    7538    7641    7619    7269    7658
6522    6105    6132    6136    5921    6227
5519    5287    5330    5376    5255    5237
4904    4784    4835    4855    4794    4758
4553    4527    4472    4592    4469    4455
4298    4323    4291    4293    4221    4238
4167    3957    4089    3991    3938    3907
3789    3721    3777    3777    3643    3596
3736    4615    3639    2814    3638    2782
4413    5286    4248    3998    4370    4199
5994    6896    6134    5548    6102    6161
8506    9020    7841    8060    8663    8941
12347   12302   10639   11151   12533   12478
18859   18175   15035   15938   18358   18160
27106   26261   22613   24069   27015   27114
32767   32601   32767   32767   32767   32767
32767   32767   32767   32767   32767   32767
32767   32767   32767   32767   32767   32767
32767   32767   32767   32767   32767   32767
32767   32767   32767   32767   32767   32767
32767   32767   32767   32767   32767   32767
26416   26459   32767   32767   26308   26945
6523    6900    13327   16665   6616    6477
-14233  -14011  -8554   -5649   -13956  -13858
-28128  -26784  -26157  -24055  -27875  -28374
-28775  -27905  -30348  -26285  -28918  -29066
-20635  -19776  -21144  -21548  -22107  -22759
-16915  -15742  -15908  -17398  -19600  -20143

这只是数据的样本。它是 .txt 格式。

A-scan data B-scan data

我面临的问题是将这些数据绘制成 b 扫描数据。 Matlab 会很棒(虽然其他方法也会很棒)。请分享您绘制此 B 扫描数据的方式。

【问题讨论】:

  • 这个问题很不清楚。什么是 A 和 B 扫描?你到底想做什么?
  • 我附上了一张 A 和 B 扫描数据的图像。我需要从 A 扫描数据中绘制 B 扫描数据。

标签: matlab data-analysis


【解决方案1】:

Scilab

在 Scilab 上,您可以使用 read 函数。它读取格式化的文本文件,您至少需要知道列数。要添加垂直间距,您应该为每一整列添加一个常量值i*d,其中i 是列号。

我将您提供的示例放在一个文本文件中,以便我可以阅读它,而不是绘制它。

//read(): first argument is file path 
//        (or file name, if you change current directory)
//        second argument is number of lines (-1 if unknown)
//        third argument is the number of columns
B = read("file.txt",-1,6);

d  = 1000; //vertical spacing
Bs = B;    //copy of the original data

for i = 1 : size(Bs,'c')
    //loop adding constant to each column
    Bs(:,i) = Bs(:,i) + (i-1) * d;
end

//simply plot the matrix
plot2d(Bs);

Scilab 中的结果是:


MATLAB

在 MATLAB 中,您可以使用 importdata 函数,该函数也可以读取格式化的文本文件,但最少需要的是文件名。您还应该手动添加垂直间距。

%call importdata() after changing current directory
B = importdata("file.txt");

d  = 1000; %vertical spacing
Bs = B;    %copy of the original data

for i = 1 : size(Bs,2)
    %loop adding constant to each column
    Bs(:,i) = Bs(:,i) + (i-1) * d;
end    

%plot the modified matrix
plot(Bs);

MATLAB 中的结果是:

【讨论】:

  • 谢谢!你能画出像b-scan图像那样的情节吗?
  • @hphys 这些图和 B 扫描图像有什么区别?
  • 在 B 扫描中,A 扫描数据叠加到每个 A 扫描上,创建一个图像,就像我在上面分享的图像中看到的那样。而这个只是不堆叠。
  • @hphys 你的意思是行之间有一个垂直空间。是这样吗?我认为数据本身具有这种间隔,而不是应该手动完成。如果这样做,垂直轴将不代表数据的绝对值,它将是y' = y + d,其中y 是原始值,d 是间距。那样行吗?这是你需要的吗?
  • 是的,这就是我需要的。你知道我该怎么做吗?你能告诉我怎么做吗?谢谢!感谢您的帮助。