基于数字双输入的超宽带(0.7-3.1GHz)Doherty功率放大器设计-从理论到ADS版图

news2025/1/17 21:41:52

基于数字双输入的超宽带(0.7-3.1GHz)Doherty功率放大器设计-从理论到ADS版图

参考论文: 高效连续型射频功率放大器研究

假期就要倒计时啦,估计是寒假假期的最后一个博客,希望各位龙年工作顺利,学业有成。

全部工程下载:基于数字双输入的超宽带Doherty功率放大器设计-从理论到ADS版图-ADS工程
不着急的穷学生和穷工程师可以私信我,打6-8折哦!

如果硕士毕业设计用到双输入,也算是比较深入的了,一般都是作为压轴的那一章。

作者我复现了七天,数字双输入的超宽带Doherty实际实现是有一定门槛的,需要对每个输入支路的功率、相位进行扫描,在此进行复现并给出模板、画图代码(虽然我现在不清楚实际测量的时候怎么搞,估计要写个脚本查表吧)。


使用几个频点的数据来近似说明整体的数据:
在0.7-3.1GHz的范围内,饱和输出功率为43.31-44.78dBm,饱和输出增益为10.37-12.24dB,饱和输出效率为60.5-74.07%,回退6dB效率为45.43%-61.5%。


前置文章:单输入Doherty 功率放大器的极限带宽分析(含Matlab分析代码),数字双输入的就是为解决此问题的,。

类似的双输入架构:双输入宽带混合 Doherty-Outphasing功率放大器设计(2021.02 MTT)-从理论到ADS版图

目录

    • 基于数字双输入的超宽带(0.7-3.1GHz)Doherty功率放大器设计-从理论到ADS版图
    • 0、实现效果展示
      • 0.1、版图展示
      • 0.2、扫描的结果
      • 0.3、实现的效果
    • 1、双输入的核心理论
      • 1.1、提要
      • 1.2、理论推导
      • 1.3、所需的约束
    • 2、基于ADS与CGH40010F的验证
    • 3、系统仿真和扫描
      • 3.1、系统仿真和扫描原理图
      • 3.2、使用Matlab提取数据
      • 3.3、画图分析的Matlab代码
    • 4、运行环境

0、实现效果展示

基于CGH40010F

这个博客几乎就是对“高效连续型射频功率放大器研究”论文中数字双输入部分的复现,是在原来的基础上进行了一的OPTIM,主要是原来论文里面的微带线参数都是保留一位小数,精度可能不太够

0.1、版图展示

整体的版图如下,由于是双输入的,有两个输入的端口
在这里插入图片描述

0.2、扫描的结果

数字双输入的超宽带Doherty实际实现是有一定门槛的,需要对每个输入支路的功率、相位进行扫描,此处Pin1 的扫描范围为6-30dBm,Pin2 的扫描范围为6-30dBm,相位差的扫描范围为0-180,最后扫描模板得到的结果如下(例如2700MHz),一般都会对其取包络(使用Matlab脚本提取,后面介绍):
在这里插入图片描述

0.3、实现的效果

因为需要对每个频率下的参数进行扫描,所以取几个频率点的数据进行参考,使用几个频点的数据来近似说明整体的数据:
在0.7-3.1GHz的范围内,饱和输出功率为43.31-44.78dBm,饱和输出增益为10.37-12.24dB,饱和输出效率为60.5-74.07%,回退6dB效率为45.43%-61.5%。

使用Matlab脚本提取包络,700MHz效率与增益结果如下所示,在700MHz,实现了44.78dBm的饱和输出功率,12.24dB的饱和增益,饱和效率为72.2%,回退6dB效率为50.13%
在这里插入图片描述

使用Matlab脚本提取包络,1500MHz效率与增益结果如下所示,在1500MHz,实现了43.38dBm的饱和输出功率,10.37dB的饱和增益,饱和效率为60.5%,回退6dB效率为61.5%
在这里插入图片描述
使用Matlab脚本提取包络,2300MHz效率与增益结果如下所示,在2300MHz,实现了44.31dBm的饱和输出功率,11.3dB的饱和增益,饱和效率为70.48%,回退6dB效率为45.43%
在这里插入图片描述
使用Matlab脚本提取包络,3100MHz效率与增益结果如下所示,在3100MHz,实现了43.3dBm的饱和输出功率,11.68dB的饱和增益,饱和效率为74.07%,回退6dB效率为49.91%
在这里插入图片描述

