Resistive attenuator pad calculator
This resistive attenuator pad calculator finds the three resistor values for a symmetric matched pi or tee network.
Run — free
Enter the attenuation in decibels, the common source and load impedance, and the topology you intend to build. The result reports the voltage ratio and labels every resistor by its physical position in the signal path. It is suitable for ideal passive pads where both ports use the same real impedance and ordinary resistance is the intended element.
Choose the topology and define the matching impedance
A matched resistive pad reduces a signal while presenting the intended impedance at both ports when the opposite port is terminated correctly. Begin by choosing pi or tee. A pi network places a shunt resistor from the input to ground, a series resistor in the signal path, and another shunt resistor from the output to ground. A tee network places a series resistor at the input, a shunt resistor from the center junction to ground, and another series resistor at the output. Either network can produce the same ideal attenuation and match when calculated for the same impedance. The practical choice often depends on available resistor values, desired current distribution, board layout, and whether very small series values or very large shunt values would be awkward. Enter the real reference impedance shared by the source and load, such as the nominal impedance of a measurement system or transmission path. Do not enter two different impedances: these equations intentionally solve only a symmetric pad with equal terminations. The returned layout text identifies the order of all three components to prevent a pi result from being wired as a tee result.
Understand attenuation, ratios, and resistor placement
Attenuation is entered as a positive decibel value. The calculator converts it to the voltage ratio K using K = 10 raised to attenuation divided by 20. For a pi pad, the two equal outside resistors are shunt elements and the middle resistor is the series element. For a tee pad, the two equal outside resistors are series elements and the middle resistor is the shunt element. The reported resistor numbers follow the signal path from input to output, while the layout field states which ones connect to ground. This distinction matters because the three numeric positions alone do not describe the circuit. The formulas assume an ideal, purely resistive source and load at the selected impedance. They also assume the pad is terminated as designed; measuring an unloaded pad with a high-impedance meter does not reproduce the specified insertion loss. Precision controls only the decimal places shown in the response. It does not imply that a physical resistor exists at that exact value or that the final circuit will achieve that many digits of accuracy. Keep enough displayed digits for component selection, then assess standard values and tolerances separately.
Turn ideal values into a reliable physical attenuator
The calculated values are an electrical starting point, not a complete power or radio-frequency design. Select real components by considering resistance tolerance, temperature coefficient, voltage rating, and power dissipation. Attenuator resistors convert removed signal energy into heat, and the dissipation is not always equal in all three parts. Calculate worst-case resistor power from the actual source level and termination before building the pad, then apply suitable derating. At higher frequencies, component packages, pads, vias, grounding, and traces contribute parasitic inductance and capacitance. Those effects can change both attenuation and return loss even when a handheld meter confirms the direct-current resistance. Use an appropriate layout and verify the assembled network with suitable test equipment across the required bandwidth. If exact ideal values are unavailable, a series or parallel combination can improve the match, or nearby preferred values can be evaluated with a circuit simulator. The calculator does not select an E-series value or compensate one resistor after rounding another. It returns the mathematically matched solution so that any later compromise remains visible and deliberate. Browser calculation is free; automated API use costs $0.002 per request.
What you can do with it
Build a measurement pad
Calculate a matched attenuator for a signal generator, receiver, or instrument path that uses a common real impedance.
Compare pi and tee implementations
Generate both topologies for the same loss and impedance, then choose the resistor distribution that best suits available parts and layout.
Prepare a circuit simulation
Use the ideal values as a baseline before substituting preferred resistor values and checking insertion loss, match, tolerance, and power.
FAQ
What does the calculator cost?
It is free to run in your browser. API calculation costs $0.002 per request.
Are the source and load impedances allowed to differ?
No. This capability calculates a symmetric matched pad for one impedance used at both ports.
Why must attenuation be greater than zero?
At exactly zero decibels an ideal pad becomes a direct connection: some resistor formulas approach zero and others approach infinity, so a finite three-resistor network is not defined.
Does the result include resistor power ratings?
No. Power depends on the applied signal level as well as the network. Calculate dissipation for the actual operating conditions and derate the selected components.
Will these values work at radio frequencies?
The equations remain the ideal target, but physical parasitics and layout can change attenuation and impedance match. Verify the finished pad across the intended frequency range.
How are resistor positions numbered?
They are ordered from input to output. The layout field explains whether each position is a series element or a shunt connection to ground.
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/elec/resistive-attenuator \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"topology":"pi","attenuation_db":6,"impedance_ohms":50}'const res = await fetch("https://api.kit.forhosting.com/elec/resistive-attenuator", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"topology": "pi",
"attenuation_db": 6,
"impedance_ohms": 50
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/elec/resistive-attenuator",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"topology": "pi",
"attenuation_db": 6,
"impedance_ohms": 50
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/elec/resistive-attenuator", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"topology":"pi","attenuation_db":6,"impedance_ohms":50}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"topology":"pi","attenuation_db":6,"impedance_ohms":50}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/elec/resistive-attenuator", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"topology": "pi",
"attenuation_db": 6,
"impedance_ohms": 50
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "elec.resistive_attenuator",
"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. |