C#学习之S参数读取(s2p文件)
目录
一、创作灵感
二、S2PFileReader类
1.代码示例
2.代码说明
a.ReadS2PFile 方法:
b.DataTable 结构:
三、S2PFileReader类的调用演示
1.使用示例
一、创作灵感
虽然MATLAB处理数据很实用,但是C#常用于程控仪器的控制,对于射频器件的测试,由于趋肤效应会使得射频同轴线在不同频点具有不同的插入损耗。C#编写的测试平台遍历DUT的不同工作频点需要正确的补偿值,利用C#提前提取出平台射频输入、输出线的插入损耗能减少数据后期的处理工作量。S2P文件可以由矢量网络分析仪事先测量再通过C#编写程序提取并正确补偿到信号源、功率计和频谱仪等仪器中。
二、S2PFileReader类
1.代码示例
以下是一个封装好的类,用于读取 .s2p 文件并将其内容赋值给 DataTable。
using System;
using System.Data;
using System.IO;public class S2PFileReader
{/// <summary>/// 读取 .s2p 文件并返回 DataTable/// </summary>/// <param name="filePath">.s2p 文件路径</param>/// <returns>包含 .s2p 文件数据的 DataTable</returns>public static DataTable ReadS2PFile(string filePath){// 创建 DataTableDataTable dataTable = new DataTable();dataTable.TableName = "S2PData";// 添加列dataTable.Columns.Add("Frequency", typeof(double)); // 频率dataTable.Columns.Add("S11_Magnitude", typeof(double)); // S11 幅度dataTable.Columns.Add("S11_Phase", typeof(double)); // S11 相位dataTable.Columns.Add("S21_Magnitude", typeof(double)); // S21 幅度dataTable.Columns.Add("S21_Phase", typeof(double)); // S21 相位dataTable.Columns.Add("S12_Magnitude", typeof(double)); // S12 幅度dataTable.Columns.Add("S12_Phase", typeof(double)); // S12 相位dataTable.Columns.Add("S22_Magnitude", typeof(double)); // S22 幅度dataTable.Columns.Add("S22_Phase", typeof(double)); // S22 相位try{// 读取文件using (StreamReader reader = new StreamReader(filePath)){string line;while ((line = reader.ReadLine()) != null){// 跳过注释行(以 ! 或 # 开头的行)if (line.StartsWith("!") || line.StartsWith("#"))continue;// 按空格分割行数据string[] values = line.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);// 确保数据行包含足够的列if (values.Length >= 9){// 解析数据并添加到 DataTableDataRow row = dataTable.NewRow();row["Frequency"] = double.Parse(values[0]); // 频率row["S11_Magnitude"] = double.Parse(values[1]); // S11 幅度row["S11_Phase"] = double.Parse(values[2]); // S11 相位row["S21_Magnitude"] = double.Parse(values[3]); // S21 幅度row["S21_Phase"] = double.Parse(values[4]); // S21 相位row["S12_Magnitude"] = double.Parse(values[5]); // S12 幅度row["S12_Phase"] = double.Parse(values[6]); // S12 相位row["S22_Magnitude"] = double.Parse(values[7]); // S22 幅度row["S22_Phase"] = double.Parse(values[8]); // S22 相位dataTable.Rows.Add(row);}}}}catch (Exception ex){throw new Exception("读取 .s2p 文件时出错: " + ex.Message);}return dataTable;}
}
2.代码说明
a.ReadS2PFile 方法:
读取 .s2p 文件并解析数据。
将频率和 S 参数(幅度和相位)存储到 DataTable 中。
跳过以 ! 或 # 开头的注释行。
b.DataTable 结构:
包含以下列:Frequency(频率)、S11_Magnitude(S11 幅度)、S11_Phase(S11 相位)、S21_Magnitude(S21 幅度)、S21_Phase(S21 相位)、S12_Magnitude(S12 幅度)、S12_Phase(S12 相位)、S22_Magnitude(S22 幅度)、S22_Phase(S22 相位)。
三、S2PFileReader类的调用演示
1.使用示例
调用ReadS2PFile(string filePath)方法,将 .s2p 文件数据绑定到 DataGridView 的示例:
using System;
using System.Data;
using System.Windows.Forms;public class MainForm : Form
{private DataGridView dataGridView1;public MainForm(){InitializeComponent();}private void InitializeComponent(){this.dataGridView1 = new DataGridView();((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();this.SuspendLayout();// 设置 DataGridViewthis.dataGridView1.Dock = DockStyle.Fill;this.Controls.Add(this.dataGridView1);// 加载 .s2p 文件string filePath = "example.s2p"; // 替换为你的 .s2p 文件路径try{DataTable dataTable = S2PFileReader.ReadS2PFile(filePath);this.dataGridView1.DataSource = dataTable;}catch (Exception ex){MessageBox.Show("加载文件失败: " + ex.Message);}((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();this.ResumeLayout(false);}[STAThread]static void Main(){Application.EnableVisualStyles();Application.Run(new MainForm());}
}相关文章:
C#学习之S参数读取(s2p文件)
目录 一、创作灵感 二、S2PFileReader类 1.代码示例 2.代码说明 a.ReadS2PFile 方法: b.DataTable 结构: 三、S2PFileReader类的调用演示 1.使用示例 一、创作灵感 虽然MATLAB处理数据很实用,但是C#常用于程控仪器的控制,…...
Spring Boot “约定大于配置”
什么是“约定大于配置”? “约定大于配置”是一种简化开发的设计理念。简单来说,就是框架默认提供了常见的配置和行为,开发者只需要按照约定来编写代码,避免了繁琐的配置,只在需要时进行定制和调整。这种理念在Spring…...
传输层协议TCP ( 下 )
文章目录 前言序号与确认序号超时重传RTOJacobson算法内核中超时时间的计算 滑动窗口滑动窗口延迟应答流量控制 拥塞控制慢启动拥塞避免快重传快速恢复 保活机制参考资料 前言 TCP(Transmission Control Protocol,传输控制协议)是互联网最重要…...
NLP 八股 DAY1:BERT
BERT全称:Pre-training of deep bidirectional transformers for language understanding,即深度双向Transformer。 模型训练时的两个任务是预测句⼦中被掩盖的词以及判断输⼊的两个句⼦是不是上下句。在预训练 好的BERT模型后⾯根据特定任务加上相应的⽹…...
演示synchronized锁机制用法的简单Demo
演示synchronized锁机制用法的简单Demo。我们以"银行开户"场景为例:每个用户只能创建一个账户(模拟类似原代码中每个用户只能有一个私有空间的限制)。 第1步:创建项目结构 demo-lock ├── src/main/java/com/exampl…...
Datawhale 数学建模导论二 笔记1
第6章 数据处理与拟合模型 本章主要涉及到的知识点有: 数据与大数据Python数据预处理常见的统计分析模型随机过程与随机模拟数据可视化 本章内容涉及到基础的概率论与数理统计理论,如果对这部分内容不熟悉,可以参考相关概率论与数理统计的…...
差分解方程
差分解方程 差分法在数值求解偏微分方程(PDEs)和常微分方程(ODEs)时,可以分为隐式格式和显式格式。以下是两者的主要区别: 显式格式(Explicit Scheme) 时间推进: 显式格…...
EasyExcel 复杂填充
EasyExcel Excel表格中用{}或者{.} 来表示包裹要填充的变量,如果单元格文本中本来就有{、}左右大括号,需要在括号前面使用斜杠转义\{ 、\}。 代码中被填充数据的实体对象的成员变量名或被填充map集合的key需要和Excel中被{}包裹的变量名称一致。 …...
ESP32通过MQTT连接阿里云平台实现消息发布与订阅
文章目录 前言 一、准备工作 二、阿里云平台配置 三、代码实现 总结 前言 本文将介绍如何使用ESP32开发板通过MQTT协议连接阿里云物联网平台,并实现消息的发布与订阅功能。我们将使用Arduino IDE进行开发,并借助PubSubClient库实现MQTT通信。 一、准备…...
NVIDIA Jetson Orin Nano 刷机过程
1. 背景 新到手 NVIDIA Jetson Orin Nano 插上显示屏,显示如下: 这是UEFI Shell,UEFI Shell(统一可扩展固件接口外壳程序)是一种基于UEFI规范的交互式命令行工具,它运行在UEFI固件环境中,为用…...
C#学习之数据转换
目录 一、创作说明 二、数据类型之间的转换 1.数据类型之间的转换表格 2.代码示例 三、进制之间的转换 1.进制之间的转换表格 2.代码示例 四、ASCII 编码和字符之间的转换 1.ASCII 编码和字符之间的转换表格 2.代码示例 五、总结 一、创作说明 C#大多数时候都是和各…...
typecho快速发布文章
typecho_Pytools typecho_Pytools工具由python编写,可以快速批量的在本地发布文章,不需要登陆后台粘贴md文件内容,同时此工具还能查看最新的评论消息。… 开源地址: GitHub Gitee 使用教学:B站 一、主要功能 所有操作不用登陆博…...
深度学习R4周:LSTM-火灾温度预测
🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 任务: 数据集中提供了火灾温度(Tem1)、一氧化碳浓度(CO 1)烟雾浓度(Soot 1)…...
探索Java中的集合类_特性与使用场景
1. 引言 1.1 Java集合框架概述 Java集合框架(Java Collections Framework, JCF)是Java中用于存储和操作一组对象的类和接口的统称。它提供了多种数据结构来满足不同的需求,如列表、集合、映射等。JCF的核心接口包括Collection、List、Set、Queue和Map,以及它们的各种实现…...
自动化遇到的问题记录(遇到问题就更)
总结回归下自己这边遇到的一些问题 “EOF错误”,获取不到csv里面的内容 跑多csv文件里的场景,部分场景的请求值为 1、检查csv文件里不能直接是[]开头的参数,把[]改到ms平台的请求参数里 2、有时可能是某个参数值缺了双引号的其中一边 met…...
【云安全】云原生- K8S kubeconfig 文件泄露
什么是 kubeconfig 文件? kubeconfig 文件是 Kubernetes 的配置文件,用于存储集群的访问凭证、API Server 的地址和认证信息,允许用户和 kubectl 等工具与 Kubernetes 集群进行交互。它通常包含多个集群的配置,支持通过上下文&am…...
【愚公系列】《Python网络爬虫从入门到精通》008-正则表达式基础
标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...
【Linux】Ext2文件系统、软硬链接
Ext2文件系统 一.理解硬件1.磁盘、服务器、机柜、机房2.磁盘的物理结构3.磁盘的存储结构4.磁盘的逻辑结构1.理解过程2.真实过程 5.CHS地址、LBA地址转换 二.引入文件系统1.引入"块"概念2.引入"分区"概念3.引入"inode"概念 三.Ext2文件系统1.宏观…...
ATF系统安全从入门到精通
CSDN学院课程连接:https://edu.csdn.net/course/detail/39573...
【算法专场】哈希表
目录 前言 哈希表 1. 两数之和 - 力扣(LeetCode) 算法分析 算法代码 面试题 01.02. 判定是否互为字符重排 编辑算法分析 算法代码 217. 存在重复元素 算法分析 算法代码 219. 存在重复元素 II 算法分析 算法代码 解法二 算法代码 算法…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