1、双输入的核心理论

1.1、提要

单输入Doherty 功率放大器的极限带宽分析(含Matlab分析代码)中分析了单输入DPA的极限带宽。在传统单输入DPA中,存在固定的载波功放和固定的峰值功放,因此在回退点的等效电路是固定的(峰值功放视为开路),如:
在这里插入图片描述
但是,如果我们能够自定义输入功率,从而自定义哪个功放充当峰值功放和载波功放,就可以在回退时获得两种工作模式(相当于有两种电路了,自然带宽可以拓展):
在这里插入图片描述

1.2、理论推导

上图中, θ 1 \theta_1 θ1 θ 2 \theta_2 θ2都和频率相关,所提及的角度是在f0出的电长度。(先简单回顾一下一个基础知识,在 f 0 f_{0} f0处电长度为180,那么在x f 0 f_{0} f0处其等效电长度为x180。例如,在在 f 0 f_{0} f0处电长度为180,那么在2 f 0 f_{0} f0处其等效电长度为2180=360。

为了简便起见,首先假设在某一工作频点处 θ 1 = 90 \theta_1=90 θ1=90,观察 θ 2 \theta_2 θ2的取值和带宽的关系(下面都使用Matlab脚本分析画图得到,分别对两种模式进行分析):
在这里插入图片描述
直观一些,可以看到无论 θ 2 \theta_2 θ2取何值,双输入 Doherty 功放在归一化频率f = 2处效率恶化严重。此时,工作在模式 I 下的双输入 Doherty 功放只有在f为 1 或者 3 附近具有良好的回退效率(红色鲜艳)。

可以看出,在工作模式 II 下,当 θ 2 \theta_2 θ2约为45°时,双输入 Doherty 功放在归一化频率1.3-2.6 之间可以获得良好的回退效率;而当 θ 2 \theta_2 θ2为其他值时,双输入 Doherty 功放只能在某一小频率区间获得良好的回退效率。

在这里插入图片描述
分析代码:

clc
clear
close all

Ropt=1;
% 相对带宽表达式
f0=1;
f_arrary=f0*linspace(0.6, 3.3, 99);
theta_1=90;
theta_2=0:5:180;

figure(1)
subplot(2,1,1)
[X,Y] = meshgrid(f_arrary,theta_2);
for i=1:1:length(theta_2)
    for j=1:1:length(X)
        Z(i,j)=DPA_Effi_Cal_v2(X(i,j),90,Y(i,j));
    end
end
surf(Y,X,Z);
title('双输入 Doherty 功放工作在模式 I')
colormap jet%jet是一种配色方案,还有其他方案如winter,summer····见help colormap
colorbar
xlabel('\theta_2');
ylabel('归一化频率');
zlabel('Efficiency(%)');

subplot(2,1,2)
[X,Y] = meshgrid(f_arrary,theta_2);
for i=1:1:length(theta_2)
    for j=1:1:length(X)
        Z(i,j)=DPA_Effi_Cal_v2(X(i,j),Y(i,j),90);
    end
end
surf(Y,X,Z);
title('双输入 Doherty 功放工作在模式 II')
colormap jet%jet是一种配色方案,还有其他方案如winter,summer····见help colormap
colorbar
xlabel('\theta_2');
ylabel('归一化频率');
zlabel('Efficiency(%)');

1.3、所需的约束

θ 1 \theta_1 θ1在f1处电长度为90°, θ 2 \theta_2 θ2在f1处电长度为45°,延时的变化符合微带线基本特性 θ 1 \theta_1 θ1在f2处电长度为2 * 90°, θ 2 \theta_2 θ2在f2处电长度为2 * 45°,以此类推)。

此外,TL1和TL2的阻抗要是Ropt,B类最佳阻抗。

