P.S. computing the sum of sine waves of same frequency with different phases and amplitudes is done using vectors, not the momentary sin(x) + sin(y). Determine the relative phases of the signals, convert each one to cartesian, sum the x's and y's respectively and convert back to polar. This will give the amplitude and phase of the sum (which is a sine wave at the same frequency).
So by adding a*sin(x) and b*cos(x) you can generate up to 90 degrees of phase shift (if a and b are both 0 or greater) or any phase shift you like (if a or b are allowed to be negative too).
... then you don't need a phase programmable signal source for each channel, just the ability to mix sin(x) and cos(x) together in differing amounts.
I am by no mean a signal processing expert but your suggestion may work if your beam is for 1. Transmitting (vs recurving) and 2. Sending a single frequency some each wave. A more general approach is to use delays that compensate for the differences in travel distance in the media. This works also for reviving and for a band of frequencies.
Quite right about receiving - it gets just too tricky.
Here's my thinking on transmitting.
Say you have a line of five ultrasonic transmitters in a line over 300mm, and you want to steer by 45 degrees. At 45 degrees we need equivalent of a 212mm offset (300mm * sin(45 degrees)), the delays would be 0ms, 179ms, 358ms, 537ms, 707ms (if my maths guestimate is accurate, and the speed of sound is 300m/s).
At 45 degrees the other way it would be 707ms, 537ms, 358ms, 179ms, 0ms, with the 0ms reference point being at the other end of the array.
It would be a pain to use 0ms delay as the reference point, as it shifts from one end of the array to the other, so on axis would need to be 358ms delay for all sensors.
Say it is transmitting at 100 kHz - a wavelength of 3 mm. The transmitters could be driven from the same DDS source with a phase offset of 2*pi*35, 2*pi*17.5, 0, 2*pi*-17.5, 2*pi*-35 (+/- 35 wavelengths) by multiplying the sin() & cos() of the transmitting signal by the sin() & cos() of the phase offset. (Yeah, I know this is too high a frequency for the number & size of the array, but let's just run with it...)
You don't have to worry about the 0.358ms delay that each transmitter is offset from the ideal,as you keep the middle transmitter with 0 phase delay, and then have one end of the array equivalent to being advanced in time, the other end being delayed using + and - phase offsets.
You can change frequencies, if you want to sweep the frequency to down to from 100 kHz to 50 kHz, you also sweep the phase offset down to 2*pi*17.5, 2*pi*9.75, 0, 2*pi*-9.75, 2*pi*-17, and everything works out. If do it right the change in wavelength due to the phase shift changes make it virtually indistinguishable from an delay line implementation during the sweep except maybe a the the beginning and ends of the sweep (this is most likely an incorrect - I expect that focus of the beam would move slightly to the center during the sweep, and the difference would be more the higher the frequency, faster the sweep, and the greater the beam is pointing off axis)
What if you wanted to send multiple beams in different directions at the same time? If you are working with physical delay lines you are unable to. However if you do it with the math you can. Likewise, if you are using a digital memory based delay line you have to interpolate if your desired delay is not a multiple of the sample period.
You can also switch transmitters between different configurations instantly, and don't have to wait for the delay to empty out as they reconfigure themselves. I guess this is how multi-beam sonar works...
But on refection, this could all be done with a digital memory based delay line with one tap for each transmitter, for each concurrent frequency.