MATLAB Newsgroup

Hey there MATLAB image processing and signal analysis community. This is my first post on the message board looking for suggestions, ideas and or help. Let me fill those of you who decide to read this in on some of my backround and that of my problem. I am an electrical engineering student and I am doing some research on a medical imaging technique similar to strain imaging using ultrasound. The basic idea is that if you have some substance (it doesnt really matter what, it could be tissue, it could be tofu, or anyting like that, just some type of soft yet solid material), and you image it using ultrasound over some time interval, say we take an image every 15 seconds, and while we are taking this series of images, we introduce some energy or force that causes actual or apparent movement within the substance we should be able to detect the movement by comparing succsessive signals or

images. To break it down further, the signals rescieved by the ultrasound transducer are RF signals, and we recieve back a 128 (it could be 256 depending on the focal depth and size of the sample tissue) signals which represent the width of the tansducer (and therefore the width of area of interest of our substance). When imported into MATLAB these will be my colums, so I will have 128 colums of data. Each colum of data will hold approximately 2000 samples (of course giving me a 2000 row by 128 colum matrix of data at each time interval an image ultrasound image is taken) and these samples (rows) will redpresent the axial depth into the substance. I am currently only working in 2D so I will not consider elevation at this time. The sampling freuqncy of my transducer is 24MHz.

What I want to do is to detect any shifts in the RF signals from one time to the next. Currently I am doing this by means of a windowed cross-correlation algorithm, and while it does work in the sense it detects the shifts, it is painfully slow. I am most concerned with movment along each column (axial) but I cannot ignore movement along each row (lateral) so going to a 1D anaysis is not an option. To give an example of the basic approach I am currently using:

For this example I will assume no resampling of the input (but i do in my normal approach), but I am resampling the correlation outputs in an attempt to gain sub-sample accuracy in the shift detection, however this is also my greatest enemy in terms of time efficiency

%normally g1 = data_at time_t;

%normally g2 = data_at_time_t_plus_1;

for this example I will create a random set and shift it using circshift, so if you try this and run the code it should detect some varrying integer shifts throughout, the actual shifts are recorded for checking perpouses. You will see that the code works reasonably well, not perfect but good enough to get the point across. My actual algorithm im using is more complex, and resamples a bit more and yields more accurate sub-sample results but again its awefully slow.

g1 = rand(400,40);

g2 = zeros(size(g1));

counter = 1;

for i = 1:50:400

shifts = -10:1:0;

g2(i:i+49,:) = circshift(g1(i:i+49,:),shifts(mod(i,7)+1));

record_of_shifts(counter) = shifts(mod(i,7)+1);

counter = counter+1;

end

predicted_shift_max = 5; %this is in samples without resmapling

% the sizes of the two arrays are always equal

[rows cols] = size(g1);

compare_window = [50 15];

cc_resample_rate =0;

%my basic cross correlation

frame = 1;

for col = 1:cols-compare_window(2)

counter = 1;

for row = 1:rows-compare_window(1)

g1in = zeros(compare_window);

g2in = g2( counter: counter+compare_window(1)-1,col:col+compare_window(2)-1);

g1in(6:compare_window(1)-5,3:compare_window(2)-2)= g1(counter+5:counter+compare_window(1)-6,col+2:col+compare_window(2)-3);

axial_lags = -compare_window(1)+1:compare_window(1)-1;

lateral_lags = -compare_window(2)+1:compare_window(2)-1;

xc1 = normxcorr2(g1in,g2in);

xc1_i = interp2(xc1,cc_resample_rate,'spline');

[M1 N1] = size(xc1_i);

a_lags_i = interp1(0:length(axial_lags)-1,axial_lags,0:1/2^cc_resample_rate:length(axial_lags)-1,'spline');

l_lags_i = interp1(0:length(lateral_lags)-1,lateral_lags,0:1/2^cc_resample_rate:length(lateral_lags)-1,'spline');

