主要内容

研究聚焦相控阵的响应

简介

本例介绍聚焦光束的概念,并演示如何使用分阶段。FocusedSteeringVector为相控阵生成所需的元素权重。它还展示了如何使用分阶段。SphericalWavefrontArrayResponse计算阵列在给定角度和范围下的阵列响应。首先,您将观察单个光束形成时的响应,并检查焦点区域的特征,然后模拟超声成像中常用的采集策略,以查看聚焦光束如何出现在图像中。

聚焦波束形成

球面波前延迟叠加

在典型的远场假设下,波束形成可以将信号波前建模为沿其法向传播的平面。当信号入射到阵列上时,波前与单个元素相交的相对时延与元素沿波传播方向的距离成正比。在这个模型下,可以对每个元素施加延迟(或在窄带情况下的相移),以便跨元素的输出(无论是发射还是接收)在相干求和时具有构造相位。

在没有远场假设的情况下,从点源发出的波前被建模为以该源为中心的球面。此波前与相控阵单元相交,相对时延由共线单元的双曲范围决定。虽然该模型只会为远场图的生成增加不必要的计算成本,但球面波前模型对于理解近场波束形成和聚焦是必要的。

这个函数helperPlotULAWavefronts用来演示有聚焦和没有聚焦的操纵光束之间的单元延迟和波前形状的差异。元素延迟是相对于数组中心的。

