i often use points to make a bowl to form a focus transducer,and scan it. But it is so ....so hard!
k-Wave
A MATLAB toolbox for the time-domain
simulation of acoustic wave fields
please add focus transducer!!
(5 posts) (4 voices)-
Posted 4 years ago #
-
HI lishine,
We are working on a new class called kWaveArray that makes it easy to specify multi-element transducers (sources or sensors). We have a beta version, and we plan for this to be out with the next release. In the meantime, if you need to make a bowl, you could look at the
makeBowl
function.Brad.
Posted 4 years ago # -
Thanks, Bradley for your help once again. Finally, could you indicate which example in k-wave works with this processing?
Posted 1 year ago # -
See the “ Modelling Plane Piston And Focused Bowl Transducers Example”.
Posted 1 year ago # -
I had a similar issue. I need to simulate a phased-array bowl transducer with equidistant element spacing rather than a random array. More specifically, an algorithm for finding equidistant points on a 2-sphere. I wrote a short function that works relatively well for simple simulations but requires the number of elements to be perfect squares and needs to be improved. The most challenging part was finding how to rotate the elements to the focal point, which I eventually arrived at by trial and error. Maybe someone can provide more insight into making the points truly equidistant or how to calculate the rotation angles.
Here are a few papers and algorithms discussing potential methods:
1. Deserno. How to generate equi-distributed points on the surface of a sphere. If Polzmerforshung. 2004
2. Algorithm. https://www.bogotobogo.com/Algorithms/uniform_distribution_sphere.php.
3. S^2 sampling toolbox. Anton Semechko. Matlab File Exchange.
4. mathworks.com/matlabcentral/answers/353-uniform-distribution-of-n-points-within-a-spherefunction [px,py,pz,pa,pe, karray, source] = make_phased_array_bowl_transducer(source_focus, element_num, kgrid, element_width, element_length, translation, rotation)
s1 = (pi*source_focus)/(sqrt(element_num));
s2 = (pi*source_focus)/(sqrt(element_num)+1);
angle1 = s1/source_focus;
angle2 = s2/source_focus;
ca1 = 0;
ca2 = angle2;
cnt=1;
for i=1:sqrt(element_num)
for j=1:sqrt(element_num)
px(cnt) = source_focus*sin(ca2)*cos(ca1);
py(cnt) = source_focus*sin(ca2)*sin(ca1);
pz(cnt) = -source_focus*cos(ca2);
pa(cnt) = 180/pi*ca1-90;
pe(cnt) = 180/pi*ca2;
ca1 = ca1 + angle1;
cnt=cnt+1;
end
ca2 = ca2 + angle2;
ca1=0;
end
figure
plot3(px,py,pz,'.')karray = kWaveArray('BLITolerance', 0.05, 'UpsamplingRate', 10);
for ind = 1:element_num
karray.addRectElement([px(ind), py(ind), pz(ind)], element_width, element_length, [pe(ind),0,pa(ind)]);
end
karray.setArrayPosition(translation, rotation)
source.p_mask = karray.getArrayBinaryMask(kgrid);end
-Ryan
Posted 1 year ago #
Reply
You must log in to post.