Ultrasound Doppler frequency shift calculator
This ultrasound Doppler frequency shift calculator finds the signed frequency change produced when an ultrasound wave reflects from a moving target.
Run — free
It applies the standard low-velocity approximation, delta f = 2 f0 v cos(theta) / c. The factor of two represents the outward trip from the transducer to the target and the return trip of the echo. Enter the transmitted frequency, target velocity, propagation speed, and beam angle to obtain the shift, its magnitude, and the approximate reflected frequency.
Why a reflected ultrasound echo has a double Doppler shift
A reflected ultrasound measurement differs from the familiar one-way example of a listener hearing a moving source. First, the moving target encounters the incident wave at a changed rate. The target then behaves like a moving reflector that sends an echo back toward the transducer, introducing a second change. Under the usual approximation that target speed is much smaller than sound speed, those changes combine into delta f = 2 f0 v cos(theta) / c. Here f0 is the transmitted frequency, v is signed target speed, theta is the angle between the beam and motion, and c is propagation speed in the medium. The explicit factor of two is therefore essential: omitting it models only one leg of the journey and gives half the expected reflected shift. Positive velocity means the target moves toward the transducer, so the returned frequency rises. Negative velocity means motion away and produces a negative shift. The calculator also reports the absolute magnitude for instruments or reports concerned with shift size rather than direction. This formula is an engineering approximation for coherent reflection from a target whose speed is small relative to c; it is not the exact relativistic Doppler equation and does not model a distributed spectrum of scatterers.
Choose frequency, speed, velocity, and angle consistently
Supply frequency in hertz and both velocity and wave speed in meters per second. The default wave speed is 1540 m/s, a common nominal value for soft tissue, but real propagation speed depends on the material and conditions, so replace it when a better measured or specified value is available. Velocity is signed: use a positive value for motion toward the transducer and a negative value for motion away. The angle is measured between the ultrasound beam and the target's velocity direction. At zero degrees, cosine is one and the full axial velocity contributes to the shift. At sixty degrees, only half the speed contributes. At ninety degrees, the ideal axial component is zero, so the calculated shift is zero apart from floating-point rounding. The accepted angle range is zero through ninety degrees to keep this direction convention unambiguous. The result includes beam_velocity_m_s, which is v cos(theta), so you can inspect the projected component before trusting the final frequency. It also includes reflected_frequency_hz, calculated as transmitted frequency plus the signed shift. Keep all values in the stated units; the calculator does not infer megahertz labels or convert centimeters per second automatically. For example, enter 5 MHz as 5000000 Hz.
Interpret the result and understand the model limits
The main output, doppler_shift_hz, preserves direction. A positive number indicates an echo above the transmitted frequency, while a negative number indicates an echo below it. shift_magnitude_hz removes the sign for bandwidth planning and comparisons. direction summarizes the same information as toward, away, or stationary_or_perpendicular, and round_trip_factor confirms that the reflection model used both paths. The calculation is deterministic and uses no network service, random source, or clock, so identical inputs return identical rounded JSON in the browser and API. A successful API request costs $0.002; validation failures do not represent a valid calculation. Treat the result as the ideal Doppler shift of a single velocity component. Practical medical or nondestructive-testing instruments may observe a range of shifts because their sample contains many scatterers, a finite beam width, spectral broadening, refraction, attenuation, noise, and uncertain angle. Angle error becomes especially important near ninety degrees because cosine changes the projected velocity strongly relative to its small value. The calculator does not estimate blood-flow volume, diagnose disease, correct aliasing, choose pulse repetition frequency, or replace calibrated equipment. It is best used to verify equations, prepare test fixtures, estimate instrument bandwidth, and check whether a reported shift is consistent with known frequency, geometry, speed, and propagation conditions.
What you can do with it
Check a medical ultrasound exercise
Verify the ideal shift for a stated transducer frequency, blood velocity, tissue sound speed, and insonation angle while preserving the motion sign.
Estimate nondestructive testing echoes
Calculate the expected reflected frequency change from a moving boundary or target in a material with a known acoustic propagation speed.
Build deterministic signal-processing fixtures
Generate stable expected shifts for unit tests that validate demodulation, direction labels, angle correction, or bandwidth thresholds.
FAQ
Why is there a factor of two in the ultrasound Doppler formula?
The target experiences a Doppler change on the incident path and the transducer receives another change on the reflected path. For target speeds much smaller than sound speed, the two contributions combine into the factor of two.
What sign should target velocity have?
Use positive velocity when the target moves toward the transducer and negative velocity when it moves away. The returned Doppler shift uses the same sign.
What does the Doppler angle mean?
It is the angle between the ultrasound beam and the target velocity direction. The calculator uses the axial component v cos(theta), with zero degrees giving the maximum shift and ninety degrees giving zero ideal shift.
What sound speed should I use for soft tissue?
The default is 1540 m/s, a common nominal approximation. Use a measured or application-specific propagation speed when accuracy requires it.
Can I enter the transmitted frequency in megahertz?
Convert it to hertz first. For example, enter 5 MHz as 5000000. The output shift and reflected frequency are then reported in hertz.
How much does the calculator cost?
It runs free in the browser. Each successful API request costs $0.002.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/optics/ultrasound-doppler-shift \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"frequency":5000000,"velocity":0.5}'const res = await fetch("https://api.kit.forhosting.com/optics/ultrasound-doppler-shift", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"frequency": 5000000,
"velocity": 0.5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/optics/ultrasound-doppler-shift",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"frequency": 5000000,
"velocity": 0.5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/optics/ultrasound-doppler-shift", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"frequency":5000000,"velocity":0.5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"frequency":5000000,"velocity":0.5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/optics/ultrasound-doppler-shift", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"frequency": 5000000,
"velocity": 0.5
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "optics.ultrasound_doppler_shift",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |