diff --git a/utils/analysis/getallpeaks.m b/utils/analysis/getallpeaks.m
new file mode 100644
index 0000000000000000000000000000000000000000..e43f596612b2a12b76e974804595a5ca4c3eeb90
--- /dev/null
+++ b/utils/analysis/getallpeaks.m
@@ -0,0 +1,20 @@
+function peakLocs = getallpeaks(signal, sampling)
+    % GETALLPEAKS Return all the peaks in the signal
+    %   Todo
+
+    % ----------------------------------------------------------------------------------------------
+    % (c) Copyright 2022 University of Liege
+    % Author: Thomas Lambert <t.lambert@uliege.be>
+    % ULiege - Aeroelasticity and Experimental Aerodynamics
+    % MIT License
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+    % Signal analysis
+    freq = getmainfrequency(signal, sampling);
+
+    % Get first and last peaks for wind-off conditions
+    [~, peakLocs] = findpeaks(signal, ...
+                              'MinPeakProminence', max(signal) / 2, ...
+                              'MinPeakDistance', ((1 / freq) * sampling) / 2);
+
+end
diff --git a/utils/plotwindonoff.m b/utils/plotwindonoff.m
new file mode 100644
index 0000000000000000000000000000000000000000..d9cb7874a1a10d2f909f632525313a347ea846ee
--- /dev/null
+++ b/utils/plotwindonoff.m
@@ -0,0 +1,117 @@
+function plotwindonoff(ResData)
+    % PLOTWINDONON Plots the forces in wind on and wind off conditions
+    %   Todo
+
+    % ----------------------------------------------------------------------------------------------
+    % (c) Copyright 2022 University of Liege
+    % Author: Thomas Lambert <t.lambert@uliege.be>
+    % ULiege - Aeroelasticity and Experimental Aerodynamics
+    % MIT License
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+    POSITION = 'Front';
+    INTERESTING_POINTS = [
+                          0.10, 2.5, 4.6
+                          0.10, 2.5, 7.7
+                          0.10, 3.5, 2.5
+                          0.10, 3.5, 4.6
+                          0.10, 3.5, 7.7];
+
+    for i = 1:size(ResData, 1)
+        for j = 1:size(ResData, 2)
+
+            if isinteresting(ResData(i, j), INTERESTING_POINTS)
+
+                expParam = sprintf('d = %0.2f, f = %0.2f, V = %0.1f', ...
+                                   ResData(i, j).Testcase.dx, ...
+                                   ResData(i, j).Testcase.freq, ...
+                                   ResData(i, j).Testcase.airspeed);
+
+                % Index of corresponding wind-off data
+                woIdx = (j) - mod(j - 1, 4);
+
+                windOff = ResData(i, woIdx).(POSITION);
+                timeOff = ResData(i, woIdx).time;
+                sampling = ResData(i, woIdx).sampling;
+                windOn = ResData(i, j).(POSITION);
+                timeOn = ResData(i, j).time;
+
+                meanPeakAngle = averagepeaks(windOff.angles, sampling, windOff.trueFreq);
+                meanPeakFoff = averagepeaks(windOff.forces(:, 3), sampling, windOff.trueFreq);
+                meanPeakFon = averagepeaks(windOn.forces(:, 3), sampling, windOn.trueFreq);
+
+                % Trim to same length if needed
+                minLen = min(length(meanPeakFoff), length(meanPeakFon));
+                meanPeakAngle = meanPeakAngle(1:minLen);
+                meanPeakFoff = meanPeakFoff(1:minLen);
+                meanPeakFon = meanPeakFon(1:minLen);
+                meanDiff = meanPeakFon - meanPeakFoff;
+
+                % True period
+                period = 1 / windOff.trueFreq;
+                nPeriodIdx = period * sampling;
+
+                time = (0:length(meanDiff) - 1) / nPeriodIdx;
+
+                figure;
+                hold on;
+                plot(time, meanPeakFoff);
+                plot(time, meanPeakFon);
+                plot(time, meanDiff);
+                yyaxis right;
+                plot(time, meanPeakAngle);
+                title(expParam);
+                legend('Wind off', 'Wind on', 'Diff');
+                grid on;
+                xlim([0, 1]);
+
+                figure;
+                ax1 = subplot(3, 1, 1);
+                hold on;
+
+                plot(meanPeakAngle, meanPeakFon);
+                plot(meanPeakAngle(round(end / 5)), meanPeakFon(round(end / 5)), 'or');
+
+                title(['Wind on - ', expParam]);
+
+                ax2 =  subplot(3, 1, 2);
+                hold on;
+
+                plot(meanPeakAngle, meanPeakFoff);
+                plot(meanPeakAngle(round(end / 5)), meanPeakFoff(round(end / 5)), 'or');
+
+                title(['Wind off - ', expParam]);
+
+                ax3 =  subplot(3, 1, 3);
+                hold on;
+                plot(meanPeakAngle, meanDiff);
+                plot(meanPeakAngle(round(end / 5)), meanDiff(round(end / 5)), 'or');
+                title(['Diff - ', expParam]);
+                linkaxes([ax1 ax2 ax3], 'xy');
+                ax1.YLim = 1.25 * ax1.YLim;
+
+            end
+
+        end
+    end
+
+end
+
+function meanPeak = averagepeaks(signal, sampling, freq)
+    % AVERAGEPEAKS Make the average of all peaks in the signal
+
+    period = 1 / freq;
+    nPeriodIdx = period * sampling;
+    peakLocs = getallpeaks(signal, sampling);
+
+    % Remove first and last peaks
+    peakLocs = peakLocs(2:end - 1);
+
+    % Create mean peak
+    for i = 1:min(length(peakLocs), 100)
+        peakVals(i, :) = signal(round(peakLocs(i) - nPeriodIdx / 2): ...
+                                round(peakLocs(i) + nPeriodIdx / 2));
+    end
+    meanPeak = mean(peakVals);
+
+end