Opens in a new tab

Starlink and stealth aircraft: what passive radar can and can’t do

This week, a simulation showing how the stealth aircraft F-117 and an ordinary fighter, the F-15, would look on radar from space has been making the rounds on X. The comments underneath claim that the era of stealth aircraft is over, and that Starlink is to blame.

But is that true?

What actually happened

The images were calculated by a physicist who posts on X as A Weird Physicist. They’re computer simulations, not images from SpaceX satellites.

The simulations also use a frequency of 35 GHz. Starlink transmits at a lower frequency, around 11 to 12 GHz, and that’s the frequency used for the rest of this article.

The author refers to Starshield, SpaceX’s program for government and defense customers. But SpaceX has never claimed that Starshield searches for stealth aircraft.

It is true, though, that Starlink can be used to detect aircraft. Its signal can be used for passive radar. And that principle is more than 80 years old.

How passive radar works

A conventional radar sends out a pulse and waits for the reflection. But that gives away its location.

Passive radar doesn’t transmit anything. It listens to a signal that’s already in the air: radio, TV, a mobile network, or Starlink. One antenna picks up the signal directly from the transmitter; another picks up that same signal after it reflects off an aircraft. The reflected signal takes a detour, so it arrives a little later.

The delay tells you how much farther the reflected signal traveled. But that alone doesn’t tell you the aircraft’s position – you need another measurement or more receivers for that.

This is nothing new. During World War II, the Germans built the Klein Heidelberg passive radar, which used signals from British radar stations.

Why stealth isn’t enough against passive radar

A stealth aircraft isn’t invisible. It’s designed to reflect radar signals away, rather than back toward the radar. That works against conventional radar because the transmitter and receiver are in the same place.

With passive radar, the receiver is somewhere else. The reflected signal can end up hitting it.

The most interesting moment is when an aircraft flies directly between the satellite and the receiver. For a moment, it blocks the signal path, and the receiver records its shadow – a tiny drop in signal strength. The shadow’s shape depends less on the aircraft’s design than a reflection does; its overall size matters more.

But the shadow is narrow. In a simplified model, at a fighter’s altitude of 10 km it’s only about 20 meters wide, and the aircraft passes through it in roughly a tenth of a second. Outside the shadow, the stealth aircraft is hard for the receiver to see again.

You may have read that Starlink offers resolution of around 1 m. That applies to the distance of a reflection, not to an aircraft’s position. And it barely works in the shadow.

Try it yourself

In the simulator, there’s a Starlink satellite at the top, a receiver below, and a dashed line between them. The orange wedge around the line is the shadow cast by an aircraft as it crosses the signal path.

