<p>This is for satellites with unknown size and orientation but known standard magnitude (Standard magnitude can be found on the satellite info page of heavens above, the number is called intrinsic magnitude)
The proper formula is </p>

<pre><code>            double distanceToSatellite = 485; //This is in KM
            double phaseAngleDegrees = 113.1; //Angle from sun-&gt;satellite-&gt;observer
            double pa = phaseAngleDegrees * 0.0174533; //Convert the phase angle to radians
            double intrinsicMagnitude = -1.8; //-1.8 is std. mag for iss


            double term_1 = intrinsicMagnitude;
            double term_2 = 5.0 * Math.Log10(distanceToSatellite / 1000.0);

            double arg = Math.Sin(pa) + (Math.PI - pa) * Math.Cos(pa);
            double term_3 = -2.5 * Math.Log10(arg);

            double apparentMagnitude = term_1 + term_2 + term_3;
</code></pre>

<p>This will give the apparent magnitude of the satellite.
Note: I gave the formula in C#</p>

CC BY-SA 4.0
2018-12-17T17:57:40.707Z
2018-12-21T18:24:04.137Z
2018-12-21T18:24:04.137Z
Nick Brown
<p>Congratulations to @NickBrown for his <a href="https://astronomy.stackexchange.com/a/28765/7982">solution</a>! Based on that equation and some additional references I'll just add a little more.</p>

<ul>
<li><a href="https://apps.dtic.mil/dtic/tr/fulltext/u2/785380.pdf" rel="nofollow noreferrer">https://apps.dtic.mil/dtic/tr/fulltext/u2/785380.pdf</a></li>
<li><a href="https://www.researchgate.net/publication/268194552_Large_phase_angle_observations_of_GEO_satellites" rel="nofollow noreferrer">https://www.researchgate.net/publication/268194552_Large_phase_angle_observations_of_GEO_satellites</a></li>
</ul>

<p>Calculating visual magnitude takes three input parameters</p>

<ol>
<li>how good of a reflector the object is</li>
<li>the angle between the illumination and the viewing</li>
<li>the distances from illuminator and viewer are from the object</li>
</ol>

<p>For astronomical objects we use absolute magnitude for item #1, for satellite viewing both absolute magnitude and <em>intrinsic magnitude</em> are used. Absolute magnitude is the visual magnitude of the object at 1 AU from the Sun and 1 AU from you, viewed full-on (phase angle = 0) which means you are sitting right next to the Sun.</p>

<p>Intrinsic magnitude is similar, but you are now only 1,000 km from the object with the Sun over your shoulder.</p>

<p>Either way, all of the albedo, size and shape information is lumped into the absolute or intrinsic magnitude, leaving only distances and angles.</p>

<p>The angle between the direction of illumination and the direction of viewing is called the <em>phase angle</em>. Think <em>phases of the Moon</em> for example. If the phase angle of the Moon were 90 degrees, it would be a half-moon. Zero would be full Moon and 180 degrees would be new Moon.</p>

<p>The modulation of the brightness as a function of phase angle was proposed by Vallerie, E.M. III, <em>Investigation of Photometric Data Received from an Artificial Earth Satellite</em>, AD #419069, Air Force Institute of Technology, Defense Documentation Center, Alexandria, Virginia, 1963, which I found in <a href="https://amostech.com/TechnicalPapers/2013/POSTER/COGNION.pdf" rel="nofollow noreferrer">Observations and Modeling of GEO Satellites at Large Phase Angles</a> by Rita L. Cognion, also in <a href="https://www.researchgate.net/publication/268194552_Large_phase_angle_observations_of_GEO_satellites" rel="nofollow noreferrer">Researchgate</a></p>

<p>The dependence is given by the term</p>

<p><span class="math-container">$$ \frac{1}{\pi}(\sin(\phi) + (\pi-\phi) \cos(\phi))$$</span></p>

<p>and looks like</p>

<p><a href="https://i.sstatic.net/Fjah9.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/Fjah9.png" alt="enter image description here"></a></p>

<p>For the satellite in the question at a distance of 483 kilometers and an intrinsic magnitude of -1.3, the the apparent magnitude seems to be about -2.0 and its dependence on phase angle is as follows:</p>

