阻抗分析中的软件解调计算

接上篇

重温无功功率测量-CSDN博客

已知被测阻抗两端电压与流过 通过两个ADC同步采集到。

激励频率10k, 采样率1M, 每周期100个点

关键是:采样率除以激励频率, 得是4的倍数... 所以ADC不能自由运行, 得用一个timer来触发.

因为要进行同相分量正交分量计算。

1:直流分量计算

    int buf_size = sizeof(pdc->data.adc_buf) / sizeof(pdc->data.adc_buf[0]);for(int i = 0; i < buf_size; i++) {mean_v += pbuf[i].v;mean_i += pbuf[i].i;}mean_v /= buf_size;mean_i /= buf_size;         // 求平均值, 用于直流平衡

2:计算相位

    for(int i = 50; i < buf_size - 50; i++) {prod_i += -(pbuf[i].v - mean_v) * (pbuf[i].i - mean_i);          // v和i做直流平衡后相乘, 累加得到同相分量prod_q += (pbuf[i + 25].v - mean_v) * (pbuf[i].i - mean_i);    // 激励频率10k, 采样率1M, 每周期100个点, 因此移动25个点再平衡, 相乘, 累加就是正交分量了}prod_i /= buf_size;prod_q /= buf_size;phase = atan2(prod_q, prod_i);              // 同相分量和正交分量, atan2即得到相位差

原理解释

使用 atan2 函数和同相、正交分量的平均值,确实可以得到相位角。 这也是一种在数字信号处理中非常常用和稳健的相位计算方法。

原理简述

首先,让我们理解什么是同相分量和正交分量。

假设你有一个信号 s(t)=Acos(ωt+ϕ),它的同相分量 (In-phase, I) 和正交分量 (Quadrature, Q) 可以通过将其与参考信号(通常是 cos(ωt) 和 −sin(ωt) 或 sin(ωt))相乘,并取其在周期内的平均值来得到。

  • 同相分量 (I): 表示信号在参考信号 cos(ωt) 上的投影。它与信号的幅度和相位有关。

  • 正交分量 (Q): 表示信号在参考信号 sin(ωt) 上的投影。它也与信号的幅度和相位有关。

通过积分或求平均值,我们可以得到:

  • I=T1​∫0T​s(t)cos(ωt)dt=2A​cos(ϕ)

  • Q=T1​∫0T​s(t)sin(ωt)dt=2A​sin(ϕ)

注意:在数字信号处理中,积分会变成求和。

为什么 atan2(Q, I) 有效?

根据上面的公式,我们可以看到:

IQ​=2A​cos(ϕ)2A​sin(ϕ)​=cos(ϕ)sin(ϕ)​=tan(ϕ)

所以,ϕ=arctan(IQ​)。

但是,arctan(y/x) 有一个问题:它只能输出 −π/2 到 π/2 之间的角度,无法区分第一、三象限第二、四象限的角度。

atan2(y, x) 函数解决了这个问题。它通过同时使用 y (这里的 Q) 和 x (这里的 I) 的正负号信息,来确定相位角所在的完整 2π 范围,即 −π 到 π。

  • 如果 I>0,Q>0,相位角在第一象限。

  • 如果 I<0,Q>0,相位角在第二象限。

  • 如果 I<0,Q<0,相位角在第三象限。

  • 如果 I>0,Q<0,相位角在第四象限。

因此,atan2(Q, I) 能够精确地计算出信号的相位角,而不会产生象限模糊。

步骤

  1. 选择基准频率:确定你要分析的信号的基波频率 f0​,并生成两个正交的参考信号:cos(2πf0​t) 和 sin(2πf0​t)。

  2. 计算同相分量 (I):将你的原始采样信号与 cos(2πf0​t) 相乘,并对结果求平均值(或在一个周期内求和)。

  3. 计算正交分量 (Q):将你的原始采样信号与 sin(2πf0​t) 相乘,并对结果求平均值(或在一个周期内求和)。

  4. 计算相位角:将得到的 Q 和 I 值代入 atan2 函数:

相位角=atan2(Q,I)

这个方法等同于对信号进行离散傅里叶变换 (DFT),然后取基波频率处的实部和虚部。同相分量 I 对应于傅里叶变换的实部,正交分量 Q 对应于傅里叶变换的虚部。因此,这是一种非常可靠且常用的方法。

这种方法通常被称为 I/Q 解调 (In-phase and Quadrature Demodulation) 或 正交解调

在数字信号处理中,I/Q 是同相 (In-phase)正交 (Quadrature) 的缩写。通过将信号分别与一对正交的参考信号(例如 cos(ωt) 和 sin(ωt))相乘并求平均,我们可以提取出信号的 I 分量和 Q 分量。

  • I 分量 对应于信号的实部

  • Q 分量 对应于信号的虚部

这两个分量共同构成了一个复数,这个复数包含了信号的幅度和相位信息。而 atan2(Q, I) 函数正是用来从这个复数中计算出精确的相位角。

因此,这个方法在很多领域都有广泛应用,尤其是在通信、雷达和各种数字信号处理系统中,用来对信号进行解调、分析和处理。

3:计算阻抗模

    for(int i = 50; i < buf_size - 50; i++) {rms_sq_sum_v += pow((pbuf[i].v - mean_v),2);            rms_sq_sum_i += pow((pbuf[i].i - mean_i),2);}float U_rms = sqrt(rms_sq_sum_v / buf_size);float I_rms = sqrt(rms_sq_sum_i / buf_size);float Z_modulus = U_rms / I_rms;

原理解释 

第1步:计算电压的有效值 (U_rms)

有效值(方均根值)代表了交流信号的等效能量。它的计算方法是:

  1. 对每个电压采样点进行平方。

  2. 将所有平方值相加求和。

  3. 将求和结果除以采样点数 (1000)。

  4. 对最终结果开方。

第2步:计算电流的有效值 (I_rms)

使用同样的方法计算电流的有效值:

  1. 对每个电流采样点进行平方。

  2. 将所有平方值相加求和。

  3. 将求和结果除以采样点数 (1000)。

  4. 对最终结果开方。

第3步:计算阻抗的模 (∣Z∣)

阻抗的模等于电压的有效值除以电流的有效值。

∣Z∣=Urms​​/Irms​

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

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

相关文章

ubuntu 镜像克隆

一、克隆 1、准备 一个u盘&#xff08;制作启动盘&#xff09; 一个移动固态硬盘&#xff08;大于要克隆系统盘的1.2倍&#xff09; 2、使用 rufus生成系统启动盘 &#xff08;1&#xff09;下载ubuntu iso 桌面版 https://cn.ubuntu.com/download &#xff08;2&#x…

Axure下拉菜单:从基础交互到高保真元件库应用

在Web端产品设计中&#xff0c;下拉菜单&#xff08;Dropdown Menu&#xff09; 是用户与系统交互的核心组件之一&#xff0c;它通过隐藏次要选项、节省页面空间的方式&#xff0c;提升信息密度与操作效率。无论是基础下拉菜单、图标式下拉菜单&#xff0c;还是复杂的多级下拉菜…

复现YOLOV5+训练指定数据集

一、复现YOLOV5代码 1.github下载&#xff1a;https://github.com/MIPIT-Team/SSA-YOLO 2.配置环境&#xff1a;创建虚拟环境yolo5 conda create -n yolo5 python3.9 #对应文件夹下pip install -r requirements.txt报错&#xff1a;ERROR: pips dependency resolver does no…

Agents-SDK智能体开发[4]之集成MCP入门

文章目录说明一 Agents SDK接入MCP1.1 MCP技术回顾1.2 MCP基础实践流程1.2.1 天气查询服务器Server创建流程1.2.2 服务器依赖安装和代码编写1.2.3 环境配置文件1.2.4 客户端代码编写1.3 测试运行二 MCPAgents SDK基础调用2.1 weather_server.py2.2 client_agent.py2.3 运行测试…

Camera相机人脸识别系列专题分析之十九:MTK ISP6S平台FDNode传递三方FFD到APP流程解析

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: Camera相机人脸识别系列专题分析之十九:MTK平台FDNode传递三方FFD到APP流程解析 目录 一、背景 二、:OcamMeta传递FFD到APP 2.1:OcamMeta 2.2 :OcamMeta::process更新FFD 2.…

【实时Linux实战系列】构建实时监测与报警系统

在实时系统中&#xff0c;监测与报警系统是确保系统正常运行和及时响应异常情况的关键组件。实时监测与报警系统能够实时收集系统数据&#xff0c;分析关键事件&#xff0c;并在检测到异常时发出警报。这种系统广泛应用于工业自动化、医疗设备监控、网络安全等领域。掌握实时监…

PHP入门及数据类型

PHP数据类型 PHP标记 //HTML风格 <?phpecho "hello world"; ?> //简短风格 <?echo "hello world"; ?>数据类型 PHP 最初源于 Perl 语言&#xff0c;与 Perl 类似&#xff0c;PHP 对数据类型采取较为宽松的态度。PHP 规定&#xff0c;变量数…

沸点 | 嬴图参加世界人工智能大会

2025 WAIC于 7 月 26 日至 28 日在上海举行。大会展览面积突破 7 万平方米&#xff0c;800 余家企业参展。嬴图作为图数据库领域的领先企业&#xff0c;携前沿技术与创新应用精彩亮相。​大会期间&#xff0c;嬴图创始人兼CEO孙宇熙与来自全球的顶尖学者、企业代表共同探讨人工…

2. 字符设备驱动

一、设备号 1.1. 什么是设备号 设备号是用来标记一类设备以及区分这类设备中具体个体的一组号码。 设备号由主设备号和次设备号组成。主设备号的作用为标记一类设备、用于标识设备驱动程序,而次设备号的作用是为了区分这类设备中的具体个体设备及用于标识同一驱动程序下的具…

uboot armv8 启动流程之 linker script

section 详细说明.text按如下顺序&#xff0c;中断向量表vectors, 启动入口代码start.o,普通text, glue &#xff08;arm thumb2 相互调用时自动生成的代码&#xff09;*(.vectors)CPUDIR/start.o (.text*)*(.text*)*(.glue*)__image_copy_start 标记为text 段入口&#xff0c;…

xxljob总结

XXL-Job 支持多种任务类型&#xff0c;以下是常见任务类型的示例 Demo&#xff0c;包含核心配置和代码片段&#xff0c;帮助快速理解用法&#xff1a;一、Bean模式任务&#xff08;最常用&#xff09;通过注解 XxlJob 定义任务方法&#xff0c;直接在 Spring 容器中管理&…

Python包安全工程实践:构建安全可靠的Python生态系统

在现代计算环境中&#xff0c;性能往往是Python包成功的关键因素。本文将深入探讨Python包的性能优化技术&#xff0c;包括并发编程模型、性能分析工具、内存优化策略以及原生代码集成等高级主题&#xff0c;帮助你构建高性能的Python组件。1. 性能分析基础1.1 性能分析工具矩阵…

kubernetes基础知识

个人博客站—运维鹿: http://www.kervin24.top CSDN博客—做个超努力的小奚&#xff1a; https://blog.csdn.net/qq_52914969?typeblog一、kubernetes介绍Kubernetes本质是一组服务器集群&#xff0c;它可以在集群的每个节点上运行特定的程序&#xff0c;来对节点中的容器进行…

winntsetup安装驱动和光驱安装F6功能一样----NT5.2.3790源代码分析

D:\drv>dir驱动器 D 中的卷是 新加卷卷的序列号是 443D-D64BD:\drv 的目录2025-08-03 23:57 <DIR> . 2025-08-03 23:57 <DIR> .. 2008-05-27 10:01 119,068 yk51x86.cat 2008-05-20 10:01 969,380 yk51x86.inf…

Web 开发 11

今天完成了workshop2&#xff0c;进度有点慢&#xff0c;但是记录一下极为愚蠢的一轮轮问答和思考~&#xff01;&#xff08;还是有点成就感的&#xff09;ps&#xff1a;【】内为我的提问1 导入语句&#xff08;ES6 模块导入语法&#xff09;【import CatHappiness from "…

写作路上的迷茫与突破

曾经&#xff0c;我也是那个在写作面前踌躇不前的人。每次提笔&#xff0c;满心都是“我写不好”“我没什么可写的”“我达不到别人的高度”……这些念头像藤蔓一样&#xff0c;紧紧缠绕着我&#xff0c;让我寸步难行。我看着群里的小伙伴们一个个妙笔生花&#xff0c;自己却只…

23 Active Directory攻击与防护策略解析

引言 Active Directory&#xff08;AD&#xff09;是企业IT环境中用户认证、访问控制和身份管理的核心。因其掌握整个网络的"钥匙"&#xff0c;AD常成为攻击者的首要目标。 从凭证转储到隐蔽侦察&#xff0c;攻击者通过多种手段控制AD。无论您是网络安全分析师、红…

【内容规范】关于标题中【】标记的使用说明

【内容规范】关于标题中【】标记的使用说明 在信息爆炸的时代&#xff0c;如何让内容更易识别、更具条理性&#xff0c;成为内容创作者和平台运营者共同关注的问题。标题中【】标记的使用&#xff0c;正是在这种需求下形成的一种实用规范。 这种规范的核心作用在于建立统一的内…

centos 9 安装docker教程

拉取相关依赖 dnf -y install dnf-plugins-core设置阿里云镜像库 dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装docker dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plu…

关闭Jetbrains Mono字体连写、连字功能

所谓的关闭Jetbrains Mono字体连写&#xff0c;其实就是更换为Jetbrains Mono NL字体二者的区别就是符号间距的大小不同&#xff0c;也就是有无连字功能。 下图以Visutal Studio为例&#xff1a;