涡度相关通量介绍与数据处理方法

2025-05-16 16:41:29 点将科技 46

1       什么是涡度相关通量Eddy Covariance Flux)?

能量流动与物质循环是地圈、生物圈与大气圈相互作用的重要纽带,也是生态系统生态学研究的核心内容之一。涡度相关通量技术(Eddy Covariance, EC)是一种基于微气象原理的观测方法,通过测量垂直风速与气体浓度的瞬时变化,估算陆气界面物质(如CO₂、水汽)与能量的交换通量。该方法通过计算垂直风速与气体或能量脉动的协方差,能够直接获取植被冠层与大气之间的能量和物质交换,是目前国际上广泛采用的标准通量观测方法。相较于传统的通量估算方法,涡度相关技术具有以下显著优势:

  1. 整合性强:所测得的通量反映了整个生态系统与大气之间的净交换总量。例如,对CO₂的观测结果即为光合作用吸收与呼吸释放的合成值,即净生态系统交换量(NEE)。

  2. 时间连续性好:可实现全天候、全年无间断的自动化监测,提供从分钟、小时到日、月、年及年际等多时间尺度上的连续观测数据。

  3. 空间代表性强:通量塔的感应面积可覆盖数百平方米至数平方千米,远超传统的小尺度测量方式。

随着该技术在全球碳水循环研究中的广泛应用,长期、连续的涡度通量观测正为以下研究提供关键数据支持与机理理解:生态系统碳汇能力评估、水分与能量平衡分析、生态系统对气候变化的响应反馈、区域与全球尺度模型的优化与验证、以及极端气候事件对生态系统结构与功能的影响。通过单点长期观测,可明确不同气候区与植被类型下的碳水通量强度基线及其季节性与年际变异特征;而多站点的联网观测,则有助于揭示生态系统碳通量在区域与全球尺度的空间变异规律,进一步探讨温度和降水等气候因子在区域尺度上对碳通量格局的生物地理控制机制。涡度相关技术的原理与应用可参考以下文章:


陈世苹游翠海胡中民陈智张雷明, & 王秋凤. (2020). 涡度相关技术及其在陆地生态系统通量研究中的应用植物生态学报, 44(4), 291-304.
祁亚辉, & 王小丹. (2023). 陆地生态系统碳通量面临的挑战与机遇——基于涡度协方差测定生态学报, 43(8), 2979-2994.
图片


涡度相关技术通量观测示意图(CO2通量观测为例)(来源:陈世苹等,2020

2       涡度相关通量数据处理方法

通量数据处理一般遵循以下步骤:

1) 原始数据质量控制(如去除异常值、仪器错误)

2) 通量计算与坐标旋转

3) 通量修正

WPL 修正:考虑密度波动引起的误差

频率响应修正:补偿仪器对高频/低频信号的衰减

u* 过滤:去除低湍流条件下的数据

4) 数据插补与间隙填补

5) 年尺度的GPPReNEE推算。主要包括基于夜间NEE与温度回归,或者昼夜分割方法等。

2.1       使用REddyProc在线工具估算GPP

2.1.1      输入数据准备

REddyProc在线工具对于输入数据格式要求较为严格,例如时间格式、时间戳(半小时或小时)、变量命名、处理选项等方面。而REddyProc软件包则在这方面供了更多灵活性。详细数据输入要求可参考:https://www.bgc-jena.mpg.de/5624918/Input-Format

REddyProc在线工具提供的示例输入数据如下所示

数据

2 REddyProc在线工具的示例输入数据格式

数据格式

通量原始观测数据(*_EP-Summary.txt)示例。

