Skip to main content

SSWS - Site-Specific Wind Speed Adjustment

Location: tact/adjustments/SSWS.py

Overview

The SSWS (Site-Specific Wind Speed) method adjusts turbulence intensity measurements by first correcting wind speed measurements, then recalculating turbulence intensity using the adjusted wind speed.

Methodology

Algorithm Steps

  1. Train Wind Speed Regression (on training data):
    Reference_WS = m * RSD_WS + c
    
  2. Apply Wind Speed Adjustment (to test data):
    Adjusted_WS = m * RSD_WS + c
    
  3. Recalculate Turbulence Intensity:
    Adjusted_TI = RSD_SD / Adjusted_WS
    
  4. Calculate Representative TI:
    Adjusted_RepTI = Adjusted_TI + 1.28 * (RSD_SD / Adjusted_WS)
    

Key Characteristics

  • Two-stage adjustment: Wind speed first, then TI calculation
  • Error propagation: Errors in WS adjustment affect TI calculation
  • Linear regression: Uses simple linear model for WS correction
  • Train/test split: Builds model on training data, applies to test data

Usage

Basic Example

from tact import TACT

# Initialize
tact = TACT()

# Run SSWS adjustment
results = tact.adjust(
    data=your_data,
    method="ssws",
    parameters={
        "split": True,              # Enable train/test split
        "config_path": "config.json"  # Path to configuration
    }
)

With DNV Validation

from tact import TACT
from tact.validation import validate_dnv_rp0661
from tact.visualization import plot_dnv_validation

# Run adjustment
tact = TACT()
results = tact.adjust(
    data=data,
    method="ssws",
    parameters={"split": True, "config_path": "config.json"}
)

# Validate against DNV RP-0661
validation = validate_dnv_rp0661(
    adjusted_data=results["adjusted_data"],
    reference_col="ref_ti",
    adjusted_col="adjTI_RSD_TI",
    wind_speed_col="ref_ws",
    bin_col="bins",
    criteria_type="LV"
)

# Generate plots
plot_dnv_validation(
    validation_results=validation,
    adjusted_data=results["adjusted_data"],
    reference_col="ref_ti",
    adjusted_col="adjTI_RSD_TI",
    unadjusted_col="rsd_ti",
    wind_speed_col="ref_ws",
    bin_col="bins",
    method_name="SSWS",
    output_dir="output/plots"
)

Parameters

Required Parameters

ParameterTypeDescription
config_pathstrPath to configuration JSON file
splitboolWhether to split data into train/test sets

Configuration Requirements

The config file must specify column mappings:
{
    "input_data_column_mapping": {
        "reference": {
            "wind_speed": "ref_ws",
            "wind_speed_std": "ref_sd"
        },
        "rsd": {
            "primary": {
                "wind_speed": "rsd_ws",
                "wind_speed_std": "rsd_sd"
            }
        }
    }
}

Required Data Columns

The input data must contain:
  • Reference wind speed (e.g., ref_ws)
  • Reference wind speed standard deviation (e.g., ref_sd)
  • RSD wind speed (e.g., rsd_ws)
  • RSD wind speed standard deviation (e.g., rsd_sd)
  • Train/test split indicator (e.g., split)
  • Wind speed bins (e.g., bins)

Output Format

Returned Dictionary

{
    "adjusted_data": pd.DataFrame,  # Data with adjusted columns
    "reg_results": pd.DataFrame,    # Regression statistics
    "all_stats": pd.DataFrame       # Post-adjustment statistics
}

Adjusted Data Columns

The method adds these columns to your data:
ColumnDescription
RSD_adjWSAdjusted RSD wind speed
adjTI_RSD_TIAdjusted turbulence intensity
adjRepTI_RSD_RepTIAdjusted representative TI

Regression Results

ColumnDescription
sensorSensor identifier
heightMeasurement height
adjustmentAdjustment method name
mRegression slope
cRegression intercept
rsquaredR² value

Performance Characteristics

When SSWS Works Well

  • Strong linear relationship between RSD and reference wind speed
  • Low noise in wind speed measurements
  • Consistent wind speed bias across all speeds

When SSWS May Struggle

  • Error propagation: WS errors amplify in TI calculation
  • Low wind speeds: Division by small values creates large relative errors
  • Non-linear relationships: Linear regression can’t capture complex patterns
  • High scatter: R² < 0.8 indicates poor model fit

Performance on Example Dataset

Based on DNV RP-0661 LV criteria validation:
MetricValueTargetPass
MRBE+94.77%≤5%
RRMSE188.03%≤15%
N observations3,054--
Note: SSWS performs worse than baseline (90.39% MRBE) on the example dataset due to error propagation. See Method Comparison for details.

Comparison with Other Methods

AspectSSWSSS-SFSSWSStd
ComplexityMediumLowHigh
Parameters2 (m, c for WS)2 (m, c for TI)4 (m, c for WS and SD)
Error PropagationYesNoYes
PerformancePoorBestMedium
Use CaseWS correction neededGeneral purposeWS+SD correction

Implementation Details

Class Definition

from tact.core.base import AdjustmentMethod
from tact.core.registry import AdjustmentRegistry

@AdjustmentRegistry.register("ssws")
class SSWS(AdjustmentMethod):
    """Site-Specific Wind Speed adjustment method."""

    def required_model_parameters(self) -> Dict[str, type]:
        return {"config_path": str, "split": bool}

    def required_data_columns(self) -> list:
        return [
            "reference.wind_speed",
            "reference.wind_speed_std",
            "rsd.height_1.wind_speed",
            "rsd.height_1.wind_speed_std"
        ]

    def adjust(self, data: pd.DataFrame, parameters: Dict[str, Any]):
        # Implementation...

Key Functions Used

  • get_regression() - Performs linear regression
  • post_adjustment_stats() - Calculates statistics
  • Column mapping from config file

Troubleshooting

Common Issues

Issue: High MRBE/RRMSE despite good R² Cause: Error propagation from WS adjustment to TI calculation Solution: Try SS-SF method instead (adjusts TI directly)
Issue: Negative adjusted wind speeds Cause: Large negative intercept with low wind speeds Solution: Check regression intercept, consider filtering low WS data
Issue: Very different train vs test performance Cause: Overfitting or non-representative split Solution: Verify train/test split is random and representative

See Also

References

  • DNV GL: DNV-RP-0661 - Remote Sensing Measurement Verification
  • IEC 61400-12-1 - Wind turbine power performance testing

Source Code

Full implementation: tact/adjustments/SSWS.py