Solar cycle fitter: 13-month smoothing, cycle minima and maxima, shape fits and a forecast from your own sunspot numbers

Paste or open monthly sunspot numbers and get the 13-month running mean, every cycle's minimum and maximum, its length, rise time and size, a shape function fitted to each cycle by least squares, and the current cycle carried on with an uncertainty band. CSV and report downloads; your numbers stay in your browser.

Keep it one tap away for everyday use.

Bookmark Solar cycle fitter?

Press Ctrl + D now. Your browser opens its own bookmark box, where you choose the name and folder.

  1. Months
  2. Smooth
  3. Fit cycles
  4. Forecast
Nothing is uploadedWorks offline once open

Monthly numbers

One month per line: the month and its value, such as 2024-03, 120.5. Also read: 2024 3 120.5, a decimal year such as 2024.208 120.5, and year;month;decimal year;value;… lines.

A blank, NaN or negative value (such as −1) is a missing month. The example is a made-up series of five and a bit cycles drawn by this page with random noise. It is not real sunspot data. Your numbers stay on this device.

Settings

13-month mean: R̄ₙ = (Rₙ₋₆ + 2(Rₙ₋₅ + … + Rₙ₊₅) + Rₙ₊₆) / 24, the usual tapered running mean, so the first and last 6 months have none. Minima are the lowest smoothed month within half the shortest spacing on each side; each maximum is the highest smoothed month between two minima.

Shape: f(t) = a (t − t₀)³ / (exp((t − t₀)²/b²) − c) after the start t₀ (years), 0 before. a sets the size, b the rise time, c (fixed, 0 to 0.99) the lopsidedness; a, b and t₀ are fitted to each cycle by least squares. Shape from past cycles keeps b at the mean of the complete cycles and fits a and t₀; the band comes from the spread of b between cycles plus the fit's own uncertainty. A free fit fits all three and draws the band from their uncertainties. Automatic uses the past shape when two or more cycles are fitted.

What it does

The Sun’s activity rises and falls in a cycle of about eleven years, and sunspot counts are the longest record of it. This page takes a monthly series, such as the counts you keep yourself, an index from a club, or a public record you have downloaded, and does the standard analysis in your browser:

  • 13-month running mean. Monthly counts jump about a lot, so cycles are timed on the classic smoothed curve: R̄ₙ = (Rₙ₋₆ + 2(Rₙ₋₅ + … + Rₙ₊₅) + Rₙ₊₆) / 24. The two end months get half weight, so the mean covers exactly one year centred on the month. The first and last six months have no smoothed value.
  • Minima and maxima. A cycle minimum is the lowest smoothed month within half the shortest time between minima on each side (7 years by default, so a minimum is the lowest point in about 3.5 years either way). Each maximum is the highest smoothed month between two minima.
  • Cycle facts. For every cycle: the start (minimum), the maximum, the rise time from minimum to maximum, the length from one minimum to the next, and the peak height (amplitude).
  • Shape fits. Each complete cycle is fitted by least squares with f(t) = a (t − t₀)³ / (exp((t − t₀)²/b²) − c), zero before t₀. It rises steeply and falls slowly, like real cycles. a sets the size, b the rise time in years, t₀ the start, and c how lopsided it is.
  • The current cycle carried on. The cycle in progress is fitted the same way, and the curve is drawn forward with a band showing where it could go, from the scatter of the parameters.

To count spots on your own photo of the Sun first, use the sunspot counter; to look for other periods in a series, the period finder or the time series.

How to use it

  1. Months. Paste one month per line: 2024-03, 120.5, 2024 3 120.5, a decimal year (2024.208 120.5), or lines of year;month;decimal year;value;… as many public files use. Or tap Open a file for a CSV, TXT or Excel file. Missing months can be left out or given as blank, NaN or −1.
  2. Settings. Check the shortest time between minima: lower it if a minimum is missed, raise it if a dip inside a cycle is taken as a minimum. Set the number of the first full cycle if you want the usual numbering.
  3. Fits. Choose whether each cycle is fitted to the monthly values (the default; every month counts the same) or to the 13-month mean.
  4. Forecast. Shape from past cycles keeps b at the mean of the complete cycles and fits only a and t₀, which works early in a cycle. Free fit fits all three and needs at least two years since the minimum. Automatic picks the past shape when two or more cycles have been fitted.
  5. Read the chart, the facts and the table, and download the months or the cycles as CSV, or the whole report as PNG, PDF or Word.

Worked example

