Stack test to fence line

Source testing · from the analyser to the receptor

The stack tester's van is parked at the base of a natural-gas boiler stack, sample line run up to the port. The analyser settles at 120 ppm of NOx with the flue oxygen reading 5.2 % — but the permit talks in concentrations corrected to 3 % O₂, so the raw number means nothing to a regulator yet. The stack moves 18 m³/s of exhaust. Downwind, the nearest neighbour sits where the dispersion tables say σy = 200 m and σz = 100 m, the wind at stack height is 5 m/s, and the effective stack height works out to 120 m. Correct the reading, convert it to mass, find what the stack actually emits, and find what the neighbour breathes.

uC_measQ_vσyσzHC

Every number in this problem is editable — change any value below and the whole chain recalculates.

Given
  • C_meas = 120 ppmAnalyser NOx reading
  • O₂,meas = 5.2 %Flue oxygen at the probe
  • O₂,ref = 3 %Permit reference oxygen
  • Q_v = 18 m³/sStack volumetric flow
  • u = 5 m/sWind speed at stack height
  • H = 120 mEffective stack height
Determine
  1. (a)the concentration corrected to 3 % O₂
  2. (b)that concentration as a mass per cubic metre
  3. (c)the emission rate the stack actually puts up
  4. (d)the ground-level concentration at the neighbour's fence
Step 1 of 4(a) · solve for Corrected concentration

The correction exists because dilution is free: pull extra air through a boiler and every ppm reading drops while the actual emission does not change at all. Normalising to 3 % O₂ takes the tramp air back out — 120 ppm at 5.2 % oxygen is really 136.8 ppm at the permit's reference, a 14 % difference a regulator will absolutely notice.

CmeasO2,measCcorrO2,ref
Rearranged for C_corr
Ccorr=Cmeas20.9O2,ref20.9O2,measC_{corr} = C_{meas} \, \frac{20.9 - O_{2,ref}}{20.9 - O_{2,meas}}
Your values, in your units
Ccorr=(120 ppm)20.9(3 %)20.9(5.2 %)C_{corr} = \left( 120\ \text{ppm} \right) \cdot \frac{20.9 - \left( 3\ \text{\%} \right)}{20.9 - \left( 5.2\ \text{\%} \right)}
Answer
Ccorr=136.82 ppmC_{corr} = 136.82\ \text{ppm}

Carried onward at full precision, not this rounded figure.

Open the Emission Correction to Reference Oxygen solver →

Step 2 of 4(b) · solve for Mass concentration

A ppm is a count of molecules; a limit is written in mass. The bridge is the molar mass — and for NOx the convention is to report AS NO₂ at 46.01 g/mol, whatever mix of NO and NO₂ actually left the flame. 136.8 ppm × 46.01 / 24.45 lands at 257.5 mg/m³.

ppmMC
Rearranged for C
C=ppmM24.45C = \frac{ppm \cdot M}{24.45}
136.82 ppmcarried from step 1
Your values, in your units
C=(0.0136815 %)(46.01 g/mol)24.45C = \frac{\left( 0.0136815\ \text{\%} \right) \cdot \left( 46.01\ \text{g/mol} \right)}{24.45}
Converted to base units
C=(136.815 ppm)(46.01 g/mol)24.45C = \frac{\left( 136.815\ \text{ppm} \right) \cdot \left( 46.01\ \text{g/mol} \right)}{24.45}
Answer
C=257.46 μg/LC = 257.46\ \mu\text{g/L}

Carried onward at full precision, not this rounded figure.

Open the ppm to mg/m³ Conversion solver →

Step 3 of 4(c) · solve for Emission rate

Concentration says how dirty the exhaust is; the emission rate says how much is actually reaching the sky, and only the second is a quantity of anything. 257.5 mg/m³ leaving at 18 m³/s is 4.63 g/s — about 400 kg of NO₂ equivalent per day.

QvCE
Rearranged for E
E=CQvE = C \, Q_v
257.46 μg/Lcarried from step 2
Your values, in your units
E=(0.000257459 kg/m3)(18 m3/s)E = \left( 0.000257459\ \text{kg/m}^{3} \right) \cdot \left( 18\ \text{m}^{3}\text{/s} \right)
Converted to base units
E=(257.459 mg/m3)(18 m3/s)E = \left( 257.459\ \text{mg/m}^{3} \right) \cdot \left( 18\ \text{m}^{3}\text{/s} \right)
Answer
E=16.683 kg/hE = 16.683\ \text{kg/h}

Carried onward at full precision, not this rounded figure.

Open the Emission Rate from Stack Concentration solver →

Step 4 of 4(d) · solve for Ground-level concentration

Now the atmosphere does what the stack cannot: spread it. Across those dispersion coefficients and under that wind the 4.63 g/s arrives at ground level as 7.2 µg/m³ — the exponential on H² is doing most of the protecting, which is exactly why stacks are tall.

HQuσzσyC
Rearranged for C
C=QπσyσzueH2/(2σz2)C = \frac{Q}{\pi \sigma_y \sigma_z u} \, e^{-H^{2}/(2\sigma_z^{2})}
16.683 kg/hcarried from step 3
Your values, in your units
C=(0.00463426 kg/s)π(200 m)(100 m)(5 m/s)e(120 m)2/(2(100 m)2)C = \frac{\left( 0.00463426\ \text{kg/s} \right)}{\pi \cdot \left( 200\ \text{m} \right) \cdot \left( 100\ \text{m} \right) \cdot \left( 5\ \text{m/s} \right)} \, e^{-\left( 120\ \text{m} \right)^{2}/(2 \cdot \left( 100\ \text{m} \right)^{2})}
Converted to base units
C=(4.63426 g/s)π(200 m)(100 m)(5 m/s)e(120 m)2/(2(100 m)2)C = \frac{\left( 4.63426\ \text{g/s} \right)}{\pi \cdot \left( 200\ \text{m} \right) \cdot \left( 100\ \text{m} \right) \cdot \left( 5\ \text{m/s} \right)} \, e^{-\left( 120\ \text{m} \right)^{2}/(2 \cdot \left( 100\ \text{m} \right)^{2})}
Answer
C=7.1802e09 kg/m3C = 7.1802e-09\ \text{kg/m}^{3}

Carried onward at full precision, not this rounded figure.

Open the Gaussian Plume Ground-Level Concentration solver →

Answer

Therefore the analyser's 120 ppm is 136.8 ppm at reference oxygen, 257.5 mg/m³ as mass, an emission of 4.63 g/s from the stack — and 7.2 µg/m³ in the air at the fence line, a dilution of about thirty-five million to one between the flue and the neighbour's yard.

Why this order

This is the whole logic of source testing in one run: the analyser reads a ratio, the permit reads a corrected ratio, the inventory reads a mass rate, and the neighbour breathes a concentration — four different quantities that get called “the emissions” interchangeably in conversation and never are. The oxygen correction comes first because it is the anti-cheating step: without it, leaning the burner or cracking a dilution damper would “comply” any stack in an afternoon. The molar-mass conversion carries the one convention worth memorising — NOx is reported as NO₂, so 46.01 g/mol goes in even though most of what leaves the flame is NO at 30.01. Use 30 and every downstream number is 35 % flattering.

The place people go wrong is at the end, reading the 7.2 µg/m³ as “the” concentration at the fence. It is the concentration on the plume centreline, under one stability class, at one wind speed — move the wind, change the sun, and σy and σz change by factors, not percent. A screening number tells you whether to do the real modelling; it never replaces it.

Carried values move at full precision, not the rounded figure shown — chaining rounded numbers compounds error.