当前位置: 首页 > news >正文

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 方法&#xff1a; b.DataTable 结构&#xff1a; 三、S2PFileReader类的调用演示 1.使用示例 一、创作灵感 虽然MATLAB处理数据很实用&#xff0c;但是C#常用于程控仪器的控制&#xff0c…...

Spring Boot “约定大于配置”

什么是“约定大于配置”&#xff1f; “约定大于配置”是一种简化开发的设计理念。简单来说&#xff0c;就是框架默认提供了常见的配置和行为&#xff0c;开发者只需要按照约定来编写代码&#xff0c;避免了繁琐的配置&#xff0c;只在需要时进行定制和调整。这种理念在Spring…...

传输层协议TCP ( 下 )

文章目录 前言序号与确认序号超时重传RTOJacobson算法内核中超时时间的计算 滑动窗口滑动窗口延迟应答流量控制 拥塞控制慢启动拥塞避免快重传快速恢复 保活机制参考资料 前言 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是互联网最重要…...

NLP 八股 DAY1:BERT

BERT全称&#xff1a;Pre-training of deep bidirectional transformers for language understanding&#xff0c;即深度双向Transformer。 模型训练时的两个任务是预测句⼦中被掩盖的词以及判断输⼊的两个句⼦是不是上下句。在预训练 好的BERT模型后⾯根据特定任务加上相应的⽹…...

演示synchronized锁机制用法的简单Demo

演示synchronized锁机制用法的简单Demo。我们以"银行开户"场景为例&#xff1a;每个用户只能创建一个账户&#xff08;模拟类似原代码中每个用户只能有一个私有空间的限制&#xff09;。 第1步&#xff1a;创建项目结构 demo-lock ├── src/main/java/com/exampl…...

Datawhale 数学建模导论二 笔记1

第6章 数据处理与拟合模型 本章主要涉及到的知识点有&#xff1a; 数据与大数据Python数据预处理常见的统计分析模型随机过程与随机模拟数据可视化 本章内容涉及到基础的概率论与数理统计理论&#xff0c;如果对这部分内容不熟悉&#xff0c;可以参考相关概率论与数理统计的…...

差分解方程

差分解方程 差分法在数值求解偏微分方程&#xff08;PDEs&#xff09;和常微分方程&#xff08;ODEs&#xff09;时&#xff0c;可以分为隐式格式和显式格式。以下是两者的主要区别&#xff1a; 显式格式&#xff08;Explicit Scheme&#xff09; 时间推进&#xff1a; 显式格…...

EasyExcel 复杂填充

EasyExcel ​Excel表格中用{}或者{.} 来表示包裹要填充的变量&#xff0c;如果单元格文本中本来就有{、}左右大括号&#xff0c;需要在括号前面使用斜杠转义\{ 、\}。 ​代码中被填充数据的实体对象的成员变量名或被填充map集合的key需要和Excel中被{}包裹的变量名称一致。 …...

ESP32通过MQTT连接阿里云平台实现消息发布与订阅

文章目录 前言 一、准备工作 二、阿里云平台配置 三、代码实现 总结 前言 本文将介绍如何使用ESP32开发板通过MQTT协议连接阿里云物联网平台&#xff0c;并实现消息的发布与订阅功能。我们将使用Arduino IDE进行开发&#xff0c;并借助PubSubClient库实现MQTT通信。 一、准备…...

NVIDIA Jetson Orin Nano 刷机过程

1. 背景 新到手 NVIDIA Jetson Orin Nano 插上显示屏&#xff0c;显示如下&#xff1a; 这是UEFI Shell&#xff0c;UEFI Shell&#xff08;统一可扩展固件接口外壳程序&#xff09;是一种基于UEFI规范的交互式命令行工具&#xff0c;它运行在UEFI固件环境中&#xff0c;为用…...

C#学习之数据转换

目录 一、创作说明 二、数据类型之间的转换 1.数据类型之间的转换表格 2.代码示例 三、进制之间的转换 1.进制之间的转换表格 2.代码示例 四、ASCII 编码和字符之间的转换 1.ASCII 编码和字符之间的转换表格 2.代码示例 五、总结 一、创作说明 C#大多数时候都是和各…...

typecho快速发布文章

typecho_Pytools typecho_Pytools工具由python编写&#xff0c;可以快速批量的在本地发布文章&#xff0c;不需要登陆后台粘贴md文件内容&#xff0c;同时此工具还能查看最新的评论消息。… 开源地址: GitHub Gitee 使用教学&#xff1a;B站 一、主要功能 所有操作不用登陆博…...

深度学习R4周:LSTM-火灾温度预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 任务&#xff1a; 数据集中提供了火灾温度&#xff08;Tem1&#xff09;、一氧化碳浓度&#xff08;CO 1&#xff09;烟雾浓度&#xff08;Soot 1&#xff09;…...

探索Java中的集合类_特性与使用场景

1. 引言 1.1 Java集合框架概述 Java集合框架(Java Collections Framework, JCF)是Java中用于存储和操作一组对象的类和接口的统称。它提供了多种数据结构来满足不同的需求,如列表、集合、映射等。JCF的核心接口包括Collection、List、Set、Queue和Map,以及它们的各种实现…...

自动化遇到的问题记录(遇到问题就更)

总结回归下自己这边遇到的一些问题 “EOF错误”&#xff0c;获取不到csv里面的内容 跑多csv文件里的场景&#xff0c;部分场景的请求值为 1、检查csv文件里不能直接是[]开头的参数&#xff0c;把[]改到ms平台的请求参数里 2、有时可能是某个参数值缺了双引号的其中一边 met…...

【云安全】云原生- K8S kubeconfig 文件泄露

什么是 kubeconfig 文件&#xff1f; kubeconfig 文件是 Kubernetes 的配置文件&#xff0c;用于存储集群的访问凭证、API Server 的地址和认证信息&#xff0c;允许用户和 kubectl 等工具与 Kubernetes 集群进行交互。它通常包含多个集群的配置&#xff0c;支持通过上下文&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学院课程连接&#xff1a;https://edu.csdn.net/course/detail/39573...

【算法专场】哈希表

目录 前言 哈希表 1. 两数之和 - 力扣&#xff08;LeetCode&#xff09; 算法分析 算法代码 面试题 01.02. 判定是否互为字符重排 ​编辑算法分析 算法代码 217. 存在重复元素 算法分析 算法代码 219. 存在重复元素 II 算法分析 算法代码 解法二 算法代码 算法…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...