if row ~= 1

temp_v = 0: counter-1;

ep1 = round(sum(ROW1( counter-temp_v(1: counter-1)-1))/( counter-1));

mask1 = zeros(size(xc1_i));

mask1(ep1-predicted_shift_max*2^cc_resample_rate:ep1+predicted_shift_max*2^cc_resample_rate,:) = 1;

indices1 = find(mask1(:));

[xc_out1( counter,col,frame) idx1] = max(xc1_i(mask1(:)==1));

[rows1 cols1] = ind2sub([M1 N1],indices1(idx1));

ROW1( counter) = rows1;

else

[xc_out1( counter,col,frame) idx1] = max(xc1_i(:));

[rows1 cols1] = ind2sub([M1 N1],idx1);

ROW1( counter) = rows1;%

end

axial_shift1( counter,col,frame) = a_lags_i(rows1);

lateral_shift1( counter,col,frame) = l_lags_i(cols1);

counter = counter+1;

end

col

end

So what this is doing is sliding a window down both sets of data, the window is 50 samples long (rows) and 15 sample wide (cols) and as this window is sling down the signals, it using normxcorr2 to find the normailized 2D cross correlation, finds the maximum value within set seach parameters based on assuption of how much the maximum shift can be during a time interval, and saves the detected shifts into an array. Once the shifts have been detected the next step is to filter the shifts (displacement) array and take the derivative in the axial direction to generate the strain image. The goal is then to scale the image to map the intensity of the energy causing the movement. So As I said, I am looking for any ideas on ways to speed up my correlation algorithm or alternative approached to detecting sub-sample shift in 2D. Second, I am having problems with the the filtering and

especially taking the derivative portion of the problem. The main obsticale is that if I dont filter enough, the derviative oscilates and I cannot use the result. If I over filter I lose the spatial resolution. Mainly it is a lowpass filter needed, and I currently need a cutoff frequency of approx. .02 normailzed by the sampling frequency. I have tried most of the built in filters, the filter building tool, creating my own custom wondowed sinc filter using methods I learned in DSP, differentialing filters, polynomial fits to take an analytic derivative, first difference, and so on with limited results and again here I am looking for any suggestions or ideas that may help me leap these hurdles. Now I dont want to be scolded for not including data or images which I am more than willing to provide but the data sets are large and would need to know the best way to get those to anyone

who thinks the may want to try and help. As far as images go, again I can provide them but at this time do not know the best way to share them in this setting.

Thanks for any ideas,help, or insight you might provide into improving the algorithm, different approaches to solving the problem and ways to tackle the filtering and differentiating issues. If you think images or actual data may help please let me know how to get them to you.

EEStudent

Have you run it without the col statement in there to print out your

column? Sometimes printing out to the command window really slows

things down. Also, have you tried nlfilter() instead? It might not

be much faster but it might be worth a try.

Finally, tell me how long it takes? Are we talking many minutes or

just a few seconds? We've had people here complain that things are

taking too long where they are taking a fraction of a second, and

they're not using real time processing they just want to try to hammer

down the tic-toc time just for theoretical reasons. Like they click a

button and they think they'll notice that it now takes .005 seconds

instead of .1 seconds.

If you want to post images or data files, the best I've found is

http://drop.io.

On 24 apr, 07:31, "EE Student " <n...@cec.wustl.edu> wrote:

> The goal is then to scale the image to map the intensity of the energy causing the movement.

Forget it.

The only way to use images to measure energy intensity, is

to use calibrated sensors. You don't have that.

What you measure, is physical displacements and deformations.

That's all. There may or may not be a relation between what

you measure and what you want, but make sure you understand

the difference.

What you attempt to do, is comparable to use image processing

to measure temperature by imaging one of the old-style mercury

thermometers. The image processing part is to measure and

quantifying the length of the mercury column. That length

tells you absolutely nothing about temperature. You need to

