降维处理 N函数和sum降维,rows/cols降维

本文介绍了Excel中处理数组的两种降维方法:N函数降维及SUM函数降维。通过这两种方法可以将二维数组转换为一维数组,方便进一步的数据处理与分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "measure.h" #include "adc.h" #include "main.h" #include "math.h" #include "arm_math.h" /* ADC1 CH2 PA3 采集boost直流电压 ADC2 CH3 PA5 采集boost直流电流 ADC1 CH4 PA4 采集inverter交流输出电压 ADC2 CH6 PA6 采集inverter交流输出电流 ADC1 CH14 PC4 采集整流输入前的交流输入电压 ADC1 CH15 PC5 */ #define COLS 6 //6个通道数,在单数组中用来计算 #define ROWS 10 //每个通道10个数据处理,在单数组中用来计算 #define SAMPLE_LEN 200 //采样的点数,经计算得知 rms_type AC_rms={0, 0, 0, 0, 0, 0};//存放rms_type的六个变量 float AC_sample_mat[6][SAMPLE_LEN]={0};//用来暂时保存各点采样值并最终将结果送入有效值中 void calculate_rms(void) //计算采样函数 { static u32 count=0; u32 temp=count %SAMPLE_LEN; count++; AC_sample_mat[0][temp]= get_dcv_in(); //PA3 AC_sample_mat[1][temp]= get_dci_in(); //PA5 AC_sample_mat[2][temp]= get_acv_out(); //PA4 AC_sample_mat[3][temp]= get_aci_out(); //PA6 AC_sample_mat[4][temp]= get_acv_in();//PC4 AC_sample_mat[5][temp]= get_aci_in(); //PC5 if(SAMPLE_LEN-1==temp)//如果检测到检测周期内的最后一个采样点 { count=0; arm_rms_f32(AC_sample_mat[0], SAMPLE_LEN, &AC_rms.VDC_rms); arm_rms_f32(AC_sample_mat[1], SAMPLE_LEN, &AC_rms.IDC_rms); arm_rms_f32(AC_sample_mat[2], SAMPLE_LEN, &AC_rms.Vout_rms); arm_rms_f32(AC_sample_mat[3], SAMPLE_LEN, &AC_rms.Iout_rms); arm_rms_f32(AC_sample_mat[4], SAMPLE_LEN, &AC_rms.Vin_rms); arm_rms_f32(AC_sample_mat[5], SAMPLE_LEN, &AC_rms.Iin_rms); } } //采集输入直流电压 float get_dcv_in(void) { float temp=0; u32 sum=0; int i; for(i=0;i<ROWS;i++) { sum+=adc_result[i*COLS +0];//采集第一个通道,也就是第一个数据 } temp =(double)sum/ROWS/4095*3.3;//将总值变成平均值 return (temp*DC_Vin_ratio);//返回直流电压大小,倍数乘以20.07倍(可测试得出) } //采集输入直流电流 float get_dci_in(void) { float temp=0; u32 sum=0; int i; for(i=0;i<ROWS;i++) { sum+=adc_result[i*COLS +1];//采集第二个通道,也就是第二个数据 } temp =(double)sum/ROWS/4095*3.3;//将总值变成平均值 return (temp*DC_Iin_ratio);//返回直流电流大小 } //采集输出交流电压 float get_acv_out(void) { float temp=0; u32 sum=0; int i; for(i=0;i<ROWS;i++) { sum+=adc_result[i*COLS +2];//采集第三个通道,也就是第三个数据 } temp =(double)sum/ROWS/4095*3.3;//将总值变成平均值 return (temp-AC_Vout_vref)*AC_Vout_ratio;//返回交流输出电压大小 } //采集输出交流电流 float get_aci_out(void) { float temp=0; u32 sum=0; int i; for(i=0;i<ROWS;i++) { sum+=adc_result[i*COLS +3];//采集第四个通道,也就是第四个数据 } temp =(double)sum/ROWS/4095*3.3;//将总值变成平均值 return (temp-AC_Iout_vref)*AC_Iout_ratio;//返回交流输出电流大小 } //采集输入交流电压 float get_acv_in(void) { float temp=0; u32 sum=0; int i; for(i=0;i<ROWS;i++) { sum+=adc_result[i*COLS +4];//采集第五个通道,也就是第一个数据 } temp =(double)sum/ROWS/4095*3.3;//将总值变成平均值 return (temp-AC_Vin_verf)*AC_Vin_ratio;//返回直流电压大小,倍数乘以20.07倍(可测试得出) } float get_aci_in(void) { float temp=0; u32 sum=0; int i; for(i=0;i<ROWS;i++) { sum+=adc_result[i*COLS +5];//采集第五个通道,也就是第一个数据 } temp =(double)sum/ROWS/4095*3.3;//将总值变成平均值 return (temp-AC_Vin_verf)*AC_Vin_ratio;//返回直流电压大小,倍数乘以20.07倍(可测试得出) } float measure_rms(uint8_t i,uint8_t size)//均方根算法 { float sum=0,result; int j; for(j=0;j<i;j++) { sum+=(float)(AC_sample_mat[size][j]*AC_sample_mat[size][j]); } sum=(double)(sum/i); result=(float)(1.0*sqrt(sum)); return result; } 如果要将这个文件改成只对PA4引脚进行计算,应该怎么改
最新发布
07-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值