defaultalt Field II home page
Point spread function Field II Simulation Program
    Main page
Center for Fast
Ultrasound Imaging
Ultrasound and
Biomechanics Section


Menu Line
Menu Line
Users guide
Menu Line
Menu Line
Menu Line
Menu Line
Menu Line
Menu Line

Field IIpro

Menu Line


Menu Line

Frequently asked questions

  1. The Windows 64 bits version of Field II does not seem to work. It report a missing ell. How do I fix this:

    For the Windows 64 bits version you have to have the Microsoft Visual Studio 2012 run-time libraries for this version to work. This you can either get by installing the compiler and using mex -setup or download the Microsoft Visual Studio 2012 run-time libraries from the link:

  2. How do I control the accuracy of the responses calculated?

    As a standard the program uses rectangles. If you want a high precision you have to have small rectangles compared to the distance to the Field point. The size of the rectangles must be chosen so that the field point lies in the far-field region. This is given by

    l >> w^2/(4 lambda)

    where l is the distance to the field point, w the largest dimension of the rectangle and lambda the wavelength. This should give a good precision for all you calculations, if you obey this rule. More information can be found in the paper:

    J.A. Jensen and N. B. Svendsen: Calculation of pressure fields from arbitrarily shaped, apodized, and excited ultrasound transducers, IEEE Trans. Ultrason., Ferroelec., Freq. Contr., 39, pp. 262-267, 1992.

    that can be found on the Field II web-site.

    You can check if you have the sufficient accuracy by decreasing the element size, and then see if you get the same result.

    The sampling frequency also incluences the accuracy. Increasing it will in general increase the accuracy. Again you can check the result by increasing the sampling frequency and then compare to the previous result.

  3. What are the physical relations on the excitation pulse, the impulse response and the actual pressure generated in calc_hp and in calc_hhp?

    The excitation is the voltage applied on the terminals of the transducer. The impulse response for the transmitting aperture is the impulse response from the voltage on the terminals to the acceleration of the front face of the transducer multiplied by the density of the medium. Setting these to the correct value then gives the pressure in Pa. Scaling the impulse response will, thus, scale the pressure proportionally. The impulse response for the receiving aperture is the impulse response from front face acceleration to voltage on the transducer terminals. Scaling this, thus, gives a direct scaling of the output voltage from the transducer.

  4. In calculating the field, do you use the Kramers-Kronig relationship between the frequency-dependent attenuation and phase velocity?

    The program uses a minimum phase version of the attenuation as described by Gurumurthy and Arthur in their 1982 paper in Ultrasonic Imaging. The Field programs implementation and results from its use can be found in the paper:

    J. A. Jensen, Darshan Gandhi, and William D. O'Brien: Ultrasound fields in an attenuating medium, Proceedings of the IEEE 1993 Ultrasonics Symposium, pp. 943-946, Vol. 2, 1993.

  5. The function xdc_impulse sets the impulse resonse for a given aperture. If I understand it right, I can set a vector derived from measurements or calculated from a transducer model. This may take into account transducer tuning. Right ??

    Yes, you can include any measured or calculated waveform by using xdc_impulse.

  6. For xdc_linear_array how the parameter focus is used? Does it result in some fixed phase delay or what is it used for ?

    In xdc_linear_array a fixed focus is found and the delay values are calculated accordingly. These delay values are then used for all time in the calculations. It is an easy method for setting the focus for a single focus array, e.g., for a transducer used for emission.

  7. In your 1996 paper, "FIELD: a program for simulating ultrasound systems," which you presented at the 10th Nordic-Baltic conf., it was stated that the 128-element linear array simulation took 11 hrs to run on an HP9000 Model 819/K200. I have access to the same HP model in our lab, and our machine has 4 CPUs which could be used to get a factor of 4 speed increase by segmenting (if possible and practical) the process and combining the results (e.g. CT Backprojection). So my question is whether your Field simulation used 4 CPUs or just 1, and whether your program lends itself to segmentation.

    The phantom image that I generated was only made with one CPU and the Matlab version of the program. It is possible to make a parallel version of the simulation since it involves the generation of a number of scan lines. You would then generate the position and amplitude of the individual scatterers and store that in a file. Then you divide the set of lines into four, and then each CPU can handle part of the problem. This will give you close to a four times decrease in simulation time. The program does only run on one CPU, but most problems as this can be divided into smaller tasks, and then run in parallel.

  8. I just installed MatLab 5 in start testing Field 2 with your examples. One problem, which comes up in all programs, is with the statement
    N_pre = x/(width+kerf) + N_elements/2 - N_active/2;
    It seems that the rounding is different for Matlab 4 and Matlab 5. If you replace the line above with:
    N_pre = ceil(x/(width+kerf) + N_elements/2 - N_active/2);
    the simulation runs without errors.

    It is correct that Matlab 5 is more strict when non-integers are meet. A ceil or floor function will fix the problem like: N = floor(Nx + 0.5);

  9. I'm a little bit confused in regard to the use of a 3 element vector for the focal position for one-dimensional array. In my usual practice of simulating transducers whose center is the origin of the coordinate system, I can see how x and z can vary, but for a one-dimensional array, it would seem that y has to be 0. Would non-zero values of y be useful only for arrays which are positioned away from the origin of coordinates, or for two-dimensional arrays?

    The focusing in elevation can of course not be done with a traditional array. The full description of the focusing point is maintained for use with the 2D arrays, and since it is cumbersome to sometimes have two coordinates and other times three coordinates. In general the y-value for a one-dimensional array should be zero always.

  10. I'm also confused about how the value Rfocus in xdc_focused_array interacts with the focusing mentioned in the previous question. In the case where y is zero in the focal position vector, I can see that RFocus is an independent variable which corresponds to the focal length of the typical plastic lens found on imaging transducers. But I'm unsure of how to define it if y were not zero.

    The variable Rfocus in xdc_focused_array defines the physical layout of the transducer, so that the elevation focus is at a distance Rfocus from the aperture.

  11. Do you have any estimation about the far-field approximation? In other words, how do you define the near-field and far-field? and how much confidence do you have in the near-field?

    The far-field is losely defined as being beyond the distance d^2/(4 lambda), where d is the largest dimension of the rectangle used in the calculation. The accuracy of the calculation will increase with increasing distance. In the Field II program you can also use triangles, which use the exact solution. The far-field condition is, thus, not needed here.

  12. Am I correct in assuming that the center of the transducer is always located at (0,0,0) mm?

    The center of the array is always positioned at (0,0,0).

  13. I am now working on simulating an 2D array focusing off-axis, but I am not too sure how the transducer is oriented relative to the far field. When I specify my 2d array, I have a matrix which contains ones and zeros to enable the elements. My question is: in which direction am I moving (positive or negative x, or positive or negative y) when i move from (1,1) to (8,1) in my enabled matrix?

    The first index is for the x-direction and the second index is for the y-direction. You start from the most negative x and y element and move toward positive values.

  14. Is there a field command which allows me to move the transducer?

    Currently there is no command for moving the transducer. It can be simulated by moving the target instead, which will give the same effect.

  15. What is the function xdc_focus function, xdc_center_focus ...

    The xdc_focus function sets the delay values for an array, so that the focus is at the indicated point. The routine xdc_center_focus set the reference point for doing focusing. At this point the delay is taken to be zero. This is neccessary for having a dynamic focusing and having an absolute reference for the whole image generation process. A further description can be found in the documantation for version 2.60 of the program.

  16. My objective is to make and ANSYS simulate of the vibrations of the transducer elements and to calculate the radiated pressure field with FIELD II. Is this possible?

    Taking the output from the ANSYS program and directly putting it into Field II is not possible. The ANSYS simulation will probably give some complex vibration pattern on the front face of the transducer and Field cannot handle elements that have any other than a piston vibration (they cannot tilt during vibration). Also it is a problem having different vibration signals on different parts of the transducer.

  17. Is it possible to simulate an echo from a metallic flat plate?

    The echo from a phase plate can be simulated by sampling the plate in space. Make the grid finer than a wavelength (probably 1/10 lambda), and then do the simulation.

  18. I would like to transfer back scattering coefficient (as given for example in your book at figure 2.6) into particles concentrations and amplitudes (for the creations of phantoms). Is there a method of transforming the two kinds of data ?

    Currently I do not have a method for translating a backscattering coefficient to a number of point scatterers in a given volume. Please tell me if you find some meaningfull way of doing this conversion.

  19. When starting Field II we're getting the following error on startup.

    ??? Error using ==> load
    matlab.mat: File not found.

    Error in ==> /usr/local/matlab/field_logo.m
    On line 12 ==> eval(['load ', place])

    Basically, the only problem is the logo isn't showing up. Field appears to function properly. Any ideas?

    This is because Field cannot find the file logo_field.mat, which should be placed in the same directory as the m-files, and the Matlab search path should include this directory (see the Matlab routine path).

  20. I am using a number of focusing zones in calculating the pulse-echo response from a number of scatterers. The program seems to pick an earlier focus zone than I envision. Why is that?

    The focus zones are picked according to the times after which the focus zone is valid. Remember, however, that this time should be calculated as the one-way distance to the point, since the focusing is valid for the specific aperture and one aperture is used in receive and another is used in transmit.

  21. I was wondering how the calc_scat start_time parameter is generated. I'm trying to generate a set of beams with the same transmit and receive configuration but with different apodization (ele_apodization) vectors. Each apodization generates a beam with a different starting time and I was wondering why this happens.

    The starting time is found from the actual physical distance from the active elements during the calculation. Elements with an apodization of zero are not included in the calculation and the starting time can therefore change as a function of the apodization.

  22. There is some high frequency (numerical?) noise in the calculated spatial impulse response. My question is if there are any tricks to decrease this noise?

    In practice, I guess that the noise is removed when applying a bandpass pulse. However, to use the impulse response itself in illustrations, it would be nice to reduce the noise.

    The standard Field II code uses a far-field rectangular approximation, that introduces this noise. You can set the field code to use either rectangles, triangles or bounding lines (see set_field), which uses the exact solutions and thereby eliminates the noise. They are, however, slower when calculating the spatial impulse response.

  23. I am calculating the on-axis intensity of the ultrasound and using different excitation pulses. When I use sinusoidal pulses with 1.5 cycles, I get very different values especially in the near field. Why?

    The problem with the half-cycle pulse is that they have a component in the spectrum around f=0, which in general is not realistic for ultrasound systems. This will dominate the response, especially at low frequencies. In your simulation you have not specified the impulse response of the transducer. This should be done to reflect that the transducer cannot transmit a DC component.

  24. What is the best way to use Field_II for CW case?

    The best way to simulate the CW case is to perform a Fourier transform of the corresponding signal at the given frequency. This can be performed on the response from calc_h for the emitted response and on calc_hhp for the pulse-echo response. The Fourier transform is done by calculating:


    where f0 is the frequency, h is the calculated response, and t are the corresponding time values for the response h. This will yield the appropriate complex value at the correct frequency.

  25. The start_time parameter returned by the calc_scat seems to be truncated to 1/50th of a microsecond (1/(2PRF)?) and doesn't present an accurate start time for the returned echo. I need to have greater fidelity with the start_time in order to compare arrival times for different positions of an ensemble of scatterers.  This is necessary in avoiding jitter and innaccuracy in creating Doppler shift signals at a specific sample gate depth.

    The start time is aligned with the sampling clock, so the start time always falls right on the start of one sampling interval with the pulse emission used as a reference. This is needed to keep all signal coherent and to make it possible to do flow simulations. The start time would move within a sampling interval, if this was not done, and thereby make velocity estimation impossible, since consecutive lines would be out of phase. If you need a higher resolution in the start time, you will have to increase the sampling frequency by set_field ('fs', <values>).

  26. Do you have a suggestion for the best way to implement an annular array as the transducer in Field II?

    The annular array is a bit tricky. There are two approaches: one is simulating a number of piston transducers and then subtract and add the responses. This is not such a good method, since all the errors at the boundaries will be amplified. The best, but also must cumbersome way, is to define the annular array directly using xdc_rectangles or xdc_triangles. You can then use all the normal calculation tools. You might want to check the layout by using the routine show_xdc in the m_utilities directory.

  27. I tried using you IBM AIX matlab version of field2 without success on the following system:

    IBM RS/6000 44P Model 270
    AIX 4.3.3

    The error I receive is:

    >> field
    Unable to load mex file: /home/ersva/field2/Mat_field.mexrs6.
    Cannot run a file that does not have a valid format.
    ??? Invalid MEX-file

    Error in ==> /home/ersva/field2/field_init.m
    On line 23 ==> Mat_field (5001,suppress);

    Error in ==> /home/ersva/field2/cyst_phantom/pm/field.m
    On line 7 ==> field_init(0)

    Any ideas as of what the error is or how to solve it?

    Matlab 5 mex files are not compatible with some Matlab 6 versions. At least not on a Linux system. That is probably why. We are experimenting with Matlab 6, and it does not seem to be a stable product under Linux currently.

  28. I use calc_scat_multi and get a returned matrix full of NaN (not a number). Why?

    Your code has scatterers right on the surface of the transducer. Field II cannot handle this, due to a singularity on the surface of the transducer. The closets scatterer should thus be e.g. 1 mm away from the transducer surface.

Last updated: 0:05 on Mon, 28-Oct-2013