负载RL的阻抗为Ropt/2,需要使用后匹配网络匹配到50欧姆。

2、基于ADS与CGH40010F的验证

作者论文中参数都是有效的,我是在原来的基础上进行了一的OPTIM,主要是原来论文里面的微带线参数都是保留一位小数,精度可能不太够

作者Ropt选的是30欧姆,漏极电压28V,栅极电压-3.3V。

2.1 θ 1 \theta_1 θ1电长度和阻抗的约束实现

Output/OutputSub_TL2原理图
微带线TL2的在f1处电长度为90°,阻抗为Ropt,延时的变化符合微带线基本特性 θ 1 \theta_1 θ1在f2处电长度为2 * 90°,以此类推)。构建优化:
在这里插入图片描述
查看阻抗和延时的实现效果,比较好:
在这里插入图片描述

2.2 θ 2 \theta_2 θ2电长度和阻抗的约束实现

Output/OutputSub_TL1原理图
微带线TL1的在f1处电长度为45°,阻抗为Ropt,延时的变化符合微带线基本特性 θ 2 \theta_2 θ2在f2处电长度为2 * 45°,以此类推)。构建优化:
在这里插入图片描述
查看结果,差的不多:
在这里插入图片描述

2.3 后匹配网络阻抗匹配约束

Output/OutputSub_PMN
理论负载是Ropt/2,需要把Ropt/2变换到50欧姆,也就是要把15欧姆变换到50欧姆,构建优化:
在这里插入图片描述
匹配良好:
在这里插入图片描述

2.4 输入匹配设计

Input/InputMatch_Sub

输入匹配要求不高,我直接用作者提供的电路,需要自己设计的可以使用源牵引方法,参考:番外5:ADS功放设计之负载牵引与源牵引、ADS使用记录之AB类功放设计。

电路图如下:
在这里插入图片描述
匹配效果还可以:
在这里插入图片描述

3、系统仿真和扫描

3.1、系统仿真和扫描原理图

Test/HB1ToneGComp2swp_v1
双输入架构使用俩个输入端口,扫描的相位差为变量My_Delay:
在这里插入图片描述
Param1就是Pin1的输入功率,Param2就是Pin2的输入功率,My_Delay为扫描的相位差,RFfreq为当前的频率,需要自己设置:
在这里插入图片描述
运行得到结果,:
在这里插入图片描述

3.2、使用Matlab提取数据

把上面表格的数据导出为csv:
在这里插入图片描述
打开我提供的Matlab代码,修改名字为你的csv文件名,此外需要手动修改Mydelay为你ADS中所设的的延迟扫描参数,例如:
在这里插入图片描述

% 输入csv的名字
csv_name='3100.csv';
% 手动设定扫描延时
Mydelay=-180:5:0;

运行Matlab即可。
全部代码:
在这里插入图片描述
运行代码,可以得到效率、增益和所需的输入功率、延迟等信息(2700MHz):
在这里插入图片描述
作者也提供了输入功率、相位差数据,可以对比一下,其中两路的输入功率数据是高度一致的:
在这里插入图片描述

3.3、画图分析的Matlab代码

DPA_Effi_Cal_v2.m

function [effi] = DPA_Effi_Cal_v2(freq,theta_1,theta_2)
% theta是对于f0而言的,此处来计算在freq处的角度
theta_1=theta_1*freq/1;
theta_2=theta_2*freq/1;

Ropt=1;
RL=Ropt/2;
ZP_OPBO=Ropt./(1j*tand(theta_2));% 峰值负载为无穷
ZC_OPBO=1./(1/RL+1./ZP_OPBO);% 并联关系
ZCB=Ropt*(ZC_OPBO+1j*Ropt*tand(theta_1))./(Ropt+1j*ZC_OPBO.*tand(theta_1));% Zin计算
effi=78.54*real(ZCB)/(2*Ropt);% 计算效率,阻抗大于2Ropt被认为是饱和,效率为78.54
effi(effi>78.54)=78.54;
effi(isnan(effi))=78.54;
end

draw_data.m

clc
clear
close
% 输入csv的名字
csv_name='3100.csv';
data=readmatrix(csv_name);%csvread只能读取纯数据
% 手动设定扫描延时
Mydelay=-180:5:0;

