% 碳化硅外延层厚度计算MATLAB代码
% 版本:MATLAB R2023a
% 功能:实现数据预处理、极值点检测、Cauchy模型拟合、厚度计算及统计分析
%% 1. 数据读取
% 读取附件1和附件2数据
data1 = readmatrix('附件1.xlsx'); % 入射角10°数据
data2 = readmatrix('附件2.xlsx'); % 入射角15°数据
wave_number1 = data1(:, 1); % 波数 (cm⁻¹)
reflectance1 = data1(:, 2); % 反射率 (%)
wave_number2 = data2(:, 1);
reflectance2 = data2(:, 2);
%% 2. 数据预处理
% 2.1 基线校正(滚动窗口最小值法)
window_size = 50;
baseline1 = movmin(reflectance1, window_size);
corrected_reflectance1 = reflectance1 - baseline1;
baseline2 = movmin(reflectance2, window_size);
corrected_reflectance2 = reflectance2 - baseline2;
% 2.2 平滑处理(Savitzky-Golay滤波器)
smooth_window = 11;
poly_order = 2;
smoothed_reflectance1 = sgolayfilt(corrected_reflectance1, poly_order, smooth_window);
smoothed_reflectance2 = sgolayfilt(corrected_reflectance2, poly_order, smooth_window);
%% 3. 极值点检测(极大值)
% 设置峰值检测参数
min_peak_height = mean(smoothed_reflectance1) * 1.2; % 最小峰高设为均值的1.2倍
peak_distance = 50; % 峰间距
[peaks1, locs1] = findpeaks(smoothed_reflectance1, wave_number1, 'MinPeakHeight', min_peak_height, 'MinPeakDistance', peak_distance);
[peaks2, locs2] = findpeaks(smoothed_reflectance2, wave_number2, 'MinPeakHeight', min_peak_height, 'MinPeakDistance', peak_distance);
%% 4. Cauchy色散模型拟合
% 定义Cauchy模型函数
cauchy_model = @(params, lambda) params(1) + params(2)./lambda.^2 + params(3)./lambda.^4;
% 准备数据(将波数转换为波长,单位:μm)
lambda1 = 1 ./ locs1 * 100; % 波数(cm⁻¹)转波长(μm):λ(μm) = 10^4 / 波数(cm⁻¹)
lambda2 = 1 ./ locs2 * 100;
% 初始参数猜测和边界
initial_params = [2.5, 0.05, 0.0005]; % [A, B, C]
lb = [2.4, 0.04, 0.0004]; % 参数下界
ub = [2.6, 0.06, 0.0006]; % 参数上界
% 拟合参数
params1 = lsqcurvefit(cauchy_model, initial_params, lambda1, peaks1, lb, ub);
params2 = lsqcurvefit(cauchy_model, initial_params, lambda2, peaks2, lb, ub);
A1 = params1(1); B1 = params1(2); C1 = params1(3);
A2 = params2(1); B2 = params2(2); C2 = params2(3);
%% 5. 厚度计算
% 入射角转换为弧度
theta1 = deg2rad(10); % 附件1入射角10°
theta2 = deg2rad(15); % 附件2入射角15°
% 计算相邻极大值点的波数差Δṽ_i
delta_nu1 = diff(locs1); % 附件1波数差
delta_nu2 = diff(locs2); % 附件2波数差
% 计算厚度(仅保留5-10μm范围内的结果)
d1 = zeros(size(delta_nu1));
for i = 1:length(delta_nu1)
lambda_avg = 100 ./ mean([locs1(i), locs1(i+1)]); % 平均波长(μm)
n = cauchy_model(params1, lambda_avg); % 平均折射率
denominator = 2 * delta_nu1(i) * sqrt(n^2 - sin(theta1)^2);
d1(i) = 1 / denominator;
end
d1 = d1(d1 >= 5 & d1 <= 10); % 筛选有效厚度
d2 = zeros(size(delta_nu2));
for i = 1:length(delta_nu2)
lambda_avg = 100 ./ mean([locs2(i), locs2(i+1)]);
n = cauchy_model(params2, lambda_avg);
denominator = 2 * delta_nu2(i) * sqrt(n^2 - sin(theta2)^2);
d2(i) = 1 / denominator;
end
d2 = d2(d2 >= 5 & d2 <= 10);
%% 6. 统计分析
stats1 = [mean(d1), median(d1), std(d1), prctile(d1, 2.5), prctile(d1, 97.5)]; % 均值、中位数、标准差、95%置信区间
stats2 = [mean(d2), median(d2), std(d2), prctile(d2, 2.5), prctile(d2, 97.5)];
%% 7. 结果输出
disp('附件1厚度统计结果(单位:μm):');
disp(['均值:', num2str(stats1(1)), ',中位数:', num2str(stats1(2)), ',标准差:', num2str(stats1(3))]);
disp(['95%置信区间:[', num2str(stats1(4)), ', ', num2str(stats1(5)), ']']);
disp('附件2厚度统计结果(单位:μm):');
disp(['均值:', num2str(stats2(1)), ',中位数:', num2str(stats2(2)), ',标准差:', num2str(stats2(3))]);
disp(['95%置信区间:[', num2str(stats2(4)), ', ', num2str(stats2(5)), ']']);
% 保存结果
save('厚度计算结果.mat', 'd1', 'd2', 'stats1', 'stats2', 'params1', 'params2');
writematrix(d1, '厚度_附件1.csv');
writematrix(d2, '厚度_附件2.csv'); 修改此代码使其运算结果显示折射率计算结果、厚度计算结果、均值、中位数、标准差、置信区间以及可靠性。(低AI率)
最新发布