无限站点建站系统龙岗建设网站公司

张小明 2026/1/12 8:59:37
无限站点建站系统,龙岗建设网站公司,精美驾校企业网站模板,社区营销1. 自动化数据提取工具库详解 为了简化 ADS 仿真程控的开发难度#xff0c;我提供了一个通用的自动化工具库 auto_simulator.py。该工具库封装了从环境配置、参数更新、仿真运行到结果提取的全流程#xff0c;使得用户只需关注“如何将参数应用到电路”这一核心逻辑。 …1. 自动化数据提取工具库详解为了简化 ADS 仿真程控的开发难度我提供了一个通用的自动化工具库auto_simulator.py。该工具库封装了从环境配置、参数更新、仿真运行到结果提取的全流程使得用户只需关注“如何将参数应用到电路”这一核心逻辑。 通用自动化仿真模块 提供通用的ADS仿真自动化框架支持批量参数扫描和结果提取。 用户只需实现参数更新接口即可使用。 importpandasaspdimportnumpyasnpimportjsonimportosfrompathlibimportPathfromabcimportABC,abstractmethodfromtypingimportDict,List,Any,Optional,Callablefromkeysight.ads.deimportdb_uuasdbfromkeysight.adsimportdatasetimportutilsclassParameterUpdater(ABC):参数更新抽象接口abstractmethoddefupdate_parameters(self,design:db.Design,param_row:pd.Series)-None: 更新电路参数 Args: design: ADS设计对象 param_row: 包含参数值的pandas Series passclassAutoSimulator:通用自动化仿真器def__init__(self,parameter_updater:ParameterUpdater): 初始化仿真器 Args: parameter_updater: 参数更新器实例 self.parameter_updaterparameter_updater self.designNonedefload_parameter_samples(self,filepath:str)-pd.DataFrame:加载参数样本数据仅支持输出JSON格式filepathPath(filepath)ifnotfilepath.exists():raiseFileNotFoundError(f参数文件不存在:{filepath})iffilepath.suffix.lower().json:withopen(filepath,r,encodingutf-8)asf:datajson.load(f)# 如果JSON数据是字典格式转换为DataFrameifisinstance(data,dict):ifsamplesindata:returnpd.DataFrame(data[samples])else:returnpd.DataFrame([data])elifisinstance(data,list):returnpd.DataFrame(data)else:raiseValueError(JSON数据格式不支持需要字典或列表格式)eliffilepath.suffix.lower().csv:returnpd.read_csv(filepath)eliffilepath.suffix.lower()in[.xlsx,.xls]:returnpd.read_excel(filepath)else:raiseValueError(f不支持的文件格式:{filepath.suffix})defsetup_ads_environment(self,workspace_path:str,library_name:str,design_name:str)-None:设置ADS工作环境print(设置ADS工作环境...)try:workspaceutils.get_workspace(workspace_path)libraryutils.get_library(workspace,library_name)self.designutils.get_design(library,design_name,utils.ViewType.SCHEMATIC)print(ADS环境设置成功)exceptExceptionase:raiseRuntimeError(fADS环境设置失败:{e})defextract_simulation_results(self,results:dataset.Dataset,target_variables:List[str],debug:boolTrue)-Dict[str,Any]: 通用的仿真结果提取函数 Args: results: ADS仿真结果对象 target_variables: 目标变量名列表 debug: 是否输出调试信息 Returns: dict: 提取结果字典格式为 {变量名: 值/数组, ...} extraction_results{}ifdebug:print(f 开始提取仿真结果目标变量:{target_variables})# 初始化所有目标变量为 Noneforvar_nameintarget_variables:extraction_results[var_name]Nonetry:# 遍历所有变量块forvb_nameinresults.varblock_names:try:varblockresults[vb_name]dependent_vars[]independent_vars[]# 使用 ivars 和 dvars 属性ifhasattr(varblock,ivars)andhasattr(varblock,dvars):try:independent_vars[ivar.nameforivarinvarblock.ivars]dependent_vars[dvar.namefordvarinvarblock.dvars]exceptExceptionase:ifdebug:print(f 使用 ivars/dvars 失败:{e})ifdebug:print(f 检查变量块:{vb_name})print(f 依赖变量:{dependent_vars})# 主要在依赖变量中搜索目标变量search_vars(dependent_varsifdependent_varselse(independent_varsdependent_vars))# 检查每个目标变量fortarget_varintarget_variables:ifextraction_results[target_var]isnotNone:continueiftarget_varinsearch_vars:try:dfvarblock.to_dataframe(dvar_names[target_var])iftarget_varindf.columnsandlen(df)0:data_seriesdf[target_var]iflen(data_series)1:valuefloat(data_series.iloc[0])extraction_results[target_var]valueifdebug:print(f ✓ 提取单值变量:{vb_name}.{target_var}{value:.3f})else:value_arraydata_series.values.tolist()extraction_results[target_var]value_arrayifdebug:print(f ✓ 提取数组变量:{vb_name}.{target_var}(长度:{len(value_array)}))exceptExceptionase:ifdebug:print(f ❌ 提取{vb_name}.{target_var}失败:{e})continueexceptExceptionase:ifdebug:print(f ❌ 访问变量块{vb_name}失败:{e})continue# 显示提取结果摘要ifdebug:successful_vars[varforvar,valinextraction_results.items()ifvalisnotNone]failed_vars[varforvar,valinextraction_results.items()ifvalisNone]print( 提取结果摘要 )print(f 成功提取:{successful_vars})iffailed_vars:print(f 未找到变量:{failed_vars})returnextraction_resultsexceptExceptionase:ifdebug:print(f ❌ 仿真结果提取异常:{e})returnextraction_resultsdefrun_simulation_and_extract_results(self,target_variables:List[str],debug:boolTrue)-Dict[str,Any]: 运行仿真并提取多个目标变量的结果 Args: target_variables: 目标变量名列表 debug: 是否输出调试信息 Returns: dict: 提取结果字典 try:# 创建仿真管理器sim_managerutils.SimulationManager(self.design)# 运行仿真sim_manager.run_design_simulation()# 提取仿真结果withsim_manager.get_simulation_results()asresults:returnself.extract_simulation_results(results,target_variables,debugdebug)exceptExceptionase:ifdebug:print(f仿真失败:{e})return{var:Noneforvarintarget_variables}defrun_batch_simulation(self,data_filepath:str,workspace_path:str,library_name:str,design_name:str,target_variables:List[str],goal_variables:List[str]None,result_processor:Optional[Callable]None,max_samples:Optional[int]None,save_to_original:boolTrue,)-pd.DataFrame: 运行批量仿真 Args: data_filepath: 参数数据文件路径 workspace_path: ADS工作空间路径 library_name: 库名称 design_name: 设计名称 target_variables: 仿真提取变量列表 goal_variables: 目标变量列表 result_processor: 结果处理函数接收results字典返回处理后的结果 max_samples: 最大样本数限制 save_to_original: 是否保存结果到原始数据文件 Returns: 包含仿真结果的DataFrame print( 自动化仿真开始 )print(f数据文件:{data_filepath})print(f工作空间:{workspace_path})print(f库名称:{library_name})print(f设计名称:{design_name})# 1. 加载参数样本数据print(f加载参数数据:{data_filepath})dfself.load_parameter_samples(data_filepath)print(f成功加载{len(df)}个样本)# 应用样本数限制ifmax_samplesisnotNone:dfdf.head(max_samples)print(f测试模式只处理前{len(df)}个样本)# 2. 设置ADS工作环境self.setup_ads_environment(workspace_path,library_name,design_name)# 3. 循环处理每个样本simulation_results[]foridx,rowindf.iterrows():sample_idrow.get(sample_id,idx1)print(f\n处理样本{sample_id}({idx1}/{len(df)})...)try:# 更新电路参数self.parameter_updater.update_parameters(self.design,row)print( 参数更新完成)ifos.path.exists(os.path.join(self.design.cell.path,data,design_name.ds)):os.remove(os.path.join(self.design.cell.path,data,design_name.ds))# 运行仿真并提取结果resultsself.run_simulation_and_extract_results(target_variables)# 处理结果ifresult_processor:processed_resultsresult_processor(results)else:processed_resultsresults simulation_results.append(processed_results)# 显示结果forvar_name,valueinprocessed_results.items():ifvalueisnotNone:ifisinstance(value,(int,float)):print(f{var_name}{value:.3f})else:print(f{var_name}{type(value).__name__}(长度:{len(value)ifhasattr(value,__len__)elseN/A}))exceptExceptionase:print(f 样本{sample_id}处理失败:{e})simulation_results.append({var:Noneforvarintarget_variables})ifgoal_variablesisNone:goal_variablestarget_variables# 4. 将结果添加到原始数据并保存ifsave_to_original:self._save_results_to_original_file(df,simulation_results,goal_variables,data_filepath)else:df[simulation_results]simulation_results# 5. 显示统计信息self._print_simulation_statistics(df,goal_variables)print( 自动化仿真完成 )returndfdef_save_results_to_original_file(self,df:pd.DataFrame,simulation_results:List[Dict[str,Any]],goal_variables:List[str],data_filepath:str,)-None: 将仿真结果保存到原始数据文件中追加到现有的simulation_results中 Args: df: 原始数据DataFrame simulation_results: 仿真结果列表 goal_variables: 目标变量列表 data_filepath: 原始数据文件路径 print(\n保存结果...)# 处理新的仿真结果new_formatted_results[]forresult_dictinsimulation_results:new_result{}forvar_nameingoal_variables:valueresult_dict.get(var_name)ifvalueisnotNone:# 处理不同类型的数据processed_valueself._process_value_for_json(value)new_result[f{var_name}]processed_valueelse:new_result[f{var_name}]Nonenew_formatted_results.append(new_result)# 合并现有的simulation_results和新结果merged_results[]fori,(_,row)inenumerate(df.iterrows()):# 获取现有的simulation_results如果存在existing_resultsrow.get(simulation_results,{})# 如果现有结果不是字典初始化为空字典ifnotisinstance(existing_results,dict):existing_results{}# 获取对应的新结果new_result(new_formatted_results[i]ifilen(new_formatted_results)else{})# 合并结果新结果会覆盖同名的现有结果merged_resultexisting_results.copy()# 保留现有数据merged_result.update(new_result)# 添加/覆盖新数据merged_results.append(merged_result)# 将合并后的结果添加到DataFramedf[simulation_results]merged_results# 保存到原始文件withopen(data_filepath,w,encodingutf-8)asf:json.dump(df.to_dict(orientrecords),f,indent2,ensure_asciiFalse)print(f结果已保存到:{data_filepath})def_process_value_for_json(self,value:Any)-Any: 处理值以确保JSON可序列化 Args: value: 要处理的值 Returns: JSON可序列化的值 # 处理复数ifisinstance(value,complex):return{real:float(value.real),imag:float(value.imag),magnitude:float(abs(value)),phase_deg:float(np.angle(value,degTrue)),}# 处理numpy数组或列表elifisinstance(value,(list,np.ndarray)):iflen(value)0:return[]eliflen(value)1:# 单个值递归处理returnself._process_value_for_json(value[0])else:# 多个值处理每个元素processed_list[]foriteminvalue:processed_list.append(self._process_value_for_json(item))returnprocessed_list# 处理numpy标量elifisinstance(value,np.number):ifnp.iscomplex(value):returnself._process_value_for_json(complex(value))else:returnfloat(value)# 处理NaN和无穷大elifisinstance(value,float):ifnp.isnan(value)ornp.isinf(value):returnNoneelse:returnvalue# 其他类型直接返回else:returnvaluedef_print_simulation_statistics(self,df:pd.DataFrame,target_variables:List[str])-None:打印仿真统计信息print(\n 仿真统计 )print(f总样本数:{len(df)})# 统计成功的仿真successful_count0forresultsindf[simulation_results]:ifany(results.get(var)isnotNoneforvarintarget_variables):successful_count1print(f成功仿真:{successful_count})print(f失败样本:{len(df)-successful_count})# 显示各变量的统计信息forvar_nameintarget_variables:values[]forresultsindf[simulation_results]:valueresults.get(var_name)ifvalueisnotNoneandisinstance(value,(int,float)):values.append(value)ifvalues:valuesnp.array(values)print(f{var_name}范围:{values.min():.3f}~{values.max():.3f})print(f{var_name}均值:{values.mean():.3f})AutoSimulator采用模板方法模式 (Template Method Pattern)设计不变的部分ADS 工作空间的打开/关闭、仿真器的实例化、结果文件的遍历与读取、异常处理、数据保存追加到原始 JSON。这些通用逻辑被封装在基类和工具函数中。变化的部分不同的电路有不同的参数需要更新如电阻值、信号文件路径、偏置电压。这部分逻辑通过ParameterUpdater接口暴露给用户实现。1.2 核心类说明utils.auto_simulator.py中主要包含两个核心类ParameterUpdater和AutoSimulator。1. ParameterUpdater (抽象基类)设计意图这是一个策略接口Strategy Pattern将如何更新电路参数这一变化点从框架中剥离出来。由于每个 ADS 设计的元件名称、变量控件结构、参数命名规则都不同这部分逻辑无法通用化必须由用户根据自己的电路原理图来实现。类定义fromabcimportABC,abstractmethodfromkeysight.ads.deimportdb_uuasdbimportpandasaspdclassParameterUpdater(ABC):参数更新抽象接口abstractmethoddefupdate_parameters(self,design:db.Design,param_row:pd.Series)-None: 更新电路参数用户必须实现 Args: design: ADS 设计对象指向当前打开的原理图 param_row: 包含本次仿真所需全部参数的 Pandas Series pass核心方法详解方法签名update_parameters(self, design: db.Design, param_row: pd.Series) - None调用时机AutoSimulator在处理每一行参数样本时会在执行仿真前调用此方法design 参数由setup_ads_environment打开的设计对象类型为keysight.ads.de.db_uu.Design。通过它可以访问原理图中的所有元件实例param_row 参数Pandas Series 对象键为参数名如R1,Vbias值为参数数值。这些键名对应输入 JSON/CSV 文件中的列名返回值无None。参数更新通过直接修改design对象完成实现时需要掌握的 ADS Python API获取元件实例instdesign.get_instance(VAR1)# 按原理图中的 Instance Name 获取更新 VAR 控件中的变量用于VAR/VAR2等变量定义控件inst.vars.update({变量名1:值字符串,变量名2:值字符串,})更新元件参数用于电阻、电容、信号源等具体元件inst.parameters[参数名].value值字符串可带单位# 例如inst.parameters[R].value 100 Ohm# 例如inst.parameters[File].value E:/data/signal.txt # 文件路径需额外引号刷新原理图标注更新后建议调用inst.update_item_annotation()使用事务保证原子性推荐fromkeysight.ads.de.dbimportTransactionwithTransaction(design)astransaction:# 在此块内进行所有参数修改inst1.vars.update({...})inst2.parameters[C].value10 pF# 提交事务使修改生效transaction.commit()注意事项所有参数值必须转换为字符串格式ADS 内部会自行解析单位文件路径类参数如DAC1的File参数需要用双引号包裹即path若更新多个元件建议包裹在Transaction中确保要么全部成功、要么全部回滚更新后调用update_item_annotation()可让原理图界面同步显示新值非必需但推荐2. AutoSimulator (核心控制器)职责这是自动化仿真的主引擎Driver。它不关心电路的具体细节只负责流程控制加载数据 - 设置环境 - 循环仿真 - 提取结果 - 保存文件。主要方法详解__init__(self, parameter_updater: ParameterUpdater)构造函数负责将用户实现的参数更新器注册到控制器中。参数类型说明parameter_updaterParameterUpdater用户自定义的参数更新器实例必须实现update_parameters方法内部行为将parameter_updater保存为成员变量同时初始化self.design None后续由setup_ads_environment填充。load_parameter_samples(self, filepath: str) - pd.DataFrame从文件加载参数样本数据统一转换为 Pandas DataFrame 供后续遍历使用。参数类型说明filepathstr参数数据文件的完整路径支持的输入格式扩展名处理逻辑.json使用json.load读取。支持三种结构① 纯列表[{...}, {...}]② 字典包裹{samples: [{...}]}③ 单条记录{...}自动包装为单行 DataFrame.csv调用pd.read_csv(filepath).xlsx/.xls调用pd.read_excel(filepath)异常情况FileNotFoundError文件路径不存在ValueErrorJSON 内容既非 dict 也非 list或扩展名不在上述列表中注意虽然加载支持多种格式但目前结果保存仅实现了 JSON 格式见_save_results_to_original_file。如需将结果回写到 CSV/Excel用户可继承AutoSimulator并重写保存逻辑。setup_ads_environment(self, workspace_path: str, library_name: str, design_name: str) - None初始化 ADS 工作环境完成工作空间 - 库 - 设计的三级打开流程。参数类型说明workspace_pathstrADS 工作空间目录路径如E:/ADS2026_wrk/MyProject_wrklibrary_namestr库名称如MyAmplifier_libdesign_namestr原理图设计名称不含扩展名如Amp_Sim_Schematic内部流程utils.get_workspace(workspace_path)—— 打开/连接工作空间utils.get_library(workspace, library_name)—— 加载指定库utils.get_design(library, design_name, ViewType.SCHEMATIC)—— 打开原理图视图成功后self.design将指向该设计对象后续的参数更新和仿真都基于此对象进行。异常情况路径错误、库/设计不存在时抛出RuntimeError。extract_simulation_results(self, results: dataset.Dataset, target_variables: List[str], debug: bool True) - Dict[str, Any]从仿真结果数据集中智能提取用户指定的目标变量是本工具库最核心的数据处理函数。参数类型说明resultsdataset.DatasetADS 仿真结果对象由SimulationManager.get_simulation_results()获取target_variablesList[str]想要提取的变量名列表如[S[2,1], Gain_dB, OUT]debugbool是否打印调试信息默认True提取策略不依赖硬编码的块名遍历results.varblock_names获取所有 VariableBlock对每个块通过varblock.ivars/varblock.dvars获取其独立变量和依赖变量名列表若目标变量出现在dvars中调用varblock.to_dataframe(dvar_names[target_var])精准提取该列根据数据长度自动判断类型长度 1 → 标量转为 Pythonfloat长度 1 → 向量转为 Pythonlist返回值Dict[str, Any]格式为{变量名: 值或列表}。未找到的变量对应值为None。run_simulation_and_extract_results(self, target_variables: List[str], debug: bool True) - Dict[str, Any]执行单次仿真并提取结果的快捷方法内部封装了仿真管理器的创建与结果获取。参数类型说明target_variablesList[str]想要提取的变量名列表debugbool是否打印调试信息内部流程创建SimulationManager(self.design)调用sim_manager.run_design_simulation()执行仿真使用上下文管理器with sim_manager.get_simulation_results() as results获取结果调用extract_simulation_results(results, target_variables, debug)提取数据异常处理若仿真过程出错如不收敛、License 问题捕获异常并返回{var: None for var in target_variables}不会中断程序。run_batch_simulation(self, data_filepath, workspace_path, library_name, design_name, target_variables, goal_variablesNone, result_processorNone, max_samplesNone, save_to_originalTrue) - pd.DataFrame批量仿真的主入口串联整个自动化流程。大多数情况下用户只需调用此方法。参数类型默认值说明data_filepathstr—参数数据文件路径workspace_pathstr—ADS 工作空间路径library_namestr—库名称design_namestr—设计名称target_variablesList[str]—要提取的仿真结果变量列表goal_variablesList[str]None写入文件时的字段名集合若为None则等于target_variablesresult_processorCallableNone可选的结果后处理回调函数签名为(Dict) - Dictmax_samplesintNone限制处理的样本数量用于调试None表示处理全部save_to_originalboolTrue是否将结果合并回写到原始数据文件执行流程加载数据调用load_parameter_samples(data_filepath)读取参数表限制样本若设置了max_samples取前 N 行初始化环境调用setup_ads_environment(...)打开 ADS 设计循环处理每个样本调用parameter_updater.update_parameters(design, row)更新电路参数删除旧仿真数据移除{cell_path}/data/{design_name}.ds防止读到历史缓存调用run_simulation_and_extract_results(target_variables)执行仿真并提取结果若提供了result_processor对结果进行后处理将结果追加到列表保存结果若save_to_originalTrue调用_save_results_to_original_file合并写回打印统计调用_print_simulation_statistics输出成功/失败计数与数值范围返回值带有simulation_results列的 DataFrame。_save_results_to_original_file(self, df, simulation_results, goal_variables, data_filepath) - None将当前批次的仿真结果与原文件中已有的simulation_results字段合并后写回支持增量覆盖新结果覆盖同名旧结果旧结果中不重名的字段保留。内部逻辑遍历simulation_results列表对每条记录中的goal_variables调用_process_value_for_json转换遍历原 DataFrame取出每行的simulation_results若不存在则初始化为空字典使用dict.update()将新结果合并进去最终以json.dump(df.to_dict(orientrecords), ...)写回文件限制目前仅支持 JSON 格式输出。如需 CSV/Excel 输出可重写此方法或在调用后手动导出。_process_value_for_json(self, value) - Any递归处理各种数据类型确保最终结果可被json.dump序列化。输入类型输出格式complex{real: float, imag: float, magnitude: float, phase_deg: float}list/np.ndarray递归处理每个元素若长度为 1 则解包为标量np.number转为 Pythonfloat复数走 complex 分支float且为NaN/Inf转为None其他原样返回_print_simulation_statistics(self, df, target_variables) - None在批量仿真结束后打印统计摘要便于快速评估整体质量。输出内容包括总样本数 / 成功数 / 失败数对于每个target_variable若为数值型则显示最小值、最大值、均值1.3 实战示例开发一个自定义仿真器本节以一个射频放大器增益仿真为例完整演示从数据准备到结果提取的全流程。1.3.1 输入数据格式首先准备参数样本文件JSON 格式每条记录代表一组待仿真的电路参数[{sample_id:1,Vbias:3.3,R_source:50,C_coupling:100,L_match:2.2},{sample_id:2,Vbias:3.0,R_source:75,C_coupling:150,L_match:1.8}]字段说明sample_id样本编号用于日志输出和结果追踪可选若不提供则自动使用行索引其余字段与原理图中需要更新的变量/参数一一对应1.3.2 实现参数更新器根据你的 ADS 原理图结构继承ParameterUpdater并实现update_parameters方法 amplifier_simulator.py 射频放大器批量仿真脚本 importsysfrompathlibimportPath# 将项目根目录加入 Python 路径确保能 import 该工具库project_rootPath(__file__).parent.parent# 根据实际目录层级调整sys.path.append(str(project_root))importpandasaspdfromutils.auto_simulatorimportAutoSimulator,ParameterUpdaterfromkeysight.ads.deimportdb_uuasdbfromkeysight.ads.de.dbimportTransactionclassAmplifierUpdater(ParameterUpdater): 放大器参数更新器 假设原理图中包含 - VAR1 控件定义 Vbias偏置电压、R_source源阻抗 - C1 元件耦合电容 - L1 元件匹配电感 defupdate_parameters(self,design:db.Design,param_row:pd.Series)-None: 将 param_row 中的参数值写入 ADS 原理图 Args: design: ADS 设计对象 param_row: 当前样本的参数Pandas Series # 使用 Transaction 确保所有修改原子性提交withTransaction(design)astransaction:# 1. 更新 VAR 控件中的变量 # 获取名为 VAR1 的变量控件实例inst_vardesign.get_instance(VAR1)# 批量更新变量值必须转为字符串inst_var.vars.update({Vbias:str(param_row[Vbias]),R_source:str(param_row[R_source]),})# 刷新原理图标注可选但推荐inst_var.update_item_annotation()# 2. 更新具体元件的参数 # 更新耦合电容 C1 的电容值inst_c1design.get_instance(C1)inst_c1.parameters[C].valuef{param_row[C_coupling]}pFinst_c1.update_item_annotation()# 更新匹配电感 L1 的电感值inst_l1design.get_instance(L1)inst_l1.parameters[L].valuef{param_row[L_match]}nHinst_l1.update_item_annotation()# 3. 提交事务 transaction.commit()代码要点Transaction 上下文管理器将所有修改包裹在事务中调用commit()后才真正生效VAR 控件 vs 元件参数VAR 控件用.vars.update()普通元件用.parameters[名称].value单位处理电容用pF、电感用nHADS 会自动解析字符串转换所有值必须是字符串使用str()或 f-string1.3.3 编写主控制脚本defmain():主函数配置参数并启动批量仿真# 配置区 config{# 输入参数样本文件路径data_filepath:E:/project/data/amplifier_samples.json,# ADS 环境配置workspace_path:E:/ADS2026_wrk/MyAmplifier_wrk,library_name:MyAmplifier_lib,design_name:Amp_Gain_Schematic,# 原理图名称不含 .dsn后缀# 输出要提取的仿真结果变量# 这些变量名需与 ADS 仿真结果中的变量名完全一致target_variables:[S[2,1],# S21 参数增益S[1,1],# S11 参数输入反射Gain_dB,# 测量方程计算的增益dBNF_dB,# 噪声系数],# 可选限制处理样本数调试时使用max_samples:None,# None 表示处理全部设为 5 则只跑前 5 个}print(*60)print(射频放大器批量仿真)print(*60)print(f参数文件:{config[data_filepath]})print(f目标变量:{config[target_variables]})print()# 执行仿真 try:# 1. 创建参数更新器实例updaterAmplifierUpdater()# 2. 创建自动仿真器注入更新器simulatorAutoSimulator(updater)# 3. 运行批量仿真final_dfsimulator.run_batch_simulation(data_filepathconfig[data_filepath],workspace_pathconfig[workspace_path],library_nameconfig[library_name],design_nameconfig[design_name],target_variablesconfig[target_variables],max_samplesconfig[max_samples],save_to_originalTrue,# 结果追加写回原 JSON 文件)print()print(*60)print(f仿真完成共处理{len(final_df)}个样本)print(f结果已保存到:{config[data_filepath]})print(*60)exceptExceptionase:print(f\n❌ 仿真过程发生错误:{e})importtraceback traceback.print_exc()if__name____main__:main()1.3.4 输出结果格式仿真完成后原始 JSON 文件会被追加simulation_results字段[{sample_id:1,Vbias:3.3,R_source:50,C_coupling:100,L_match:2.2,simulation_results:{S[2,1]:{real:2.51,imag:1.33,magnitude:2.84,phase_deg:27.9},S[1,1]:{real:-0.12,imag:0.05,magnitude:0.13,phase_deg:157.4},Gain_dB:9.07,NF_dB:2.3}},{sample_id:2,Vbias:3.0,R_source:75,C_coupling:150,L_match:1.8,simulation_results:{S[2,1]:{...},S[1,1]:{...},Gain_dB:8.45,NF_dB:null}}]结果字段说明复数类型如 S 参数自动拆分为real、imag、magnitude、phase_deg标量类型如Gain_dB直接存储数值提取失败对应字段值为null1.3.5 进阶自定义结果后处理若需要对原始提取结果进行计算如将复数 S21 转为 dB可传入result_processor回调importnumpyasnpdefprocess_results(raw_results:dict)-dict: 自定义结果后处理函数 Args: raw_results: extract_simulation_results 返回的原始字典 Returns: 处理后的结果字典 processedraw_results.copy()# 示例将复数 S21 转为 dBs21raw_results.get(S[2,1])ifs21isnotNoneandisinstance(s21,complex):processed[S21_dB]20*np.log10(abs(s21))returnprocessed# 在 run_batch_simulation 中使用final_dfsimulator.run_batch_simulation(...,result_processorprocess_results,# 传入回调)1.4 为什么推荐使用此模式稳健性内部统一捕获仿真异常单个样本失败不会拖垮全流程。断点续传结果实时写回原始文件结合简单的跳过逻辑即可实现增量仿真。结果对齐自动将输入参数与输出结果一一对应便于后续数据分析与模型训练。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做软件的中介网站建设工程合同包括哪些合同