%添加延时数据到data数组
repeat_times=length(data)/length(Mydelay);
Mydelay_data=[];
for ind=1:1:repeat_times
    Mydelay_data=[Mydelay_data Mydelay];
end
data(:,5)=Mydelay_data;

Pout_dbm=data(:,3);%提取输出功率数据
Pout_dbm_Draw_step=0.4;
Pout_dbm_Draw=min(Pout_dbm):Pout_dbm_Draw_step:max(Pout_dbm);

for ind=1:1:length(Pout_dbm_Draw)
    eval(['Pout_dbm_DataAll.data', num2str(ind), '= [];']);
end

% 获取每个输出功率为Pout_dbm_Draw附近的点数据
for ind=1:1:length(data)
    for j=1:1:length(Pout_dbm_Draw)
        if abs(data(ind,3)-Pout_dbm_Draw(j))<=Pout_dbm_Draw_step/2
            eval(['Pout_dbm_DataAll.data', num2str(j), '=[Pout_dbm_DataAll.data', num2str(j),';data(ind,:)];']);
        end
    end
end
% 对每个数据提取最佳的效率点,并记录输入功率、延时等等
for ind=1:1:length(Pout_dbm_Draw)
    % 判断是否是空数组
    if eval(['isempty(Pout_dbm_DataAll.data',num2str(ind), ')'])
        eval('DrawData.Pin_1(ind)=NaN;');
        eval('DrawData.Pin_2(ind)=NaN;');
        eval('DrawData.Pout_dbm_Real(ind)=NaN;');
        eval('DrawData.Efficiency(ind)=NaN;');
        eval('DrawData.Delay(ind)=NaN;');
    else
        eval(['[max_val,max_ind]=max(Pout_dbm_DataAll.data', num2str(ind), '(:,4));']);
        eval(['DrawData.Pin_1(ind)=Pout_dbm_DataAll.data', num2str(ind), '(max_ind,1);']);
        eval(['DrawData.Pin_2(ind)=Pout_dbm_DataAll.data', num2str(ind), '(max_ind,2);']);
        eval(['DrawData.Pout_dbm_Real(ind)=Pout_dbm_DataAll.data', num2str(ind), '(max_ind,3);']);
        eval(['DrawData.Efficiency(ind)=Pout_dbm_DataAll.data', num2str(ind), '(max_ind,4);']);
        eval(['DrawData.Delay(ind)=Pout_dbm_DataAll.data', num2str(ind), '(max_ind,5);']);
    end
end

% 空数组插值
DrawData.Pin_1 = fillmissing(DrawData.Pin_1,'movmean',5);
DrawData.Pin_2 = fillmissing(DrawData.Pin_2,'movmean',5);
DrawData.Pout_dbm_Real = fillmissing(DrawData.Pout_dbm_Real,'movmean',5);
DrawData.Efficiency = fillmissing(DrawData.Efficiency,'movmean',5);
DrawData.Delay = fillmissing(DrawData.Delay,'movmean',5);
% 计算总的输入功率
DrawData.PinAll=10*log10((10.^(0.1*(DrawData.Pin_1-30)))+(10.^(0.1*(DrawData.Pin_2-30))))+30;
% 计算增益
DrawData.Gain=DrawData.Pout_dbm_Real-DrawData.PinAll;

% 画图
figure(1)

plot(DrawData.Pout_dbm_Real,DrawData.Efficiency,'-o','Color','r','LineWidth',1);hold on
ylabel('Drain Efficiency(%),Gain(dB)');xlabel('Pout(dBm)');

plot(DrawData.Pout_dbm_Real,DrawData.Gain,'-square','Color','magenta','LineWidth',1);hold on
legend('Efficiency', 'Gain')
title(csv_name)

