1.第一种方式
clear
clc
% 假设已知的南北和东西风速分量时程
time = 0:1:999; % 时间步长为1秒
north_south_wind_speed = 8 + 2 * sin(2 * pi * 0.1 * time); % 南北风向分量
east_west_wind_speed = 6 + 1 * sin(2 * pi * 0.1 * time); % 东西风向分量
% 计算合风速和风向
total_wind_speed = sqrt(north_south_wind_speed.^2 + east_west_wind_speed.^2);
wind_direction = atan2(east_west_wind_speed, north_south_wind_speed) * (180/pi);
% 将数据按1分钟平均
averaging_interval = 60; % 秒
num_intervals = floor(length(time) / averaging_interval);
mean_wind_speed = zeros(1, num_intervals);
pulsating_wind_speed_vertical = zeros(1, length(time));
pulsating_wind_speed_parallel = zeros(1, length(time));
for i = 1:num_intervals
start_idx = (i-1) * averaging_interval + 1;
end_idx = min(i * averaging_interval, length(time));
mean_wind_speed(i) = mean(total_wind_speed(start_idx:end_idx));
% 旋转风速分量
rotated_wind_speed = [cosd(-wind_direction(start_idx)) -sind(-wind_direction(start_idx)); sind(-wind_direction(start_idx)) cosd(-wind_direction(start_idx))] * ...
[north_south_wind_speed(start_idx:end_idx); east_west_wind_speed(start_idx:end_idx)];
% 计算垂直于合风速方向的脉动风速
pulsating_wind_speed_vertical(start_idx:end_idx) = rotated_wind_speed(2,:) - mean(rotated_wind_speed(2,:));
% 计算与合风速方向一致的脉动风速
pulsating_wind_speed_parallel(start_idx:end_idx) = rotated_wind_speed(1,:) - mean(rotated_wind_speed(1,:));
end
% 绘制结果
figure;
subplot(3,1,1);
plot(time, total_wind_speed, 'LineWidth', 1.5, 'DisplayName', '合风速');
xlabel('时间 (秒)');
ylabel('风速 (m/s)');
title('合风速时程');
legend;
grid on;
subplot(3,1,2);
plot(time, pulsating_wind_speed_vertical, 'LineWidth', 1.5, 'DisplayName', '垂直脉动风速');
xlabel('时间 (秒)');
ylabel('风速 (m/s)');
title('垂直于合风速方向的脉动风速时程');
legend;
grid on;
subplot(3,1,3);
plot(time, pulsating_wind_speed_parallel, 'LineWidth', 1.5, 'DisplayName', '平行脉动风速');
xlabel('时间 (秒)');
ylabel('风速 (m/s)');
title('与合风速方向一致的脉动风速时程');
legend;
grid on;
2.第二种方式
clear
clc
close all
% 示例数据,定义 10 分钟内的风速分量 u_x 和 u_y
ux = randn(1, 600)*0-0; % 600 表示 10 分钟内的风速数据 (假设每秒钟一个数据点)
uy = randn(1, 600)*1+0;
% 计算 10 分钟内的风速分量的平均值
ux_bar = mean(ux);
uy_bar = mean(uy);
% 计算平均风速 U
U_bar = sqrt(ux_bar^2 + uy_bar^2);
% 计算风向角 θ
if uy_bar > 0
theta = acosd(ux_bar / U_bar);
else
theta = 360 - acosd(ux_bar / U_bar);
end
% 计算沿主风向的顺风向、横风向及竖向脉动风速
u_t = ux .* cosd(theta) + uy .* sind(theta) - U_bar;
v_t = -ux .* sind(theta) + uy .* cosd(theta);
% 绘制风速分量图
figure;
subplot(2,1,1);
plot(u_t);
title('顺风向脉动风速 u(t)');
xlabel('时间 (秒)');
ylabel('风速 (m/s)');
subplot(2,1,2);
plot(v_t);
title('横风向脉动风速 v(t)');
xlabel('时间 (秒)');
ylabel('风速 (m/s)');