瞬时风速风向改回1S风速风向

This commit is contained in:
95384 2024-11-30 13:48:51 +08:00
parent c68ab61d45
commit 3ca9afb94d
1 changed files with 44 additions and 38 deletions

View File

@ -549,7 +549,7 @@ void wind_task(void const * argument)
}
/// term_printf("x:%.2f y:%.2f win_speed %.2f m/s angle %.2f \r\n",av_speedx,av_speedy,av_speed,av_angle);
}
//瞬时风速风向
//算法求出的瞬时风速风向
weather_info.instantaneous_wind_direction = av_angle;
weather_info.instantaneous_wind_speed = av_speed;
///term_printf("win_speed %.2f \r\n",weather_info.wind_velocity);
@ -791,47 +791,53 @@ float linear_interpolation(float x) {
void my_update_mcs_param(float new_wind_speed, float new_wind_dirction)
{
/// 三秒滑动平均
win_3s.speed_data[win_3s.index] = new_wind_speed;
win_3s.direction_data[win_3s.index] = new_wind_dirction;
if(win_3s.count < 3)
{
win_3s.count++;
}
//计算三秒风速滑动平均值当作瞬时值
win_3s.ave_speed_data = sum(win_3s.speed_data, win_3s.count) / win_3s.count;
//计算三秒风向滑动平均值,风向滑动平均值需要过零算法
float temp_sin_sum_3s = 0;
float temp_cos_sum_3s = 0;
for(int i = 0; i < win_3s.count; i++)
{
temp_sin_sum_3s += sinf(win_3s.direction_data[i] * PI/180);
temp_cos_sum_3s += cosf(win_3s.direction_data[i] * PI/180);
}
win_3s.ave_direction_data = atanf(temp_sin_sum_3s / (temp_cos_sum_3s + 0.00001)) * 180/PI;
// 不同象限不一样
// 1象限真实角度=本身
// 2象限真实角度=+180
// 3象限真实角度=+180
// 4象限真实角度=+360
if((temp_sin_sum_3s > 0 && temp_cos_sum_3s < 0) || (temp_sin_sum_3s < 0 && temp_cos_sum_3s < 0))
{
win_3s.ave_direction_data += 180;
}else if (temp_sin_sum_3s < 0 && temp_cos_sum_3s > 0)
{
win_3s.ave_direction_data += 360;
}
g_stMcs_Para.instantaneous_wind_direction = win_3s.ave_direction_data;
///// 三秒滑动平均
// win_3s.speed_data[win_3s.index] = new_wind_speed;
// win_3s.direction_data[win_3s.index] = new_wind_dirction;
// if(win_3s.count < 3)
// {
// win_3s.count++;
// }
// //计算三秒风速滑动平均值当作瞬时值
// win_3s.ave_speed_data = sum(win_3s.speed_data, win_3s.count) / win_3s.count;
// //计算三秒风向滑动平均值,风向滑动平均值需要过零算法
// float temp_sin_sum_3s = 0;
// float temp_cos_sum_3s = 0;
// for(int i = 0; i < win_3s.count; i++)
// {
// temp_sin_sum_3s += sinf(win_3s.direction_data[i] * PI/180);
// temp_cos_sum_3s += cosf(win_3s.direction_data[i] * PI/180);
// }
// win_3s.ave_direction_data = atanf(temp_sin_sum_3s / (temp_cos_sum_3s + 0.00001)) * 180/PI;
// // 不同象限不一样
// // 1象限真实角度=本身
// // 2象限真实角度=+180
// // 3象限真实角度=+180
// // 4象限真实角度=+360
// if((temp_sin_sum_3s > 0 && temp_cos_sum_3s < 0) || (temp_sin_sum_3s < 0 && temp_cos_sum_3s < 0))
// {
// win_3s.ave_direction_data += 180;
// }else if (temp_sin_sum_3s < 0 && temp_cos_sum_3s > 0)
// {
// win_3s.ave_direction_data += 360;
// }
// g_stMcs_Para.instantaneous_wind_direction = win_3s.ave_direction_data;
//
// /** 线性插值 **/
// /** win_3s.ave_speed_data[win_3s.index]为风速 **/
// /** win_3s.ave_direction_data[win_3s.index]为风向 **/
// /** 风向不要插值 **/
// /** 只用插值瞬时风速10min便会是插值后的值 **/
// g_stMcs_Para.instantaneous_wind_speed = linear_interpolation(win_3s.ave_speed_data);
// /** 线性插值 **/
//// 更新索引
// win_3s.index = (win_3s.index + 1) % 3;
/** 线性插值 **/
/** win_3s.ave_speed_data[win_3s.index]为风速 **/
/** win_3s.ave_direction_data[win_3s.index]为风向 **/
/** 风向不要插值 **/
/** 只用插值瞬时风速10min便会是插值后的值 **/
g_stMcs_Para.instantaneous_wind_speed = linear_interpolation(win_3s.ave_speed_data);
g_stMcs_Para.instantaneous_wind_speed = linear_interpolation(new_wind_speed);
/** 线性插值 **/
// 更新索引
win_3s.index = (win_3s.index + 1) % 3;
g_stMcs_Para.instantaneous_wind_direction = new_wind_dirction;
/// 十分钟滑动平均值