雷达数据,分辨率较高,通过一个格网有多个数据点,因此为了更好的成图展示,将其填充到格网,并对格网取平均值
function backscatter_grid = mean_backscatter(minlat,minlong,grid_scale,dim1_global_longitude,dim1_global_latitude,dim2_global_lat,dim2_global_long,integral_longitude, integral_latitude, integral_predicted_backscatter_values)
% 输入:
% integral_longitude: (N, M) 数组,包含经度 % integral_latitude: (N, M) 数组,包含纬度 % integral_predicted_backscatter_values: (N, M) 数组,包含后向散射系数
% 输出: % backscatter_grid: (G, H) 数组,全球格网数据,每个格子包含后向散射系数值 % scale:格网间隔,及图像分辨率
% 确保输入为双精度 %某一个函数好像要求数据为double
integral_longitude = double(integral_longitude);
integral_latitude = double(integral_latitude);
integral_predicted_backscatter_values = double(integral_predicted_backscatter_values);
% 初始化三维数组
num_layers = 50; % 总层数 这里选择50是因为,在我的大致计算过在一个网格内最多有36个数据,如果网格尺度grid_scale为0.1度的话,50就太大了,没必要
data_3D = NaN(length(dim1_global_latitude), length(dim1_global_longitude), num_layers); % 初始化为 NaN
mean_data = NaN(length(dim1_global_latitude), length(dim1_global_longitude));
%将合成数据,按照经纬度填充到对应格网中,然后取平均值
for i=1:length(integral_latitude)
radar_point_lat=integral_latitude(i); %-81.83
radar_point_lon=integral_longitude(i); %51.14
grid_point_lat = radar_point_lat - (minlat); %全部改为正数 便于计算
grid_point_lon = radar_point_lon - (minlong);
index_lat = fix(grid_point_lat/grid_scale);
index_lon = fix(grid_point_lon/grid_scale);
if index_lon == 0 || index_lat == 0
continue;
end
%存储到第三维度中
for j= 1:num_layers
%如果第三维度是NaN,则存入,如果不是则j+1
if j==num_layers
disp('达到最大限制: %d',num_layers);
end
if isnan(data_3D(index_lat,index_lon,j))
data_3D(index_lat,index_lon,j) = integral_predicted_backscatter_values(i);%index_lat,index_lon, 1657 1800
break;
else
j = j + 1;
end
end
end
%已经存储好所有数据了,现在对每个网格取平均值
for ii = 1:length(dim1_global_latitude)
for jj = 1:length(dim1_global_longitude)
sum = 0;
valid_count = 0;
for qq = 1:num_layers
if ~isnan(data_3D(ii, jj, qq))
sum = data_3D(ii, jj, qq) + sum;
valid_count = valid_count + 1;
end
end
mean_point = sum/valid_count;
mean_data(ii,jj) = mean_point;
end
end
backscatter_grid = mean_data;
end