function LT(t){return t.split(String.fromCharCode(1)).join(String.fromCharCode(60))}(function(){var t=’:host{display:block!important;width:100%!important;margin:28px 0!important;padding:0!important;border:0!important;background:none!important;letter-spacing:normal!important;word-spacing:normal!important;line-height:1.5!important;font-size:15px!important;font-style:normal!important;font-weight:400!important;text-transform:none!important;text-align:left!important;text-indent:0!important;white-space:normal!important}#chtpPr{–chtp-acc:#0b84f3;–chtp-acc2:#ff7a18;–chtp-ok:#1f9d55;–chtp-warn:#d6336c;–chtp-tgt:#f0a202;–chtp-line:rgba(127,127,127,.30);–chtp-line:color-mix(in srgb,currentColor 22%,transparent);–chtp-panel:rgba(127,127,127,.09);–chtp-panel:color-mix(in srgb,currentColor 7%,transparent);–chtp-mut:rgba(127,127,127,1);–chtp-mut:color-mix(in srgb,currentColor 62%,transparent);}#chtpPr,#chtpPr *{box-sizing:border-box;margin:0;padding:0;border:0;letter-spacing:normal;word-spacing:normal;text-transform:none;text-indent:0;font-style:normal}#chtpPr{display:block !important;color:inherit !important;font-family:-apple-system,BlinkMacSystemFont,”Segoe UI”,Roboto,”Helvetica Neue”,Arial,sans-serif !important;font-size:15px !important;line-height:1.5 !important;font-weight:400 !important;text-align:left !important;width:100% !important;max-width:100% !important;margin:0 !important;padding:16px !important;overflow:hidden !important;background:var(–chtp-panel) !important;border:1px solid var(–chtp-line) !important;border-radius:12px !important;contain:layout !important;}#chtpPr .chtp-t{font-size:19px !important;font-weight:700 !important;line-height:1.25 !important;margin:0 0 5px !important;color:inherit !important;}#chtpPr .chtp-s{font-size:13.5px !important;line-height:1.45 !important;color:var(–chtp-mut) !important;margin:0 0 14px !important;}#chtpPr .chtp-g{margin:0 0 11px !important;}#chtpPr .chtp-l{display:block !important;font-size:11px !important;font-weight:700 !important;letter-spacing:.07em !important;text-transform:uppercase !important;color:var(–chtp-mut) !important;margin:0 0 6px !important;}#chtpPr .chtp-row{display:flex !important;flex-wrap:wrap !important;gap:6px !important;}#chtpPr button.chtp-b{display:inline-block !important;appearance:none !important;-webkit-appearance:none !important;font-family:inherit !important;font-size:13px !important;font-weight:600 !important;line-height:1.2 !important;color:inherit !important;background:var(–chtp-panel) !important;border:1px solid var(–chtp-line) !important;border-radius:999px !important;padding:8px 14px !important;cursor:pointer !important;text-align:center !important;min-height:0 !important;height:auto !important;width:auto !important;letter-spacing:normal !important;}#chtpPr button.chtp-b.chtp-on{background:var(–chtp-acc) !important;border-color:var(–chtp-acc) !important;color:#fff !important;}#chtpPr button.chtp-go{display:block !important;appearance:none !important;-webkit-appearance:none !important;width:100% !important;font-family:inherit !important;font-size:15px !important;font-weight:700 !important;color:#fff !important;background:var(–chtp-acc2) !important;border:0 !important;border-radius:9px !important;padding:13px !important;margin:0 0 12px !important;cursor:pointer !important;line-height:1.2 !important;}#chtpPr .chtp-stage{display:block !important;width:100% !important;margin:0 0 7px !important;border:1px solid var(–chtp-line) !important;border-radius:10px !important;overflow:hidden !important;touch-action:none !important;background:var(–chtp-panel) !important;}#chtpPr svg{display:block !important;width:100% !important;height:auto !important;max-width:100% !important;}#chtpPr .chtp-hint{font-size:12px !important;color:var(–chtp-mut) !important;text-align:center !important;margin:0 0 14px !important;}#chtpPr .chtp-mw{margin:0 0 12px !important;}#chtpPr .chtp-mh{display:flex !important;justify-content:space-between !important;align-items:baseline !important;gap:10px !important;margin:0 0 5px !important;}#chtpPr .chtp-mh b{font-size:11px !important;font-weight:700 !important;letter-spacing:.07em !important;text-transform:uppercase !important;color:var(–chtp-mut) !important;}#chtpPr .chtp-mh i{font-size:14px !important;font-weight:700 !important;color:var(–chtp-acc2) !important;font-variant-numeric:tabular-nums !important;min-width:74px !important;text-align:right !important;}#chtpPr .chtp-bar{display:block !important;height:12px !important;background:var(–chtp-panel) !important;border:1px solid var(–chtp-line) !important;border-radius:999px !important;overflow:hidden !important;}#chtpPr .chtp-bar i{display:block !important;height:100% !important;width:0 !important;background:var(–chtp-acc2) !important;border-radius:999px !important;}#chtpPr .chtp-out{display:grid !important;grid-template-columns:repeat(3,minmax(0,1fr)) !important;gap:8px !important;margin:0 0 12px !important;}#chtpPr .chtp-c{display:block !important;background:var(–chtp-panel) !important;border:1px solid var(–chtp-line) !important;border-radius:9px !important;padding:9px 11px !important;min-height:74px !important;overflow:hidden !important;}#chtpPr .chtp-c u{display:block !important;text-decoration:none !important;font-size:10.5px !important;font-weight:700 !important;letter-spacing:.05em !important;text-transform:uppercase !important;color:var(–chtp-mut) !important;line-height:1.3 !important;margin:0 0 4px !important;}#chtpPr .chtp-c b{display:block !important;font-size:18px !important;font-weight:700 !important;line-height:1.15 !important;color:inherit !important;font-variant-numeric:tabular-nums !important;white-space:nowrap !important;overflow:hidden !important;text-overflow:ellipsis !important;}#chtpPr .chtp-c i{display:block !important;font-size:11.5px !important;font-weight:600 !important;color:var(–chtp-mut) !important;line-height:1.3 !important;margin:3px 0 0 !important;white-space:nowrap !important;overflow:hidden !important;text-overflow:ellipsis !important;}#chtpPr .chtp-v{display:block !important;background:var(–chtp-panel) !important;border:1px solid var(–chtp-line) !important;border-left:4px solid var(–chtp-line) !important;border-radius:9px !important;padding:11px 13px !important;margin:0 0 12px !important;font-size:13.5px !important;line-height:1.45 !important;min-height:76px !important;color:inherit !important;}#chtpPr .chtp-v b{font-weight:700 !important;color:inherit !important;}#chtpPr .chtp-n{font-size:12px !important;line-height:1.55 !important;color:var(–chtp-mut) !important;border-top:1px solid var(–chtp-line) !important;padding:11px 0 0 !important;margin:0 !important;}#chtpPr .chtp-n b{color:inherit !important;font-weight:700 !important}@media (max-width:600px){#chtpPr{padding:13px !important;}#chtpPr .chtp-t{font-size:17px !important;}#chtpPr .chtp-out{grid-template-columns:1fr !important;gap:6px !important;}#chtpPr .chtp-c{display:flex !important;align-items:center !important;justify-content:space-between !important;gap:10px !important;min-height:52px !important;padding:8px 11px !important;}#chtpPr .chtp-c u{margin:0 !important;flex:1 1 auto !important;}#chtpPr .chtp-c span{display:block !important;flex:0 0 auto !important;text-align:right !important;max-width:58% !important;}#chtpPr .chtp-c b{font-size:16px !important;}#chtpPr .chtp-c i{margin:1px 0 0 !important;}#chtpPr .chtp-v{min-height:96px !important;}}’,n=LT(‘div id=”chtpPr” class=”chtp-pr”>p class=”chtp-t”>When is a stealth aircraft visible?/p>p class=”chtp-s”>A Starlink satellite at the top (Ku band, 2.6 cm wavelength), and a receiver on the ground below that transmits nothing and only listens. Try flying an aircraft across the direct line between them./p>div class=”chtp-g”>span class=”chtp-l”>Aircraft/span>span class=”chtp-row” id=”chtpTgt”>/span>/div>button type=”button” class=”chtp-go” id=”chtpGo”>Start flyby/button>div class=”chtp-stage” id=”chtpStage”>svg id=”chtpSvg” viewBox=”0 0 680 400″ xmlns=”http://www.w3.org/2000/svg” role=”img” aria-label=”Side view: Starlink satellite, aircraft, and ground receiver”>g id=”chtpBg”>/g>path id=”chtpBeam”>/path>text id=”chtpBeamL”>/text>path id=”chtpCor”>/path>line id=”chtpLos”>/line>line id=”chtpP1″>/line>line id=”chtpP2″>/line>g id=”chtpTxG”>/g>g id=”chtpRxG”>/g>g id=”chtpTgG”>/g>text id=”chtpCorL”>/text>/svg>/div>p class=”chtp-hint”>Drag the aircraft with your finger or mouse./p>div class=”chtp-mw”>span class=”chtp-mh”>b>Shadow strength in the model/b>i id=”chtpPct”> /i>/span>span class=”chtp-bar”>i id=”chtpBar”>/i>/span>/div>div class=”chtp-out”>div class=”chtp-c”>u>Shadow strength (illustrative metric)/u>span>b id=”chtpSize”> /b>i id=”chtpSizeU”> /i>/span>/div>div class=”chtp-c”>u>Compared with ordinary radar/u>span>b id=”chtpGain”> /b>i>stronger than a typical reflection/i>/span>/div>div class=”chtp-c”>u>How long it lasts/u>span>b id=”chtpTime”> /b>i>inside the shadow zone/i>/span>/div>/div>div class=”chtp-v” id=”chtpVerd”>/div>p class=”chtp-n”>b>Why it works this way./b> A stealth aircraft isn’t invisible. It reflects the signal away instead of back toward the radar. But when an aircraft flies directly across the line between the satellite and receiver, the receiver detects the shadow it casts in the signal, not a reflection. For an object much larger than the wavelength, the shadow’s strength and width depend mainly on its silhouette. Shape, orientation, edges, material, and polarization also matter; how much depends on the specific aircraft and geometry. The model uses only a simplified silhouette, so its numbers apply only to its assumptions. The shadow is narrow: its width increases with distance from the receiver and wavelength (2.6 cm for Starlink), and decreases as the object gets larger. That’s why a fighter’s shadow at 10 km altitude is only about 20 m wide. A drone’s shadow spreads at a wider angle because a small object diffracts the wave more, much as light spreads out just beyond a pinhead. But the drone is only 160 m from the receiver, so its shadow is still only about 11 m wide. The scene is also zoomed in for the drone. b>What the numbers mean./b> The simulator expresses shadow strength using an illustrative metric in m²: the area of an ideal reflector that would change the signal at the receiver by the same amount. It’s not the aircraft’s size or a measured radar cross-section (RCS). Detecting the shadow means detecting a change in the direct signal, not a reflection from the target. The modeled shadow effect is huge, but the receiver would have to detect a tiny drop in a much stronger direct signal from the satellite, so the actual chance of detection is far lower than the number suggests. The satellite doesn’t illuminate the ground with a narrow beam: its beam covers an estimated 15 km-wide area on the ground (the blue cone, not to scale). The dashed line shows only the signal path to a particular receiver. The simulator assumes a satellite 550 km above the ground and 50° above the horizon; the satellite’s height and the sizes in the scene are not to scale. These are order-of-magnitude teaching-model values, not calculations for a specific system./p>/div>’);var i=document.getElementById(“chtp-pasivni-radar”);if(!i||i.shadowRoot)return;var e=i.attachShadow({mode:”open”});e.innerHTML=LT(“style>”)+t+LT(“/style>”)+n;var a=e.getElementById(“chtpPr”);var r=299792458,o=”http://www.w3.org/2000/svg”;var p=r/117e8;var c=50*Math.PI/180;var m=550/Math.sin(c);var l={x:-m*Math.cos(c),z:m*Math.sin(c)};var h={x:-Math.cos(c),z:Math.sin(c)};var s=560,d=370;var u=[{n:”Stealth fighter”,A:30,L:16,m:.025,v:900,alt:10,ic:”jet”},{n:”Airliner”,A:140,L:38,m:50,v:850,alt:11,ic:”jet”},{n:”Small drone”,A:.06,L:.35,m:.01,v:50,alt:.12,ic:”drone”}];var x=0,v=1,f={x:0,z:0},g=null,b=0,k=false,y=0;var w=e.getElementById(“chtpSvg”),z=null;function j(t){return e.getElementById(t)}function M(t){return getComputedStyle(a).getPropertyValue(t).trim()||”#888″}function C(t,n,i){var e=document.createElementNS(o,t),a=””;for(var r in n)e.setAttribute(r,n[r]);for(var p in i)a+=p+”:”+i[p]+” !important;”;if(a)e.setAttribute(“style”,a);return e}function P(t,n){var i=””;for(var e in n)i+=e+”:”+n[e]+” !important;”;t.setAttribute(“style”,i)}function L(t){return s+t*v}function A(t){return d-t*v}function S(t){return t*h.x/h.z}function F(){v=(d-110)/u[x].alt}function T(){f.z=u[x].alt;f.x=S(f.z)-70/v}function B(t,n){var i=u[x];var e=t-l.x,a=n-l.z,r=-t,o=-n;var c=Math.atan2(Math.abs(e*o-a*r),e*r+a*o);var s=Math.hypot(t,n);var d=p/i.L;var v=4*Math.PI*i.A*i.A/(p*p);var f=Math.PI*i.L*Math.sin(c)/p;var g=Math.exp(-.3587*f*f);var b=i.m+v*g;var k=n/h.z;var y=d/2*m*k/(m+k)*1e3;return{s:b,dB:10*Math.log10(b/i.m),psi:c,lobe:d,max:10*Math.log10((i.m+v)/i.m),half:y,b:s}}function E(t,n){return t.toLocaleString(“en-US”,{minimumFractionDigits:n||0,maximumFractionDigits:n||0})}function G(t){return.05>t?t.toFixed(3).replace(“.”, “.”)+” m²”:.6>t?t.toFixed(2).replace(“.”, “.”)+” m²”:4>t?t.toFixed(1).replace(“.”, “.”)+” m²”:1e5>t?E(t)+” m²”:(t/1e6).toFixed(1e7>t?2:1e8>t?1:0).replace(“.”, “.”)+” km²”}function Z(t){var n=Math.pow(10,t/10);if(2>n)return”1×”;if(1e3>n)return Math.round(n)+”×”;if(1e6>n)return E(n/1e3)+” thousand×”;if(1e9>n)return E(n/1e6)+” million×”;return E(n/1e9)+” billion×”}function N(t){if(1>t)return Math.round(t*1e3)+” ms”;if(90>t)return t.toFixed(1).replace(“.”, “.”)+” s”;return(t/60).toFixed(1).replace(“.”, “.”)+” min”}function D(t){if(1>t)return Math.round(t*100)+” cm”;if(1e3>t)return(10>t?t.toFixed(1).replace(“.”, “.”):Math.round(t))+” m”;return(t/1e3).toFixed(1e4>t?1:0).replace(“.”, “.”)+” km”}function V(){var t=j(“chtpBg”);t.innerHTML=””;var n=M(“–chtp-mut”);t.appendChild(C(“line”,{x1:0,y1:d,x2:680,y2:d},{stroke:n,”stroke-width”:”2″}));var i=C(“text”,{x:12,y:d+20},{fill:n,”font-size”:”11px”,”font-weight”:”600″,”font-family”:”inherit”});i.textContent=”ground”;t.appendChild(i);var e=[.01,.02,.05,.1,.2,.5,1,2,5],a=e[0];for(var r=0;e.length>r;r++){if(120>=e[r]*v)a=e[r]}var o=a*v,p=60,c=d+20;t.appendChild(C(“line”,{x1:p,y1:c,x2:p+o,y2:c},{stroke:n,”stroke-width”:”2″}));t.appendChild(C(“line”,{x1:p,y1:c-5,x2:p,y2:c+5},{stroke:n,”stroke-width”:”2″}));t.appendChild(C(“line”,{x1:p+o,y1:c-5,x2:p+o,y2:c+5},{stroke:n,”stroke-width”:”2″}));var m=C(“text”,{x:p+o+8,y:c+4},{fill:n,”font-size”:”11px”,”font-weight”:”700″,”font-family”:”inherit”});m.textContent=D(a*1e3);t.appendChild(m);var l=(d-110)/u[0].alt,h=Math.round(v/l);if(h>1){var s=C(“text”,{x:668,y:d+20,”text-anchor”:”end”},{fill:M(“–chtp-acc2″),”font-size”:”11px”,”font-weight”:”700″,”font-family”:”inherit”});s.textContent=”zoomed “+h+”× relative to aircraft”;t.appendChild(s)}}function H(t,n,i){t.innerHTML=””;var e=M(“–chtp-acc2”);t.appendChild(C(“rect”,{x:n-9,y:i-7,width:18,height:14,rx:3},{fill:e}));t.appendChild(C(“path”,{d:”M”+(n-22)+” “+(i-9)+”L”+(n-10)+” “+(i-3)+”L”+(n-10)+” “+(i+3)+”L”+(n-22)+” “+(i+9)+”Z”},{fill:e,opacity:”.75″}));t.appendChild(C(“path”,{d:”M”+(n+22)+” “+(i-9)+”L”+(n+10)+” “+(i-3)+”L”+(n+10)+” “+(i+3)+”L”+(n+22)+” “+(i+9)+”Z”},{fill:e,opacity:”.75″}));var a=C(“text”,{x:n+30,y:i+4},{fill:e,”font-size”:”12px”,”font-weight”:”700″,”font-family”:”inherit”});a.textContent=”Starlink satellite, 550 km above ground”;t.appendChild(a)}function I(t){t.innerHTML=””;var n=M(“–chtp-ok”);var i=s,e=d-12,a=13,r=Math.sin(c),o=Math.cos(c);t.appendChild(C(“path”,{d:”M”+(i+a*r).toFixed(1)+” “+(e+a*o).toFixed(1)+”A13 13 0 0 1 “+(i-a*r).toFixed(1)+” “+(e-a*o).toFixed(1)+”Z”},{fill:n}));t.appendChild(C(“line”,{x1:s,y1:d-10,x2:s,y2:d},{stroke:n,”stroke-width”:”3″}));var p=C(“text”,{x:s+18,y:d-6},{fill:n,”font-size”:”12px”,”font-weight”:”700″,”font-family”:”inherit”});p.textContent=”receiver”;t.appendChild(p)}function R(t,n){var i=j(“chtpTgG”);i.innerHTML=””;var e=M(“–chtp-tgt”);if(u[x].ic===”drone”){i.appendChild(C(“circle”,{cx:t,cy:n,r:4},{fill:e}));[[-9,-9],[9,-9],[-9,9],[9,9]].forEach(function(a){i.appendChild(C(“line”,{x1:t,y1:n,x2:t+a[0],y2:n+a[1]},{stroke:e,”stroke-width”:”2″}));i.appendChild(C(“circle”,{cx:t+a[0],cy:n+a[1],r:3.5},{fill:”none”,stroke:e,”stroke-width”:”2″}))})}else{var a=[[14,0],[2,-4],[-4,-4],[-10,-13],[-14,-13],[-12,-4],[-16,-4],[-16,3],[2,4]];var r=””;a.forEach(function(i,e){r+=(e?”L”:”M”)+(t+i[0])+” “+(n+i[1])});i.appendChild(C(“path”,{d:r+”Z”},{fill:e}));i.appendChild(C(“path”,{d:”M”+(t-2)+” “+(n+1)+”L”+(t-8)+” “+(n+7)+”L”+(t-4)+” “+(n+7)+”L”+(t+4)+” “+(n+1)+”Z”},{fill:e,opacity:”.8″}))}i.appendChild(C(“circle”,{cx:t,cy:n,r:28},{fill:”transparent”,cursor:”grab”}))}function U(t){var n=M(“–chtp-acc”),i=M(“–chtp-acc2”),e=M(“–chtp-mut”);var a=(d-30)/v/h.z;var r=L(h.x*a),o=A(h.z*a);var p=j(“chtpLos”);p.setAttribute(“x1”,s);p.setAttribute(“y1”,d);p.setAttribute(“x2”,r);p.setAttribute(“y2″,o);P(p,{stroke:e,”stroke-width”:”2″,”stroke-dasharray”:”2 6″});H(j(“chtpTxG”),r,o-2);var c=430,l=j(“chtpBeam”);l.setAttribute(“d”,”M”+r.toFixed(1)+” “+o.toFixed(1)+”L”+(s-c)+” “+d+”L”+(s+c)+” “+d+”Z”);P(l,{fill:n,”fill-opacity”:”.08″,stroke:n,”stroke-opacity”:”.3″,”stroke-width”:”1″});var u=j(“chtpBeamL”);u.setAttribute(“x”,s-c+22);u.setAttribute(“y”,d-14);u.setAttribute(“text-anchor”,”start”);P(u,{fill:n,”font-size”:”11px”,”font-weight”:”700″,”font-family”:”inherit”,opacity:”.85″});u.textContent=”satellite beam (not to scale)”;var x=L(f.x),g=A(f.z);var b=j(“chtpP1”);b.setAttribute(“x1”,r);b.setAttribute(“y1”,o);b.setAttribute(“x2”,x);b.setAttribute(“y2”,g);var k=j(“chtpP2”);k.setAttribute(“x1”,x);k.setAttribute(“y1”,g);k.setAttribute(“x2”,s);k.setAttribute(“y2″,d);P(b,{stroke:n,”stroke-width”:”2″,opacity:”.8″});P(k,{stroke:n,”stroke-width”:”2″,opacity:”.8″});var y=h.z,w=-h.x,z=[],C=[];for(var F=0;40>=F;F++){var T=a*F/40,B=t.lobe/2*m*T/(m+T);var E=Math.max(B*v,.35);var G=L(h.x*T),Z=A(h.z*T);z.push((F?”L”:”M”)+(G+y*E).toFixed(2)+” “+(Z-w*E).toFixed(2));C.unshift(“L”+(G-y*E).toFixed(2)+” “+(Z+w*E).toFixed(2))}var N=j(“chtpCor”);N.setAttribute(“d”,z.join(” “)+” “+C.join(” “)+” Z”);P(N,{fill:i,”fill-opacity”:”.25″,stroke:i,”stroke-width”:”1.5″});var V=j(“chtpCorL”),U=L(S(f.z))+14,K=A(f.z)-30;V.setAttribute(“x”,U);V.setAttribute(“y”,K);V.setAttribute(“text-anchor”,”start”);P(V,{fill:i,”font-size”:”12px”,”font-weight”:”700″,”font-family”:”inherit”});V.textContent=”modeled shadow, about “+D(t.half*2)+” wide at flight altitude”;I(j(“chtpRxG”));R(x,g)}function K(t){if(!z){z=document.createElementNS(o,”svg”);z.setAttribute(“viewBox”,”0 0 680 150″);z.setAttribute(“role”,”img”);z.setAttribute(“aria-label”,”Visibility versus distance from the satellite-receiver line”);var n=document.createElement(“div”);P(n,{display:”block”,margin:”0 0 12px”});n.appendChild(z);j(“chtpVerd”).parentNode.insertBefore(n,j(“chtpVerd”).nextSibling)}z.innerHTML=””;var i=680,e=150,a=8,r=16,p=26,m=M(“–chtp-acc2”),l=M(“–chtp-mut”);var h=t.half/1e3/Math.sin(c);var s=Math.max(h*6,.005),d=S(f.z);z.appendChild(C(“line”,{x1:a,y1:e-p,x2:i-a,y2:e-p},{stroke:l,”stroke-width”:”1.5″,opacity:”.6″}));var u=Math.max(t.max,1),x=[],v=200;for(var g=0;v>=g;g++){var b=B(d+(-1+2*g/v)*s,f.z).dB,k=a+(i-2*a)*g/v;x.push((g?”L”:”M”)+k.toFixed(1)+” “+(e-p-(e-p-r)*Math.max(0,Math.min(1,b/u))).toFixed(1))}z.appendChild(C(“path”,{d:x.join(” “)+”L”+(i-a)+” “+(e-p)+”L”+a+” “+(e-p)+”Z”},{fill:m,”fill-opacity”:”.2″,stroke:”none”}));z.appendChild(C(“path”,{d:x.join(” “)},{fill:”none”,stroke:m,”stroke-width”:”2.5″,”stroke-linejoin”:”round”}));var y=f.x-d;if(s>=Math.abs(y)){var w=a+(i-2*a)*(y/s+1)/2,L=e-p-(e-p-r)*Math.max(0,Math.min(1,t.dB/u));z.appendChild(C(“line”,{x1:w,y1:r-8,x2:w,y2:e-p},{stroke:”currentColor”,”stroke-width”:”1.5″,”stroke-dasharray”:”3 3″,opacity:”.55″}));z.appendChild(C(“circle”,{cx:w,cy:L,r:5},{fill:”currentColor”}))}[[a,”−”+D(s*1e3),”start”],[i/2,”satellite-receiver line”,”middle”],[i-a,”+”+D(s*1e3),”end”]].forEach(function(t){var n=C(“text”,{x:t[0],y:e-8,”text-anchor”:t[2]},{fill:l,”font-size”:”11px”,”font-weight”:”600″,”font-family”:”inherit”});n.textContent=t[1];z.appendChild(n)});var A=C(“text”,{x:a+2,y:r-3},{fill:l,”font-size”:”11px”,”font-weight”:”700″,”font-family”:”inherit”});A.textContent=”Visibility versus horizontal distance from the line”;z.appendChild(A)}function q(t){var n=u[x];var i=Math.max(0,Math.min(100,t.dB/Math.max(t.max,1)*100));j(“chtpBar”).setAttribute(“style”,”display:block !important;height:100% !important;border-radius:999px !important;background:”+M(“–chtp-acc2″)+” !important;width:”+i.toFixed(1)+”% !important;”);j(“chtpPct”).textContent=.5>i?”almost none”:Math.round(i)+” %”;j(“chtpSize”).textContent=G(t.s);j(“chtpSizeU”).textContent=”typical reflection: “+G(n.m);j(“chtpGain”).textContent=Z(t.dB);var e=N(t.half*2/Math.sin(c)/(n.v/3.6));j(“chtpTime”).textContent=e;var a=j(“chtpVerd”),r,o;if(t.lobe/2>t.psi&&t.dB>20){r=M(“–chtp-ok”);o=LT(“b>In the shadow./b> The object blocks the signal path, and the receiver detects its shadow. The model uses only a simplified aircraft silhouette. At “+n.v+” km/h, it passes through the shadow in “+e+”.”)}else if(t.dB>6){r=M(“–chtp-acc2”);o=LT(“b>At the edge of the shadow./b> The object still partly blocks the signal path, but the shadow is weaker. Move it closer to the line.”)}else{r=M(“–chtp-warn”);o=LT(“b>Outside the shadow./b> The receiver sees only a weak reflection, roughly like ordinary radar. Try moving the object across the dashed line.”)}a.style.setProperty(“border-left-color”,r,”important”);if(a.dataset.k!==o){a.dataset.k=o;a.innerHTML=o}}function J(t){var n=B(f.x,f.z);U(n);var i=Date.now();if(!t&&k&&y>i)return;if(t||!k||i-b>145){b=i;q(n);K(n)}}var O=j(“chtpTgt”);u.forEach(function(t,n){var i=document.createElement(“button”);i.type=”button”;i.className=”chtp-b”+(n===x?” chtp-on”:””);i.textContent=t.n;i.addEventListener(“click”,function(){Y();x=n;F();T();V();Array.prototype.forEach.call(O.children,function(t,i){t.className=”chtp-b”+(i===n?” chtp-on”:””)});J(true)});O.appendChild(i)});var X=1e-7;function Y(){if(g){cancelAnimationFrame(g);g=null}k=false;j(“chtpGo”).textContent=”Start flyby”}j(“chtpGo”).addEventListener(“click”,function(){if(k){Y();J(true);return}k=true;j(“chtpGo”).textContent=”Stop”;y=0;f.z=u[x].alt;var t=S(f.z),n=(20-s)/v,i=(660-s)/v,e=Math.max(t-n,i-t);var a=0,r=12e3,o=2.6,p=Math.sinh(o),c=-1;g=requestAnimationFrame(function m(l){if(!a)a=l;var h=(l-a)/r;if(h>=1){k=false;y=0;J(true);Y();return}var s=2*h-1;f.x=t+e*Math.sinh(o*s)/p;f.x=Math.max(n,Math.min(i,f.x));var d=f.x>=t?1:-1;if(d!==c){c=d;var u=f.x;f.x=t+X;y=0;J(true);y=Date.now()+1600;f.x=u}if(y>Date.now()){U(B(f.x,f.z))}else{J(false)}g=requestAnimationFrame(m)})});var Q=false;function W(t){var n=w.createSVGPoint();n.x=t.clientX;n.y=t.clientY;var i=w.getScreenCTM();return i?n.matrixTransform(i.inverse()):{x:L(f.x),y:A(f.z)}}function $(t){if(!Q)return;var n=W(t),i=Math.max(20,Math.min(660,n.x)),e=Math.max(60,Math.min(d-15,n.y));f.x=(i-s)/v;f.z=(d-e)/v;var a=S(f.z);if(4>Math.abs(f.x-a)*v)f.x=a+(f.x>=a?X:-X);J(true);t.preventDefault()}w.addEventListener(“pointerdown”,function(t){Y();Q=true;$(t)});window.addEventListener(“pointermove”,$,{passive:false});[“pointerup”,”pointercancel”].forEach(function(t){window.addEventListener(t,function(){Q=false})});F();T();V();J(true)})();
  • Start the fighter flyby. Away from the line, the receiver can barely see it. In the shadow, it detects the aircraft, but only for about a tenth of a second.
  • Try the airliner. It’s larger, so the shadow is stronger, but also narrower.
  • Try the small drone. Its shadow is weak, but the drone flies slowly and stays in it for over a second.

The figures in m² are neither the aircraft’s size nor its conventional radar cross-section. They’re just a handy way to indicate how strong the shadow is. The simulator is a simplified model, but it’s good enough to give you a sense of the scale.

What the Chinese experiment showed

In 2024, Chinese researchers showed that Starlink signals can reveal a flying object. The South China Morning Post reported on the experiment.

They listened to a satellite passing over the Philippines and flew a DJI Phantom 4 Pro drone through its signal path. The authors say it has a radar cross-section similar to that of an F-22 fighter. They detected the drone in the signal and reportedly even identified the rotation of its propellers.

Detecting that something passed through isn’t the same as knowing exactly where it is or where it’s going. Nobody has publicly demonstrated reliable tracking of a stealth fighter this way yet.

Starshield is built on the same technology as Starlink, but it’s a separate program for government and defense customers. According to Reuters, SpaceX is building a network of hundreds of satellites for the US National Reconnaissance Office (NRO), under a $1.8 billion contract. What exactly the system can do is not known.

Czechia is a leader in passive surveillance

The Pardubice-based company ERA builds on development work that has been underway in Pardubice since the 1960s. Its predecessors were called Kopáč, Ramona, and Tamara. Today, ERA makes VERA-NG.

VERA-NG works differently from the radar discussed in this article. It doesn’t listen for reflections of signals from other sources; it listens for signals transmitted by the aircraft itself, such as its radar or transponder. If the aircraft switches everything off, VERA can’t hear it.

PLESS, another ERA system, works on the same principle. The Czech Ministry of Defence approved the purchase of three units for about $100 million. Czechia has also ordered 24 F-35A stealth fighters.

A homebrew passive radar

You can try out the basics of passive radar at home, too.

You can receive Starlink signals with an RTL-SDR V3, a satellite LNB, and a bias tee to power the LNB. Czech radio amateur Derek OK9SGC has described the process. If you’re new to RTL-SDR, take a look at this beginner’s guide to RTL-SDR.

For an actual passive radar, you need two receivers sharing a clock, two directional antennas, and the open-source software blah2. The cheapest option is to use two RTL-SDR dongles. DVB-T television or FM radio is the most commonly used signal source.

For verification, it’s useful to receive ADS-B at the same time and compare the aircraft’s self-reported position with the radar’s calculation. My MeteoPlaneRadar uses ADS-B, for example.

You can also detect drones with RTL-SDR. I wrote about detecting drones with an inexpensive SDR device in another article.

So, are stealth aircraft finished?

Passive radar is an old, working technology, and it has an advantage against stealth aircraft: it doesn’t transmit anything itself and can detect signals that stealth aircraft reflect away.

But this isn’t the end of stealth aircraft. The shadow is narrow and fleeting, and a single receiver can’t provide an accurate position.

My take: it’s a good demonstration that stealth doesn’t mean invisibility. An aircraft is simply detected later, and passive radar could reduce that head start in the future.

Sources: Czech news site Novinky.cz: Stealth fighters have a problem · The simulation on X · South China Morning Post: The Chinese experiment · Reuters: SpaceX is building a spy satellite network for the NRO · Study: Signal Structure of the Starlink Ku-Band Downlink · ERA: PLESS product sheet · RTL-SDR.com: Receiving Starlink beacons · blah2: Open-source passive radar

Article prepared by Claude Opus 5.5

Share the article:
Show your
Maker soul!
Buy a T-Shirt
Coffee for Chiptron
Give a boost to the next article

Related Articles

Custom firmware for the AVerMedia Game Capture HD II

The old AVerMedia Game Capture HD II refused to do the one thing I asked – record 640×480 from the picogame engine. Inside it runs a small Linux, and the limit is just a software whitelist. From serial console and…

If you’ve ever wondered what plane is flying over your house, you’ve probably used an app like FlightRadar24. The ESP32 Plane Radar project offers a more interesting solution though – your own desktop radar built on ESP32 that displays planes…

Linux 6.11 runs directly on the Xtensa core of the ESP32-S3 without emulation. After login, the shell mirrors to the 9.7″ ED097TC2 e-paper display.

Trends