第3章 发射波束合成:发射聚焦、发射孔径、发射序列设计

好,咱们进入发射波束合成这一块。

说实话,接收波束合成大家研究得比较多,但发射端往往被低估了。我个人的经验是,一台彩超的图像质量好不好,发射端至少占了一半的功劳。你发射没做好,接收端再怎么折腾,信噪比也救不回来。

3.1 发射聚焦:把能量“拧”成一股绳

发射聚焦,说白了就是让所有阵元发出的声波,在目标点同时到达。这样那个点的声压最大,能量最集中。

为什么会这样?你想想看,如果每个阵元发射的时间不一样,声波到达目标点的时间就有先有后,能量就散掉了。只有精确控制每个阵元的发射延时,才能让波前汇聚到一点。

核心公式:

第n个阵元的发射延时 τn = (R - rn) / c

其中R是焦距,rn是阵元到焦点的距离,c是声速。

我在项目中遇到过一个问题:聚焦点选得太深,近场的旁瓣反而变高了。后来我意识到,发射聚焦其实是个“甜蜜点”的选择——你不能指望一个焦点覆盖整个成像区域。

实战技巧:

我一般建议做多焦点发射。比如浅层用一个焦点,深层换另一个。虽然帧率会降一点,但图像均匀度好太多了。

3.2 发射孔径:用多少阵元,这是个问题

发射孔径,就是一次发射用多少个阵元。孔径越大,波束越窄,横向分辨率越好。但孔径大了也有麻烦——旁瓣会变高,而且近场区会变长。

我记得有一次调试一个线阵探头,64阵元全开,结果近场图像糊得一塌糊涂。后来改成动态孔径,近场只开32个,远场再慢慢增加到64个,效果立竿见影。

孔径大小 优点 缺点
小孔径(16-32阵元) 近场好,旁瓣低 远场分辨率差
大孔径(64-128阵元) 远场分辨率高 近场模糊,旁瓣高
动态孔径 全场均匀性好 控制逻辑复杂

注意:

动态孔径切换时,一定要做渐变处理。我曾经直接跳变孔径大小,结果图像上出现了一条明显的“接缝”,被临床医生骂惨了。

3.3 发射序列设计:别让阵元“打架”

发射序列,就是决定哪个阵元在什么时候发、发什么波形。这里面门道很多。

最简单的序列是全部阵元同时发。但这样波束很宽,分辨率差。稍微好一点的是加窗发射——中间阵元发得强,两边弱,这样旁瓣能压下去不少。

我个人习惯用汉宁窗或者布莱克曼窗做发射幅度加权。你想想看,这跟接收端的加窗是一个道理,都是为了抑制旁瓣。

// 发射幅度加权示例(Verilog风格伪代码)
// 假设64阵元,汉宁窗系数
reg [15:0] apod_weight [0:63];

// 初始化权重
for(i=0; i<64; i=i+1) begin
    apod_weight[i] = 0.5 * (1 - cos(2*PI*i/63)) * 65535;
end

// 发射时,每个通道乘以对应权重
tx_amplitude = base_amplitude * apod_weight[channel_id];

还有一种序列叫“编码发射”。比如用Chirp信号或者Barker码。这样做的好处是,发射能量可以很大,但不会烧坏探头。我在做高频探头时特别喜欢用Chirp,信噪比能提升6-8dB。

避坑指南:

我曾经在FPGA上实现Chirp发射,结果发现DDS查表法占用了太多BRAM。后来改用CORDIC算法实时计算,资源省了一半。嗯,这里要注意,资源不够的时候别硬上查表法。

3.4 发射波束合成的FPGA实现要点

在FPGA里做发射波束合成,核心就三件事:延时控制、幅度加权、波形生成。

  • 延时控制:用计数器或者FIFO做精细延时。我一般用5ns的精度,对应约0.75mm的聚焦精度,够用了。
  • 幅度加权:用乘法器实现。注意权重系数要提前算好存到ROM里,别在运行时算,太慢了。
  • 波形生成:用DDS或者查找表。如果是单频脉冲,直接查正弦表就行。如果是Chirp,建议用CORDIC。

最后说一句,发射波束合成的调试,一定要用示波器看每个通道的波形。我见过太多人只看仿真结果,结果上板子就抓瞎。你想想看,FPGA的时序、PCB的走线延迟,这些仿真里都未必准。

总结一下:

发射波束合成不是简单的“发个脉冲”就完事了。聚焦、孔径、序列,这三个东西要一起调。我做了这么多年,还是觉得发射端是最考验系统工程师功力的地方。