1 e6图helperPlotULAWavefronts(14日,1540年,20岁,正)标题(“带领波阵面”

图中包含一个axes对象。标题为steer Wavefront的axis对象包含29个类型为line的对象。这些对象代表元素,支柱路径,波阵面。

1 e6图helperPlotULAWavefronts(14日,1540年,20岁的0.01)标题(“操纵和聚焦波前”

图中包含一个axes对象。标题为steer和Focused Wavefront的axis对象包含30个类型为line的对象。这些对象代表元素,焦点,支柱路径,波前。

焦点区域和近/远边界

在远场中,导向阵列在角度空间中具有明确的模式,不依赖于距离。在近场中,一个导向的(但非聚焦的)阵列根本没有可分辨的波瓣结构。由于单元之间的非线性相位关系,在给定方向的所有范围内具有相等幅度的响应是不可能的。相反,通过聚焦光束可以获得一个小区域,在角度和范围上都有界限,在这个区域内的响应类似于远场响应,称为焦点区域.焦点区域的角位置可以像远场光束一样容易控制。焦点区域在范围内的位置由焦范围,景深(DoF),即该区域的范围范围。

下图显示了聚焦均匀和矩形阵列的光束形状随范围的变化。这个函数helperPlotResponseSlices提供以演示如何生成这种类型的图。

Example_FocusedSlices_ULA (2) . jpgExample_FocusedSlices_URA (2) . jpg

在焦点范围内,我们的光束在角度空间中与远场图样非常相似。

近/远边界,在概念上与其他近场/远场边界相似,是不可能对焦的边界。相反,一个被操纵但没有聚焦的光束在边界的近侧是不可能的。下图说明了这一事实。注意,被操纵的光束只在远端开始成形,而聚焦的光束只聚焦在近端。

NearFarBoundaryComparison.jpg

这个边界的范围在医学影像文献中有很好的记录 l 数组 2 / 4 λ ,在那里 l 数组 数组的长度。对于一个简单的均匀线性数组 N 临界间隔元素,它可以表示为 N 2 λ / 16

产生单光束的响应

本节演示如何生成和绘制单个光束。首先设置相控阵和其他System对象。常见的医学成像超声系统的工作频率在2 - 20 MHz之间,公认的声音在软组织中的平均传播速度为1540米/秒。

rng (“默认”) freq = 4e6;c = 1540;λ= c /频率;

超声换能器有各种各样的拓扑结构,适合于特定的活动。本例简单地使用具有关键元素间距的统一线性数组。

numElems = 256;elemSpacing =λ/ 2;数组= phased.ULA (numElems elemSpacing);

系统对象分阶段。FocusedSteeringVector而且分阶段。SphericalWavefrontArrayResponse用于生成导向和聚焦的单元权值,并计算某些域上的响应。将上面的数组和传播速度规范传递给构造函数。对于数组响应,还要打开权重输入端口。

SV =分阶段。FocusedSteeringVector(“SensorArray”数组,“PropagationSpeed”c);基于“增大化现实”技术=分阶段。SphericalWavefrontArrayResponse (“SensorArray”数组,“PropagationSpeed”c“WeightsInputPort”,真正的);

现在你有了形成和检查聚焦光束所需的最小设置。使用10度转向在方位角和焦点范围40毫米。

azSteer = 10;focalRange = 0.04;

使用从阵列的前面开始并延伸到两倍焦距的域,并在横向覆盖阵列的长度。数组元素沿Y轴排列,数组法线方向为+X。

arrayLength = numElems * elemSpacing;x = linspace (1 e - 3, 2 * focalRange, 200);y = linspace (-arrayLength / 2, arrayLength / 2200);

转换为球坐标输入导向矢量和响应计算。

[az, el, rng] = cart2sph (x, y ', 0);Ang = rad2deg([az(:) el(:)]');rng = rng(:)”;

现在计算聚焦阵列在指定域上的响应。

重量= SV(频率,[azSteer; 0], focalRange);梁= AR (rng频率,ang,重量);

重塑,规范化,使用对数刻度。

梁=重塑(梁元素个数(y),元素个数(x));梁=梁/ max (abs(梁(:)));梁= mag2db (abs(梁));

使用提供的函数helperPlotResponse画出结果。数组元素的位置用红色标记表示。

图helperPlotResponse(梁,x, y,数组)标题(“单舵聚焦光束”

图中包含一个axes对象。标题为Single steering and Focused Beam的axis对象包含图像、直线两种类型的对象。该对象表示数组元素。

在指定的范围和角度下,焦点区域是清晰可见的。与远场响应(模式)一样,球面波前响应的大小考虑了跨单元的相位变化,但与远场响应不同的是,球面波前响应还包括跨单元的自由空间传播损失变化的影响。这本质上是一种跨元素的轻微振幅调制,其效果在光束的旁瓣中可见。对每个单元施加一个等于焦距的平坦增益,使单元上的整体振幅权重为响应点到阵列中心的距离与响应点到单个单元的距离之比: R 分别地 / R 初步的 .例如,位于原点的一个元素对总和光束的贡献具有单位大小。

焦点区域

对于一个在范围内有边界的焦点区域,焦点范围必须足够小,以至于整个区域(范围由自由度决定)必须比近/远边界更近。自由度可以表示为一个相关量的函数,通常在光学中看到,称为焦距比数,即焦距与阵列长度之比: F R / l 数组 .根据这个量,自由度的一个很好的估计是 d F 7 1 λ F 2 .对于固定的阵列和频率,自由度随焦距的平方而增加。

这一节将看看DoF如何随着焦距的变化而变化。生成一个焦距间隔的响应,并检查变化的自由度。这个函数helperPlotBeamMarkers将显示每个焦范围的自由度指示。焦距区域大致为椭圆形,并不以焦距为中心。另一个经验法则可以用来找到从焦距到区域中心的偏移量: d F / 4

近距离= arrayLength ^ 2 /(4 *λ);近/远边界范围x = linspace (1 e - 3,近距离* 1.2,100);y = linspace(-0.01、0.01,100);多项式系数= 0.1:0.1:0.9;%近/远边界比例focalRanges =多项式系数*近距离;fnum = focalRanges / arrayLength;景深= 7.1 *λ* fnum。^ 2;focalRegionCenter = focalRanges + dof/4;数字ind = 1:numel(focalRanges) beam = helperMakeSingleBeam(SV,AR,freq,0,focalRanges(ind),x,y);helperPlotResponse(梁,x, y) caxis ([6 0])%只查看最大的6分贝的光束helperPlotBeamMarkers (focalRanges(印第安纳州),focalRegionCenter(印第安纳州),近距离,景深(印第安纳州),0.001)标题(sprintf ('焦距=近/远边界的%d%% '轮(多项式系数(印第安纳州)* 100)))drawnow结束

图中包含一个axes对象。标题为Focal Range =近/远边界90%的轴线对象包含6个类型为图像、直线的对象。

当焦距增加到近/远边界的60%时,焦距区域的偏心率变得相当大。到80%时,焦点区域已经相交于近/远边界,基本上成为一个非聚焦光束。

与远场响应一样,焦点区域的束宽仍然可以用通常的方法粗略计算 λ / l 数组 ,波长与阵列长度之比。因此,聚焦区域的宽度(横向)可以用 R λ / l 数组

线性子阵列移位的单线采集

a扫描和图像形成

雷达系统可以通过远场信号的波束形成有效地估计到达方向,而超声系统的近场波束形成和延迟要求通常需要一种更简单的策略来定位返回能量的来源。一种常见的收集策略涉及多个a,沿给定线段的反射率剖面。这些线在形成的图像中的位置仅仅是由已知的光束位置决定的。

如本例所示,要形成一个矩形图像,lineary子数组转变可以使用。用这种方法,每个脉冲都使用阵列元素的子集(子阵列),不带转向,以获得从子阵列中心开始的沿轴向延伸的距离剖面。通过将子数组选择移到不同的元素集,可以形成连续的行。

焦距的选择可以与光束指向分开考虑。有些系统可能保持固定的焦距,或使用动态聚焦与apoapozation或windowing一起生成覆盖大部分近场区域的广域图像。在这个例子中,当子阵列的横向位置变化时,焦点范围保持固定。

辅助类helperSubarray提供来模拟子数组选择并简化模拟循环。这个类跟踪哪些元素属于当前子数组,并处理全局帧和子数组帧之间的必要转换。

图像形成

为了演示聚焦波束形成的效果,本例使用了一个简单的图像形成策略,通过量化和累积每个脉冲的响应来构造每个距离轮廓,然后根据子阵列的位置将该轮廓插入到完整的图像中。这在自由空间中模拟了一个理想的脉冲,从而可以比较焦距区域内外的横向分辨率。该方法忽略了波形选择和多径反射的影响,将散射体视为完美点各向同性反射体。

模拟

将使用与上一节相同的系统参数。每个子数组将由64个元素组成。子数组从数组的末端开始,在每个脉冲上移动一个元素。

numSubElems = 64;子数组= helperSubarray(数组,numSubElems);

如果子数组在每个脉冲上移动一个元素,并且所有相邻子数组都被覆盖,则脉冲总数将为

num豆类= numElems - numSubElems + 1
numPulses = 193

在上一节的分析之后,检查这个子阵列的焦点区域参数。得到子阵列长度,近/远边界,自由度和焦点区域的横向宽度。

subarrayLength = numSubElems * elemSpacing;nearFieldSub = subarrayLength ^ 2 /(4 *λ);子数组的近/远边界fnumSub = focalRange / subarrayLength;dofSub = 7.1 *λ* fnumSub。^ 2
dofSub = 0.0288
widthSub =λ/ subarrayLength * focalRange
widthSub = 0.0013

子阵光束的自由度约为28.8 mm,聚焦区域的横向宽度约为1.3 mm。检查焦点区域是否在近/远边界内

boundedFocalRegion = focalRange + dofSub < nearFieldSub . boundedFocalRegion = focalRange + dofSub < nearFieldSub
boundedFocalRegion =逻辑1

为了证明聚焦光束的主要用途,减小聚焦区域的光束宽度,可沿轴向使用多条平行的散射线(深度线)。指定散射体的最大深度,并使用提供的helper函数,helperGetResponsePoints,得到散射点位置。让所有散射体具有单位振幅的反射率。对散射点位置进行扰动,以避免由于对称而产生的伪影。

对于线的横向间距,使用4倍计算的焦点区域宽度。因为子阵列每次只移动一个元素,这比我们在焦点区域的光束宽度更短,从每一行散射体返回的结果显示在图像的多行中,使它们看起来有更大的宽度。

maxDepth = nearFieldSub;lineSpacing = 4 * widthSub;[sx, sy] = helperGetResponsePoints (maxDepth arrayLength,λ,lineSpacing);

为了可视化场景,将散射点位置与数组元素一起绘制出来。

图绘制(子数组)情节(sx, sy,“。”)举行传奇(数组元素的“初始子数组”“散射”)包含(“轴向距离”) ylabel (“横向位置”

图中包含一个axes对象。坐标轴对象包含3个line类型的对象。这些对象代表数组元素,初始子数组,散射体。

为了形成距离剖面并捕捉副瓣回波干扰的影响,必须定义距离采样参数。现代超声系统使用相对较高的采样频率,与传输波形的中心频率的阶数相同。使用1毫米的范围仓大小,对应大约1.5 MHz的采样率。提供的helper函数helperFormRangeProfile用于从数组响应数据形成范围配置文件。

rangeBinSize = 1 e - 3;Fs = c / rangeBinSize;rangeBins = 0: rangeBinSize: maxDepth;numRangeSamples =元素个数(rangeBins);

获取球坐标中的散射体位置(角度为度)作为输入SphericalWavefrontArrayResponse

[respAng, ~, respRng] = cart2sph (sx, sy, 0);respAng = rad2deg (respAng(:)”);respRng = respRng(:)”;

模拟的每个循环都涉及到计算当前子阵列的权重、计算响应、形成范围剖面和逐行形成图像。我们还将为均匀亮度应用距离相关增益(参见helperFormRangeProfile).

我= 0 (numPulses numRangeSamples);numPulses中心= 0(3日);pulse = 1: numpulse center(:,pulse) = subarray.center;当前子数组的中心位置[focAzGlobal ~, focRngGlobal] =子数组。localToGlobalSph (0, 0, focalRange);%角度和范围到当前焦点重量= SV(频率,[focAzGlobal; 0], focRngGlobal);权重(~ subarray.selection) = 0;%未使用元素的零清除权值resp = AR(频率,respAng, respRng、重量);resp = resp. / respRng (:);撤消规范化以使用实际的传播损失im(脉搏、:)= helperFormRangeProfile(职责、sx sy,中心(:,脉冲),rangeBins);向图像添加线条如果pulse < numpulse subarray.shift(1)如果有剩余脉冲,则移动子数组结束结束

将图像归一化并绘制图形,并叠加散点位置。

我= im / max (abs (im (:)));图subplot(1,2,1) helperPlotResponse(mag2db(abs(im)),rangeBins,center(2,:))“线性子阵列移位图像”) subplot(1,2,2) helperPlotResponse(mag2db(abs(im)),rangeBins,center(2,:))保持情节(sx, sy,“r”“markersize”, 1)标题(散射体叠加的)设置(gcf“位置”得到(gcf“位置”)+[0 0 560 0]);

图中包含2个轴对象。标题为Linear Subarray Shift Image的Axes对象1包含一个类型为Image的对象。标题为scatter Overlay的Axes对象2包含两个类型为image, line的对象。

深度线是关于焦点范围的可分辨的,在一个距离间隔上大致等于子阵列光束的计算自由度。在远离焦点的地方,由于光束在焦点区域外的广角扩展,散射体的平行线很快变得难以区分。

注意,虽然所有的散射体都被用来计算能量返回,但由于整个阵列大小和子阵列中心位置之间的剪切,并不是所有的线都可见。以降低横向分辨率为代价,用更短的子阵列可获得更宽的总视场。

结论

这个例子介绍了两个系统对象,用于计算聚焦权值和计算具有球形波面的阵列的非远场响应。演示了如何检查聚焦光束的一些基本特性,以及如何使用线性子阵列移位收集方法生成基本图像来可视化聚焦光束对横向分辨率的影响。

参考文献

[1]黛米,Libertario。超声波束形成实用指南:波束模式和图像重建分析。应用科学8,不。9(2018年9月3日):1544。https://doi.org/10.3390/app8091544

[2]拉姆,冯,S. W.史密斯。“用线性阵列控制波束。”IEEE生物医学工程汇刊BME-30,不。8(1983年8月):438-52。

辅助函数

helperMakeSingleBeam

函数[beam,x,y] = helperMakeSingleBeam(SV,AR,freq,azSteer,focalRange,x,y)获取单个梁的单元权重并计算响应重量= SV(频率,[azSteer; 0], focalRange);%响应域如果nargin < 6 x = linspace(1e-3,2*focalRange,200);结束如果nargin < 7 pos = SV.SensorArray.getElementPosition;没腿的残疾人= max (pos (2:)) * 1.2;y = linspace(没腿的残疾人,没腿的残疾人,200);结束[az, el, rng] = cart2sph (x, y ', 0);Ang = rad2deg([az(:) el(:)]');rng = rng(:)”;%产生反应梁= AR (rng频率,ang,重量);梁=重塑(梁元素个数(y),元素个数(x));%规范化并使用对数刻度梁=梁/ max (abs(梁(:)));梁= mag2db (abs(梁));结束

helperPlotResponse

函数helperPlotResponse (R, x, y,数组)在由x和y定义的定义域上绘制响应R。显示亮度图像(x, y, R)集(gca),“ydir”“正常”([-32 0]) xlabel(“轴向距离”) ylabel (“横向位置”如果nargin > 3 pos = getElementPosition(数组);持有h =情节(pos (1:), pos (2:)“r”);持有xl = xlim;xlim ([min (pos (1:)) xl(2)])传说(h,数组元素的“位置”“东南”“自动更新”“关闭”结束结束

helperPlotBeamMarkers

函数helperPlotBeamMarkers (focalRange中心,近距离,景深,抵消)在波束图上放置信息标记。线([center-dof / 2中心+景深/ 2],[抵消抵消],“颜色”“白色”([center-dof/2 center-dof/2],[0 offset],“颜色”“白色”([center+dof/2 center+dof/2],[0 offset],“颜色”“白色”) ([focalRange focalRange], ylim,“颜色”“红色”)线(ylim(近距离近距离),“颜色”“青色”结束

helperGetResponsePoints

函数[sx,sy] = helperGetResponsePoints(maxDepth,arrayLength,lambda,dy)沿X画平行线的散射体。maxDepth sx = linspace (0.001, 400);sy = -arrayLength / 2: dy: arrayLength / 2;[sx, sy] = meshgrid (sx, sy);sx = sx (:);sy = sy (:);Sx = Sx + (rand(size(Sx))-1/2)*lambda;Sy = Sy + (rand(size(Sy))-1/2)*lambda;结束

helperFormRangeProfile

函数rangeProf = helperFormRangeProfile(职责、sx sy,中心,rangeBins)此辅助函数在一定范围内连贯地量化响应。%累积每个仓的回报,并应用振幅加权%范围本rangeBinSize = rangeBins(2) - rangeBins(1);numRangeSamples =元素个数(rangeBins);%相对于子阵列中心的散射体范围scatRngRel =√(中心(1)sx)。(2) ^ 2 +(中心sy) ^ 2);量化散射范围为快速时间采样向量scatRidx = 1 + floor(scatRngRel/rangeBinSize);只保持样本低于最大深度I = scatRidx <= numRangeSamples;scatRidx = scatRidx(我);resp = resp (I);%累积返回到快速时间采样网格rangeProf = accumarray(scatRidx,resp,[numRangeSamples 1]);rangeProf = rangeProf ';应用范围相关增益rangeProf = rangeProf。* rangeBins;结束

helperPlotULAWavefronts

函数helperPlotULAWavefronts (numElems f、c, az, r)用ArrayAxis 'y'绘制给定ULA的波前,对于给定的%方位角和焦距。对于远场波前,使用inf作为焦距λ= c / f;数组= phased.ULA (numElems,λ/ 2);pos = getElementPosition(数组);arrayLength = max(pos(2,:)) - min(pos(2,:));%获取相对路径长度如果isinf(r) L = phase .internal.elemdelay(pos,c,[az;0])*c;其他的L = phased.internal.sphericalelemdelay (pos c (az; 0), r) * c;结束% plot元素位置情节(pos (1:), pos (2:)“oblue”);持有%如果近场,图源如果~ isinf (r) (src (1, 1), src (2, 1), src (3,1)] = sph2cart (az *π/ 180 0 r);情节(src (1), src (2),“* r”“markersize”10);结束%波前标记宽度s =λ/ 6;远场道具路径如果isinf (r)(洛杉矶(1,1),洛杉矶(2,1),洛杉矶(3,1)]= sph2cart (az *π/ 180,0,1);结束印第安纳州= 1:尺寸(pos, 2)每个元素的%p = pos(:,印第安纳州);如果isinf(r) src = p + los*arrayLength;结束路径= SRC - p;路径=路径/规范(路径);wp = p +路径*L(ind);%波前位置%支撑路径线([wp (1) src(1)]、[wp (2) src (2)),“颜色”“黑”“线型”“——”);%波阵面标记u =交叉([0,0,1],路径)*年代;线([wp (1) - u (1) wp (1) + u(1)]、[wp (2) - u (2) wp (2) + u (2)),“颜色”“红色”);结束持有;网格;轴平等的如果isinf传奇(r) (“元素”“道具”路径“时”“位置”“东南”);其他的传奇(“元素”“焦点”“道具”路径“时”“位置”“东南”);结束结束

helperPlotResponseSlices

函数helperPlotResponseSlices演示如何可视化球形波前响应的范围切片f = 2 e6;c = 1540;λ= freq2wavelen (f、c);数组=分阶段。([32 32],λ/ 2);elemPos = array.getElementPosition;focalRange = 0.03;sampleRanges = . 01: . 01: . 05;每个片的%域azSteer = -20;elSteer = 20;az = azSteer + (-30:.1:30);el = elSteer + (-30:.1:30);(阿兹,el) = meshgrid (az, el);Ang = [az(:) el(:)]';[x, y, z] = sph2cart (az *π/ 180,el *π/ 180,1);SV =分阶段。FocusedSteeringVector(“SensorArray”数组,“PropagationSpeed”c);基于“增大化现实”技术=分阶段。SphericalWavefrontArrayResponse (“SensorArray”数组,“PropagationSpeed”c“WeightsInputPort”,真正的);w = SV (f [azSteer; elSteer] focalRange);ind = 1:numel(sampleRanges) resp = AR(f,ang,sampleRanges(ind),w);resp = resp / array.getNumElements;resp =重塑(职责、大小(x));alpha = 1 - (abs(sampleRanges(ind) - focalRange)/(max(sampleRanges)-min(sampleRanges)));%的透明度冲浪(x * sampleRanges(印第安纳州),y * sampleRanges(印第安纳州),z * sampleRanges(印第安纳州),mag2db (abs(职责)),“FaceAlpha”,α)阴影结束绘图元素位置和视距向量-32年caxis ([0]) plot3 (elemPos (1:), elemPos (2:), elemPos (3:)“布莱克”“markersize”4);[b(1),(2)、b (3)] = sph2cart (azSteer *π/ 180,elSteer *π/ 180,马克斯(sampleRanges) * 1.2);quiver3 (0, 0, 0, b (1), (2), (3),“黑”自动定量的“关闭”)轴平等的持有集(gca),“视图”, -70年[22])结束
Baidu
map