Antenna Simulator
Computes wire antennas with NEC2 — the method EZNEC and 4nec2 build on as well. From geometry, feedpoint and ground model it produces feedpoint impedance, SWR, gain and the radiation pattern.
Runs locally from 1.41
The compute core is part of the app and needs no internet connection. Up to 1.40 the simulator loaded the web version from toolbox.funkwelt.net — out in the field without coverage it was the only module that would not start at all.
Opening the module
Overview → Antenna Simulator. Like Logbook, SSTV, Winlink and QTH Locator it takes over the whole window; the Overview button at the top left goes back.
Model and inputs are on the left, results on the right. Compute with Simulate or ⌘↩.
Building your own antennas
The simulator is not limited to templates. The wire segments table is fully editable — one row per wire:
| Field | Meaning |
|---|---|
| Tag | Number of the wire, must be unique. The feedpoint and components address it by this |
| Seg | How many computation segments the wire is split into |
| X1/Y1/Z1 → X2/Y2/Z2 | Start and end in metres. Z is the height above ground |
| R mm | Wire radius in millimetres |
| SP | Feedpoint — the radio button puts it on this wire, the segment next to it |
Wires are added with Add wire and removed with the ×. Twelve templates serve as starting points: Empty model (a single wire), dipole, inverted-V, inverted-L, EFHW, Windom, groundplane, quad loop, delta loop, delta loop fed at the apex, and Yagis with two and three elements. All dimensions follow the selected frequency.
The templates are measured from 1.42
Their dimensions do not come from a rule of thumb but from runs against the engine itself — a dipole sits at 0.968 λ/2, a quad loop at 1.06 λ of perimeter, a delta loop at 1.066 λ. The rounded "one wavelength" perimeter you read everywhere is too short: it leaves the loop markedly capacitive. The delta loop fed at the apex (24 % top side, 2 × 38 % legs) lands directly at about 50 Ω and needs no matching line.
For Yagi, Moxon, HB9CV, Hexbeam, Spiderbeam, magnetic loop and EFHW it pays to go through the respective calculator: that is where the special geometry and the velocity factors live, and Open in simulator hands over the finished model — including the tuning capacitor or loading coil.
Lumped components
An inductor, capacitor, resistor or series RLC can sit on any segment. That makes the tuning capacitor of a magnetic loop or the loading coil of a shortened antenna part of the model — without them the antenna is computed without the reactance that sets its resonance.
Importing and exporting NEC decks
Open NEC file … reads a .nec deck, Save as .nec … writes the current model out — the route to xnec2c, 4nec2 or EZNEC.
The cards read are the ones the simulator writes itself: CM/CE (name), GW (wires), GE, GN (ground), LD type 2 (lumped RLC), EX type 0 (voltage source) and FR (frequency including the sweep range). Wire radii are converted from metres to millimetres, a finite ground is rounded to the nearest catalogue entry — and when it is rounded, that is stated as a note.
What the import deliberately does NOT do
It never skips a card silently. Foreign decks often contain GM (move/replicate — the rule in Yagi decks), GS (scale), GA/GH (arc, helix), TL (transmission line) or NT (network). These change the geometry or the feed in ways not modelled here. If the import skipped them, the result would be a plausible-looking but wrong antenna — and nobody would notice, because a result does appear. So the import stops and names the cards. For decks like that, xnec2c or 4nec2 is the right tool.
Ground and height
Eight ground types from free space through salt water, fresh water, farmland, average, dry/urban to desert and a perfect reflector. The difference in take-off angle shows up immediately — the same εr/σ values as in the web version, so the two stay comparable.
Height above ground shifts the whole model vertically. The lowest point ends up at the value you enter.
Model check
Before computing, the NEC2 segmentation rules are checked: segment length against λ/10, segment length against wire radius, wire thickness against λ, duplicate tags, feedpoint and components on valid segments, wires below ground.
Why this is needed
NEC2 computes even when the rules are broken — it just computes wrongly, without warning. A coarsely segmented wire returns plausible numbers that are off by decibels. Rules of thumb: segment length ≤ λ/10 and ≥ 8× the wire radius.
Errors block the run, warnings do not.
Results
| Value | Meaning |
|---|---|
| Impedance | Feedpoint resistance and reactance in ohms. Negative reactance = too short, positive = too long |
| SWR (50 Ω) | Standing wave ratio against 50 Ω |
| Gain | Highest gain in dBi |
| Elevation angle | Where the main lobe sits — low means DX, steep means local |
| Front-to-back ratio | Only meaningful for directional antennas |
Radiation pattern
The Cuts / Spatial switch picks the presentation.
Cuts shows polar plots for azimuth and elevation, scaled in dB with rings 10 dB apart; the maximum sits on the outer ring. The orange dot marks the main lobe, the −3 dB beamwidth is printed below.
Spatial draws the radiation body for rotating: drag to rotate, scroll to zoom, the grid lies in the horizontal plane. A colour bar with dB labels sits underneath.
There are two choices for the colour scale:
| Scale | What for |
|---|---|
| Single hue (default) | Blue, light to dark. It encodes gain through lightness as well — so it stays readable with red-green deficiency and in greyscale print, and equal dB steps look equally large |
| Rainbow | Blue is low, red is high — the familiar picture from EZNEC and 4nec2 |
The rainbow is the perceptually weaker one: its yellow/cyan bands create visible edges where the data is smooth, and it does not encode through lightness. But familiarity is a real argument, so it is offered. The setting is remembered.
The azimuth cut goes through the main lobe. When the maximum occurs more than once — for a dipole in free space it does so all around the ring perpendicular to the wire — the most informative cut is chosen, not simply the first one.
SWR across the band
The SWR across the band switch computes a sweep and draws the curve, with a marker at SWR 2 and the usable bandwidth in kHz. It is pre-filled with ±3 % around the working frequency.
Matching network from 1.42
A matching network can be computed in front of the antenna — either a transformer with a fixed ratio (1:1, 4:1, 9:1, 49:1 for the EFHW) or an L network of two reactive elements. Component values are given in µH and pF, not merely as reactances; the design picks the low-pass solution with a series inductor and a shunt capacitor, because that attenuates harmonics instead of passing them through.
The point is the curve next to it
At the design frequency an L network always ends at SWR 1.0 — that is not an achievement but construction. What matters is what happens across the rest of the band: an L network is narrowband, a transformer broadband. Only the sweep shows whether the match holds up on the air.
The maths is done analytically on the simulated feedpoint impedance, not via NT or TL cards in the deck. A matching network sits between cable and antenna anyway, not inside the antenna — the result is the same.
Viewing the deck
At the bottom the generated NEC2 deck can be expanded — the input that goes to the engine. Useful for following along and for seeing what a change to the model actually does.
Web version
At toolbox.funkwelt.net/antennensim the simulator keeps running in the browser — with 14 templates, a 3D view of the radiation pattern and the same NEC2 engine as WebAssembly. Handy for demonstrating and for everyone without a Mac.
Engine
nec2c 1.3 by Neoklis Kyriazis 5B4AZ, a C translation of the NEC2 FORTRAN code from Lawrence Livermore National Laboratory. It runs as a separate process alongside HAM-Tools — a model the engine cannot digest therefore costs an error message rather than the whole app.
Origin and licence are in the app under Settings → License → Third-party components and on the licence page.