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 算法分析 算法代码 解法二 算法代码 算法…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...
Linux入门课的思维导图
耗时两周,终于把慕课网上的Linux的基础入门课实操、总结完了! 第一次以Blog的形式做学习记录,过程很有意思,但也很耗时。 课程时长5h,涉及到很多专有名词,要去逐个查找,以前接触过的概念因为时…...
C#中用于控制自定义特性(Attribute)
我们来详细解释一下 [AttributeUsage(AttributeTargets.Class, AllowMultiple false, Inherited false)] 这个 C# 属性。 在 C# 中,Attribute(特性)是一种用于向程序元素(如类、方法、属性等)添加元数据的机制。Attr…...
