具体计算策略本质上是根据某一个变量(如二氧化氮)的观测值,找到对应的污染物区间及对应的 IAQI 区间, 做一次线性插值,得到对应的变量的 IAQI。 所有的 IAQI 取最大值就是 AQI。

国标计算条件#

HJ 633-2012 文件中的「空气质量分指数及对应的污染物项目浓度限值」表摘录如下:

空气质量分指数(IAQI)污染物项目浓度限值
二氧化硫(SO2)
24 小时
平均/(μg/m3)
二氧化硫(SO2)
1 小时
平均/ ((μg/m3)1
二氧化氮(NO2) 24 小时 平均/ )(μg/m3)二氧化氮(NO2)
1 小时
平均/(μg/m3)(1)
颗粒物 (粒径小于等于 10µm) 24小时 平均/(μg/m3)一氧化碳(CO)
24 小时
平均/(mg/m3)
一氧化碳(CO) 1 小时 平均/ ((mg/m3)1臭氧(O3)1 小时 平均/ )(μg/m3)臭氧(O3)8 小时滑 动平均/(μg/m3)颗粒物 (粒径小于等于 2.5µm)24 小时 平均/(μg/m3)
00000000000
505015040100502516010035
1001505008020015041020016075
1504756501807002501435300215115
20080080028012003502460400265150
3001600(2)56523404203690800800250
4002100(2)7503090500481201000(3)350
5002620(2)9403840600601501200(3)500
说明:(1)二氧化硫(SO2)、二氧化氮(NO2)和一氧化碳(CO)的 1 小时平均浓度限值仅用于实时报,在日报中 需使用相应污染物的 24 小时平均浓度限值。

(2)二氧化硫(SO2)1 小时平均浓度值高于 800 μg/m 3的,不再进行其空气质量分指数计算,二氧化硫(SO2) 空气质量分指数按 24 小时平均浓度计算的分指数报告。

(3)臭氧(O3)8 小时平均浓度值高于 800 μg/m 3的,不再进行其空气质量分指数计算,臭氧(O3)空气质量 分指数按 1 小时平均浓度计算的分指数报告。

计算公式如下:

$$ IAQI_{P} = \frac{IAQI_{Hi}-IAQI_{Lo}}{BP_{Hi}-BP_{Lo}} (C_{P} - BP_{Lo}) + IAQI_{Lo} $$

式中:

  • $IAQI_{P}$ 污染物项目 $P$ 的空气质量分指数;
  • $C_{P}$ 污染物项目 $P$ 的质量浓度值
  • $BP_{Hi}$ 表中与 $C_{P}$ 相近的污染物浓度限值的高位值
  • $BP_{Lo}$ 表中与 $C_{P}$ 相近的污染物浓度限值的低位值
  • $IAQI_{Hi}$ 表中与 $BP_{Hi}$ 对应的空气质量分指数
  • $IAQI_{Lo}$ 表中与 $BP_{Lo}$ 对应的空气质量分指数。

实时报时间周期为 1 小时,每一整点时刻后即可发布各监测点位的实时报,滞后时间不应超过 1 小时。实时报的指标包括二氧化硫(SO2)、二氧化氮(NO2)、臭氧(O3)、一氧化碳(CO)、颗粒物(粒径小于等于 10µm)和颗粒物(粒径小于等于 2.5µm)的 1 小时平均,以及臭氧(O3)8 小时滑动平均 和颗粒物(粒径小于等于 10µm)、颗粒物(粒径小于等于 2.5µm)的 24 小时滑动平均,共计 9 个指标。

实时报里采用的「颗粒物(粒径小于等于 2.5µm)的 1 小时平均」指标在表格「空气质量分指数(IAQI)」中并没有显示列出,不确定原因。

为了避免概念混淆,实时发布中以当前 1 小时浓度计算的指数将使用“实时空气质量指数”的全称,不再出现 AQI 的英文缩写;而空气质量日报中以日均浓度计算的指数仍沿用 AQI 的英文缩写 — 《本次实时发布系统改版主要做了哪些修改》1

国标计算例子#

以某观测站某时刻发布的数据为例子(只有 6 个变量,相比于「实时报」规定的 9 个变量少了 3 个历史滑动平均变量):

- PM2.5: 16
- PM10: 88
- CO: 0.2
- SO2: 3
- NO2: 11
- O3: 75

每个变量计算对应的 IAQI 值:

$$ IAQI_{All} = \begin{cases} IAQI_{PM2.5} = \frac{50-0}{35-0}(16-0) + 0 \approx 23 \newline IAQI_{PM10} = \frac{100-50}{150-50}(88-50) + 50 = 69 \newline IAQI_{CO} = \frac{50-0}{100-0}(0.2-0) + 0 = 0.1 \newline IAQI_{SO_{2}} = \frac{50-0}{50-0}(3-0) + 0 = 3 \newline IAQI_{NO_{2}} = \frac{50-0}{100-0}(11-0) + 0 = 5.5 \newline IAQI_{O_{3}} = \frac{50-0}{100-0}(75-0) + 0 = 37.5 \end{cases} $$

然后取最大值:

$$ AQI = max(IAQI_{All}) = 69 $$

首要污染物是「颗粒物(PM10)」

国标和美标的区别#

单位#

国标单位 基本都是 μg/m3 或者 mg/m3

而美标用了 μg/m3,PPM,PPB 三种单位。

如果想用中国观测站的数据计算对应的美标 AQI 则要做一次单位转换,相应的系数很容易搜索到。

国标和美标哪个更严格#

主要对比下 PM2.5,PM10 两个变量在国标和美标下的 IAQI 取值区间
国标与美标 PM2.5 和 PM10 的 IAQI 趋势

代码如下:

import matplotlib.pyplot as plt

plt.rcParams["figure.dpi"] = 500
plt.rcParams["axes.unicode_minus"] = False
plt.rcParams["font.sans-serif"] = ["Songti SC"]
plt.style.use("ggplot")

ch_pm25 = [0, 35, 75, 115, 150, 250, 350, 500]
ch_pm25_iaqi = [0, 50, 100, 150, 200, 300, 400, 500]
plt.plot(ch_pm25, ch_pm25_iaqi, label="国标 PM2.5-IAQI 趋势")

usa_pm25 = [0, 12.0, 12.1, 35.4, 35.5, 55.4, 55.5, 150.4, 150.5, 250.4, 250.5, 500.4]
usa_pm25_iaqi = [0, 50, 51, 100, 101, 150, 151, 200, 201, 300, 301, 500]
plt.plot(usa_pm25, usa_pm25_iaqi, label="美标 PM2.5-IAQI 趋势")

ch_pm10 = [0, 50, 150, 250, 350, 420, 500, 600]
ch_pm10_iaqi = [0, 50, 100, 150, 200, 300, 400, 500]
plt.plot(ch_pm10, ch_pm10_iaqi, label="国标 PM10-IAQI 趋势")

usa_pm10 = [0, 54, 55, 154, 155, 254, 255, 354, 355, 424, 425, 604]
usa_pm10_iaqi = [0, 50, 51, 100, 101, 150, 151, 200, 201, 300, 301, 500]
plt.plot(usa_pm10, usa_pm10_iaqi, label="美标 PM10-IAQI 趋势")

plt.legend()
plt.show()
# plt.savefig("aqi-diff.png")

参考资料#