添加了线性插值(待验证)
This commit is contained in:
parent
ca14efe43d
commit
3749418cee
|
@ -44,12 +44,23 @@ typedef enum
|
|||
FRT_REGISTER_REST_DEFAULT_SETTING = 27, /* 恢复出厂设置 */
|
||||
FRT_REGISTER_PROTOCOL_SETTING = 28, /* 设置协议:0-ASCII;1-MODBUS协议 */
|
||||
|
||||
FRT_REGISTER_TRANSDUCER_CFG_1R5 = 30, /* 换能器参数 */
|
||||
FRT_REGISTER_TRANSDUCER_CFG_4R5 = 31, /* 换能器参数 */
|
||||
FRT_REGISTER_TRANSDUCER_CFG_8R0 = 32, /* 换能器参数 */
|
||||
FRT_REGISTER_RSSI_RANGE = 33, /* RSSI有效范围 */
|
||||
FRT_REGISTER_WAVE_DATA = 34, /* 波形数据 */
|
||||
FRT_REGISTER_ERROR_LOG = 35, /* 错误日志 */
|
||||
FRT_REGISTER_TRANSDUCER_CFG_1R5 = 30, /* 换能器参数 */
|
||||
FRT_REGISTER_TRANSDUCER_CFG_4R5 = 31, /* 换能器参数 */
|
||||
FRT_REGISTER_TRANSDUCER_CFG_8R0 = 32, /* 换能器参数 */
|
||||
FRT_REGISTER_RSSI_RANGE = 33, /* RSSI有效范围 */
|
||||
FRT_REGISTER_WAVE_DATA = 34, /* 波形数据 */
|
||||
FRT_REGISTER_ERROR_LOG = 35, /* 错误日志 */
|
||||
FRT_REGISTER_LINEAR_POINT_X_1 = 36, /* 线性插值原始点1 */
|
||||
FRT_REGISTER_LINEAR_POINT_X_2 = 37, /* 线性插值原始点2 */
|
||||
FRT_REGISTER_LINEAR_POINT_X_3 = 38, /* 线性插值原始点3 */
|
||||
FRT_REGISTER_LINEAR_POINT_X_4 = 39, /* 线性插值原始点4 */
|
||||
FRT_REGISTER_LINEAR_POINT_X_5 = 40, /* 线性插值原始点5 */
|
||||
FRT_REGISTER_LINEAR_POINT_Y_1 = 41, /* 线性插值校准点1 */
|
||||
FRT_REGISTER_LINEAR_POINT_Y_2 = 42, /* 线性插值校准点2 */
|
||||
FRT_REGISTER_LINEAR_POINT_Y_3 = 43, /* 线性插值校准点3 */
|
||||
FRT_REGISTER_LINEAR_POINT_Y_4 = 44, /* 线性插值校准点4 */
|
||||
FRT_REGISTER_LINEAR_POINT_Y_5 = 45, /* 线性插值校准点5 */
|
||||
FRT_REGISTER_LINEAR_ENABLE = 46, /* 线性插值使能 */
|
||||
}FRT_MsgRegister;
|
||||
|
||||
#pragma pack(push,1)
|
||||
|
|
|
@ -27,6 +27,17 @@ typedef struct _config_info{
|
|||
u_int16_t transducer_cfg_4R5; /* 换能器参数 */
|
||||
u_int16_t transducer_cfg_8R0; /* 换能器参数 */
|
||||
u_int16_t RSSI_range; /* RSSI有效范围 */
|
||||
u_int16_t linear_point_1_x; /* 线性插值点1X */
|
||||
u_int16_t linear_point_1_y; /* 线性插值点1Y */
|
||||
u_int16_t linear_point_2_x; /* 线性插值点2X */
|
||||
u_int16_t linear_point_2_y; /* 线性插值点2Y */
|
||||
u_int16_t linear_point_3_x; /* 线性插值点3X */
|
||||
u_int16_t linear_point_3_y; /* 线性插值点3Y */
|
||||
u_int16_t linear_point_4_x; /* 线性插值点4X */
|
||||
u_int16_t linear_point_4_y; /* 线性插值点4Y */
|
||||
u_int16_t linear_point_5_x; /* 线性插值点5X */
|
||||
u_int16_t linear_point_5_y; /* 线性插值点5Y */
|
||||
u_int16_t linear_enable; /* 线性插值使能 */
|
||||
u_int8_t flag_end;
|
||||
}config_info;
|
||||
#pragma pack(pop)
|
||||
|
|
|
@ -526,7 +526,7 @@ void wind_task(void const * argument)
|
|||
av_speed = 0;
|
||||
av_angle = 0;
|
||||
}
|
||||
// term_printf("x:%.2f y:%.2f win_speed %.2f m/s angle %.2f \r\n",av_speedx,av_speedy,av_speed,av_angle);
|
||||
/// term_printf("x:%.2f y:%.2f win_speed %.2f m/s angle %.2f \r\n",av_speedx,av_speedy,av_speed,av_angle);
|
||||
}
|
||||
|
||||
///term_printf("win_speed %.2f \r\n",weather_info.wind_velocity);
|
||||
|
@ -704,8 +704,59 @@ float sum(float arr[], int n)
|
|||
return total;
|
||||
}
|
||||
|
||||
int times_1s_3sec = 0;
|
||||
int times_1s_1min = 0;
|
||||
//int times_1s_3sec = 0;
|
||||
//int times_1s_1min = 0;
|
||||
|
||||
// 线性插值函数
|
||||
//float linear_interpolation(float x0, float y0, float x1, float y1, float x) {
|
||||
float linear_interpolation(float x) {
|
||||
float y;
|
||||
//开始插值
|
||||
uint16_t x1 = g_stConfigInfo.linear_point_1_x;
|
||||
uint16_t y1 = g_stConfigInfo.linear_point_1_y;
|
||||
uint16_t x2 = g_stConfigInfo.linear_point_2_x;
|
||||
uint16_t y2 = g_stConfigInfo.linear_point_2_y;
|
||||
uint16_t x3 = g_stConfigInfo.linear_point_3_x;
|
||||
uint16_t y3 = g_stConfigInfo.linear_point_3_y;
|
||||
uint16_t x4 = g_stConfigInfo.linear_point_4_x;
|
||||
uint16_t y4 = g_stConfigInfo.linear_point_4_y;
|
||||
uint16_t x5 = g_stConfigInfo.linear_point_5_x;
|
||||
uint16_t y5 = g_stConfigInfo.linear_point_5_y;
|
||||
if(g_stConfigInfo.linear_enable == 0x01)
|
||||
{
|
||||
if (x1 == x2 || x2 == x3 || x3 == x4 || x4 == x5)
|
||||
{
|
||||
// 有问题就返回初始值
|
||||
return x;
|
||||
}
|
||||
if(x>=0&&x<x1)
|
||||
{
|
||||
y = 0 + (x - 0) * (y1 - 0) / (x1 - 0);
|
||||
}
|
||||
if(x>=x1&&x<x2)
|
||||
{
|
||||
y = y1 + (x - x1) * (y2 - y1) / (x2 - x1);
|
||||
}
|
||||
if(x>=x2&&x<x3)
|
||||
{
|
||||
y = y2 + (x - x2) * (y3 - y2) / (x3 - x2);
|
||||
}
|
||||
if(x>=x3&&x<x4)
|
||||
{
|
||||
y = y3 + (x - x3) * (y4 - y3) / (x4 - x3);
|
||||
}
|
||||
// if(x>=x4&&x<x5)
|
||||
if(x>=x4)
|
||||
{
|
||||
y = y4 + (x - x4) * (y5 - y4) / (x5 - x4);
|
||||
}
|
||||
return y;
|
||||
}
|
||||
else
|
||||
{
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
void my_update_mcs_param(float new_wind_speed, float new_wind_dirction)
|
||||
{
|
||||
|
@ -718,8 +769,7 @@ void my_update_mcs_param(float new_wind_speed, float new_wind_dirction)
|
|||
win_10min.count++;
|
||||
}
|
||||
|
||||
if(win_10min.count > g_stConfigInfo.speed_average_time/*AVE_TIME*/){win_10min.count = /*AVE_TIME*/g_stConfigInfo.speed_average_time;}
|
||||
|
||||
if(win_10min.count > g_stConfigInfo.speed_average_time/*AVE_TIME*/){win_10min.count = /*AVE_TIME*/g_stConfigInfo.speed_average_time;}
|
||||
//计算10min风速滑动平均值
|
||||
win_10min.ave_speed_data[win_10min.index] = sum(win_10min.speed_data, win_10min.count) / win_10min.count;
|
||||
//计算10min风向滑动平均值,风向滑动平均值需要过零算法
|
||||
|
@ -744,6 +794,13 @@ void my_update_mcs_param(float new_wind_speed, float new_wind_dirction)
|
|||
win_10min.ave_direction_data[win_10min.index] += 360;
|
||||
}
|
||||
|
||||
/** 线性插值 **/
|
||||
/** win_10min.ave_speed_data[win_10min.index]为风速 **/
|
||||
/** win_10min.ave_direction_data[win_10min.index]为风向 **/
|
||||
/** 风向不要插值 **/
|
||||
win_10min.ave_speed_data[win_10min.index] = linear_interpolation(win_10min.ave_speed_data[win_10min.index]);
|
||||
/** 线性插值 **/
|
||||
|
||||
//默认第一个数据为最大或者最小
|
||||
float temp_min_direction = win_10min.ave_direction_data[0];
|
||||
float temp_max_direction = win_10min.ave_direction_data[0];
|
||||
|
@ -763,7 +820,7 @@ void my_update_mcs_param(float new_wind_speed, float new_wind_dirction)
|
|||
if (win_10min.ave_speed_data[i] > temp_max_speed) {
|
||||
temp_max_speed = win_10min.ave_speed_data[i]; // 更新风速最大值
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
g_stMcs_Para.min_wind_direction = temp_min_direction;
|
||||
g_stMcs_Para.average_wind_direction = win_10min.ave_direction_data[win_10min.index];
|
||||
|
|
|
@ -46,11 +46,28 @@ static u_int16_t FRT_ReadRegTransducerCFG8R0(void *pMsg);
|
|||
static u_int16_t FRT_ReadRegRSSIRange(void *pMsg);
|
||||
static u_int16_t FRT_ReadRegWaveData(void *pMsg);
|
||||
static u_int16_t FRT_ReadRegErrorData(void *pMsg);
|
||||
static u_int16_t FRT_ReadRegPoint_1X(void *pMsg);
|
||||
static u_int16_t FRT_ReadRegPoint_2X(void *pMsg);
|
||||
static u_int16_t FRT_ReadRegPoint_3X(void *pMsg);
|
||||
static u_int16_t FRT_ReadRegPoint_4X(void *pMsg);
|
||||
static u_int16_t FRT_ReadRegPoint_5X(void *pMsg);
|
||||
static u_int16_t FRT_ReadRegPoint_1Y(void *pMsg);
|
||||
static u_int16_t FRT_ReadRegPoint_2Y(void *pMsg);
|
||||
static u_int16_t FRT_ReadRegPoint_3Y(void *pMsg);
|
||||
static u_int16_t FRT_ReadRegPoint_4Y(void *pMsg);
|
||||
static u_int16_t FRT_ReadRegPoint_5Y(void *pMsg);
|
||||
static u_int16_t FRT_ReadRegLinearEnable(void *pMsg);
|
||||
/* 写配置 */
|
||||
static u_int16_t FRT_WriteRegTransducerCFG1R5(void *pMsg);
|
||||
static u_int16_t FRT_WriteRegTransducerCFG4R5(void *pMsg);
|
||||
static u_int16_t FRT_WriteRegTransducerCFG8R0(void *pMsg);
|
||||
static u_int16_t FRT_WriteRegRSSIRange(void *pMsg);
|
||||
static u_int16_t FRT_WriteRegPoint_1Y(void *pMsg);
|
||||
static u_int16_t FRT_WriteRegPoint_2Y(void *pMsg);
|
||||
static u_int16_t FRT_WriteRegPoint_3Y(void *pMsg);
|
||||
static u_int16_t FRT_WriteRegPoint_4Y(void *pMsg);
|
||||
static u_int16_t FRT_WriteRegPoint_5Y(void *pMsg);
|
||||
static u_int16_t FRT_WriteRegLinearEnable(void *pMsg);
|
||||
|
||||
static void pdebug_mcs_info();
|
||||
|
||||
|
@ -85,6 +102,17 @@ FRT_RegProcTable_s g_RegTbl[] =
|
|||
{ FRT_REGISTER_TRANSDUCER_CFG_8R0, FRT_ReadRegTransducerCFG8R0 }, /* 读换能器参数寄存器值8R0 */
|
||||
{ FRT_REGISTER_RSSI_RANGE, FRT_ReadRegRSSIRange }, /* 读RSSI有效范围 */
|
||||
{ FRT_REGISTER_ERROR_LOG, FRT_ReadRegErrorData }, /* 读错误日志 */
|
||||
{ FRT_REGISTER_LINEAR_POINT_X_1, FRT_ReadRegPoint_1X }, /* 线性插值原始点1 */
|
||||
{ FRT_REGISTER_LINEAR_POINT_X_2, FRT_ReadRegPoint_2X }, /* 线性插值原始点2 */
|
||||
{ FRT_REGISTER_LINEAR_POINT_X_3, FRT_ReadRegPoint_3X }, /* 线性插值原始点3 */
|
||||
{ FRT_REGISTER_LINEAR_POINT_X_4, FRT_ReadRegPoint_4X }, /* 线性插值原始点4 */
|
||||
{ FRT_REGISTER_LINEAR_POINT_X_5, FRT_ReadRegPoint_5X }, /* 线性插值原始点5 */
|
||||
{ FRT_REGISTER_LINEAR_POINT_Y_1, FRT_ReadRegPoint_1Y }, /* 线性插值校准点1 */
|
||||
{ FRT_REGISTER_LINEAR_POINT_Y_2, FRT_ReadRegPoint_2Y }, /* 线性插值校准点2 */
|
||||
{ FRT_REGISTER_LINEAR_POINT_Y_3, FRT_ReadRegPoint_3Y }, /* 线性插值校准点3 */
|
||||
{ FRT_REGISTER_LINEAR_POINT_Y_4, FRT_ReadRegPoint_4Y }, /* 线性插值校准点4 */
|
||||
{ FRT_REGISTER_LINEAR_POINT_Y_5, FRT_ReadRegPoint_5Y }, /* 线性插值校准点5 */
|
||||
{ FRT_REGISTER_LINEAR_ENABLE, FRT_ReadRegLinearEnable }, /* 线性插值使能 */
|
||||
};
|
||||
|
||||
/* 写寄存器处理表 */
|
||||
|
@ -100,6 +128,12 @@ FRT_RegProcTable_s g_Write_RegTbl[] =
|
|||
{ FRT_REGISTER_TRANSDUCER_CFG_4R5, FRT_WriteRegTransducerCFG4R5 }, /* 写换能器参数寄存器值4R5 */
|
||||
{ FRT_REGISTER_TRANSDUCER_CFG_8R0, FRT_WriteRegTransducerCFG8R0 }, /* 写换能器参数寄存器值8R0 */
|
||||
{ FRT_REGISTER_RSSI_RANGE, FRT_WriteRegRSSIRange }, /* 写RSSI有效范围 */
|
||||
{ FRT_REGISTER_LINEAR_POINT_Y_1, FRT_WriteRegPoint_1Y }, /* 线性插值校准点1 */
|
||||
{ FRT_REGISTER_LINEAR_POINT_Y_2, FRT_WriteRegPoint_2Y }, /* 线性插值校准点2 */
|
||||
{ FRT_REGISTER_LINEAR_POINT_Y_3, FRT_WriteRegPoint_3Y }, /* 线性插值校准点3 */
|
||||
{ FRT_REGISTER_LINEAR_POINT_Y_4, FRT_WriteRegPoint_4Y }, /* 线性插值校准点4 */
|
||||
{ FRT_REGISTER_LINEAR_POINT_Y_5, FRT_WriteRegPoint_5Y }, /* 线性插值校准点5 */
|
||||
{ FRT_REGISTER_LINEAR_ENABLE, FRT_WriteRegLinearEnable }, /* 线性插值使能 */
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -480,6 +514,40 @@ static u_int16_t FRT_ReadRegErrorData(void *pMsg)
|
|||
return FRT_swap_endian_16(value);
|
||||
}
|
||||
|
||||
static u_int16_t FRT_ReadRegPoint_1X(void *pMsg)
|
||||
{
|
||||
}
|
||||
static u_int16_t FRT_ReadRegPoint_2X(void *pMsg)
|
||||
{
|
||||
}
|
||||
static u_int16_t FRT_ReadRegPoint_3X(void *pMsg)
|
||||
{
|
||||
}
|
||||
static u_int16_t FRT_ReadRegPoint_4X(void *pMsg)
|
||||
{
|
||||
}
|
||||
static u_int16_t FRT_ReadRegPoint_5X(void *pMsg)
|
||||
{
|
||||
}
|
||||
static u_int16_t FRT_ReadRegPoint_1Y(void *pMsg)
|
||||
{
|
||||
}
|
||||
static u_int16_t FRT_ReadRegPoint_2Y(void *pMsg)
|
||||
{
|
||||
}
|
||||
static u_int16_t FRT_ReadRegPoint_3Y(void *pMsg)
|
||||
{
|
||||
}
|
||||
static u_int16_t FRT_ReadRegPoint_4Y(void *pMsg)
|
||||
{
|
||||
}
|
||||
static u_int16_t FRT_ReadRegPoint_5Y(void *pMsg)
|
||||
{
|
||||
}
|
||||
static u_int16_t FRT_ReadRegLinearEnable(void *pMsg)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 写换能器参数寄存器值1R5
|
||||
* @param
|
||||
|
@ -544,6 +612,25 @@ static u_int16_t FRT_WriteRegRSSIRange(void *pMsg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static u_int16_t FRT_WriteRegPoint_1Y(void *pMsg)
|
||||
{
|
||||
}
|
||||
static u_int16_t FRT_WriteRegPoint_2Y(void *pMsg)
|
||||
{
|
||||
}
|
||||
static u_int16_t FRT_WriteRegPoint_3Y(void *pMsg)
|
||||
{
|
||||
}
|
||||
static u_int16_t FRT_WriteRegPoint_4Y(void *pMsg)
|
||||
{
|
||||
}
|
||||
static u_int16_t FRT_WriteRegPoint_5Y(void *pMsg)
|
||||
{
|
||||
}
|
||||
static u_int16_t FRT_WriteRegLinearEnable(void *pMsg)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 封装协议发送
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
* 65
|
||||
* 无锡电声换能器参数
|
||||
*/
|
||||
|
||||
/* 默认参数 */
|
||||
config_info g_stConfigInfo={
|
||||
.flag_head = FLAG_SAVE_INFLASH_HEAD,
|
||||
.addr = 0x30, /* 默认地址 */
|
||||
|
@ -25,6 +25,18 @@ config_info g_stConfigInfo={
|
|||
.transducer_cfg_4R5 = 35, /* 无锡电声换能器参数 */
|
||||
.transducer_cfg_8R0 = 65, /* 无锡电声换能器参数 */
|
||||
.RSSI_range = 20, /* RSSI大于0.2有效 */
|
||||
|
||||
.linear_point_1_x = 0, /* 线性插值点1 */
|
||||
.linear_point_1_y = 0, /* 线性插值点1 */
|
||||
.linear_point_2_x = 0, /* 线性插值点2 */
|
||||
.linear_point_2_y = 0, /* 线性插值点2 */
|
||||
.linear_point_3_x = 0, /* 线性插值点3 */
|
||||
.linear_point_3_y = 0, /* 线性插值点3 */
|
||||
.linear_point_4_x = 0, /* 线性插值点4 */
|
||||
.linear_point_4_y = 0, /* 线性插值点4 */
|
||||
.linear_point_5_x = 0, /* 线性插值点5 */
|
||||
.linear_point_5_y = 0, /* 线性插值点5 */
|
||||
.linear_enable = 0, /* 线性插值使能 */
|
||||
.flag_end = FLAG_SAVE_INFLASH_END,
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue