3#include <dsplib/array.h>
4#include <dsplib/keywords.h>
13arr_real exp(span_real arr);
15arr_cmplx exp(span_cmplx arr);
16cmplx_t exp(cmplx_t v);
20arr_cmplx expj(span_real w);
21cmplx_t expj(real_t w);
24arr_real tanh(span_real x);
25arr_cmplx tanh(span_cmplx x);
28real_t max(span_real arr);
29cmplx_t max(span_cmplx arr);
31template<
typename T1,
typename T2>
32auto max(
const T1& v1,
const T2& v2) ->
decltype(v1 + v2) {
33 return (v1 > v2) ? (v1) : (v2);
37real_t min(span_real arr);
38cmplx_t min(span_cmplx arr);
40template<
typename T1,
typename T2>
41auto min(
const T1& v1,
const T2& v2) ->
decltype(v1 + v2) {
42 return (v1 < v2) ? (v1) : (v2);
46real_t peak2peak(span_real arr);
47cmplx_t peak2peak(span_cmplx arr);
50int argmax(span_real arr);
51int argmax(span_cmplx arr);
54int argmin(span_real arr);
55int argmin(span_cmplx arr);
58arr_real abs(span_real arr)
noexcept;
59real_t abs(real_t v)
noexcept;
60arr_real abs(span_cmplx arr)
noexcept;
61real_t abs(cmplx_t v)
noexcept;
62void abs(inplace_real arr)
noexcept;
65arr_real angle(span_cmplx arr);
66real_t angle(cmplx_t v);
69real_t round(
const real_t& x)
noexcept;
70cmplx_t round(
const cmplx_t& x)
noexcept;
71arr_real round(span_real arr)
noexcept;
72arr_cmplx round(span_cmplx arr)
noexcept;
73void round(inplace_real arr)
noexcept;
74void round(inplace_cmplx arr)
noexcept;
77real_t sum(span_real arr);
78cmplx_t sum(span_cmplx arr);
79int sum(
const std::vector<bool>& arr);
83arr_real cumsum(span_real x, Direction dir = Direction::Forward);
84arr_cmplx cumsum(span_cmplx x, Direction dir = Direction::Forward);
87real_t dot(span_real x1, span_real x2);
88cmplx_t dot(span_cmplx x1, span_cmplx x2);
91real_t mean(span_real arr);
92cmplx_t mean(span_cmplx arr);
95real_t stddev(span_real arr);
96real_t stddev(span_cmplx arr);
99real_t median(span_real arr);
103real_t corr(span_real x, span_real y, Correlation type = Correlation::Pearson);
107std::pair<arr_real, arr_int> sort(
const arr_real& x, Direction dir = Direction::Ascend);
110void sort(inplace_real ix, Direction dir = Direction::Ascend);
113bool issorted(span_real x, Direction dir = Direction::Ascend);
116arr_real real(span_cmplx x);
117real_t real(
const cmplx_t& x);
120arr_real imag(span_cmplx x);
121real_t imag(
const cmplx_t& x);
124arr_cmplx conj(
const arr_cmplx& x)
noexcept;
126void conj(inplace_cmplx x)
noexcept;
128constexpr cmplx_t conj(
const cmplx_t& x)
noexcept {
132inline arr_real conj(
const arr_real& x)
noexcept {
136constexpr real_t conj(
const real_t& x)
noexcept {
141arr_cmplx complex(span_real re, span_real im);
142arr_cmplx complex(span_real re);
145constexpr int nextpow2(
int m)
noexcept {
148 if ((m == 0) || (m == 1)) {
155 while ((m >> p) != 0) {
160 if ((
int(1) << p) == m) {
168constexpr bool ispow2(
int m)
noexcept {
170 return (m > 0) && (m & (m - 1)) == 0;
174real_t power(real_t x, real_t n);
175cmplx_t power(cmplx_t x, real_t n);
178arr_cmplx power(cmplx_t x,
const arr_real& n);
181arr_real power(real_t x,
const arr_real& n);
184arr_real power(
const arr_real& x,
const arr_real& n);
185arr_cmplx power(
const arr_cmplx& x,
const arr_real& n);
188arr_real power(
const arr_real& x, real_t n);
189arr_cmplx power(
const arr_cmplx& x, real_t n);
192real_t power(real_t x,
int n);
193cmplx_t power(cmplx_t x,
int n);
194arr_real power(
const arr_real& x,
int n);
195arr_cmplx power(
const arr_cmplx& x,
int n);
199real_t sqrt(real_t x)
noexcept;
200arr_real sqrt(span_real arr)
noexcept;
201void sqrt(inplace_real arr)
noexcept;
204arr_real log(span_real arr);
205arr_real log2(span_real arr);
206arr_real log10(span_real arr);
208real_t log(
const real_t& x);
209real_t log2(
const real_t& x);
210real_t log10(
const real_t& x);
213real_t rms(span_real arr);
214real_t rms(span_cmplx arr);
217arr_real sin(span_real arr);
218arr_real cos(span_real arr);
221arr_real downsample(span_real arr,
int n,
int phase = 0);
222arr_cmplx downsample(span_cmplx arr,
int n,
int phase = 0);
225arr_real upsample(span_real arr,
int n,
int phase = 0);
226arr_cmplx upsample(span_cmplx arr,
int n,
int phase = 0);
229arr_real abs2(
const arr_cmplx& x)
noexcept;
231constexpr real_t abs2(
const cmplx_t& x)
noexcept {
235inline arr_real abs2(
const arr_real& x) {
239constexpr real_t abs2(
const real_t& x)
noexcept {
244arr_real deg2rad(span_real x);
245real_t deg2rad(
const real_t& x);
248arr_real rad2deg(span_real x);
249real_t rad2deg(
const real_t& x);
255real_t norm(span_real x,
int p = 2);
256real_t norm(span_cmplx x,
int p = 2);
259real_t mse(span_real x, span_real y);
260real_t mse(span_cmplx x, span_cmplx y);
263real_t nmse(span_real x, span_real y);
264real_t nmse(span_cmplx x, span_cmplx y);
267constexpr int sign(
const real_t& x)
noexcept {
268 return (real_t(0) < x) - (x < real_t(0));
271inline cmplx_t sign(
const cmplx_t& x)
noexcept {
272 if (x.re == 0 && x.im == 0) {
280real_t pow2db(real_t v)
noexcept;
281arr_real pow2db(span_real arr)
noexcept;
282real_t db2pow(real_t v)
noexcept;
283arr_real db2pow(span_real arr)
noexcept;
284void pow2db(inplace_real arr)
noexcept;
285void db2pow(inplace_real arr)
noexcept;
288real_t mag2db(real_t v)
noexcept;
289arr_real mag2db(span_real arr)
noexcept;
290real_t db2mag(real_t v)
noexcept;
291arr_real db2mag(span_real arr)
noexcept;
292void mag2db(inplace_real arr)
noexcept;
293void db2mag(inplace_real arr)
noexcept;
298bool isprime(uint32_t n)
noexcept;
302arr_int factor(uint32_t n);
307uint32_t nextprime(uint32_t n);
312arr_int primes(uint32_t n);
318bool anynan(span_real x);
319bool anynan(span_cmplx x);
322bool anyinf(span_real x);
323bool anyinf(span_cmplx x);