nk 1.0.0
C++ Numerical Computing Runtime
Loading...
Searching...
No Matches
conversions_extras.hpp
Go to the documentation of this file.
1
3// toolboxes/signal/include/nk/signal/filter_implementation/conversions_extras.hpp
4//
5// Additional filter-form conversions: sos ↔ tf, sos ↔ zpk, tf ↔ ss,
6// sos ↔ ss, zpk ↔ ss, plus tf2zpk (gain-explicit alias of tf2zp).
7//
8// State-space form is the 4-tuple (A, B, C, D):
9// A : N×N state-transition matrix
10// B : N×1 input vector
11// C : 1×N output vector
12// D : 1×1 direct feed-through scalar
13// Single-input single-output controllable canonical form is used.
14
15#pragma once
16
17#include <memory_resource>
18#include <nk/value/value.hpp>
19
20#include <tuple>
21
22namespace nk::signal {
23
26
27
39std::tuple<Value, Value>
40sos2tf(const Value & sos,
41 double g = 1.0,
42 std::pmr::memory_resource * mr = nullptr);
43
55std::tuple<Value, Value, double>
56sos2zp(const Value & sos,
57 double g = 1.0,
58 std::pmr::memory_resource * mr = nullptr);
59
69std::tuple<Value, Value, double>
70tf2zpk(const Value & b,
71 const Value & a,
72 std::pmr::memory_resource * mr = nullptr);
73
87std::tuple<Value, Value, double>
88ctf2zp(const Value & NUM,
89 const Value & DEN,
90 const Value & SV = Value::Empty,
91 std::pmr::memory_resource * mr = nullptr);
92
104 const Value & SV,
105 std::pmr::memory_resource * mr = nullptr);
106
119std::tuple<Value, Value, Value, Value>
120tf2ss(const Value & b,
121 const Value & a,
122 std::pmr::memory_resource * mr = nullptr);
123
133std::tuple<Value, Value>
134ss2tf(const Value & A,
135 const Value & B,
136 const Value & C,
137 double D = 0.0,
138 std::pmr::memory_resource * mr = nullptr);
139
152std::tuple<Value, Value, double>
153ss2zp(const Value &A, const Value &B, const Value &C, double D = 0.0,
154 std::pmr::memory_resource *mr = nullptr);
155
163std::tuple<Value, Value, Value, Value>
164zp2ss(const Value & z,
165 const Value & p,
166 double k,
167 std::pmr::memory_resource * mr = nullptr);
168
175std::tuple<Value, Value, Value, Value>
176sos2ss(const Value & sos,
177 double g = 1.0,
178 std::pmr::memory_resource * mr = nullptr);
179
192Value ss2sos(const Value &A, const Value &B, const Value &C, double D = 0.0,
193 std::pmr::memory_resource *mr = nullptr);
194
195
197} // namespace nk::signal
Core MATLAB-compatible multidimensional array and scalar value type.
Definition value.hpp:61
static const Value Empty
MATLAB-style empty matrix sentinel — a 0×0 DOUBLE value.
Definition value.hpp:136
Value ss2sos(const Value &A, const Value &B, const Value &C, double D=0.0, std::pmr::memory_resource *mr=nullptr)
State space → second-order sections (sos = ss2sos(A, B, C, D)).
std::tuple< Value, Value, double > ctf2zp(const Value &NUM, const Value &DEN, const Value &SV=Value::Empty, std::pmr::memory_resource *mr=nullptr)
Cascaded transfer function to zero / pole / gain.
std::tuple< Value, Value, double > sos2zp(const Value &sos, double g=1.0, std::pmr::memory_resource *mr=nullptr)
Second-order sections to zero / pole / gain.
Value scaleFilterSections(const Value &CTFNum, const Value &SV, std::pmr::memory_resource *mr=nullptr)
Scale numerator coefficients of a cascaded transfer function.
std::tuple< Value, Value > sos2tf(const Value &sos, double g=1.0, std::pmr::memory_resource *mr=nullptr)
Second-order sections to transfer function.
std::tuple< Value, Value, Value, Value > tf2ss(const Value &b, const Value &a, std::pmr::memory_resource *mr=nullptr)
Transfer function to state space (controllable canonical form).
std::tuple< Value, Value > ss2tf(const Value &A, const Value &B, const Value &C, double D=0.0, std::pmr::memory_resource *mr=nullptr)
State space to transfer function (SISO only).
std::tuple< Value, Value, Value, Value > zp2ss(const Value &z, const Value &p, double k, std::pmr::memory_resource *mr=nullptr)
Zero / pole / gain to state space (via zp2tf then tf2ss).
std::tuple< Value, Value, double > ss2zp(const Value &A, const Value &B, const Value &C, double D=0.0, std::pmr::memory_resource *mr=nullptr)
State space → zero / pole / gain ([z, p, k] = ss2zp(A, B, C, D)).
std::tuple< Value, Value, Value, Value > sos2ss(const Value &sos, double g=1.0, std::pmr::memory_resource *mr=nullptr)
Second-order sections to state space (via sos2tf then tf2ss).
std::tuple< Value, Value, double > tf2zpk(const Value &b, const Value &a, std::pmr::memory_resource *mr=nullptr)
Transfer function to zero / pole / gain.