know a lot about the design of the thermometer and the thermo

dynamic properties of mercury to map the measured length to

temperature.

Rune

"EE Student " <np7@cec.wustl.edu> wrote in message <hqtvnl$739$1@fred.mathworks.com>...

> Hey there MATLAB image processing and signal analysis community. This is my first post on the message board looking for suggestions, ideas and or help. Let me fill those of you who decide to read this in on some of my backround and that of my problem. I am an electrical engineering student and I am doing some research on a medical imaging technique similar to strain imaging using ultrasound. The basic idea is that if you have some substance (it doesnt really matter what, it could be tissue, it could be tofu, or anyting like that, just some type of soft yet solid material), and you image it using ultrasound over some time interval, say we take an image every 15 seconds, and while we are taking this series of images, we introduce some energy or force that causes actual or apparent movement within the substance we should be able to detect the movement by comparing succsessive signals

or

> images. To break it down further, the signals rescieved by the ultrasound transducer are RF signals, and we recieve back a 128 (it could be 256 depending on the focal depth and size of the sample tissue) signals which represent the width of the tansducer (and therefore the width of area of interest of our substance). When imported into MATLAB these will be my colums, so I will have 128 colums of data. Each colum of data will hold approximately 2000 samples (of course giving me a 2000 row by 128 colum matrix of data at each time interval an image ultrasound image is taken) and these samples (rows) will redpresent the axial depth into the substance. I am currently only working in 2D so I will not consider elevation at this time. The sampling freuqncy of my transducer is 24MHz.

>

> What I want to do is to detect any shifts in the RF signals from one time to the next. Currently I am doing this by means of a windowed cross-correlation algorithm, and while it does work in the sense it detects the shifts, it is painfully slow. I am most concerned with movment along each column (axial) but I cannot ignore movement along each row (lateral) so going to a 1D anaysis is not an option. To give an example of the basic approach I am currently using:

>

> For this example I will assume no resampling of the input (but i do in my normal approach), but I am resampling the correlation outputs in an attempt to gain sub-sample accuracy in the shift detection, however this is also my greatest enemy in terms of time efficiency

>

> %normally g1 = data_at time_t;

> %normally g2 = data_at_time_t_plus_1;

>

> for this example I will create a random set and shift it using circshift, so if you try this and run the code it should detect some varrying integer shifts throughout, the actual shifts are recorded for checking perpouses. You will see that the code works reasonably well, not perfect but good enough to get the point across. My actual algorithm im using is more complex, and resamples a bit more and yields more accurate sub-sample results but again its awefully slow.

> g1 = rand(400,40);

> g2 = zeros(size(g1));

> counter = 1;

> for i = 1:50:400

> shifts = -10:1:0;

> g2(i:i+49,:) = circshift(g1(i:i+49,:),shifts(mod(i,7)+1));

> record_of_shifts(counter) = shifts(mod(i,7)+1);

> counter = counter+1;

> end

>

> predicted_shift_max = 5; %this is in samples without resmapling

> % the sizes of the two arrays are always equal

> [rows cols] = size(g1);

> compare_window = [50 15];

> cc_resample_rate =0;

> %my basic cross correlation

> frame = 1;

> for col = 1:cols-compare_window(2)

> counter = 1;

> for row = 1:rows-compare_window(1)

> g1in = zeros(compare_window);

> g2in = g2( counter: counter+compare_window(1)-1,col:col+compare_window(2)-1);

> g1in(6:compare_window(1)-5,3:compare_window(2)-2)= g1(counter+5:counter+compare_window(1)-6,col+2:col+compare_window(2)-3);

> axial_lags = -compare_window(1)+1:compare_window(1)-1;

> lateral_lags = -compare_window(2)+1:compare_window(2)-1;

> xc1 = normxcorr2(g1in,g2in);

> xc1_i = interp2(xc1,cc_resample_rate,'spline');

> [M1 N1] = size(xc1_i);

