板子外部电压采集——Polyfit多项式拟合(Matlab)

目录

一、前言

二、实现过程

三、polyfit多项式拟合


 

一、前言

        车载嵌入式应用产品往往对电压高低监测有需求,以免高低压情况对产品不利。外部6-32V电压一般通过电阻分压再通过AD采样获得,由于电阻的非线性,以往电压采集一般采用工厂标定的方式实现,但由于一致性和分线性导致效果不好,所以这里直接matlab内置函数polyfit通过多项式拟合其非线性函数直接计算外部电压。

二、实现过程

 

三、polyfit多项式拟合

%date:
%author:
%email:
%func:
clc
clear
close all
n = 4; %拟合次数
x = 'radar';%radar  ,  scope
vol_data = xlsread('./AD采集V02.xls','采样');
vol_scope = vol_data(:,1);
vol_radar = vol_data(:,end-1);
%vol_radar = vol_data(:,2);
if strcmp(x ,'radar')
    p=polyfit(vol_radar,vol_scope,n);
    fit_adc = polyval(p,vol_radar);
    max_error = max(abs(fit_adc - vol_scope));
    min_error  = min(abs(fit_adc - vol_scope));
    rmse=sqrt(sum((fit_adc-vol_scope).^2)/length(fit_adc));
else
    p=polyfit(vol_scope,vol_radar,n);
    fit_adc = polyval(p,vol_scope);
    max_error = max(abs(fit_adc - vol_radar));
    min_error  = min(abs(fit_adc - vol_radar));
    rmse=sqrt(sum((fit_adc-vol_radar).^2)/length(fit_adc));
end
if n ==2
    fprintf('拟合系数:p2 = %f, p1 = %f, p0 = %f\n',p(1),p(2),p(3));
    fprintf('表达式:voltage = %f *a^2 +%f *b +%f\n',p(1),p(2),p(3));
elseif n ==3
    fprintf('拟合系数:p3 = %f, p2 = %f, p1 = %f, p0 = %f\n',p(1),p(2),p(3),p(4));
    fprintf('表达式:voltage = %f *a^3 +%f *b^2 +%f *c + %f\n',p(1),p(2),p(3),p(4));
elseif n ==4
    fprintf('拟合系数:p4 = %f,p3 = %f, p2 = %f, p1 = %f, p0 = %f\n',p(1),p(2),p(3),p(4),p(5));
    fprintf('表达式:voltage = %f *a^4 +%f *b^3 +%f *c^2 + %f *d + %f\n',p(1),p(2),p(3),p(4),p(5));
else
    fprintf('Error!\n');
end 
fprintf('最大误差:%f.\n',max_error);
fprintf('最小误差:%f.\n',min_error);
fprintf('均方根误差:%f.\n',rmse);
if strcmp(x ,'radar')
    plot(vol_radar,vol_scope,'.')
    hold on
    plot(vol_radar,fit_adc,'--o')  
    xlabel('radar')
    ylabel('scope')
    legend('Real','Fit')
else
    plot(vol_scope,vol_radar,'.')
    hold on
    plot(vol_scope,fit_adc,'--o')    
end

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值