figure(2)
plot(DrawData.Pout_dbm_Real,DrawData.Pin_1,'-v','Color','b','LineWidth',1);hold on
plot(DrawData.Pout_dbm_Real,DrawData.Pin_2,'-v','Color','b','LineWidth',1);hold on
ylabel('Pin(dBm)');xlabel('Pout(dBm)');
yyaxis right
plot(DrawData.Pout_dbm_Real,abs(DrawData.Delay),'-o','Color','black','LineWidth',1);
ylabel('Delay(°)');
legend('Pin_1', 'Pin_2','Delay')
title(csv_name)

4、运行环境

ADS版本:ADS2023

依赖的ADS库文件:Cree公司的GAN库,CGH40010F管子、(文件中包含,但可能要调整路径)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1458416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业总部与分部通过DSVPN实现互联

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 厦门微思网络​​​​​​https://www.xmws.cn 华为认证\华为HCIA-Datacom\华为HCIP-Datacom\华为HCIE-Datacom Linux\RHCE\RHCE 9.0\RHCA\ Oracle OC…

云上业务一键性能调优,应用程序性能诊断工具 Btune 上线

- 01 - 终于等来了预算&#xff0c;这就把服务迁移到最新的 CPU 平台上去&#xff0c;这样前端的同事立马就能感受我们带来的速度提升了。可是…… 这些性能指标怎么回事&#xff1f;不仅没有全面提升&#xff0c;有些反而下降了。不应该这样啊&#xff0c;这可怎么办&#xf…

【软考中级备考笔记】计算机体系结构

计算机体系结构 2月19日 – 天气&#xff1a;阴转小雪 1. 冯诺依曼计算机体系结构 冯诺依曼将计算机分为了五大部分&#xff0c;分别是&#xff1a; 控制器&#xff1a;主要负责协调指令到执行运算器&#xff1a;负责算数和逻辑运算存储器&#xff1a;负责存储在指令执行过程…

vue封装el-table表格组件

先上效果图&#xff1a; 本文包含了具名插槽、作用域插槽、jsx语法三种&#xff1a; Render.vue&#xff08;很重要&#xff0c;必须有&#xff09;: <script> export default {name: "FreeRender",functional: true,props: {scope:Object,render: Functio…

Gitlab操作流程

阶段1-构建账户信息 1.1 管理员分配账户 方式1-推荐 企业正常使用gitlab时&#xff0c;一般由项目经理(超级管理员)手动创建开发者账户信息&#xff0c;然后将账户发送给开发者&#xff0c;以便登录使用&#xff1b; 流程如下&#xff1a; 点击创建用户按钮&#xff1b; 创…

自动驾驶中之定位总结

1 前言2 典型的单个定位方式2.1 基于通信的定位方法2.1.1 GNSS 全球卫星导航系统2.1.1.1 gnss的优点与缺点2.1.1.2 gnss定位技术2.1.1.2.1 RTK定位技术2.1.1.2.2 PPP定位技术 2.1.1.2 gnss定位技术总结 2.1.2 车联网定位 2.1 基于航位推算的定位方法2.1.1 惯性测试单元定位IMU2…

docker安装一系列镜像

启动docker systemctl start docker docker 启动已经停止的容器 docker start idOrName PS&#xff1a;idOrName为容器的id或者名称 1、安装mysql镜像 拉取mysql5.7的镜像 docker pull mysql:5.7 查看镜像 docker images 启动mysql #启动mysql docker run --name mysql…

PostgreSQL技术内幕(十三)探究MPP数据库分布式查询分发Dispatcher

Dispatcher&#xff08;分布式查询分发器&#xff09;是MPP数据库的核心组件&#xff0c;所有的查询任务都要经过其进行分发&#xff0c;起着沟通用户到协调者&#xff08;Coordinator&#xff0c;即QD&#xff09;和执行调度的关键作用。 在这次的直播中&#xff0c;我们为大…

Opencv中的RNG-随机绘图

在OpenCV中&#xff0c;RNG是一个随机数生成器类&#xff0c;用于生成各种类型的随机数&#xff0c;包括均匀分布或高斯分布的整数和浮点数。RNG类的实例化时可以接受一个无符号整数作为种子值&#xff0c;这个种子值决定了随机数生成序列的起点&#xff0c;相同的种子值将产生…

分布式id实战