首先我们需要从通量原始观测数据(*_EP-Summary.txt中提取这些变量并按半小时时间序列排列。下面提供Python代码可以将文件夹中所有*.txt文件中提取REddyProc在线工具输入数据变量并保存输出为*.txt格式。

import os

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

from scipy.optimize import curve_fit


datapath = r'/Users/Documents/Projects'

savepath = r'/Users/Documents/Projects'


txtfiles = os.listdir(datapath)

DF = pd.DataFrame()

for i, txtfile in enumerate(txtfiles):

    # 读取 .txt 文件(请替换成你实际的路径)

    df = pd.read_csv(datapath + '/' + txtfile, sep='\t', comment='#', na_values=['NA', 'NaN'])


    # 创建 datetime 字段

    df['datetime'] = pd.to_datetime(df['date'] + ' ' + df['time'], errors='coerce')


    # 添加 Year, DoY, Hour 列

    df['Year'] = df['datetime'].dt.year

    df['DoY'] = df['datetime'].dt.dayofyear

    df['Hour'] = df['datetime'].dt.hour + df['datetime'].dt.minute / 60


    # 重命名列名为 REddyProc 标准

    df = df.rename(columns={

        'co2_flux': 'NEE',

        'LE': 'LE',

        'H': 'H',

        'SWIN_1_1_1': 'Rg',   # 短波辐射

        'TA_1_1_1': 'Tair',

        'TS_1_1_1': 'Tsoil',

        'RH': 'rH',

        'VPD': 'VPD',

        'u*': 'Ustar'

    })


    # 选择需要的列

    df_rproc = df[['Year', 'DoY', 'Hour', 'NEE', 'LE', 'H', 'Rg', 'Tair', 'Tsoil', 'rH', 'VPD', 'Ustar']]

    DF = pd.concat([DF, df_rproc], ignore_index=True)


# 按时间排序

DF = DF.sort_values(by=['Year', 'DoY', 'Hour'])

# 判断Year值为空的行

idx = DF['Year'].isna()

DF = DF[~idx]

# 确保 Year 和 DoY 为整数

DF['Year'] = DF['Year'].astype(int)

DF['DoY'] = DF['DoY'].astype(int)

# 保存为 CSV 文件供 R 使用

DF.to_csv(savepath + "/for_REddyProc.txt", sep='\t',index=False)

下面是输出的for_REddyProc.txt数据

for_REddyProc.txt数据

代码输出的结果示例

2.1.2      使用在线工具估算GPP

然后将上述输出数据导入在线工具中,设置相关参数即可得到GPP估算结果:

GPP估算结果

5 REddyProc在线工具参数设置示例

2.2       使用夜间回归法估算GPP

有时候通量观测数据可能并不完整,例如在植被生长季中存在部分数据缺失情况。虽然大部分情况可以由REddyProc针对数据缺失提供的数据插补方法解决,然后当数据缺失较多或者只有几天不连续的数据时,想要估算GPP则需要采用夜间回归法。

夜间回归法主要是假设夜间NEE等于夜间呼吸Reco,利用夜间NEE和温度进行拟合,然后将该模型外推到白天温度,估算白天Reco。最后将RecoNEE相加得到估算GPP

2.2.1      选取夜间数据(例如辐射Rg<10 W/m2

2.2.2      拟合夜间NEE和温度(通常用指数函数)

Nee和温度

2.2.3      模型外推至白天温度,估算白天Reco

2.2.4      估算GPP

估算GPP

下面是代码实现:


# %% GPP calculation

df = pd.read_csv(savepath + "/for_REddyProc.txt", sep='\t', comment='#', na_values=['NA', 'NaN'])

df.loc[(df['NEE']<-40)>10)] = np.nan  # Remove outliers

df = df.fillna(0)  # Fill missing values with -9999

df['Tair'] = df['Tair'] - 273.15  # Convert Kelvin to Celsius


# Filter nighttime data (PAR ~ 0)

night = df[df['Rg'] < 10]  # Adjust threshold if needed


# Fit exponential respiration model: NEE = Reco = R0 * exp(E0 * T)

def resp_model(x, a, b):

    return a * np.exp(b * x)


params, _ = curve_fit(resp_model, night['Tair'], night['NEE'])


# Estimate Reco for all time

df['Reco'] = resp_model(df['Tair'], *params)

df.loc[df['Reco']<0.2,'Reco'] = np.nan


# Estimate GPP

df['GPP'] = df['Reco'] - df['NEE']

# save df

df.to_csv(savepath + "/GPP_estimated.csv", index=False)

# Plot GPP

df['GPP'].plot(title='Estimated GPP (Nighttime Regression Method)', ylabel='GPP (µmol m⁻² s⁻¹)', figsize=(10, 5))

plt.grid()

plt.show()


来源:本文转载微信公众号生态学笔记,由Rhine(笔名)整理。转在的目的在于传递更多的知识,如有侵权行为,请联系我们,我们会立即删除。

19921678018
最新产品
联系