<p><a href="https://i.sstatic.net/g0jBN.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/g0jBN.png" alt="enter image description here"></a></p>

<hr>

<p>Not all spacecraft are spherical with diffuse white surfaces nor spherical-cow-shaped.</p>

<p><a href="https://i.sstatic.net/MaJzM.gif" rel="nofollow noreferrer"><img src="https://i.sstatic.net/MaJzM.gif" alt="enter image description here"></a></p>

<p>For phase angle dependence of some more familliar shapes, see Figure 2 in <a href="https://apps.dtic.mil/dtic/tr/fulltext/u2/785380.pdf" rel="nofollow noreferrer">Visible Magnitude of Typical Satellites in Synchronous Orbits</a> William E. Krag, MIT, 1974 AD-785 380, which describes the problem nicely.</p>

<p><a href="https://i.sstatic.net/upWil.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/upWil.png" alt="enter image description here"></a></p>

<pre><code>def Mapparent_from_Mintrinsic(Mint, d_km, pa):
    term_1 = Mint
    term_2 = +5.0 * np.log10(d_km/1000.)
    arg    = np.sin(pa) + (pi - pa) * np.cos(pa)
    term_3 = -2.5 * np.log10(arg)
    return term_1 + term_2 + term_3

import numpy as np
import matplotlib.pyplot as plt

halfpi, pi, twopi = [f*np.pi for f in (0.5, 1, 2)]
degs, rads = 180/pi, pi/180

Mintrinsic   = -1.3
d_kilometers = 483.

phase_angles = np.linspace(0, pi, 181)

Mapp = Mapparent_from_Mintrinsic(Mintrinsic, d_kilometers, phase_angles)

# https://astronomy.stackexchange.com/q/28744/7982
# https://www.researchgate.net/publication/268194552_Large_phase_angle_observations_of_GEO_satellites
# https://amostech.com/TechnicalPapers/2013/POSTER/COGNION.pdf
# https://apps.dtic.mil/dtic/tr/fulltext/u2/785380.pdf

if True:
    plt.figure()

    F = (1./pi)*(np.sin(phase_angles) + (pi-phase_angles)*np.cos(phase_angles))

    plt.suptitle('F = (1/pi)(sin(phi) + (pi-phi)cos(phi))', fontsize=16)

    plt.subplot(2, 1, 1)
    plt.plot(degs*phase_angles, F)
    plt.ylabel('F', fontsize=16)

    plt.subplot(2, 1, 2)
    plt.plot(degs*phase_angles, -2.5*np.log10(F))
    plt.xlabel('phase angle (degs)', fontsize=16)
    plt.ylabel('-2.5log10(F)', fontsize=16)
    plt.ylim(-1, 11)

    plt.show()

if True:
    plt.figure()
    plt.plot(degs*phase_angles, Mapp)
    plt.plot(degs*phase_angles[113], Mapp[113], 'ok')
    plt.text(90, -5, '{:0.2f} at {:0.1f} deg'.format(Mapp[113], 113), fontsize=16)
    plt.xlabel('phase angle (degs)', fontsize=16)
    plt.ylabel('mag', fontsize=16)
    plt.title('apparent mag of intrinsic mag=-1.3 at 483 km', fontsize=16)
    plt.ylim(-10, 15)
    plt.show()
</code></pre>

CC BY-SA 4.0
2018-12-18T15:00:59.183Z
holy cow thanks for the answer. Im going to try to implement this instead of the one i provided. Ill let you know how good it is.
Nick Brown
CC BY-SA 4.0
2018-12-18T15:02:42.507Z
@NickBrown I just used *your equation*, it shouldn't be any different than your result. This answer is only to add additional background information and explanation.
uhoh
CC BY-SA 4.0
2018-12-18T15:05:13.243Z
Ah okay. I didnt fully read your functions. thanks!
Nick Brown
CC BY-SA 4.0
2018-12-18T15:17:04.687Z
Hmm. Mine actually is inaccurate. Yours works perfectly. Im going to edit my answer to show a c# version of yours. thanks!
Nick Brown
CC BY-SA 4.0
2018-12-18T17:02:38.680Z
its not *really* important. Some people use -1.3, some people use -1.8
Nick Brown
CC BY-SA 4.0
2018-12-21T05:34:23.530Z
Specular reflection can be spectacular. Think Iridium flares. But geostationary satellites can also show specular reflections of solar cells. This happens near the equinoxes, and can cause high speed regular flashes.
TazAstroSpacial
CC BY-SA 4.0
2018-12-18T05:30:11.273Z
2018-12-18T05:54:06.707Z
2018-12-18T05:54:06.707Z
uhoh
<p>I'm writing a program that involves calculating the apparent magnitude of satellites from a ground location. I currently have the intrinsic magnitude of the satellites and the solar phase angle in degrees. I can't seem to find a formula that works.</p>

