应用最小二乘法C语言实现线损电压补偿--应用场景2

最小二乘法的应用-C语言实现线损电压补偿-一段不可精确测出的回路电阻

最小二乘法的基本原理

转载了 马同学的高等数学 的文章如何理解最小二乘法?

一段不可精确测出的回路电阻

这一段回路走2A左右的电流, 但回路上的电阻暂时无法精确测量出来;
这段回路上的线损实际上是相当可观的; 可Adc检测VBAT_SW的网络换算出来的电压加上 脑补出来 手动补偿线损 的电压就达不到 甲方爸爸 客户的误差要求;

回路电阻测不准

回路电阻的实验数据

其实把数据测出来并不是最大的问题, 重点在于应用到实际工况;

线损deltaU = Ireal * Rreal; 电子负载一接, 负载调出两个档位,
这段回路的电阻值的范围差不多就出来了, 好像真的不需要费那么大的劲去搞这个最小二乘法喔;

唔, 是的, 电路设计并没有考虑线损的事情, 这个电流Ireal没有器件去测也没有Adc检测;
也就是说, 使用电子负载直接把这个回路的电阻值范围算出来, 实际也就是测出数据而已 没什么卵用 ;

通过中间层把两个存在线性关系的可检测对象关联起来

此处应用两个线性关系的关联

  1. 输入侧的线损deltaU与输入电流Ireal(无Adc检测, 可通过万用表/电流钳等方式测出);
  2. 输入电流Ireal与负载功率InputPower(可由Adc检测的VrailA和InputCurrent计算出);

很显然, 线性关系是可以传递的

线损deltaU ==>  输入电流Ireal ==>  负载功率InputPower;

而输入电流Ireal作为一个中间变量, 实际应用并不需要把Ireal测出来,
因为线性关系可以直接变为

线损deltaU ==> 负载功率InputPower;

在这里插入图片描述

数据
  1. 明确了测试需求, 两组测试数据为
GroupX轴Y轴
1输入电流Ireal线损deltaU
2输入电流Ireal负载功率InputPower
  1. 输出目标数据为Group3的对应关系
GroupX轴Y轴
3负载功率InputPower线损deltaU

测试数据Group1(currentDeltaVbat.txt)

Group1输入电流Ireal线损deltaU
010010
130030
250040
380070
4100080
51200100
61500130
71800150
82000170
92200190
102400210

测试数据Group2(currentWInputPower.txt)

Group2输入电流Ireal负载功率InputPower
04033300
14573890
24984350
37236820
46325910
5188017860
6202219500
7208919875
8211220050
9226321100
10240022050
使用matlab验证

事实上, y= ax + b; 这个完全是可以使用matlab的polyfit可以直接计算出相应的系数的;
但是, 因为这里的应用是单片机, 还是需要做一定的调整, 力求数据更准确;
这里只做数据验证工作;

% currentDeltaVbat.m

% 读取currentDeltaVbat.txt, 数据保存到矩阵A;
% 第一列current数据为x轴, 第二列deltaVbat数据为y轴;

A = load('currentDeltaVbat.txt');
x = A(:, 1);
y = A(:, 2);

B = polyfit(x, y, 1)

figure(1)
plot(x, y, 'r-..');

% 使用拟合出来的系数, 重新生成数据, 对比
C = polyval(B, x);

hold
% figure(2)
plot(x, C(:, 1), 'b-..');

% EOF currentDeltaVbat.m

currentDeltaVbat原始数据与拟合数据对比
currentDeltaVbat原始数据与拟合数据对比

% currentWInputPower.m


% 读取currentWInputPower.txt, 数据保存到矩阵K;
% 第一列current数据为u轴, 第二列deltaVbat数据为v轴;

K = load('currentWInputPower.txt');
u = K(:, 1);
v = K(:, 2);

L = polyfit(u, v, 1)

figure(2)
plot(u, v, 'r-..');

% 使用拟合出来的系数, 重新生成数据, 对比
M = polyval(L, u);

hold
% figure(2)
plot(u, M(:, 1), 'b-..');

% EOF currentWInputPower.m

currentWInputPower原始数据与拟合数据对比
currentWInputPower原始数据与拟合数据对比

Ok, 现在原始数据也有了, 接下来进入代码篇3; C语言求出最小二乘法的系数

求出最小二乘法的系数

代码篇3

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值