// Copyright (C) 2018 - IIT Bombay - FOSSEE // This file must be used under the terms of the CeCILL. // This source file is licensed as described in the file COPYING, which // you should have received as part of this distribution. The terms // are also available at // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt // Author: Abinash Singh Under FOSSEE Internship // Organization: FOSSEE, IIT Bombay // Email: toolbox@scilab.in function cll = sos2cell(s, g) // Calling Sequence : // cll = sos2cell(s) // cll = sos2cell(s, g) // Description // sos2cell converts a second-order section matrix to a cell array representation. // The function can handle both unity-gain and non-unity gain filter systems. For non-unity gain systems, the gain factor is stored in the first cell of the output array. // Input Arguments // s - Second-order section matrix (L-by-6 matrix) // Each row represents one second-order section // Must have exactly 6 columns in format: [b0 b1 b2 a0 a1 a2] // Number of rows (L) represents the number of sections // g - Gain factor (optional) // Scalar value representing the system gain // Default value is 1 if not specified // Output Arguments // cll - Cell array containing second-order sections // For unity-gain systems (no gain specified): // Cell array with L elements // Each element contains coefficients: {[b0 b1 b2] [a0 a1 a2]} // For non-unity gain systems: // Cell array with L+1 elements // First element contains gain: {g 1} // Remaining elements contain section coefficients if (argn(2) > 2) then error("sos2cell: Wrong number of input arguments"); end gain_inc = 1 ; if nargin < 2 then g = 1 ; gain_inc = 0; end [L, n] = size(s); if n ~= 6 then error("sos2cell: Input matrix must have 6 columns"); end if gain_inc then L = L + 1 ; end cll = cell(1,L); start_index=1 if gain_inc then cll{1} = { g 1}; start_index = 2 ; end for i=start_index:L cll{i}={s(i+1-start_index,1:3) s(i+1-start_index,4:6)} end endfunction /* sos = [3. 6. 7. 1. 1. 2. ; 1. 4. 5. 1. 9. 3. ; 2. 7. 1. 1. 7. 8.]; cll = sos2cell(sos); // passed sos = [3. 6. 7. 1. 1. 2. ; 1. 4. 5. 1. 9. 3. ; 2. 7. 1. 1. 7. 8.]; g = 0.5 ; cll = sos2cell(sos,g); // passed */