> a_lags_i = interp1(0:length(axial_lags)-1,axial_lags,0:1/2^cc_resample_rate:length(axial_lags)-1,'spline');

> l_lags_i = interp1(0:length(lateral_lags)-1,lateral_lags,0:1/2^cc_resample_rate:length(lateral_lags)-1,'spline');

> if row ~= 1

> temp_v = 0: counter-1;

> ep1 = round(sum(ROW1( counter-temp_v(1: counter-1)-1))/( counter-1));

> mask1 = zeros(size(xc1_i));

> mask1(ep1-predicted_shift_max*2^cc_resample_rate:ep1+predicted_shift_max*2^cc_resample_rate,:) = 1;

> indices1 = find(mask1(:));

> [xc_out1( counter,col,frame) idx1] = max(xc1_i(mask1(:)==1));

> [rows1 cols1] = ind2sub([M1 N1],indices1(idx1));

> ROW1( counter) = rows1;

> else

> [xc_out1( counter,col,frame) idx1] = max(xc1_i(:));

> [rows1 cols1] = ind2sub([M1 N1],idx1);

> ROW1( counter) = rows1;%

> end

> axial_shift1( counter,col,frame) = a_lags_i(rows1);

> lateral_shift1( counter,col,frame) = l_lags_i(cols1);

> counter = counter+1;

> end

> col

> end

> So what this is doing is sliding a window down both sets of data, the window is 50 samples long (rows) and 15 sample wide (cols) and as this window is sling down the signals, it using normxcorr2 to find the normailized 2D cross correlation, finds the maximum value within set seach parameters based on assuption of how much the maximum shift can be during a time interval, and saves the detected shifts into an array. Once the shifts have been detected the next step is to filter the shifts (displacement) array and take the derivative in the axial direction to generate the strain image. The goal is then to scale the image to map the intensity of the energy causing the movement. So As I said, I am looking for any ideas on ways to speed up my correlation algorithm or alternative approached to detecting sub-sample shift in 2D. Second, I am having problems with the the filtering and

> especially taking the derivative portion of the problem. The main obsticale is that if I dont filter enough, the derviative oscilates and I cannot use the result. If I over filter I lose the spatial resolution. Mainly it is a lowpass filter needed, and I currently need a cutoff frequency of approx. .02 normailzed by the sampling frequency. I have tried most of the built in filters, the filter building tool, creating my own custom wondowed sinc filter using methods I learned in DSP, differentialing filters, polynomial fits to take an analytic derivative, first difference, and so on with limited results and again here I am looking for any suggestions or ideas that may help me leap these hurdles. Now I dont want to be scolded for not including data or images which I am more than willing to provide but the data sets are large and would need to know the best way to get those to anyone

> who thinks the may want to try and help. As far as images go, again I can provide them but at this time do not know the best way to share them in this setting.

>

> Thanks for any ideas,help, or insight you might provide into improving the algorithm, different approaches to solving the problem and ways to tackle the filtering and differentiating issues. If you think images or actual data may help please let me know how to get them to you.

>

> EEStudent

ImageAnalysit,

Yes I just add the "col" statement to track the progress when the code is running. The datasets typicially consist of 30 to 100 matrices (i will refere to these as frames) in sized about 2000 by 128 or 2000 by 256. Generally speaking you do not need to correlate each frame to the next, but the further apart in time the frames are, the more decorrelation and error occurs. A good model for the ultrasound signal is

q(r) = summation q_i * delta(r - r_i) from k = 1 to Nr where q_i is the reflectivity and r_i is the position of the "ith" scatter. Basically, a burst is shot doen into tissue, the burst is reflected back off different points within the tissue and reutrn to the transducer in varrying applitudes and non-uniform incremements (but related to the speed of sound in the material) to creat 1 signal. The closer in time you send another burst the more similar the return signal to the previous, but the longer you what, the more the orignal causes of scatter may be moved by the applied energy thereby causing the return scatter pattern to differ and making it harder to accurately correlate the signals. Currently, the code I am written does a great job of detecting the shifts in successive frame or every few frames, but I cannot go from say frame 1 to frame 30, there is too much