目录 常用方式 特征 潜在问题 信息安全 高性能 UUID 雪花算法 数据库生成 美团Leaf方案 Leaf-segment 数据库方案 Leaf-snowflake 方案 常用方式 uuid雪花算法数据库主键 特征 全局唯一趋势递增信息安全 潜在问题 信息安全 如果id连续递增, 容易被爬虫, 批量下…

【动态规划】【字符串】2167移除所有载有违禁货物车厢所需的最少时间

作者推荐 【深度优先搜索】【树】【有向图】【推荐】685. 冗余连接 II 本文涉及知识点 动态规划汇总 LeetCode2167移除所有载有违禁货物车厢所需的最少时间 给你一个下标从 0 开始的二进制字符串 s &#xff0c;表示一个列车车厢序列。s[i] ‘0’ 表示第 i 节车厢 不 含违…

自动化上位机开发C#100例:如何用面向对象的方式封装雷赛运动控制卡EtherCAT总线卡(C#代码)

自动化上位机开发C#100例:雷赛运动控制卡EtherCAT总线卡C#封装类 文章目录 LTDMC.dll下载LTDMC.cs LTDMC.dll C#调用封装下载ICard.cs 运动控制卡接口Card.cs 运动控制卡抽象类CardLTDMC.cs 雷赛运动控制卡EtherCAT总线卡实现类CardList.cs 总线卡列表封装 LTDMC.dll下载 最新…

MLP-Mixer: AN all MLP Architecture for Vision

发表于NeurIPS 2021, 由Google Research, Brain Team发表。 Mixer Architecture Introduction 当前的深度视觉结构包含融合特征(mix features)的层:(i)在一个给定的空间位置融合。(ii)在不同的空间位置&#xff0c;或者一次融合所有。在CNN中&#xff0c;(ii) 是由N x N(N &g…

golangci-lint如何关闭typecheck

https://github.com/golangci/golangci-lint/issues/2912 typecheck是go源码的校验&#xff0c;无法通过.golangci.yml配置关闭 可以直接在golangci-lint源码层面关闭typecheck

Jmeter教程-JMeter 环境安装及配置

Jmeter教程 JMeter 环境安装及配置 在使用 JMeter 之前&#xff0c;需要配置相应的环境&#xff0c;包括安装 JDK 和获取 JMeter ZIP 包。 安装JDK 1.JDK下载 示例环境为Windows11环境&#xff0c;读者应根据实际环境下载JDK的安装包。 JDK下载地址&#xff1a; Java21 下载 …

windows自带录屏指南,让视频制作更简单!

随着网络技术的发展&#xff0c;录制电脑屏幕已成为了许多用户的常见需求&#xff0c;无论是录制游戏画面、软件教程还是制作演示视频&#xff0c;一款好用的录屏工具都至关重要。windows操作系统为用户提供了多种录屏工具&#xff0c;无需额外安装软件。本篇文章将介绍windows…

Guitar Pro 8.1 Mac 2024最新下载、安装、激活、换机图文教程

Guitar Pro 8是吉他手的终极工具箱,也是阅读和编辑乐谱的领先软件。26 年来,Guitar Pro 一直在帮助世界各地的音乐家学习弹吉他、创作歌曲以及转录和编辑歌集。 Guitar Pro是一款专业的吉他制谱软件&#xff0c;现在已更新至Guitar Pro8&#xff0c;新增了支持添加音频轨道、支…

19-树-填充每个节点的下一个右侧节点指针 II

这是树的第19篇算法&#xff0c;力扣链接。 给定一个二叉树&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针&#xff0c;让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点&#xff0c;则将 next 指针设置为 NULL 。…

从入门到精通:AI绘画与修图实战指南

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 在这篇文章中&#xff0c;我们将深入探讨如何利…

JAVA高并发——人手一支笔:ThreadLocal

文章目录 1、ThreadLocal的简单使用2、ThreadLocal的实现原理3、对性能有何帮助4、线程私有的随机数发生器ThreadLocalRandom4.1、反射的高效替代方案4.2、随机数种子4.3、探针Probe的作用 除了控制资源的访问&#xff0c;我们还可以通过增加资源来保证所有对象的线程安全。比如…