function A = forceNBy4(A, N, sigName)
%FORCENBY4 Forza un segnale ruota in formato [N x 4].
%
% Output:
%   colonna 1 = FL
%   colonna 2 = FR
%   colonna 3 = RL
%   colonna 4 = RR

    A = squeeze(A);

    if isempty(A)
        error('forceNBy4:emptySignal', ...
            'Segnale vuoto: %s', sigName);
    end

    % Già corretto: [N x 4]
    if ismatrix(A) && size(A,1) == N && size(A,2) == 4
        return;
    end

    % Trasposto: [4 x N]
    if ismatrix(A) && size(A,1) == 4 && size(A,2) == N
        A = A.';
        return;
    end

    % Singolo campione
    if N == 1 && numel(A) == 4
        A = reshape(A, 1, 4);
        return;
    end

    % Caso recuperabile: ha comunque 4 colonne
    if ismatrix(A) && size(A,2) == 4
        if size(A,1) ~= N
            warning('forceNBy4:sizeMismatch', ...
                '%s ha %d righe invece di N=%d.', sigName, size(A,1), N);
        end
        return;
    end

    % Caso recuperabile: ha 4 righe
    if ismatrix(A) && size(A,1) == 4
        A = A.';
        if size(A,1) ~= N
            warning('forceNBy4:sizeMismatch', ...
                '%s trasposto ha %d righe invece di N=%d.', sigName, size(A,1), N);
        end
        return;
    end

    error('forceNBy4:badSize', ...
        'Dimensioni non valide per %s. Size ricevuta: %s. Atteso [N x 4].', ...
        sigName, mat2str(size(A)));
end