decorrelation. Each frame however takes a anwhere from30 minutes to a few hours or more to work through dependingon the ammount and location of interpolations. I will get an account for the drop site you posted this afternoon to share some data and results I currently have. I know that this can work well when the force applied is mechanical and causes a lot of movement. I have great results for this case to measure the strain of the material being stressed, although it works better in phantoms or tofu than on animal tissue. The more difficult problem is say I want to use heat as the energy to cause motion in the tissue. As when know if you heat tissue, such a muscle, the cell volume expands as the thermal energy rises, tis will cause the distance the ultrasound signal has to travel to become longer causeing an apparent delay in subsequent signals. However, the change in

temerature will also effect the speed of sound (SOS) in the medium so the SOS is a function of distance (z) and temperature (T) . Measure the apparent delay cause by the heating could then reasonably be used to determine temperature if the signals are processed correctly. The shifts, or delays in this case are much smaller and therefore harder t detect but again my algorithm does this well to map the "echo-shifts" as it is refered to, however, at this point becomes the problem of filtering, spatial resolution and differentiating that I refered to before. The echo-shift maps look just like one would expect to see as heat diffused from a localized source. However, mathmeatically it is the derivative of the echo-shifts that is related to the change in temperature, although I guess I could try to soleve the problem to eleminate the need for the diferentiation. But this would create

other questions. I am balabbering. Let me get the data and images posted to better show you what is going on. Thanks for the reply and I will also look into the nlfilter() function.

Rune,

Thank you for taking the time to reply, but forgetting it is not an option, nor is it good advice. I do not agree with you analogy of the thermometer as it does not pertain to the sort of analysis I am doing( even though measuring temperature is one of my goals). As I stated above, piece of tissue is heated, the cells that make up that tissue will expand based on the material properties. This is well docemented and tables of coefficients of thermal expansion exist. As the tissue expands it created a longer path that the ultrasound signal must pass through before returning to the transducer. The speed of sound (SOS) in the material will also change with temperature causing an apparent delay in the signal. Measureing this delay (echo_shift) throughout a standard time frame will yield a map of shifts, greater closer to the heat source, less when further away. The results are what you

would epect if you ploted the solution to the heat equation in 2D. Now perhaps I did a poor job of explaining what I was trying to accomplish, but can use techniques like this can be used to learn about physical forces and the materials the signals passed through. This is how we know that the Earths core is moltan. Seizmic waves during earthquakes, while not felt globally can be detected globally, and by measuring the refraction of the waves or other signal characteristics as they pass through dfferent material can tell you alot about the material itself. Similar techniques are used to dtermine where oil and gas are without digging. I am noy looking a the ultrasound images, but looking at the signals that create them, I think I may have failed to clarify this. Sorry if that was confusing.

EEStudent

On 24 apr, 18:04, "EE Student " <n...@cec.wustl.edu> wrote:

> Rune,

>

> Thank you for taking the time to reply, but forgetting it is not an option, nor is it good advice. I do not agree with you analogy of the thermometer as it does not pertain to the sort of analysis I am doing( even though measuring temperature is one of my goals). As I stated above, piece of tissue is heated, the cells that make up that tissue will expand based on the material properties.

You are a student, which is a different way to state that you have no

idea

what you are talking about.

The reason why no systems exist to do what you want, is that what you

want

can not be done. At least not the way you want to do it. The

*experienced*

engineers are able to break the task down in sub-tasks, which I did

with

the thermometer example.

The best you can do with ultrasound is to measure time delay of

reflections.

You can *not* explayn what *causes* that time delay: The basic idea is

expressed

as

t = c(T)*v(T)*L(T)*w(T)

where

t is the time delay

T is the temperature

