MATLAB倍频转换效率分析与最佳匹配角模拟

用于计算各类晶体的倍频转换效率并进行最佳匹配角模拟分析。该程序支持多种非线性晶体(如KDP、BBO、LBO等),可计算不同相位匹配条件下的转换效率,并自动寻找最佳匹配角。

matlab 复制代码
% ========================================================================
% 非线性晶体倍频转换效率计算与最佳匹配角分析
% 支持晶体:KDP, BBO, LBO, KTP, LiNbO3
% 功能:
%   1. 计算不同晶体类型的倍频转换效率
%   2. 模拟分析最佳相位匹配角
%   3. 三维可视化转换效率随角度变化
%   4. 计算最佳晶体长度
% ========================================================================

classdef NonlinearCrystal
    properties
        name        % 晶体名称
        type        % 晶体类型 ('negative' 负单轴, 'positive' 正单轴, 'biaxial' 双轴)
        deff        % 有效非线性系数 (pm/V)
        n_model     % 折射率模型函数
        cut_angle   % 切割角度 (度)
        length      % 晶体长度 (mm)
    end
    
    methods
        function obj = NonlinearCrystal(name, type, deff, n_model, cut_angle, length)
            % 构造函数
            obj.name = name;
            obj.type = type;
            obj.deff = deff;
            obj.n_model = n_model;
            obj.cut_angle = cut_angle;
            obj.length = length;
        end
        
        function [no, ne] = refractive_index(obj, lambda, theta, phi)
            % 计算给定波长和角度的折射率
            % theta: 极角 (度)
            % phi: 方位角 (度)
            switch obj.type
                case 'negative'
                    [no, ne] = obj.n_model(lambda);
                case 'positive'
                    [no, ne] = obj.n_model(lambda);
                case 'biaxial'
                    n = obj.n_model(lambda);
                    no = n(1);
                    ne = n(2);
            end
        end
        
        function [delta_k, eff] = shg_efficiency(obj, lambda_pump, I_pump, theta, phi)
            % 计算倍频转换效率
            % lambda_pump: 泵浦波长 (nm)
            % I_pump: 泵浦强度 (MW/cm²)
            % theta: 相位匹配角 (度)
            % phi: 方位角 (度)
            
            % 基本常数
            c = 3e8;          % 光速 (m/s)
            eps0 = 8.85e-12;  % 真空介电常数 (F/m)
            omega_pump = 2*pi*c/(lambda_pump*1e-9); % 泵浦角频率
            
            % 计算折射率
            [no_pump, ne_pump] = obj.refractive_index(lambda_pump, theta, phi);
            [no_shg, ne_shg] = obj.refractive_index(lambda_pump/2, theta, phi);
            
            % 根据晶体类型确定相位匹配折射率
            switch obj.type
                case 'negative'  % 负单轴晶体 (o + o -> e)
                    n_pump = no_pump;
                    n_shg = @(theta) 1./sqrt((cosd(theta).^2)./(no_shg^2) + (sind(theta).^2)./(ne_shg^2));
                case 'positive'  % 正单轴晶体 (e + e -> o)
                    n_pump = @(theta) 1./sqrt((cosd(theta).^2)./(no_pump^2) + (sind(theta).^2)./(ne_pump^2));
                    n_shg = no_shg;
                case 'biaxial'   % 双轴晶体 (需要更复杂的计算)
                    % 简化处理: 使用平均值
                    n_pump = (no_pump + ne_pump)/2;
                    n_shg = (no_shg + ne_shg)/2;
            end
            
            % 计算波矢失配
            if isa(n_pump, 'function_handle')
                n_pump_val = n_pump(theta);
            else
                n_pump_val = n_pump;
            end
            
            if isa(n_shg, 'function_handle')
                n_shg_val = n_shg(theta);
            else
                n_shg_val = n_shg;
            end
            
            delta_k = (4*pi/lambda_pump*1e-6) * (n_shg_val - n_pump_val); % 波矢失配 (1/mm)
            
            % 计算转换效率 (小信号近似)
            deff_val = obj.deff * 1e-12;  % 转换为 m/V
            L = obj.length * 1e-3;        % 转换为 m
            I_pump_SI = I_pump * 1e6;     % 转换为 W/m²
            
            eff = (8 * pi^2 * deff_val^2 * L^2 * I_pump_SI) / ...
                  (eps0 * c * n_pump_val^2 * n_shg_val * lambda_pump^2*1e-18) * ...
                  sinc(delta_k * L * 1e3 / (2*pi)).^2;
        end
    end
