基于MATLAB绘制CALIPSO Level 2产品中体积退偏比(Volume Depolarization Ratio, VDR)垂直廓线和频率分布直方图
一、数据读取与预处理
%% 读取CALIPSO Level 2数据
FILE_NAME_L2 = 'CAL_LID_L2_VFM-ValStage1-V3-41.2021-11-29T23-32-39ZD.hdf';
info = hdfinfo(FILE_NAME_L2);% 读取关键变量
vdr = hdfread(FILE_NAME_L2, 'Volume_Deconvolution_Ratio_532'); % 体积退偏比
height = hdfread(FILE_NAME_L2, 'Lidar_Data_Altitudes'); % 高度数据
lat = hdfread(FILE_NAME_L2, 'Latitude'); % 纬度
lon = hdfread(FILE_NAME_L2, 'Longitude'); % 经度% 数据维度解析(示例为5km高度范围)
[~,n_lat,n_lon] = size(vdr); % 原始数据维度
vdr = permute(vdr, [2,3,1]); % 转换为[纬度×经度×高度]结构
二、垂直廓线绘制
1. 数据预处理
% 定义高度分辨率(根据CALIPSO数据手册)
alt_res = [30, 180, 300]; % 低/中/高层分辨率(m)
alt_bounds = [-0.5, 8.2, 20.2, 30.1]; % 分层边界(km)% 生成统一高度网格
alt_grid = [];
for i = 1:numel(alt_bounds)-1alt_layer = alt_bounds(i):alt_res(i)/1000:alt_bounds(i+1);alt_grid = [alt_grid; alt_layer(1:end-1)]; % 去除重复边界
end
2. 绘制垂直廓线
%% 选择区域(示例:北纬40-60°)
lat_idx = lat >= 40 & lat <= 60;
vdr_sub = squeeze(vdr(lat_idx,:,:)); % 提取区域数据
alt_sub = squeeze(alt_grid(:,lat_idx)); % 对应高度% 绘制多剖面
figure;
hold on;
colors = lines(size(alt_sub,1));
for i = 1:size(alt_sub,1)plot(vdr_sub(i,:), alt_sub(i,:), 'Color', colors(i,:));
end
hold off;% 图形设置
xlabel('Volume Depolarization Ratio (VDR)');
ylabel('Altitude (km)');
title('CALIPSO VDR Vertical Profiles (40-60°N)');
legend('Layer 1', 'Layer 2', 'Layer 3');
grid on;
三、频率分布直方图
1. 数据统计
% 展平数据(排除无效值)
vdr_flat = vdr(:);
vdr_flat(vdr_flat == -9999) = [];
vdr_flat = vdr_flat(vdr_flat >= -1 & vdr_flat <= 1); % 限制物理范围% 定义分箱边界
bins = linspace(-1, 1, 100); % 100个分箱
2. 绘制直方图
figure;
histogram(vdr_flat, bins, 'Normalization', 'pdf', 'EdgeColor', 'none');
hold on;
x = linspace(-1,1,1000);
y = 0.5*exp(-0.5*x.^2); % 标准正态分布参考线
plot(x, y, 'r--', 'LineWidth', 1.5);% 图形设置
xlabel('Volume Depolarization Ratio');
ylabel('Probability Density');
title('CALIPSO VDR Frequency Distribution');
legend('Observed Data', 'Gaussian Fit');
grid on;
四、参数优化
1. 动态范围调整(针对气溶胶/云区分)
% 根据气溶胶类型设置颜色映射
cmap = parula(256);
cmap(1:50,:) = hsv(50); % 增强低值区对比度% 绘制增强版廓线
figure;
contourf(lat, alt_grid, rot90(vdr,1), 'LineColor', 'none');
colormap(cmap);
colorbar;
caxis([-0.5, 0.5]);
2. 多维度分析(结合分类标志)
% 读取分类标志
feature_flag = hdfread(FILE_NAME_L2, 'Feature_Classification_Flags');% 提取云层数据(假设分类标志2为云)
cloud_mask = bitget(feature_flag, 2) == 1;
vdr_cloud = vdr(repmat(cloud_mask, [1,1,size(vdr,3)]));% 绘制云层VDR分布
figure;
histogram(vdr_cloud(:), bins, 'Normalization', 'pdf');
title('Cloud Particle VDR Distribution');
五、完整代码整合
%% 主程序
clear; clc;% 数据读取
FILE_NAME_L2 = 'CAL_LID_L2_VFM-ValStage1-V3-41.2021-11-29T23-32-39ZD.hdf';
info = hdfinfo(FILE_NAME_L2);
vdr = hdfread(FILE_NAME_L2, 'Volume_Deconvolution_Ratio_532');
height = hdfread(FILE_NAME_L2, 'Lidar_Data_Altitudes');
[~,n_lat,n_lon] = size(vdr);
vdr = permute(vdr, [2,3,1]);% 高度网格构建
alt_bounds = [-0.5, 8.2, 20.2, 30.1];
alt_res = [30, 180, 300]/1000;
alt_grid = [];
for i = 1:numel(alt_bounds)-1alt_layer = alt_bounds(i):alt_res(i):alt_bounds(i+1);alt_grid = [alt_grid; alt_layer(1:end-1)];
end% 垂直廓线绘制
figure;
hold on;
lat_idx = (lat >= 40) & (lat <= 60);
for i = 1:size(alt_grid,1)plot(squeeze(vdr(lat_idx,i)), squeeze(alt_grid(i,:)), 'LineWidth', 1.5);
end
hold off;
xlabel('VDR'); ylabel('Altitude (km)');
legend('Low Layer', 'Mid Layer', 'High Layer');% 直方图绘制
figure;
histogram(vdr(:), linspace(-1,1,100), 'Normalization', 'pdf');
hold on;
x = linspace(-1,1,1000);
plot(x, 0.5*exp(-0.5*x.^2), 'r--');
xlabel('VDR'); ylabel('PDF');
legend('Data', 'Gaussian Fit');
参考代码 用MATLAB绘制CALIPSO的二级产品中的体积退偏比的垂直廓线和频率分布直方图 www.youwenfan.com/contentcnk/78752.html
六、扩展功能
-
动态时间序列分析:
% 读取时间序列数据 time = hdfread(FILE_NAME_L2, 'Profile_UTC_Time'); t = datetime(time, 'ConvertFrom', 'posixtime');% 动画绘制 h = animatedline('Color',[0.2,0.6,0.8]); for i = 1:numel(t)cla;plot(squeeze(vdr(:,:,i)), squeeze(alt_grid), 'LineWidth',1.5);title(sprintf('CALIPSO VDR - %s', datestr(t(i))));ylim([-0.5,30]);drawnow; end -
多源数据融合:
% 读取Aerosol Layer Type数据 aot = hdfread(FILE_NAME_L2, 'Layer_Top_Altitude');% 三维可视化 scatter3(lon,lat,alt_grid(:,:,1),10,vdr(:,:,1),'filled'); colormap(jet); colorbar; view(3); axis tight;