c(T) is the speed of sound at temperature T

v(T) is some correction to c(T) comared to some reference temperature

L(T) is the length of the sample at temperature T

w(T) is some correction to L(T) compared to some refence temperature

Since both c(T) and L(T) depend on T, you are unable to measure T.

This is a classic mistake made by novices and amateurs - the

characteristic

applies just as much to your tutour / supervisor as yourself. Find a

different

project. Your present supervisor have no idea what he or she is

doing.

Rune

Rune Allnor <allnor@tele.ntnu.no> wrote in message <dcc5709a-078e-4fba-a342-a902afb5e00c@8g2000yqz.googlegroups.com>...

> On 24 apr, 18:04, "EE Student " <n...@cec.wustl.edu> wrote:

>

> > Rune,

> >

> > Thank you for taking the time to reply, but forgetting it is not an option, nor is it good advice. I do not agree with you analogy of the thermometer as it does not pertain to the sort of analysis I am doing( even though measuring temperature is one of my goals). As I stated above, piece of tissue is heated, the cells that make up that tissue will expand based on the material properties.

>

> You are a student, which is a different way to state that you have no

> idea

> what you are talking about.

>

> The reason why no systems exist to do what you want, is that what you

> want

> can not be done. At least not the way you want to do it. The

> *experienced*

> engineers are able to break the task down in sub-tasks, which I did

> with

> the thermometer example.

>

> The best you can do with ultrasound is to measure time delay of

> reflections.

> You can *not* explayn what *causes* that time delay: The basic idea is

> expressed

> as

>

> t = c(T)*v(T)*L(T)*w(T)

>

> where

>

> t is the time delay

> T is the temperature

> c(T) is the speed of sound at temperature T

> v(T) is some correction to c(T) comared to some reference temperature

> L(T) is the length of the sample at temperature T

> w(T) is some correction to L(T) compared to some refence temperature

>

> Since both c(T) and L(T) depend on T, you are unable to measure T.

>

> This is a classic mistake made by novices and amateurs - the

> characteristic

> applies just as much to your tutour / supervisor as yourself. Find a

> different

> project. Your present supervisor have no idea what he or she is

> doing.

>

> Rune

Rune,

Once again I will thank you for taking the time but I still think you are misguided. Or at least your mathematical expression is not representative of what I am trying to do.

MAthematically what is happening is this:

axial depth is = z

the apparent time shifts I am mesaureing at depth z will be t(z) - t0(z) = td(z)

thermal expansion at depth z = alpha(z)

temperature at depth z = T(z)

intital temerature before heating T0 (also the edged of the sample are kept at this temperture in the lab)

speed of sound is a function of tempertature T and depth z = c(z,T(z))

