9,371
edits
| Line 266: | Line 266: | ||
| style="font-size: 1.1em; margin-top: 10px; opacity: 0.95;" | Go measure some THD and make your speakers proud 🎵 | | style="font-size: 1.1em; margin-top: 10px; opacity: 0.95;" | Go measure some THD and make your speakers proud 🎵 | ||
|} | |} | ||
== THD: Mathematical Formulas and Theory == | |||
=== Standard THD Definition === | |||
==== THD as Percentage ==== | |||
The most common definition of THD is the ratio of RMS harmonic content to RMS fundamental: | |||
<math> | |||
\text{THD\%} = \frac{\sqrt{\sum_{n=2}^{N} V_n^2}}{V_1} \times 100 | |||
</math> | |||
Where: | |||
* <math>V_1</math> = RMS amplitude of fundamental (1st harmonic) | |||
* <math>V_n</math> = RMS amplitude of nth harmonic (n = 2, 3, 4, ...) | |||
* <math>N</math> = total number of harmonics analyzed | |||
This represents the percentage of harmonic content relative to the fundamental. | |||
==== Alternative Form (Total Distortion) ==== | |||
Some standards define THD as: | |||
<math> | |||
\text{THD} = \frac{\sqrt{\sum_{n=2}^{N} V_n^2}}{\sqrt{V_1^2 + \sum_{n=2}^{N} V_n^2}} | |||
</math> | |||
This normalizes to total RMS content (including fundamental). This is sometimes called '''THD+N''' (Total Harmonic Distortion + Noise). | |||
===== Relationship: THD% vs THD ===== | |||
<math> | |||
\text{THD\%} = \frac{\text{THD}}{\sqrt{1 - \text{THD}^2}} \times 100 | |||
</math> | |||
For small distortions (THD < 0.1): <math>\text{THD\%} \approx 100 \times \text{THD}</math> | |||
--- | |||
=== THD in Decibels === | |||
==== From Ratio ==== | |||
<math> | |||
\text{THD}_{\text{dB}} = 20 \log_{10}\left(\frac{\sqrt{\sum_{n=2}^{N} V_n^2}}{V_1}\right) | |||
</math> | |||
==== From Percentage ==== | |||
<math> | |||
\text{THD}_{\text{dB}} = 20 \log_{10}\left(\frac{\text{THD\%}}{100}\right) | |||
</math> | |||
===== Interpretation ===== | |||
* <math>\text{THD}_{\text{dB}} = -20 \text{ dB}</math> → <math>\text{THD\%} \approx 10\%</math> | |||
* <math>\text{THD}_{\text{dB}} = -40 \text{ dB}</math> → <math>\text{THD\%} \approx 1\%</math> | |||
* <math>\text{THD}_{\text{dB}} = -60 \text{ dB}</math> → <math>\text{THD\%} \approx 0.1\%</math> | |||
Every -20 dB represents a factor of 10 reduction in THD%. | |||
--- | |||
=== Implementation in THD Sweep Measurement === | |||
==== Calculation Functions ==== | |||
The application uses the following approach: | |||
===== Python Implementation ===== | |||
<source lang="python"> | |||
import math | |||
def compute_thd_percent(fundamental_v, harmonics_v): | |||
""" | |||
Calculate THD as percentage. | |||
Args: | |||
fundamental_v: Fundamental amplitude (H1) | |||
harmonics_v: List of harmonic amplitudes [H2, H3, H4, ...] | |||
Returns: | |||
THD percentage (0-100+) | |||
""" | |||
if not harmonics_v or not fundamental_v or fundamental_v == 0: | |||
return None | |||
rms_harmonics = math.sqrt(sum(h * h for h in harmonics_v)) | |||
return (rms_harmonics / abs(fundamental_v)) * 100.0 | |||
def compute_thd_db(fundamental_v, harmonics_v): | |||
""" | |||
Calculate THD in decibels. | |||
Args: | |||
fundamental_v: Fundamental amplitude (H1) | |||
harmonics_v: List of harmonic amplitudes [H2, H3, H4, ...] | |||
Returns: | |||
THD in dB (-200 to 0 dB) | |||
""" | |||
if not harmonics_v or not fundamental_v or fundamental_v == 0: | |||
return None | |||
rms_harmonics = math.sqrt(sum(h * h for h in harmonics_v)) | |||
ratio = rms_harmonics / abs(fundamental_v) | |||
return 20.0 * math.log10(ratio) if ratio > 0 else -200.0 | |||
</source> | |||
===== Coherence Between DC1 and DC2 ===== | |||
The two DC inputs maintain mathematical coherence: | |||
<math> | |||
\text{THD}_{\text{dB}} = 20 \log_{10}\left(\frac{\text{THD\%}}{100}\right) | |||
</math> | |||
Example: | |||
* If DC1 (%) = 5.5 | |||
* Then DC2 (dB) = 20 × log₁₀(5.5/100) = 20 × log₁₀(0.055) ≈ -25.18 dB | |||
--- | |||
=== Measurement Configuration === | |||
==== Harmonic Analysis ==== | |||
The application measures up to '''N = 9 harmonics''' by default: | |||
* '''H1''' (Fundamental): ~1 kHz to ~20 kHz (sweep dependent) | |||
* '''H2-H9''' (Harmonics): 2× to 9× fundamental frequency | |||
For a 1 kHz fundamental: | |||
* H1 = 1.000 kHz | |||
* H2 = 2.000 kHz | |||
* H3 = 3.000 kHz | |||
* H4 = 4.000 kHz | |||
* ... up to | |||
* H9 = 9.000 kHz | |||
==== Display Zones ==== | |||
Both Max and Harmonic markers use: | |||
* '''Interpolation Type 1''' (X-axis): Linear interpolation for frequency precision | |||
* '''Display Zone Type 4''' (FFT magnitude): Standard magnitude spectrum | |||
This ensures: | |||
* Frequency accuracy to ~1 Hz (depending on FFT resolution) | |||
* Amplitude accuracy to ~0.1 dB | |||
--- | |||
=== Physical Quantities Configuration === | |||
The three DC Simulated inputs are configured with specific physical quantities: | |||
{| class="wikitable" | |||
|- | |||
! DC Channel !! Physical Quantity !! Unit !! Formula !! Range | |||
|- | |||
| DC1 || Percentage || % || <math>\text{THD\%} = \frac{\sqrt{\sum V_n^2}}{V_1} \times 100</math> || 0 - 100% | |||
|- | |||
| DC2 || Ratio || dB || <math>20 \log_{10}(\text{ratio})</math> || -200 to 0 dB | |||
|- | |||
| DC3 || Frequency || Hz || <math>f_{\text{max}}</math> (from Max marker) || 0 - 40000 Hz | |||
|} | |||
The application queries '''GetSettingValues()''' to dynamically find the correct enum index for each physical quantity, ensuring compatibility across NVGate configurations. | |||
--- | |||
=== THD Standards Reference === | |||
==== IEC 61000-3-2 (EMC - Harmonic Current) ==== | |||
For equipment <16A supply current, limits defined for harmonics up to 40th: | |||
<math> | |||
\text{Harmonic order } n: I_h \leq I_{\text{limit}}(n) | |||
</math> | |||
Common limits (Class A equipment): | |||
* H3: 30% of I1 | |||
* H5: 10% of I1 | |||
* H7: 7% of I1 | |||
* H9: 3% of I1 | |||
==== Audio Industry Standards ==== | |||
* '''Professional Audio (AES)''': THD < 0.05% @ 1 kHz | |||
* '''Hi-Fi''': THD < 0.1% @ 1 kHz, 20 Hz - 20 kHz | |||
* '''Consumer Audio''': THD < 1% @ 1 kHz | |||
* '''Basic Consumer''': THD < 5% @ 1 kHz | |||
--- | |||
=== Measurement Uncertainty === | |||
The THD measurement uncertainty depends on: | |||
* '''FFT Resolution''': <math>\Delta f = \frac{f_s}{N_{\text{FFT}}}</math> | |||
* '''Windowing''': Choice of window function (Hann, Hamming, etc.) | |||
* '''Interpolation''': Type 1 (X-axis) reduces frequency leakage | |||
* '''Signal Stability''': Amplitude variation during sweep | |||
For typical speaker measurements: | |||
* Frequency uncertainty: ±2 Hz | |||
* Amplitude uncertainty: ±0.5 dB | |||
* THD uncertainty: ±2% (relative) | |||
--- | |||
=== Examples === | |||
==== Example 1: Good Speaker (5% THD) ==== | |||
Given: | |||
* H1 = 1.0 V (fundamental at 1 kHz) | |||
* H2 = 0.05 V | |||
* H3 = 0.02 V | |||
* H4 = 0.01 V | |||
* H5 = 0.005 V | |||
Calculation: | |||
<math> | |||
\text{RMS}_{\text{harmonics}} = \sqrt{0.05^2 + 0.02^2 + 0.01^2 + 0.005^2} | |||
= \sqrt{0.0025 + 0.0004 + 0.0001 + 0.000025} | |||
= \sqrt{0.003025} \approx 0.055 \text{ V} | |||
</math> | |||
<math> | |||
\text{THD\%} = \frac{0.055}{1.0} \times 100 = 5.5\% | |||
</math> | |||
<math> | |||
\text{THD}_{\text{dB}} = 20 \log_{10}(0.055) \approx -25.18 \text{ dB} | |||
</math> | |||
'''Result:''' DC1 = 5.5% | DC2 = -25.18 dB | |||
==== Example 2: Poor Speaker (20% THD) ==== | |||
Given: | |||
* H1 = 1.0 V | |||
* H2 = 0.15 V | |||
* H3 = 0.08 V | |||
* H4 = 0.05 V | |||
* H5 = 0.03 V | |||
<math> | |||
\text{RMS}_{\text{harmonics}} = \sqrt{0.15^2 + 0.08^2 + 0.05^2 + 0.03^2} | |||
\approx 0.18 \text{ V} | |||
</math> | |||
<math> | |||
\text{THD\%} = 18\% | |||
</math> | |||
<math> | |||
\text{THD}_{\text{dB}} = 20 \log_{10}(0.18) \approx -14.89 \text{ dB} | |||
</math> | |||
'''Result:''' DC1 = 18% | DC2 = -14.89 dB | |||
--- | |||
=== References === | |||
* [https://en.wikipedia.org/wiki/Total_harmonic_distortion Wikipedia - THD] | |||
* IEC 61000-3-2:2018 - Electromagnetic compatibility | |||
* AES Recommended Practice for Measurements of Single-Channel and Stereo Analog Audio | |||
* Typical Audio Specifications and Measurements - Analog Devices | |||
--- | |||
'''Last Updated:''' 2026-04-15 | |||
'''Format:''' MediaWiki with LaTeX formulas | |||