Field_II|Field _II 仿真 学习笔记
参考Field II的使用说明,进行了四个例子的练习。仿真程序和结果如下:
PURPOSE1:Calculate the received response from all elements of a linear array and plot the responses and the summed response 【计算来自所有线性阵元的接收响应,并绘制该响应以及叠加响应。】
>> path(path,'D:\MATLAB\R2016a\Field_II_PC7');
field_init
%set initial parameters
>> f0=3e6;
%Transducer center frequency
>> fs=100e6;
%sampling frequency
>> c=1540;
%speed of sound
>> lambda=c/f0;
%wave length
>> height=5/1000;
%height of element
>> width=1/1000;
%width of element
>> kerf=width/4;
%distance between transducer elements
>> N_elements=32;
%number of elements
>> focus=[0 0 40]/1000;
%initial electronic focus
%define the transducer
>> Th=xdc_linear_array(N_elements, width, height ,kerf ,2, 3, focus);
%set the impulse response and excitation of the emit aperture
>> impulse_response=sin(2*pi*f0*(0:1/fs:2/f0));
>> impulse_response=impulse_response.*hanning(max(size(impulse_response)))';
>> xdc_impulse(Th,impulse_response);
>> excitation=sin(2*pi*f0*(0:1/fs:2/f0));
>> xdc_excitation(Th,excitation);
%Do the calculation
>> [v,t]=calc_scat_multi(Th,Th,[0 0 20]/1000,1);
%plot the individual response
>> subplot(211)
>> [N,M]=size(v);
>> v=v/max(max(v));
>> for i=1:N_elements
plot((0:N-1)/fs+t,v(:,i)+i),hold on
end
>> hold off
>> title('Individual traces')
>> xlabel('Time [s]')
>> ylabel('Normalized response')
>> subplot(212)
>> plot((0:N-1)/fs+t,sum(v'))
>> title('Summed response')
>> xlabel('Time[s]')
>> ylabel('Normalized response')
>>
绘制结果:
文章图片
PURPOSE2:calculate the received response from all elements of a linear array with 3 transmitting and 16receiving elements and plot the responses and the summed response [计算来自一个带有3个发送和16个接收元的线性阵的所有阵元的接收响应,并绘制该响应和叠加相应。
f0=3e6;
fs=100e6;
c=1540;
lambda=c/f0;
height=5/1000;
width=1/1000;
kerf=width/5;
N_elements=3;
N_elements2=16;
focus=[0 0 40]/1000;
%define the transducers
Th=xdc_linear_array(N_elements,width,height,kerf,2,3,focus);
Th2=xdc_linear_array(N_elements2,width,height,kerf,2,3,focus);
%Set the impulse response and excitation of the emit aperture
impulse_response =sin(2*pi*f0*(0:1/fs:2/f0));
impulse_response=impulse_response.*hanning(max(size(impulse_response)))';
xdc_impulse(Th,impulse_response);
xdc_impulse(Th2,impulse_response);
excitation=sin(2*pi*f0*(0:1/fs:2/f0));
xdc_excitation(Th,excitation);
%define a small phantom with scatterers
N=200;
x_size = 20/1000;
%width of phantom
y_size=10/1000;
%transverse width of phantom
z_size=20/1000;
%hight of phantom
z_start=5/1000;
%start of phantom surface
%creat the general scatters
x=(rand (N,1)-0.5)*x_size;
y=(rand (N,1)-0.5)*y_size;
z=rand (N,1)*z_size + z_start;
positions=[x y z];
%Generate the amplitudes with a Gaussian distribution
>> amp=randn(N,1);
>> %dO the calculations
>> [v,t]=calc_scat_all(Th,Th2,positions,amp,1);
>> %plot the indicidual response
>> [N,M]=size(v);
>> scale=max(max(v));
>> v=v/scale;
>> for i=1:M
plot ((0:N-1)/fs+t,v(:,1)+i,'b'),hold on
end
>> hold off
>> title ('Individual traces')
>> xlabel('Time[s]')
>> ylabel('Normalized response')
>> axis([t t+N/fs 0 M+1])
得到图:当用三个不同的元发送,得到的16个线性阵列换能器的单个元件的接收电压的痕迹(?)
文章图片
PURPOSE3:to show how the procedures can be used for making a phased array scan of a point target【用于说明程序如何可以用于一个点目标的相控阵扫描】
%generatethe transducer aperture for send and receive
f0=3e6;
fs=100e6;
c=1540;
lambda=c/f0;
element_hight=5/1000;
kerf=0.1/1000;
focus=[0 0 70]/1000;
%generate aperture for emission
emit_aperture = xdc_linear_array (128,lambda/2,element_hight,kerf,1,1,focus);
%set the impulse response and excitation of the emit aperture
impulse_response =sin(2*pi*f0*(0:1/fs:2/f0));
impulse_response=impulse_response.*hanning(max(size(impulse_response)))';
>> xdc_impulse (emit_aperture,impulse_response);
>> excitation=sin(2*pi*f0*(0:1/fs:2/f0));
>> xdc_excitation (emit_aperture,excitation);
>> %generate aperture for reception
>> receive_aperture =xdc_linear_array (128,lambda/2,element_hight,kerf,1,1,focus);
>> %set the impulse response for the receive aperture
>> xdc_impulse (receive_aperture ,impulse_response);
>> %Do phased array imaging
>> point_position =[0 0 70 ]/1000;
>> no_lines=50;
>> sector=20*pi/180;
>> d_theta=sector/no_lines;
>> %pre_allocate some storage
>> image_data=https://www.it610.com/article/zeros (800,no_lines);
>> theta=-sector/2;
>> for i=1:no_lines
%set the focus for this direction
xdc_focus (emit_aperture,0,[70*sin(theta) 0 70*cos(theta)]/1000);
xdc_focus (receive_aperture,0,[70*sin(theta) 0 70*cos(theta)]/1000);
%calculate the received response
[v,t1]=calc_scat(emit_aperture, receive_aperture,point_position,1);
%store the result
image_data(1:max(size(v)),i)=v';
times(i)=t1;
%steer in another angle
theta = theta + d_theta;
end
>> %here the display of the data is inserted
>> plot (image_data)
文章图片
PURPOSE4:generating an artificial phantom with point scatters and a cyst【产生具有点散射和囊肿的人造体模?】
f0=3e6;
fs=100e6;
c=1540;
lambda=c/f0;
width=lambda;
element_height=5/1000;
kerf=width/20;
focus=[0 0 50]/1000;
N_elements=192;
N_active=64;
set_sampling(fs);
emit_aperture =xdc_linear_array (N_elements,width,element_height,kerf,1,5,focus);
%set the impulse response and excitation of the emit aperture
impulse_response = sin(2*pi*f0*(0:1/fs:2/f0));
impulse_response =impulse_response.*hanning(max(size(impulse_response)))';
xdc_impulse (emit_aperture,impulse_response);
excitation=sin(2*pi*f0*(0:1/fs:2/f0));
xdc_excitation(emit_aperture,excitation);
%Generate aperture for reception
receive_aperture =xdc_linear_array (N_elements,width,element_height,kerf,1,5,focus);
%set the impulse response for the receive aperture
xdc_impulse (receive_aperture,impulse_response);
%load the computer phantom
[phantom_positions,phantom_amplitudes]=cyst_phantom(10000);
%Do linear array imaging
no_lines=N_elements-N_active+1;
dx=width;
z_focus=50/1000;
%pre-allocate some storage
image_data=https://www.it610.com/article/zeros(1,no_lines);
for i=1:no_lines
i
%Find position for imaging
x=(i-1-no_lines/2)*dx;
%set the focus for this direction
xdc_center_focus(emit_aperture,[x 0 0]);
xdc_focus (emit_aperture,0,[x 0 z_focus]);
xdc_focus (receive_aperture,0,[x 0 z_focus]);
%set the active elements using the apodization
apo=[zeros(1,i-1)hamming(N_active)' zeros(1,N_elements - N_active - i + 1)];
xdc_apodization (emit_aperture,0,apo);
xdc_apodization(receive_aperture,0,apo);
%calculate the received response
[v,t1]=calc_scat(emit_aperture,receive_aperture,phantom_positions,phantom_amplitudes);
%store the result
image_data(1:max(size(v)),i)=v;
times(i)=t1;
Warning:Remember to set all pulses in apertures for the new sampling frequency
end
i =
1
5 seconds used for the calculation
i =
2
4 seconds used for the calculation
i =
3
5 seconds used for the calculation
i =
4
4 seconds used for the calculation
i =
5
4 seconds used for the calculation
i =
6
4 seconds used for the calculation
i =
7
4 seconds used for the calculation
i =
8
5 seconds used for the calculation
i =
9
4 seconds used for the calculation
i =
10
4 seconds used for the calculation
i =
11
4 seconds used for the calculation
i =
12
4 seconds used for the calculation
i =
13
4 seconds used for the calculation
i =
14
4 seconds used for the calculation
i =
15
4 seconds used for the calculation
i =
16
4 seconds used for the calculation
i =
17
4 seconds used for the calculation
i =
18
3 seconds used for the calculation
i =
19
4 seconds used for the calculation
i =
20
4 seconds used for the calculation
i =
21
4 seconds used for the calculation
i =
22
4 seconds used for the calculation
i =
23
3 seconds used for the calculation
i =
24
4 seconds used for the calculation
i =
25
4 seconds used for the calculation
i =
26
3 seconds used for the calculation
i =
27
4 seconds used for the calculation
i =
28
3 seconds used for the calculation
i =
29
4 seconds used for the calculation
i =
30
3 seconds used for the calculation
i =
31
4 seconds used for the calculation
i =
32
3 seconds used for the calculation
i =
33
3 seconds used for the calculation
i =
34
3 seconds used for the calculation
i =
35
4 seconds used for the calculation
i =
36
3 seconds used for the calculation
i =
37
3 seconds used for the calculation
i =
38
3 seconds used for the calculation
i =
39
3 seconds used for the calculation
i =
40
4 seconds used for the calculation
i =
41
3 seconds used for the calculation
i =
42
3 seconds used for the calculation
i =
43
3 seconds used for the calculation
i =
44
3 seconds used for the calculation
i =
45
3 seconds used for the calculation
i =
46
3 seconds used for the calculation
i =
47
3 seconds used for the calculation
i =
48
3 seconds used for the calculation
i =
49
3 seconds used for the calculation
i =
50
2 seconds used for the calculation
i =
51
3 seconds used for the calculation
i =
52
3 seconds used for the calculation
i =
53
3 seconds used for the calculation
i =
54
3 seconds used for the calculation
i =
55
3 seconds used for the calculation
i =
56
3 seconds used for the calculation
i =
57
2 seconds used for the calculation
i =
58
3 seconds used for the calculation
i =
59
3 seconds used for the calculation
i =
60
3 seconds used for the calculation
i =
61
3 seconds used for the calculation
i =
62
2 seconds used for the calculation
i =
63
3 seconds used for the calculation
i =
64
3 seconds used for the calculation
i =
65
3 seconds used for the calculation
i =
66
3 seconds used for the calculation
i =
67
2 seconds used for the calculation
i =
68
3 seconds used for the calculation
i =
69
3 seconds used for the calculation
i =
70
3 seconds used for the calculation
i =
71
3 seconds used for the calculation
i =
72
3 seconds used for the calculation
i =
73
3 seconds used for the calculation
i =
74
2 seconds used for the calculation
i =
75
3 seconds used for the calculation
i =
76
3 seconds used for the calculation
i =
77
3 seconds used for the calculation
i =
78
3 seconds used for the calculation
i =
79
3 seconds used for the calculation
i =
80
3 seconds used for the calculation
i =
81
3 seconds used for the calculation
i =
82
3 seconds used for the calculation
i =
83
3 seconds used for the calculation
i =
84
3 seconds used for the calculation
i =
85
3 seconds used for the calculation
i =
86
3 seconds used for the calculation
i =
87
3 seconds used for the calculation
i =
88
3 seconds used for the calculation
i =
89
3 seconds used for the calculation
i =
90
4 seconds used for the calculation
i =
91
3 seconds used for the calculation
i =
92
3 seconds used for the calculation
i =
93
3 seconds used for the calculation
i =
94
3 seconds used for the calculation
i =
95
4 seconds used for the calculation
i =
96
3 seconds used for the calculation
i =
97
3 seconds used for the calculation
i =
98
4 seconds used for the calculation
i =
99
3 seconds used for the calculation
i =
100
4 seconds used for the calculation
i =
101
3 seconds used for the calculation
i =
102
4 seconds used for the calculation
i =
103
3 seconds used for the calculation
i =
104
4 seconds used for the calculation
i =
105
3 seconds used for the calculation
i =
106
4 seconds used for the calculation
i =
107
4 seconds used for the calculation
i =
108
4 seconds used for the calculation
i =
109
3 seconds used for the calculation
i =
110
4 seconds used for the calculation
i =
111
4 seconds used for the calculation
i =
112
4 seconds used for the calculation
i =
113
4 seconds used for the calculation
i =
114
4 seconds used for the calculation
i =
115
4 seconds used for the calculation
i =
116
4 seconds used for the calculation
i =
117
4 seconds used for the calculation
i =
118
4 seconds used for the calculation
i =
119
4 seconds used for the calculation
i =
120
5 seconds used for the calculation
i =
121
4 seconds used for the calculation
i =
122
4 seconds used for the calculation
i =
123
4 seconds used for the calculation
i =
124
5 seconds used for the calculation
i =
125
4 seconds used for the calculation
i =
126
4 seconds used for the calculation
i =
127
5 seconds used for the calculation
i =
128
4 seconds used for the calculation
i =
129
5 seconds used for the calculation
>> %free space for aperture
>> xdc_free (emit_aperture)
>> xdc_free (receive_aperture)
>> %Adjust the data in time and display it ai a gray scale image
>> min_sample = min(times)*fs;
>> for i=1:no_lines
rf_env=abs(hilbert([zeros(round(times(i)*fs - min_sample),1);
image_data(:,i)]));
>> env(1:size(rf_env,1),i)=rf_env;
【Field_II|Field _II 仿真 学习笔记】end
%make logarthmic compression to a 60 db dynamic range
>> %with proper units on the axis
>> env_dB=20*log10(env);
>> env_dB=env_dB-max(max(env_dB));
>> env_gray=127*(env_dB +60)/60;
>> depth=((0:size(env,1)-1)+min_sample)/fs*c/2;
>> x=((1:no_lines)-no_lines/2)*dx;
>> image(x*1000,depth*1000,env_gray)
>> xlabel('Lateral distance [mm]')
>> ylabel('Depth [mm]')
>> axis('image')
>> colormap(gray(128))
>> title('image of cyst phantom(60dB dynamic range)')
得到的结果如下:
文章图片
推荐阅读
- 由浅入深理解AOP
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- 一起来学习C语言的字符串转换函数
- 定制一套英文学习方案
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- 《深度倾听》第5天──「RIA学习力」便签输出第16期
- 如何更好的去学习
- 【韩语学习】(韩语随堂笔记整理)
- 焦点学习田源分享第267天《来访》