td(z) = 2 * int((1+alpha(z)*(T(z) - T0))/(c(z,T(z)) - 1/c(z,T0))dz from 0 to z

differentiating this with respect to z

d(td(z))/dz = 2*((1+alpha(z)*(T(z) - T0))/(c(z,T(z)) - 1/c(z,T0))

*note this should be a partial derivative on the left but I cant make that character

making a reasonable assumption that the SOS is linear with the temperture range of interest:

c(z,T(z)) = c0(z)*(1+beta(z)(T(z) - T0)) where c0(z) is the mean SOS in the material at T0, and beta(z) = 1/(c0(z) * d(c(z,T0)/dT

* again the derivative on the right here ahould be a partial

the change in temperature T(z) - T0 I will now call delta_T(z)

delta_T(z) = c0(z)/(2*(alpha(z) - beta(z)) * d(td(z))/dz

*the derivative on the right is still a partial

since delta_T(z) = T(z) -T0, the temperature at depth z, T(z) is

T(z) = c0(z)/(2*(alpha(z) - beta(z)) * d(td(z))/dz + T0

In homogenous materials where we can assume c0(z)/(2*(alpha(z) - beta(z)) = k; where k is some constant due to the materials properties and being homogeneous. Using phantom simualtions or consistant samples such as tofu, I can produce a temperture map based on this equation where I follow the process of estimiateing the time shifts from fram to frame, sum the shifts, filter axially and laterally, differentiate the axial, and scale by k*c0/2. These tempertaure maps are acurate when compared to thermal couple readings. In actual animal tissue where the k parameter cannot be as easily asummed to be constant I am having more difficultl, which is why I was looking for alternative ideas to the processing I am currently doing. Finally I will say just because you dont see a relationship between what is going on doesnt mean there isnt one, close mindedness is the enemy of scietific

discovery.

On 24 apr, 19:10, "EE Student " <n...@cec.wustl.edu> wrote:

> Finally I will say just because you dont see a relationship between what is going on doesnt mean there isnt one, close mindedness is the enemy of scietific

> discovery.

The enemy of scientific discovery is not to use the basic facts.

You should have learned some time around age 12 that one can not

use *one* equation to solve for *two* variables.

In the equation

t = L/c

the only one known factor is the time delaty t. You can use

knowledge or assumptions about *either* c *or* L to infer

something about the other, but not both at the same time.

Of course, 'the open mind' is the incompetent's, the amateur's

and the idiot's defence for not knowing the basics, nor being

able to set up a logical chain of causes and effects.

Rune

Rune Allnor <allnor@tele.ntnu.no> wrote in message <6fa630aa-97fb-4081-a295-42ffeef8b28a@r18g2000yqd.googlegroups.com>...

> On 24 apr, 19:10, "EE Student " <n...@cec.wustl.edu> wrote:

> > Finally I will say just because you dont see a relationship between what is going on doesnt mean there isnt one, close mindedness is the enemy of scietific

> > discovery.

>

> The enemy of scientific discovery is not to use the basic facts.

> You should have learned some time around age 12 that one can not

> use *one* equation to solve for *two* variables.

>

> In the equation

>

> t = L/c

>

> the only one known factor is the time delaty t. You can use

> knowledge or assumptions about *either* c *or* L to infer

> something about the other, but not both at the same time.

>

> Of course, 'the open mind' is the incompetent's, the amateur's

> and the idiot's defence for not knowing the basics, nor being

> able to set up a logical chain of causes and effects.

>

> Rune

Rune,

If you look at the equations carefully, all are functions of depth, known properties of materials, known (within a range of temperatures and based on the medium) speed of sound, and Temperature which again is a known range. Knowing the boundry values, the depth z based on the sampling frequency, and matrial properties should be enough to yield a solution. As I stated I have reached a solution in phantoms and homogeneous mediums. Perhaps the non-homogeneous tissue is too complex and I need to revisit the approach. But in your expression:

t=L/c

we know that L,the length of propegation, is equal to L + dL where dL is the volumetric change of the tissue due to thermal expansion at depth z, alpha(z), so L is therefore (1+alpha(z))*delta_T(z)

c can be assumed to be linear (or very close to it) in the temperature range I am studying, that is c(z,T(z)) = c0(z)*(1+beta(z)*delta_T(z)) where c0(z) is the mean SOS in the medium which is known, for example in water at 20*C is roughly 1.48 mm/us and beta(z)= 1/(c0(z) * d(c(z,T0)/dT The tough part comes in animal tissue where you might have muscle tissue infused with blood vessels, fat, and other tihngs that will cause the SOS to deviate from its relatively lenear characteristic within the temperature range.

With this known information, a solution can be reached. Papers have been published on the topic, I have confirmed the result using my own methods on homogeneous mediums and phantoms.

Now why do you feel it necessary to insult me, my advisor, and my work? I came to this site posting a reasonable request for a discussion of ideas and/or alternative solutions to a problem I have been working on for a while. I Presented the backrund of my work and results to make sure everyone knew I was not trying to get someone to just do my work for me or give me an answer. You did not try and provide any real insight into possible ways to improve the algorithm, techniques to get around the filter/differentiaing problem I have encountered or anthinf remotely constructive. Instead you degrade. What is your background, or what have you done that gives you such authoity to discredit countless numbers of PhDs who have shown that this is indeed a viable solution and are working on ways to improve it?

On 24 apr, 19:58, "EE Student " <n...@cec.wustl.edu> wrote:

> Now why do you feel it necessary to insult me, my advisor, and my work?

There are no insults. You don't know what you are doing; you don't

see the trees for the forest (or vice versa); you are unable to

use the most basic arguments and principles: One can not use *one*

measurement to solve for *two* variables.

Rune

You can think of your watch list as threads that you have bookmarked.

You can add tags, authors, threads, and even search results to your watch list. This way you can easily keep track of topics that you're interested in. To view your watch list, click on the "My Newsreader" link.

To add items to your watch list, click the "add to watch list" link at the bottom of any page.

To add search criteria to your watch list, search for the desired term in the search box. Click on the "Add this search to my watch list" link on the search results page.

You can also add a tag to your watch list by searching for the tag with the directive "tag:tag_name" where tag_name is the name of the tag you would like to watch.

To add an author to your watch list, go to the author's profile page and click on the "Add this author to my watch list" link at the top of the page. You can also add an author to your watch list by going to a thread that the author has posted to and clicking on the "Add this author to my watch list" link. You will be notified whenever the author makes a post.

To add a thread to your watch list, go to the thread page and click the "Add this thread to my watch list" link at the top of the page.

A tag is like a keyword or category label associated with each thread. Tags make it easier for you to find threads of interest.

Anyone can tag a thread. Tags are public and visible to everyone.

The newsgroups are a worldwide forum that is open to everyone. Newsgroups are used to discuss a huge range of topics, make announcements, and trade files.

Discussions are threaded, or grouped in a way that allows you to read a posted message and all of its replies in chronological order. This makes it easy to follow the thread of the conversation, and to see what’s already been said before you post your own reply or make a new posting.

Newsgroup content is distributed by servers hosted by various organizations on the Internet. Messages are exchanged and managed using open-standard protocols. No single entity “owns” the newsgroups.

There are thousands of newsgroups, each addressing a single topic or area of interest. The MATLAB Central Newsreader posts and displays messages in the comp.soft-sys.matlab newsgroup.

**MATLAB Central**

You can use the integrated newsreader at the MATLAB Central website to read and post messages in this newsgroup. MATLAB Central is hosted by MathWorks.

Messages posted through the MATLAB Central Newsreader are seen by everyone using the newsgroups, regardless of how they access the newsgroups. There are several advantages to using MATLAB Central.

**One Account**

Your MATLAB Central account is tied to your MathWorks Account for easy access.

**Use the Email Address of Your Choice**

The MATLAB Central Newsreader allows you to define an alternative email address as your posting address, avoiding clutter in your primary mailbox and reducing spam.

**Spam Control**

Most newsgroup spam is filtered out by the MATLAB Central Newsreader.

**Tagging**

Messages can be tagged with a relevant label by any signed-in user. Tags can be used as keywords to find particular files of interest, or as a way to categorize your bookmarked postings. You may choose to allow others to view your tags, and you can view or search others’ tags as well as those of the community at large. Tagging provides a way to see both the big trends and the smaller, more obscure ideas and applications.

**Watch lists**

Setting up watch lists allows you to be notified of updates made to postings selected by author, thread, or any search variable. Your watch list notifications can be sent by email (daily digest or immediate), displayed in My Newsreader, or sent via RSS feed.

- Use a newsreader through your school, employer, or internet service provider
- Pay for newsgroup access from a commercial provider
- Use Google Groups
- Mathforum.org provides a newsreader with access to the comp.soft sys.matlab newsgroup
- Run your own server. For typical instructions, see: http://www.slyck.com/ng.php?page=2