The page opens with a made-up series, January 1976 to October 2026, built from six invented cycles plus noise. It is not real sunspot data. With the default settings the page finds minima in 1978-02, 1988-12, 2000-02, 2011-06 and 2022-11, so four cycles are complete. They are 10.83, 11.17, 11.33 and 11.42 years long (mean 11.2 ± 0.3 years), and their smoothed peaks are 132.0, 168.5, 121.2 and 95.2, reached 3.58, 3.92, 4.58 and 4.17 years after each minimum. The fitted shapes peak at 133.1, 172.5, 112.1 and 93.5, within 4 % of the heights the series was built with (135, 170, 115 and 90).

The fifth cycle started in 2022-11 (smoothed minimum 2.6). With the shape from past cycles (b = 3.82 years), its fitted peak is 120.3 in 2026-12, with a 95 % band of 110.0 to 134.6 for the height and 2026-06 to 2027-06 for the time. The next minimum is due about 2034-01. Switch to the free fit and the peak height becomes 118.5 in 2026-10, but its band runs from 73.4 to 125.6: the band is much wider, because b is no longer pinned by the earlier cycles and the cycle is only just at its peak.

Tips

  • Use a long series: each cycle needs about 3.5 years of data on both sides of its minimum before it is found.
  • A forecast made early in a cycle is uncertain. Watch the band shrink as months are added.
  • Raw counts from one observer drift with seeing and equipment. Compare like with like, and read the shape, not single months.
  • The band comes from the fit only. It does not cover a sudden change in the Sun’s behaviour, so treat it as a guide.

FAQ

Why does the 13-month mean stop six months before my last month? It needs six months on each side. The last smoothed month is always half a year behind the data, which is why the current cycle’s peak is only confirmed months later.

What is c, and why 0.7? c changes how lopsided the shape is: 0 gives a nearly symmetric hump, values near 1 a sharper rise and a longer tail. It is held fixed so that a, b and t₀ can be fitted well; 0.7 is a rounded value that suits typical cycles. Try other values and compare the RMS in the table.

Can I use other activity indices? Yes. Any monthly index that follows the cycle works, such as sunspot areas or a radio flux. Change What the numbers are so the charts are labelled correctly.

Is the next minimum predicted? Only roughly: the page adds the mean cycle length to the current cycle’s start and shows the spread between cycles.

Where the numbers come from

  • The 13-month running mean, the minimum and maximum finder, the least-squares shape fits, the Monte Carlo band and the file reader are written by fibub and checked in the tests against NumPy and SciPy (convolve, argrelmin, curve_fit, an independent random-draw band).
  • The shape a(t − t0)³ / (exp((t − t0)²/b²) − c) is a general asymmetric cycle profile used in solar cycle studies (Hathaway, Wilson and Reichmann, 1994); only the formula is used. The default c = 0.7 is a rounded value you can change.
  • The example series is made up by the page (six invented cycles added together, plus random noise). It is not real sunspot data.
  • Numbers you paste or open are read on the page only. They are never uploaded or stored.

Standard scientific values, such as constants, atomic weights and melting points, are facts found in every textbook; we name where ours were checked. If you are an author or publisher and want a value, a credit or a table changed or removed, tell us and we will act quickly.

Read more on the Blog

Last updated 2026-11-09.

Change log for Solar cycle fitter

  1. Add #215 Solar cycle fitter Details on GitHub

Every change to fibub

Related tools

Sun position calculator #T61 Find where the Sun is at any place and moment: its altitude and azimuth, how long shadows are, sunrise, sunset, solar noon, twilight, a sun path diagram and a year of day lengths. Curve fitter #T711 Fit a straight line, polynomial, exponential, power law, Gaussian, sine wave or your own formula to x, y data, weighted by the y uncertainties if you have them, and get each parameter with its uncertainty and 95 % interval, chi-square, reduced chi-square and p-value, residuals and correlations. Period finder #T48 Paste times and brightness measurements, even with gaps and uneven spacing, and find the period with a Lomb-Scargle periodogram, false alarm probabilities, alias checks and a folded light curve. Sunspot counter #T75 Open a white-light photo of the Sun and the tool finds the disc, the spots and the groups, and gives the relative sunspot (Wolf) number with spot areas. Tap to correct anything it got wrong. Time series #T394 Paste a series and split it into trend, season and remainder (STL or classical), see the ACF and PACF with confidence bands, try differencing, and fit an ARIMA(p, d, q) model by exact maximum likelihood with forecasts, 80 % and 95 % intervals and a Ljung-Box check. Matches statsmodels. 1D Schrödinger solver #T658 Choose a textbook potential, type a formula or draw your own, and get the lowest energy levels and wavefunctions of the one-dimensional Schrödinger equation by the matrix (finite-difference) method, with the exact levels alongside for the box, harmonic oscillator, finite well, Morse, linear and Pöschl–Teller potentials.