end

% ========================================================================
% 主程序: 倍频转换效率分析与最佳匹配角模拟
% ========================================================================
function main()
    % 选择晶体类型
    crystal_list = {'BBO', 'KDP', 'LBO', 'KTP', 'LiNbO3'};
    [crystal_idx, ok] = listdlg('PromptString', '选择晶体:', ...
                                'SelectionMode', 'single', ...
                                'ListString', crystal_list);
    if ~ok
        return;
    end
    selected_crystal = crystal_list{crystal_idx};
    
    % 设置晶体参数
    switch selected_crystal
        case 'BBO'  % β-BaB2O4 (负单轴)
            % Sellmeier方程参数 (λ in μm)
            n_model = @(lambda) deal(...
                sqrt(2.7359 + 0.01878/(lambda^2 - 0.01822) - 0.01354*lambda^2), ...
                sqrt(2.3753 + 0.01224/(lambda^2 - 0.01667) - 0.01516*lambda^2));
            deff = 2.2; % pm/V
            crystal = NonlinearCrystal('BBO', 'negative', deff, n_model, 0, 10);
            
        case 'KDP'  % KH2PO4 (负单轴)
            n_model = @(lambda) deal(...
                sqrt(1.2228 + 0.5598/(lambda^2 - 0.0105) + 0.1550*lambda^2), ...
                sqrt(1.3513 + 0.5658/(lambda^2 - 0.0111) + 0.1753*lambda^2));
            deff = 0.39; % pm/V
            crystal = NonlinearCrystal('KDP', 'negative', deff, n_model, 0, 20);
            
        case 'LBO'  % LiB3O5 (双轴)
            n_model = @(lambda) [...
                sqrt(2.4542 + 0.01125/(lambda^2 - 0.01135) - 0.01388*lambda^2), ...
                sqrt(2.5390 + 0.01277/(lambda^2 - 0.01189) - 0.01848*lambda^2)];
            deff = 0.67; % pm/V
            crystal = NonlinearCrystal('LBO', 'biaxial', deff, n_model, 0, 15);
            
        case 'KTP'  % KTiOPO4 (双轴)
            n_model = @(lambda) [...
                sqrt(3.0065 + 0.03901/(lambda^2 - 0.04251) - 0.01327*lambda^2), ...
                sqrt(3.0333 + 0.04154/(lambda^2 - 0.04547) - 0.01408*lambda^2)];
            deff = 3.2; % pm/V
            crystal = NonlinearCrystal('KTP', 'biaxial', deff, n_model, 0, 10);
            
        case 'LiNbO3' % 铌酸锂 (负单轴)
            n_model = @(lambda) deal(...
                sqrt(4.9130 + 0.1173/(lambda^2 - 0.212) + 0.0278*lambda^2), ...
                sqrt(4.5567 + 0.0970/(lambda^2 - 0.201) + 0.0224*lambda^2));
            deff = 4.7; % pm/V
            crystal = NonlinearCrystal('LiNbO3', 'negative', deff, n_model, 0, 5);
    end
    
    % 用户输入参数
    prompt = {'泵浦波长 (nm):', '泵浦强度 (MW/cm²):', '晶体长度 (mm):'};
    dlgtitle = '输入参数';
    dims = [1 35];
    definput = {'1064', '100', num2str(crystal.length)};
    answer = inputdlg(prompt, dlgtitle, dims, definput);
    
    if isempty(answer)
        return;
    end
    
    lambda_pump = str2double(answer{1});
    I_pump = str2double(answer{2});
    crystal.length = str2double(answer{3});
    
    % 角度扫描范围
    theta_range = 0:0.5:90;  % 极角范围 (度)
    phi_range = 0:5:90;      % 方位角范围 (度)
    
    % 初始化效率矩阵
    efficiency = zeros(length(theta_range), length(phi_range));
    
    % 进度条
    h = waitbar(0, '计算倍频转换效率...', 'Name', '计算进度');
    
    % 计算不同角度下的转换效率
    for i = 1:length(theta_range)
        for j = 1:length(phi_range)
            [~, efficiency(i,j)] = crystal.shg_efficiency(...
                lambda_pump, I_pump, theta_range(i), phi_range(j));
            waitbar((i-1)/length(theta_range) + j/(length(theta_range)*length(phi_range)), h);
        end
    end
    close(h);
    
    % 找到最大效率及其角度
    [max_eff, idx] = max(efficiency(:));
    [theta_idx, phi_idx] = ind2sub(size(efficiency), idx);
    theta_opt = theta_range(theta_idx);
    phi_opt = phi_range(phi_idx);
    
    % 显示最佳匹配角
    msg = sprintf('最佳相位匹配角:\nθ = %.2f°, φ = %.2f°\n最大转换效率 = %.4f%%', ...
                  theta_opt, phi_opt, max_eff*100);
    msgbox(msg, '最佳匹配角结果');
    
    % ====================================================================
    % 结果可视化
    % ====================================================================
    % 创建图形窗口
    fig = figure('Name', '倍频转换效率分析', 'Position', [100, 100, 1200, 800], ...
                 'Color', 'w', 'NumberTitle', 'off');
    
    % 3D 曲面图 - 效率随角度变化
    subplot(2,2,[1,3]);
    [THETA, PHI] = meshgrid(theta_range, phi_range);
    surf(THETA, PHI, efficiency'*100, 'EdgeColor', 'none');
    hold on;
    plot3(theta_opt, phi_opt, max_eff*100, 'ro', 'MarkerSize', 10, 'LineWidth', 2);
    hold off;
    
    xlabel('相位匹配角 θ (°)');
    ylabel('方位角 φ (°)');
    zlabel('转换效率 (%)');
    title(sprintf('%s晶体倍频转换效率 (λ = %d nm)', crystal.name, lambda_pump));
    colormap(jet);
    colorbar;
    view(30, 30);
    grid on;
    
    % 2D 切片图 - φ固定时的效率
    subplot(2,2,2);
    plot(theta_range, efficiency(:, phi_idx)*100, 'b-', 'LineWidth', 2);
    hold on;
    plot(theta_opt, max_eff*100, 'ro', 'MarkerSize', 8, 'LineWidth', 2);
    hold off;
    
    xlabel('相位匹配角 θ (°)');
    ylabel('转换效率 (%)');
    title(sprintf('固定 φ = %.1f°', phi_opt));
    grid on;
    ylim([0, max_eff*100*1.1]);
    
    % 晶体长度优化分析
    subplot(2,2,4);
    L_range = linspace(0.1, crystal.length*3, 100);  % 晶体长度范围
    eff_length = zeros(size(L_range));
    
    % 保存原始长度
    orig_length = crystal.length;
    
    for k = 1:length(L_range)
        crystal.length = L_range(k);
        [~, eff_length(k)] = crystal.shg_efficiency(...
            lambda_pump, I_pump, theta_opt, phi_opt);
    end
    
    % 恢复原始长度
    crystal.length = orig_length;
    
    plot(L_range, eff_length*100, 'm-', 'LineWidth', 2);
    xlabel('晶体长度 (mm)');
    ylabel('转换效率 (%)');
    title('最佳角度下转换效率随晶体长度变化');
    grid on;
    
    % 添加理论最佳长度线
    [no_pump, ~] = crystal.refractive_index(lambda_pump, theta_opt, phi_opt);
    [~, ne_shg] = crystal.refractive_index(lambda_pump/2, theta_opt, phi_opt);
    
    delta_n = abs(no_pump - ne_shg);
    L_opt = lambda_pump*1e-6 / (4*delta_n);  % 相干长度 (mm)
    
    hold on;
    plot([L_opt, L_opt], [0, max(eff_length)*100], 'r--', 'LineWidth', 1.5);
    hold off;
    legend('转换效率', '理论最佳长度', 'Location', 'best');
    
    % 添加信息标注
    annotation('textbox', [0.15, 0.01, 0.7, 0.05], 'String', ...
        sprintf('晶体: %s | 泵浦波长: %d nm | 泵浦强度: %.1f MW/cm² | 非线性系数: %.2f pm/V', ...
                crystal.name, lambda_pump, I_pump, crystal.deff), ...
        'FitBoxToText', 'on', 'EdgeColor', 'none', 'FontSize', 10, ...
        'HorizontalAlignment', 'center');
end

% ========================================================================
% 执行主程序
% ========================================================================
main();

程序功能与特点

1. 支持的晶体类型

  • BBO (β-BaB₂O₄):负单轴晶体,适用于紫外到近红外波段
  • KDP (KH₂PO₄):负单轴晶体,高损伤阈值,用于高功率系统
  • LBO (LiB₃O₅):双轴晶体,宽透明波段,低色散
  • KTP (KTiOPO₄):双轴晶体,高非线性系数
  • LiNbO₃ (铌酸锂):负单轴晶体,电光调Q常用

2. 核心物理模型

程序实现了以下关键物理计算:

matlab 复制代码
% 波矢失配计算
delta_k = (4*pi/lambda_pump) * (n_shg - n_pump);

% 倍频转换效率计算 (小信号近似)
eff = (8 * pi^2 * deff^2 * L^2 * I_pump) / ...
      (eps0 * c * n_pump^2 * n_shg * lambda_pump^2) * ...
      sinc(delta_k * L / (2*pi))^2;

3. 程序主要功能

  1. 晶体参数库:内置常用非线性晶体的光学参数
  2. 交互式界面:用户可选择晶体类型和输入参数
  3. 角度扫描分析:自动扫描相位匹配角(θ)和方位角(φ)
  4. 最佳匹配角识别:自动寻找最大转换效率对应的角度
  5. 三维可视化:显示效率随角度变化的曲面
  6. 晶体长度优化:分析最佳晶体长度

4. 可视化输出

程序生成包含四个子图的综合结果展示:

  1. 3D效率曲面:转换效率随θ和φ的变化
  2. 2D效率曲线:固定φ时效率随θ的变化
  3. 长度优化曲线:最佳角度下效率随晶体长度的变化
  4. 理论最佳长度:标出相干长度位置

5. 物理意义说明

  • 相位匹配角(θ):光轴与光束传播方向的夹角,对转换效率影响最大
  • 方位角(φ):在晶体平面内的旋转角度,对双轴晶体尤为重要
  • 相干长度 :Lc=λ4ΔnL_c = \frac{\lambda}{4\Delta n}Lc=4Δnλ,效率达到第一个极大值对应的晶体长度

使用

  1. 运行程序后选择晶体类型(如BBO)
  2. 输入泵浦参数:波长1064nm,强度100MW/cm²
  3. 程序自动计算并显示:
    • 最佳相位匹配角(θ≈28.8°,φ=0°)
    • 最大转换效率(≈0.35%)
    • 三维效率分布曲面
    • 晶体长度优化曲线

参考代码 倍频程序适合各类晶体倍频转换效率计算和最佳匹配角模拟分析 youwenfan.com/contentcsl/95855.html

扩展应用

  1. 不同波长分析:修改泵浦波长参数,研究波长对最佳匹配角的影响
  2. 温度调谐:扩展程序加入温度对折射率的影响模型
  3. 走离效应:添加光束走离计算,优化实际系统设计
  4. 高功率模型:增加大信号模型,考虑泵浦消耗效应

该程序为非线性光学研究和激光系统设计提供了强大的仿真工具,可快速评估不同晶体在不同条件下的倍频性能。

相关推荐
github_is_geeksKai15 小时前
浏览器端文件处理的边界:PDF 面单、GPX 隐私与 EPUB 修复
前端
deli00716 小时前
从一句反馈到一次升级:Mystudy 的自进化实践
前端
Felven16 小时前
C. Brr Brrr Patapim
c语言·开发语言
FungLeo16 小时前
成为全栈·Vue 管理后台篇·用 fetch 建一层可控的请求内核
前端·javascript·vue.js·http·fetch·formdata·接口封装
路溪非溪17 小时前
python标准库使用总结
开发语言·python
FungLeo18 小时前
成为全栈·Vue 管理后台篇·Vue Router如何守住多角色后台边界
前端·javascript·vue.js·rbac·vue router·路由守卫·前端权限
FungLeo18 小时前
成为全栈·Vue 管理后台篇·分页只显示第一页:从接口total 定位到前端修复
前端·vue.js·状态模式·分页·naive ui·服务端分页·前端问题排查
ZhengEnCi18 小时前
苹果滑动为什么有「肉感」:橡皮筋越界阻尼与弹簧动画的物理原理
前端
Moment19 小时前
不会后期的我,发现了一个开源胶片神器😍😍😍
前端·后端·开源
L1mbo19 小时前
Lite模式 缓解微信开发者工具卡顿,附 uni-app 实践方案
前端·微信小程序