YoloMouse游戏光标自定义完全指南:从零基础到专业配置 【免费下载链接】YoloMouse Game Cursor Changer 项目地址: https://gitcode.com/gh_mirrors/yo/YoloMouse 想要在游戏中拥有个性化的鼠标光标吗?YoloMouse这款开源工具将彻底改变你的游戏体…

张小明 2026/1/9 9:33:17 网站建设

网站费用单门户网站内容

Excalidraw呈现OKR目标体系:战略拆解可视化 在远程办公常态化、组织敏捷化转型加速的今天,团队如何确保战略意图不被稀释,目标执行不走样?这是许多管理者面临的现实挑战。尤其当使用OKR这类强调透明与对齐的目标管理框架时&#…

张小明 2025/12/25 17:19:31 网站建设

ps个人网站建设自己在线制作logo

在长三角商业版图中,苏州的园林雅韵、合肥的科创锋芒与南京的古今交融,共同构筑起一座座兼具文化厚度与商业活力的城市地标。肆墨设计顾问有限公司肆墨设计(Xmore Design)创立于1999年,并于2014年在香港设立了全球总部…

张小明 2025/12/30 12:30:24 网站建设

网站在阿里云备案流程wordpress 国家列表

Mac百度网盘限速难题的终极技术解决方案 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 技术挑战与突破契机 在当前的网络环境中,百度网盘…

张小明 2025/12/27 23:57:46 网站建设

青海建设银行的官方网站做网站的学什么代码

如何用3步实现老旧视频4K重生?AI超分技术深度解析 【免费下载链接】Anime4K A High-Quality Real Time Upscaler for Anime Video 项目地址: https://gitcode.com/gh_mirrors/an/Anime4K 你是否曾翻出珍藏多年的老旧动漫视频,却发现它们在4K大屏上…

张小明 2025/12/27 20:28:34 网站建设

成都建设官方网站app开发公司投入

深蓝词库转换:跨平台输入法词库同步的终极解决方案 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 还在为不同输入法之间的词库无法互通而烦恼吗&#xf…

张小明 2025/12/27 18:33:41 网站建设