<p>I tried</p>

<pre><code>magnitude = intrinsicMagnitude - 15 + 5 * Math.Log(distanceToSatellite) - 2.5 * Math.Log(Math.Sin(B) + (Math.PI - B) * Math.Cos(B));
</code></pre>

<p>(B is the phase angle)</p>

<p>...but it does not work (it's returning numbers like +30). I know it's wrong because I'm comparing it to heavens-above.com satellite passes.</p>

<p>intrinsicMagnitude = Visual magnitude at 1000km away (Use -1.3)</p>

<p>distanceToSatellite = Observer distance to the satellite in km (Use 483)</p>

<p>B = This is what I am trying to figure out.</p>

<p>In the paper it says what this is but it says some other things that I do not understand. The phase angle you use to get this should be 113.</p>

<p>The target output of this equation should be around -3.</p>

CC BY-SA 4.0
2018-12-16T01:53:00.043Z
This is what i have been working with https://stackoverflow.com/questions/19739831/is-there-any-way-to-calculate-the-visual-magnitude-of-a-satellite-iss
Nick Brown
CC BY-SA 4.0
2018-12-16T04:53:42.750Z
Here is where the equation is from http://www.satobs.org/seesat/Apr-2001/0313.html
Nick Brown
CC BY-SA 4.0
2018-12-16T08:59:07.850Z
What is "intrinsic magnitude"? Please write your answer out in terms of mathematical formulas, with defined symbols.
ProfRob
CC BY-SA 4.0
2018-12-16T14:41:10.967Z
Its the breightness of the satellite from 1000km away. For sake of example, use -1.3
Nick Brown
CC BY-SA 4.0
2018-12-16T15:12:10.933Z
With intrinsic magnitude as -1.3, a range of 485, and a phase angle of 113.9 (in degrees) it should be outputting around -3.
Nick Brown
CC BY-SA 4.0
2018-12-17T09:38:53.747Z
For some helpful information see [this](https://space.stackexchange.com/a/32065/12102) and [this](https://space.stackexchange.com/a/25121/12102) Give that a try. If you make any progress, update your question post here with the progress (not in a comment). Message me with the `@` if you need further clarification.
uhoh
CC BY-SA 4.0
2018-12-17T13:48:25.860Z
@uhoh would the apparent magnitude provided in https://space.stackexchange.com/questions/32064/will-it-be-possible-to-see-bfr-approaching-the-moon-from-earth-with-naked-eye/32065#32065 work for satellites in low earth orbit?
Nick Brown
CC BY-SA 4.0
2018-12-17T13:57:57.467Z
@uhoh would i be able to use intrinsic magnitude in that equation? I have the intrinsic magnitude for many satellites and i would like to be able to use this without having to research the albedo of thousands of satellites.
Nick Brown
CC BY-SA 4.0
2018-12-17T14:02:10.620Z
@uhoh Intrinsic magnitude is the apparent magnitude of the object at full phase from 1000 km away
Nick Brown
<satellite><artificial-satellite><mathematics><iss>
Calculating the apparent magnitude of a satellite
Nick Brown
# Calculating the apparent magnitude of a satellite

(Asked by: username_0 on 2018-12-16)

I'm writing a program that involves calculating the apparent magnitude of satellites from a ground location. I currently have the intrinsic magnitude of the satellites and the solar phase angle in degrees. I can't seem to find a formula that works.
I tried
magnitude = intrinsicMagnitude - 15 + 5 * Math.Log(distanceToSatellite) - 2.5 * Math.Log(Math.Sin(B) + (Math.PI - B) * Math.Cos(B));

(B is the phase angle)
...but it does not work (it's returning numbers like +30). I know it's wrong because I'm comparing it to heavens-above.com satellite passes.
intrinsicMagnitude = Visual magnitude at 1000km away (Use -1.3)
distanceToSatellite = Observer distance to the satellite in km (Use 483)
B = This is what I am trying to figure out.
In the paper it says what this is but it says some other things that I do not understand. The phase angle you use to get this should be 113.
The target output of this equation should be around -3.

**Tags:** satellite, artificial-satellite, mathematics, iss
> **Comments:**
> **username_0**: This is what i have been working with https://stackoverflow.com/questions/19739831/is-there-any-way-to-calculate-the-visual-magnitude-of-a-satellite-iss  
> **username_0**: Here is where the equation is from http://www.satobs.org/seesat/Apr-2001/0313.html  
> **username_1**: What is "intrinsic magnitude"? Please write your answer out in terms of mathematical formulas, with defined symbols.  
> **username_0**: Its the breightness of the satellite from 1000km away. For sake of example, use -1.3  
> **username_0**: With intrinsic magnitude as -1.3, a range of 485, and a phase angle of 113.9 (in degrees) it should be outputting around -3.  
> **username_2**: For some helpful information see [this](https://space.stackexchange.com/a/32065/12102) and [this](https://space.stackexchange.com/a/25121/12102) Give that a try. If you make any progress, update your question post here with the progress (not in a comment). Message me with the `@` if you need further clarification.  
> **username_0**: @uhoh would the apparent magnitude provided in https://space.stackexchange.com/questions/32064/will-it-be-possible-to-see-bfr-approaching-the-moon-from-earth-with-naked-eye/32065#32065 work for satellites in low earth orbit?  
> **username_0**: @uhoh would i be able to use intrinsic magnitude in that equation? I have the intrinsic magnitude for many satellites and i would like to be able to use this without having to research the albedo of thousands of satellites.  
> **username_0**: @uhoh Intrinsic magnitude is the apparent magnitude of the object at full phase from 1000 km away  

---

## 2 answers

### Answer by username_0 on 2018-12-17. Score: 3 | Accepted answer

This is for satellites with unknown size and orientation but known standard magnitude (Standard magnitude can be found on the satellite info page of heavens above, the number is called intrinsic magnitude)
The proper formula is 
            double distanceToSatellite = 485; //This is in KM
            double phaseAngleDegrees = 113.1; //Angle from sun->satellite->observer
            double pa = phaseAngleDegrees * 0.0174533; //Convert the phase angle to radians
            double intrinsicMagnitude = -1.8; //-1.8 is std. mag for iss


            double term_1 = intrinsicMagnitude;
            double term_2 = 5.0 * Math.Log10(distanceToSatellite / 1000.0);

            double arg = Math.Sin(pa) + (Math.PI - pa) * Math.Cos(pa);
            double term_3 = -2.5 * Math.Log10(arg);

            double apparentMagnitude = term_1 + term_2 + term_3;

This will give the apparent magnitude of the satellite.
Note: I gave the formula in C#


---

### Answer by username_2 on 2018-12-18. Score: 3

Congratulations to @NickBrown for his solution! Based on that equation and some additional references I'll just add a little more.

https://apps.dtic.mil/dtic/tr/fulltext/u2/785380.pdf
https://www.researchgate.net/publication/268194552_Large_phase_angle_observations_of_GEO_satellites

Calculating visual magnitude takes three input parameters

how good of a reflector the object is
the angle between the illumination and the viewing
the distances from illuminator and viewer are from the object

For astronomical objects we use absolute magnitude for item #1, for satellite viewing both absolute magnitude and intrinsic magnitude are used. Absolute magnitude is the visual magnitude of the object at 1 AU from the Sun and 1 AU from you, viewed full-on (phase angle = 0) which means you are sitting right next to the Sun.
Intrinsic magnitude is similar, but you are now only 1,000 km from the object with the Sun over your shoulder.
Either way, all of the albedo, size and shape information is lumped into the absolute or intrinsic magnitude, leaving only distances and angles.
The angle between the direction of illumination and the direction of viewing is called the phase angle. Think phases of the Moon for example. If the phase angle of the Moon were 90 degrees, it would be a half-moon. Zero would be full Moon and 180 degrees would be new Moon.
The modulation of the brightness as a function of phase angle was proposed by Vallerie, E.M. III, Investigation of Photometric Data Received from an Artificial Earth Satellite, AD #419069, Air Force Institute of Technology, Defense Documentation Center, Alexandria, Virginia, 1963, which I found in Observations and Modeling of GEO Satellites at Large Phase Angles by Rita L. Cognion, also in Researchgate
The dependence is given by the term
$$ \frac{1}{\pi}(\sin(\phi) + (\pi-\phi) \cos(\phi))$$
and looks like

For the satellite in the question at a distance of 483 kilometers and an intrinsic magnitude of -1.3, the the apparent magnitude seems to be about -2.0 and its dependence on phase angle is as follows:


Not all spacecraft are spherical with diffuse white surfaces nor spherical-cow-shaped.

For phase angle dependence of some more familliar shapes, see Figure 2 in Visible Magnitude of Typical Satellites in Synchronous Orbits William E. Krag, MIT, 1974 AD-785 380, which describes the problem nicely.

def Mapparent_from_Mintrinsic(Mint, d_km, pa):
    term_1 = Mint
    term_2 = +5.0 * np.log10(d_km/1000.)
    arg    = np.sin(pa) + (pi - pa) * np.cos(pa)
    term_3 = -2.5 * np.log10(arg)
    return term_1 + term_2 + term_3

import numpy as np
import matplotlib.pyplot as plt

halfpi, pi, twopi = [f*np.pi for f in (0.5, 1, 2)]
degs, rads = 180/pi, pi/180

Mintrinsic   = -1.3
d_kilometers = 483.

phase_angles = np.linspace(0, pi, 181)

Mapp = Mapparent_from_Mintrinsic(Mintrinsic, d_kilometers, phase_angles)

# https://astronomy.stackexchange.com/q/28744/7982
# https://www.researchgate.net/publication/268194552_Large_phase_angle_observations_of_GEO_satellites
# https://amostech.com/TechnicalPapers/2013/POSTER/COGNION.pdf
# https://apps.dtic.mil/dtic/tr/fulltext/u2/785380.pdf

if True:
    plt.figure()

    F = (1./pi)*(np.sin(phase_angles) + (pi-phase_angles)*np.cos(phase_angles))

    plt.suptitle('F = (1/pi)(sin(phi) + (pi-phi)cos(phi))', fontsize=16)

    plt.subplot(2, 1, 1)
    plt.plot(degs*phase_angles, F)
    plt.ylabel('F', fontsize=16)

    plt.subplot(2, 1, 2)
    plt.plot(degs*phase_angles, -2.5*np.log10(F))
    plt.xlabel('phase angle (degs)', fontsize=16)
    plt.ylabel('-2.5log10(F)', fontsize=16)
    plt.ylim(-1, 11)

    plt.show()

if True:
    plt.figure()
    plt.plot(degs*phase_angles, Mapp)
    plt.plot(degs*phase_angles[113], Mapp[113], 'ok')
    plt.text(90, -5, '{:0.2f} at {:0.1f} deg'.format(Mapp[113], 113), fontsize=16)
    plt.xlabel('phase angle (degs)', fontsize=16)
    plt.ylabel('mag', fontsize=16)
    plt.title('apparent mag of intrinsic mag=-1.3 at 483 km', fontsize=16)
    plt.ylim(-10, 15)
    plt.show()

> **Comments:**
> **username_0**: holy cow thanks for the answer. Im going to try to implement this instead of the one i provided. Ill let you know how good it is.  
> **username_2**: @NickBrown I just used *your equation*, it shouldn't be any different than your result. This answer is only to add additional background information and explanation.  
> **username_0**: Ah okay. I didnt fully read your functions. thanks!  
> **username_0**: Hmm. Mine actually is inaccurate. Yours works perfectly. Im going to edit my answer to show a c# version of yours. thanks!  
> **username_0**: its not *really* important. Some people use -1.3, some people use -1.8  
> **username_3**: Specular reflection can be spectacular. Think Iridium flares. But geostationary satellites can also show specular reflections of solar cells. This happens near the equinoxes, and can cause high speed regular flashes.  

---

