Press "Enter" to skip to content

Tag: Python

Sonar Beamforming

Having been incredibly busy with work, and haveing temporarily lost my machining space (converted back to guest bedroom/office), I’ve only had time to fiddle with some high-level designs and for my sonar project.¬†One of the things I’ve been working on is determining how best to make the transmit array. To support that, I wrote up some Python code to generate a Piezoceramic transducer object (in the form of a class), which returns the beam-pattern vs Az/El angle for custom rectangular or circular transducers. That feeds into a transducer array object, defined by a Python array of tuples defining for each element the position, relative driving amplitude and relative phase of the input signal.

The output of all that is the theoretical beam pattern for custom transducer arrays!

Elevation beam patterns for a hypothetical 150 kHz sonar array, consisting of 6 vertically stacked narrow elements with a vertical dimension less than Lambda. The Green pattern has arbitrary amplitude shading applied.

The basic structure of code allows me to quickly determine the beam patterns for various transducer arrays, and experiment with shading to reduce sidelobes, and phasing to steer the beam — Perhaps at some point, I can try to write an algorithm to experiment with a combination of both to create a structure which best insonofies¬†the ocean floor.

Unfortunately, I haven’t yet had time to parse the results of various design permutations, but the basic code is up and running. I think the next step will be to determine how different beams project onto the ocean floor and reflect back so I can do some performance calculations (essentially NESZ, or Noise-Equivalent Sigma Zero, a common performance measure for synthetic aperture systems)

Elevation beamwidth of a 4 element vertical array of 255 kHz transducers. The vertical dimension is approx 3x Lambda. The green element is being steered, note the rising grating lobe.

 

I suppose I have some work to do with getting better graphs out of Pyplot, especially proper annotations. (The axial scale is in dB in the above plots). A drawback to this method is that it assumes the transducer beam patterns are all perfect-world, sunny-day patterns and don’t account for various higher order effects that impact beam pattern (e.g. non-uniform vibration of the piezo elements, acoustic coupling, etc). Lacking appropriate FEA software to do acoustics (Haven’t found anything suitable in the open source world yet!), this is what I’ve got to work with and build on for the time being. Likewise, another step is getting more representative patterns.

Leave a Comment