kopia lustrzana https://github.com/Dsplib/libdspl-2.0
added doc for random generators
Changes to be committed: modified: dspl/doc/html/formula.repository modified: dspl/dox/ru/filter_ap.dox modified: dspl/dox/ru/filter_fir.dox modified: dspl/dox/ru/inout.dox modified: dspl/dox/ru/randgen.dox modified: dspl/src/dspl_internal.h modified: dspl/src/filter_ft.c modified: dspl/src/inout.c modified: dspl/src/randgen.c new file: examples/src/ellip_ap_test.c new file: examples/src/fir_linphase_test.c new file: examples/src/randb_test.c new file: examples/src/randi_test.c new file: examples/src/randn_test.c modified: include/dspl.c modified: include/dspl.hpull/6/merge
rodzic
22a4dced8a
commit
a2f2d22a9b
|
@ -1,129 +1,141 @@
|
|||
\form#0:\[ e = \max \left( \frac{|x(k) - y(k)| }{ |x(k)|} \right), \quad \quad |x(k)| > 0, \]
|
||||
\form#1:\[ e = \max(|x(k) - y(k)| ), ~\qquad \quad~|x(k)| = 0, \]
|
||||
\form#2:$ e$
|
||||
\form#3:\[ e = \max \left( \frac{|x(k) - y(k)|}{|x(k)|} \right), \quad \quad |x(k)| > 0, \]
|
||||
\form#4:$ C_ord(x)$
|
||||
\form#5:\[ C_ord(x) = 2 x C_{ord-1}(x) - C_{ord-2}(x), \]
|
||||
\form#6:$ C_0(x) = 1 $
|
||||
\form#7:$ C_1(x) = x$
|
||||
\form#8:$ U_{ord}(x)$
|
||||
\form#9:\[ U_{ord}(x) = 2 x U_{ord-1}(x) - U_{ord-2}(x), \]
|
||||
\form#10:$ U_0(x) = 1 $
|
||||
\form#11:$ U_1(x) = 2x$
|
||||
\form#12:$ x = a + j b $
|
||||
\form#13:\[ |x|^2 = x x^* = a^2 + b^2. \]
|
||||
\form#14:\[ \textrm{Arccos}(x) = \frac{\pi}{2} - \textrm{Arcsin}(x) = \frac{\pi}{2} -j \textrm{Ln}\left( j x + \sqrt{1 - x^2} \right) \]
|
||||
\form#15:\[ \textrm{Arcsin}(x) = j \textrm{Ln}\left( j x + \sqrt{1 - x^2} \right) \]
|
||||
\form#16:\[ \textrm{cos}(x) = \frac{\exp(jx) + \exp(-jx)}{2} \]
|
||||
\form#17:\[ \textrm{Ln}(x) = j \varphi + \ln(|x|), \]
|
||||
\form#18:$\varphi$
|
||||
\form#19:\[ \textrm{sin}(x) = \frac{\exp(jx) - \exp(-jx)}{2j} \]
|
||||
\form#20:\[ y(k) = \sqrt{x(k)}, \qquad k = 0 \ldots n-1. \]
|
||||
\form#21:$ c = a * b$
|
||||
\form#22:$a$
|
||||
\form#23:$b$
|
||||
\form#24:$n = n_0 \times n_1 \times n_2 \times \ldots \times n_p \times m$
|
||||
\form#25:$n_i = 2,3,5,7$
|
||||
\form#26:$m $
|
||||
\form#27:\[ H(z) = \frac{\sum_{n = 0}^{N} b_n z^{-n}} {1+{\frac{1}{a_0}}\sum_{m = 1}^{M} a_m z^{-m}}, \]
|
||||
\form#28:$a_0$
|
||||
\form#29:$N=M=$
|
||||
\form#30:$H(z)$
|
||||
\form#31:$s(t) = \sin(2\pi \cdot 0.05 t) + n(t)$
|
||||
\form#32:$n(t)$
|
||||
\form#33:$ n $
|
||||
\form#34:$ x(m) $
|
||||
\form#35:$ m = 0 \ldots n-1 $
|
||||
\form#36:\[ Y(k) = \sum_{m = 0}^{n-1} x(m) \exp \left( -j \frac{2\pi}{n} m k \right), \]
|
||||
\form#37:$ k = 0 \ldots n-1 $
|
||||
\form#38:$x(m)$
|
||||
\form#39:$n$
|
||||
\form#40:$Y(k)$
|
||||
\form#41:$ n^2 $
|
||||
\form#42:\[ y(k) = \sum_{m = 0}^{n-1} x(m) \exp \left( j \frac{2\pi}{n} m k \right), \]
|
||||
\form#43:$y(k)$
|
||||
\form#44:$ u = \textrm{cd}^{-1}(w, k)$
|
||||
\form#45:$ w $
|
||||
\form#46:$ k $
|
||||
\form#47:$ u = \textrm{sn}^{-1}(w, k)$
|
||||
\form#48:$ y = \textrm{cd}(u K(k), k)$
|
||||
\form#49:$ u $
|
||||
\form#50:$ k_i $
|
||||
\form#51:$ K(k) $
|
||||
\form#52:\[ K(k) = \frac{\pi}{2} \prod_{i = 1}^{\infty}(1+k_i), \]
|
||||
\form#53:$ k_0 = k$
|
||||
\form#54:\[ k_i = \left( \frac{k_{i-1}} { 1+\sqrt{1-k_{i-1}^2} } \right)^2 \]
|
||||
\form#55:$ k<1 $
|
||||
\form#56:$ y = \textrm{sn}(u K(k), k)$
|
||||
\form#57:\[ Y(k) = \frac{1}{N} \sum_{m = 0}^{n-1} x(m) \exp \left( j \frac{2\pi}{n} m k \right), \]
|
||||
\form#58:$n = n_0 \times n_1 \times n_2 \times n_3 \times \ldots \times n_p \times m$
|
||||
\form#59:$n = n_0 \times n_1 \times n_2 \ldots \times n_p \times m$
|
||||
\form#60:$ n = 725760 $
|
||||
\form#61:$725760 = 2 \cdot 3 \cdot 4 \cdot 5 \cdot 6 \cdot 7 \cdot 9 \cdot 16 $
|
||||
\form#62:$ n = 172804 = 43201 \cdot 4 $
|
||||
\form#63:$ n = 13 \cdot 17 \cdot 23 \cdot 13 = 66079 $
|
||||
\form#64:$\sqrt{2^{31}} = 46340.95$
|
||||
\form#65:$x_0$
|
||||
\form#66:$x_1$
|
||||
\form#67:$x(k) = x_0 + k \cdot dx$
|
||||
\form#68:$dx = \frac{x_1 - x_0}{n-1}$
|
||||
\form#69:$k = 0 \ldots n-1.$
|
||||
\form#70:$dx = \frac{x_1 - x_0}{n}$
|
||||
\form#71:$10^{x_0}$
|
||||
\form#72:$10^{x_1}$
|
||||
\form#73:$x(k) = 10^{x_0} \cdot dx^k$
|
||||
\form#74:$dx = \sqrt[n-1]{10^{x_1 - x_0}}$
|
||||
\form#75:$dx = \sqrt[n]{10^{x_1 - x_0}}$
|
||||
\form#76:$ H(j \omega) $
|
||||
\form#77:$ H(j \omega)$
|
||||
\form#78:$ H(s) $
|
||||
\form#79:\[ H(s) = \frac {\sum_{k = 0}^{N} b_k s^k} {\sum_{m = 0}^{N} a_m s^m}, \]
|
||||
\form#80:$ N $
|
||||
\form#81:$ s = j \omega $
|
||||
\form#82:$ \omega $
|
||||
\form#83:$H(s)$
|
||||
\form#84:$ H \left(\mathrm{e}^{j\omega} \right) $
|
||||
\form#85:$ 2\pi $
|
||||
\form#86:$ \pi $
|
||||
\form#87:$ -\pi $
|
||||
\form#88:$ H \left(e^{j \omega} \right)$
|
||||
\form#89:\[ H(z) = \frac {\sum_{k = 0}^{N} b_k z^{-k}} {\sum_{m = 0}^{N} a_m z^{-m}}, \]
|
||||
\form#90:$N$
|
||||
\form#91:$z = e^{j \omega} $
|
||||
\form#92:$\omega$
|
||||
\form#93:$ 2 \pi-$
|
||||
\form#94:$2 \pi$
|
||||
\form#95:$-\pi$
|
||||
\form#96:$ \pi$
|
||||
\form#97:$ H \left(e^{j \omega} \right) = H^* \left(e^{-j \omega} \right)$
|
||||
\form#98:$\pi$
|
||||
\form#99:$ -R_p $
|
||||
\form#100:$ H(s)$
|
||||
\form#101:$-R_p$
|
||||
\form#102:$ R_p $
|
||||
\form#103:$-R_s$
|
||||
\form#104:$H(j\cdot 1) = -R_s$
|
||||
\form#105:\[ H(s) = \frac{\sum_{n = 0}^{N_z} b_n \cdot s^n}{\sum_{m = 0}^{N_p} a_m \cdot s^m} = \frac{\prod_{n = 0}^{N_z}(s-z_n)}{\prod_{m = 0}^{N_p} (s-p_m)} \]
|
||||
\form#106:\[ H(z) = \sum_{n = 0}^{ord} h_n z^{-n} \]
|
||||
\form#107:$ F(s) $
|
||||
\form#108:$F(s)$
|
||||
\form#109:$Y(s) = (H \circ F)(s) = H(F(s))$
|
||||
\form#110:\[ H(s) = \frac{\sum\limits_{m = 0}^{n} b_m s^m} {\sum\limits_{k = 0}^{n} a_k s^k}, \quad F(s) = \frac{\sum\limits_{m = 0}^{p} d_m s^m} {\sum\limits_{k = 0}^{p} c_k s^k}, \quad Y(s) = \frac{\sum\limits_{m = 0}^{n p} \beta_m s^m} {\sum\limits_{k = 0}^{n p} \alpha_k s^k} \]
|
||||
\form#111:$Y(s) = (H \circ F)(s)$
|
||||
\form#112:\[ s \leftarrow \frac{1 - z^{-1}}{1 - z^{-1}}. \]
|
||||
\form#113:$\Omega$
|
||||
\form#114:\[ \Omega = \tan(\omega / 2). \]
|
||||
\form#115:\[ s(t) = \sum\limits_{n = 0}^{n_{\omega}-1} S(\omega_n) \exp(j\omega_n t) \]
|
||||
\form#116:$\omega_n$
|
||||
\form#117:$S(\omega_n)$
|
||||
\form#118:$ I_0(x)$
|
||||
\form#119:$ x $
|
||||
\form#120:$[0 \ 3]$
|
||||
\form#121:$ \textrm{sinc}(x,a) = \frac{\sin(ax)}{ax}$
|
||||
\form#122:\[ \textrm{Si}(x) = \int_{0}^{x} \frac{\sin(x)}{x} \, dx\]
|
||||
\form#123:$[-6\pi \ 6\pi]$
|
||||
\form#124:$P_N(x)$
|
||||
\form#125:$N-$
|
||||
\form#126:\[ P_N(x) = a_0 + a_1 \cdot x + a_2 \cdot x^2 + a_3 \cdot x^3 + ... a_N \cdot x^N. \]
|
||||
\form#127:\[ P_N(x) = a_0 + x \cdot (a_1 + x \cdot (a_2 + \cdot ( \ldots x \cdot (a_{N-1} + x\cdot a_N) \ldots ))) \]
|
||||
\form#128:$10^{56}$
|
||||
\form#0:$x(i)$
|
||||
\form#1:$i = 0,1,\ldots n$
|
||||
\form#2:$y(i)$
|
||||
\form#3:\[ y(i) = k_x x(i) + d_x, \qquad k_x = \frac{h}{x_{\textrm{max}} - x_{\textrm{min}}}. \]
|
||||
\form#4:$x_{\textrm{min}}$
|
||||
\form#5:$x_{\textrm{max}}$
|
||||
\form#6:$d_x$
|
||||
\form#7:$h + d_x$
|
||||
\form#8:\[ e = \max \left( \frac{|x(k) - y(k)| }{ |x(k)|} \right), \quad \quad |x(k)| > 0, \]
|
||||
\form#9:\[ e = \max(|x(k) - y(k)| ), ~\qquad \quad~|x(k)| = 0, \]
|
||||
\form#10:$ e$
|
||||
\form#11:\[ e = \max \left( \frac{|x(k) - y(k)|}{|x(k)|} \right), \quad \quad |x(k)| > 0, \]
|
||||
\form#12:$ C_ord(x)$
|
||||
\form#13:\[ C_ord(x) = 2 x C_{ord-1}(x) - C_{ord-2}(x), \]
|
||||
\form#14:$ C_0(x) = 1 $
|
||||
\form#15:$ C_1(x) = x$
|
||||
\form#16:$ U_{ord}(x)$
|
||||
\form#17:\[ U_{ord}(x) = 2 x U_{ord-1}(x) - U_{ord-2}(x), \]
|
||||
\form#18:$ U_0(x) = 1 $
|
||||
\form#19:$ U_1(x) = 2x$
|
||||
\form#20:$ x = a + j b $
|
||||
\form#21:\[ |x|^2 = x x^* = a^2 + b^2. \]
|
||||
\form#22:\[ \textrm{Arccos}(x) = \frac{\pi}{2} - \textrm{Arcsin}(x) = \frac{\pi}{2} -j \textrm{Ln}\left( j x + \sqrt{1 - x^2} \right) \]
|
||||
\form#23:\[ \textrm{Arcsin}(x) = j \textrm{Ln}\left( j x + \sqrt{1 - x^2} \right) \]
|
||||
\form#24:\[ \textrm{cos}(x) = \frac{\exp(jx) + \exp(-jx)}{2} \]
|
||||
\form#25:\[ \textrm{Ln}(x) = j \varphi + \ln(|x|), \]
|
||||
\form#26:$\varphi$
|
||||
\form#27:\[ \textrm{sin}(x) = \frac{\exp(jx) - \exp(-jx)}{2j} \]
|
||||
\form#28:\[ y(k) = \sqrt{x(k)}, \qquad k = 0 \ldots n-1. \]
|
||||
\form#29:$ c = a * b$
|
||||
\form#30:$a$
|
||||
\form#31:$b$
|
||||
\form#32:$n = n_0 \times n_1 \times n_2 \times \ldots \times n_p \times m$
|
||||
\form#33:$n_i = 2,3,5,7$
|
||||
\form#34:$m $
|
||||
\form#35:\[ H(z) = \frac{\sum_{n = 0}^{N} b_n z^{-n}} {1+{\frac{1}{a_0}}\sum_{m = 1}^{M} a_m z^{-m}}, \]
|
||||
\form#36:$a_0$
|
||||
\form#37:$N=M=$
|
||||
\form#38:$H(z)$
|
||||
\form#39:$s(t) = \sin(2\pi \cdot 0.05 t) + n(t)$
|
||||
\form#40:$n(t)$
|
||||
\form#41:$ n $
|
||||
\form#42:$ x(m) $
|
||||
\form#43:$ m = 0 \ldots n-1 $
|
||||
\form#44:\[ Y(k) = \sum_{m = 0}^{n-1} x(m) \exp \left( -j \frac{2\pi}{n} m k \right), \]
|
||||
\form#45:$ k = 0 \ldots n-1 $
|
||||
\form#46:$x(m)$
|
||||
\form#47:$n$
|
||||
\form#48:$Y(k)$
|
||||
\form#49:$ n^2 $
|
||||
\form#50:\[ y(k) = \sum_{m = 0}^{n-1} x(m) \exp \left( j \frac{2\pi}{n} m k \right), \]
|
||||
\form#51:$y(k)$
|
||||
\form#52:$ u = \textrm{cd}^{-1}(w, k)$
|
||||
\form#53:$ w $
|
||||
\form#54:$ k $
|
||||
\form#55:$ u = \textrm{sn}^{-1}(w, k)$
|
||||
\form#56:$ y = \textrm{cd}(u K(k), k)$
|
||||
\form#57:$ u $
|
||||
\form#58:$ k_i $
|
||||
\form#59:$ K(k) $
|
||||
\form#60:\[ K(k) = \frac{\pi}{2} \prod_{i = 1}^{\infty}(1+k_i), \]
|
||||
\form#61:$ k_0 = k$
|
||||
\form#62:\[ k_i = \left( \frac{k_{i-1}} { 1+\sqrt{1-k_{i-1}^2} } \right)^2 \]
|
||||
\form#63:$ k<1 $
|
||||
\form#64:$ y = \textrm{sn}(u K(k), k)$
|
||||
\form#65:\[ Y(k) = \frac{1}{N} \sum_{m = 0}^{n-1} x(m) \exp \left( j \frac{2\pi}{n} m k \right), \]
|
||||
\form#66:$n = n_0 \times n_1 \times n_2 \times n_3 \times \ldots \times n_p \times m$
|
||||
\form#67:$n = n_0 \times n_1 \times n_2 \ldots \times n_p \times m$
|
||||
\form#68:$ n = 725760 $
|
||||
\form#69:$725760 = 2 \cdot 3 \cdot 4 \cdot 5 \cdot 6 \cdot 7 \cdot 9 \cdot 16 $
|
||||
\form#70:$ n = 172804 = 43201 \cdot 4 $
|
||||
\form#71:$ n = 13 \cdot 17 \cdot 23 \cdot 13 = 66079 $
|
||||
\form#72:$\sqrt{2^{31}} = 46340.95$
|
||||
\form#73:$x_0$
|
||||
\form#74:$x_1$
|
||||
\form#75:$x(k) = x_0 + k \cdot dx$
|
||||
\form#76:$dx = \frac{x_1 - x_0}{n-1}$
|
||||
\form#77:$k = 0 \ldots n-1.$
|
||||
\form#78:$dx = \frac{x_1 - x_0}{n}$
|
||||
\form#79:$10^{x_0}$
|
||||
\form#80:$10^{x_1}$
|
||||
\form#81:$x(k) = 10^{x_0} \cdot dx^k$
|
||||
\form#82:$dx = \sqrt[n-1]{10^{x_1 - x_0}}$
|
||||
\form#83:$dx = \sqrt[n]{10^{x_1 - x_0}}$
|
||||
\form#84:$ H(j \omega) $
|
||||
\form#85:$ H(j \omega)$
|
||||
\form#86:$ H(s) $
|
||||
\form#87:\[ H(s) = \frac {\sum_{k = 0}^{N} b_k s^k} {\sum_{m = 0}^{N} a_m s^m}, \]
|
||||
\form#88:$ N $
|
||||
\form#89:$ s = j \omega $
|
||||
\form#90:$ \omega $
|
||||
\form#91:$H(s)$
|
||||
\form#92:$ H \left(\mathrm{e}^{j\omega} \right) $
|
||||
\form#93:$ 2\pi $
|
||||
\form#94:$ \pi $
|
||||
\form#95:$ -\pi $
|
||||
\form#96:$ H \left(e^{j \omega} \right)$
|
||||
\form#97:\[ H(z) = \frac {\sum_{k = 0}^{N} b_k z^{-k}} {\sum_{m = 0}^{N} a_m z^{-m}}, \]
|
||||
\form#98:$N$
|
||||
\form#99:$z = e^{j \omega} $
|
||||
\form#100:$\omega$
|
||||
\form#101:$ 2 \pi-$
|
||||
\form#102:$2 \pi$
|
||||
\form#103:$-\pi$
|
||||
\form#104:$ \pi$
|
||||
\form#105:$ H \left(e^{j \omega} \right) = H^* \left(e^{-j \omega} \right)$
|
||||
\form#106:$\pi$
|
||||
\form#107:$ -R_p $
|
||||
\form#108:$ H(s)$
|
||||
\form#109:$-R_p$
|
||||
\form#110:$ R_p $
|
||||
\form#111:$-R_s$
|
||||
\form#112:$H(j\cdot 1) = -R_s$
|
||||
\form#113:\[ H(s) = \frac{\sum_{n = 0}^{N_z} b_n \cdot s^n}{\sum_{m = 0}^{N_p} a_m \cdot s^m} = \frac{\prod_{n = 0}^{N_z}(s-z_n)}{\prod_{m = 0}^{N_p} (s-p_m)} \]
|
||||
\form#114:\[ H(z) = \sum_{n = 0}^{ord} h_n z^{-n} \]
|
||||
\form#115:$ F(s) $
|
||||
\form#116:$F(s)$
|
||||
\form#117:$Y(s) = (H \circ F)(s) = H(F(s))$
|
||||
\form#118:\[ H(s) = \frac{\sum\limits_{m = 0}^{n} b_m s^m} {\sum\limits_{k = 0}^{n} a_k s^k}, \quad F(s) = \frac{\sum\limits_{m = 0}^{p} d_m s^m} {\sum\limits_{k = 0}^{p} c_k s^k}, \quad Y(s) = \frac{\sum\limits_{m = 0}^{n p} \beta_m s^m} {\sum\limits_{k = 0}^{n p} \alpha_k s^k} \]
|
||||
\form#119:$Y(s) = (H \circ F)(s)$
|
||||
\form#120:\[ s \leftarrow \frac{1 - z^{-1}}{1 - z^{-1}}. \]
|
||||
\form#121:$\Omega$
|
||||
\form#122:\[ \Omega = \tan(\omega / 2). \]
|
||||
\form#123:\[ s(t) = \sum\limits_{n = 0}^{n_{\omega}-1} S(\omega_n) \exp(j\omega_n t) \]
|
||||
\form#124:$\omega_n$
|
||||
\form#125:$S(\omega_n)$
|
||||
\form#126:$ I_0(x)$
|
||||
\form#127:$ x $
|
||||
\form#128:$[0 \ 3]$
|
||||
\form#129:$ \textrm{sinc}(x,a) = \frac{\sin(ax)}{ax}$
|
||||
\form#130:\[ \textrm{Si}(x) = \int_{0}^{x} \frac{\sin(x)}{x} \, dx\]
|
||||
\form#131:$[-6\pi \ 6\pi]$
|
||||
\form#132:$P_N(x)$
|
||||
\form#133:$N-$
|
||||
\form#134:\[ P_N(x) = a_0 + a_1 \cdot x + a_2 \cdot x^2 + a_3 \cdot x^3 + ... a_N \cdot x^N. \]
|
||||
\form#135:\[ P_N(x) = a_0 + x \cdot (a_1 + x \cdot (a_2 + \cdot ( \ldots x \cdot (a_{N-1} + x\cdot a_N) \ldots ))) \]
|
||||
\form#136:$\mu$
|
||||
\form#137:$\sigma$
|
||||
\form#138:$\sigma^2$
|
||||
\form#139:$\mu = 0$
|
||||
\form#140:$\sigma=1$
|
||||
|
|
|
@ -491,6 +491,98 @@ www.dsplib.org
|
|||
|
||||
|
||||
|
||||
/*! ****************************************************************************
|
||||
\ingroup IIR_FILTER_DESIGN_GROUP
|
||||
\fn int ellip_ap(double rp, double rs, int ord, double* b, double* a)
|
||||
|
||||
\brief
|
||||
Расчет передаточной характеристики \f$ H(s) \f$ аналогового
|
||||
нормированного эллиптического ФНЧ.
|
||||
|
||||
Функция рассчитывает коэффициенты передаточной характеристики \f$H(s)\f$
|
||||
аналогового нормированного эллиптического ФНЧ порядка `ord`
|
||||
с частотой среза 1 рад/с по уровню \f$-R_p\f$ дБ. \n
|
||||
|
||||
Особенностью эллиптического фильтра являются равноволновые пульсации
|
||||
АЧХ как в полосе пропускания, так и в полосе заграждения, в результате
|
||||
чего обеспечиваеся минимальная переходная полоса фильтра. \n
|
||||
|
||||
\param[in] rp
|
||||
Уровень пульсаций в полосе пропускания (дБ). \n
|
||||
Значение должно быть положительным. \n
|
||||
\n
|
||||
|
||||
\param[in] Rs
|
||||
Уровень подавления в полосе заграждения (дБ). \n
|
||||
Значение должно быть положительным. \n
|
||||
\n
|
||||
|
||||
\param[in] ord
|
||||
Порядок фильтра. \n
|
||||
Количество коэффициентов числителя и знаменателя
|
||||
передаточной функции \f$H(s)\f$ равно `ord+1`. \n
|
||||
\n
|
||||
|
||||
\param[out] b
|
||||
Указатель на вектор коэффициентов числителя
|
||||
передаточной функции \f$H(s)\f$. \n
|
||||
Размер вектора `[ord+1 x 1]`. \n
|
||||
Память должна быть выделена. \n
|
||||
\n
|
||||
|
||||
\param[out] a
|
||||
Указатель на вектор коэффициентов знаменателя
|
||||
передаточной функции \f$H(s)\f$. \n
|
||||
Размер вектора `[ord+1 x 1]`. \n
|
||||
Память должна быть выделена. \n
|
||||
\n
|
||||
|
||||
Пример использования функции `ellip_ap`:
|
||||
|
||||
\include ellip_ap_test.c
|
||||
|
||||
Результат работы программы:
|
||||
|
||||
\verbatim
|
||||
b[ 0] = 0.268 a[ 0] = 0.301
|
||||
b[ 1] = 0.000 a[ 1] = 0.764
|
||||
b[ 2] = 0.045 a[ 2] = 1.472
|
||||
b[ 3] = 0.000 a[ 3] = 0.948
|
||||
b[ 4] = 0.001 a[ 4] = 1.000
|
||||
\endverbatim
|
||||
\n
|
||||
|
||||
В каталоге `dat` будут созданы три файла: \n
|
||||
|
||||
\verbatim
|
||||
ellip_ap_test_mag.txt АЧХ фильтра
|
||||
ellip_ap_test_phi.txt ФЧХ фильтра
|
||||
ellip_ap_test_tau.txt ГВЗ фильтра
|
||||
\endverbatim
|
||||
\n
|
||||
|
||||
Кроме того программа GNUPLOT произведет построение следующих графиков
|
||||
по сохраненным в файлах данным:
|
||||
|
||||
\image html ellip_ap_test.png
|
||||
|
||||
|
||||
\return
|
||||
`RES_OK` --- фильтр рассчитан успешно. \n
|
||||
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n
|
||||
|
||||
\author
|
||||
Бахурин Сергей
|
||||
www.dsplib.org
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*! ****************************************************************************
|
||||
|
|
|
@ -114,6 +114,17 @@ DSPL_FILTER_BSTOP - режекторный фильтр.
|
|||
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n
|
||||
|
||||
|
||||
Пример использования функции:
|
||||
|
||||
\include fir_linphase_test.c
|
||||
|
||||
Программа расчитывает коэффициенты и АЧХ линейно-фазовых КИХ-фильтрова нижних,
|
||||
верхних частот, полосовых и режекторных с применением различных весовых окон:
|
||||
прямоугольное, Хемминга, Илэкмана и Блэкмана-Харриса. \n
|
||||
Полученные АЧХ выводятся на график
|
||||
|
||||
\image html fir_linphase_test.png
|
||||
|
||||
|
||||
\author
|
||||
Бахурин Сергей
|
||||
|
|
|
@ -156,3 +156,60 @@ x[n-1] y[n-1]
|
|||
Бахурин Сергей
|
||||
www.dsplib.org
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*! ****************************************************************************
|
||||
\ingroup IN_OUT_GROUP
|
||||
\fn int writetxt_int(int* x, int* y, int n, char* fn)
|
||||
|
||||
\brief
|
||||
Сохранить целочисленные данные в текстовый файл
|
||||
|
||||
Функция сохраняет целочисленные данные в текстовый файл `fn`. \n
|
||||
|
||||
Файл имеет следующий формат: \n
|
||||
|
||||
\verbatim
|
||||
x[0] y[0]
|
||||
x[1] y[1]
|
||||
... ...
|
||||
x[n-1] y[n-1]
|
||||
\endverbatim
|
||||
|
||||
Файл может быть использован для построения графика сторонней программой,
|
||||
например пакетом GNUPLOT (см. раздел \ref PLOT_GROUP). \n
|
||||
|
||||
\param[in] x
|
||||
Указатель на первый вектор. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
\n
|
||||
|
||||
\param[in] y
|
||||
Указатель на второй вектор. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Может быть `NULL`. \n
|
||||
Файл будет содержать только один столбец соответствующий
|
||||
вектору `x` если `y == NULL`. \n
|
||||
\n
|
||||
|
||||
\param[in] n
|
||||
Размер входных векторов. \n
|
||||
\n
|
||||
|
||||
\param[in] fn
|
||||
Имя файла. \n
|
||||
\n
|
||||
|
||||
\return
|
||||
`RES_OK` --- файл сохранен успешно. \n
|
||||
В противном случае \ref ERROR_CODE_GROUP "код ошибки": \n
|
||||
|
||||
\author
|
||||
Бахурин Сергей
|
||||
www.dsplib.org
|
||||
***************************************************************************** */
|
||||
|
|
|
@ -100,6 +100,219 @@ www.dsplib.org
|
|||
|
||||
|
||||
|
||||
/*! ****************************************************************************
|
||||
\ingroup SPEC_MATH_RAND_GEN_GROUP
|
||||
\fn int randb(double* x, int n, random_t* prnd)
|
||||
\brief
|
||||
Генерация бинарного униполярного [0, 1] псевдослучайного вектора
|
||||
|
||||
Функция генерирует униполярный псевдослучайный вектор,
|
||||
каждый элемент которого принимает равновероятное значение 0 или 1.
|
||||
|
||||
\param[in,out] x
|
||||
Указатель на вектор случайных бинарных чисел. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n\n
|
||||
|
||||
\param[in] n
|
||||
Размер вектора `x`. \n\n
|
||||
|
||||
\param[in] prnd
|
||||
Указатель на структуру `random_t` параметров датчиков
|
||||
псевдослучайных чисел. \n
|
||||
Структура должна быть предварительно заполнена функцией \ref random_init. \n
|
||||
Данный указатель может быть `NULL`, тогда будет использоваться
|
||||
встроенный датчик, определенный стандартом языка Си. Однако для серьезных нужд,
|
||||
например в криптографии, данный режим использовать не рекомендуется.
|
||||
Нет гарантии в качестве произведенной случайной последовательности если
|
||||
параметр `prnd` задан как `NULL`. \n\n
|
||||
|
||||
\return
|
||||
`RES_OK` --- вектор целых псевдослучайных чисел рассчитан успешно. \n
|
||||
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
|
||||
|
||||
Пример использования функции:
|
||||
|
||||
\include randb_test.c
|
||||
|
||||
Программа рассчитывает униполярный [0, 1] и биполярный [-1, 1] бинарные
|
||||
псевдослучайные векторы.
|
||||
|
||||
В результате выполнения программы можно увидеть график:
|
||||
\image html randb_test.png
|
||||
|
||||
\author
|
||||
Бахурин Сергей.
|
||||
www.dsplib.org
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
/*! ****************************************************************************
|
||||
\ingroup SPEC_MATH_RAND_GEN_GROUP
|
||||
\fn int randb2(double* x, int n, random_t* prnd)
|
||||
\brief
|
||||
Генерация бинарного биполярного [-1, 1] псевдослучайного вектора
|
||||
|
||||
Функция генерирует биполярный псевдослучайный вектор,
|
||||
каждый элемент которого принимает равновероятное значение -1 или 1.
|
||||
|
||||
\param[in,out] x
|
||||
Указатель на вектор случайных бинарных чисел. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n\n
|
||||
|
||||
\param[in] n
|
||||
Размер вектора `x`. \n\n
|
||||
|
||||
\param[in] prnd
|
||||
Указатель на структуру `random_t` параметров датчиков
|
||||
псевдослучайных чисел. \n
|
||||
Структура должна быть предварительно заполнена функцией \ref random_init. \n
|
||||
Данный указатель может быть `NULL`, тогда будет использоваться
|
||||
встроенный датчик, определенный стандартом языка Си. Однако для серьезных нужд,
|
||||
например в криптографии, данный режим использовать не рекомендуется.
|
||||
Нет гарантии в качестве произведенной случайной последовательности если
|
||||
параметр `prnd` задан как `NULL`. \n\n
|
||||
|
||||
\return
|
||||
`RES_OK` --- вектор целых псевдослучайных чисел рассчитан успешно. \n
|
||||
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
|
||||
|
||||
Пример использования функции:
|
||||
|
||||
\include randb_test.c
|
||||
|
||||
Программа рассчитывает униполярный [0, 1] и биполярный [-1, 1] бинарные
|
||||
псевдослучайные векторы.
|
||||
|
||||
В результате выполнения программы можно увидеть график:
|
||||
\image html randb_test.png
|
||||
|
||||
\author
|
||||
Бахурин Сергей.
|
||||
www.dsplib.org
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
/*! ****************************************************************************
|
||||
\ingroup SPEC_MATH_RAND_GEN_GROUP
|
||||
\fn int randi(int* x, int n, int start, int stop, random_t* prnd)
|
||||
\brief
|
||||
Генерация целочисленного вектора равномерно
|
||||
распределенных псевдослучайных чисел.
|
||||
|
||||
Функция генерирует псевдослучайный вектор целых чисел в диапазоне от `start`
|
||||
до `stop` включительно.
|
||||
|
||||
\param[in,out] x
|
||||
Указатель на вектор случайных чисел. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n\n
|
||||
|
||||
\param[in] n
|
||||
Размер вектора `x`. \n\n
|
||||
|
||||
\param[in] start
|
||||
Начало диапазона целых чисел. \n\n
|
||||
|
||||
\param[in] stop
|
||||
Конец диапазона целых чисел. \n\n
|
||||
|
||||
\param[in] prnd
|
||||
Указатель на структуру `random_t` параметров датчиков
|
||||
псевдослучайных чисел. \n
|
||||
Структура должна быть предварительно заполнена функцией \ref random_init. \n
|
||||
Данный указатель может быть `NULL`, тогда будет использоваться
|
||||
встроенный датчик, определенный стандартом языка Си. Однако для серьезных нужд,
|
||||
например в криптографии, данный режим использовать не рекомендуется.
|
||||
Нет гарантии в качестве произведенной случайной последовательности если
|
||||
параметр `prnd` задан как `NULL`. \n\n
|
||||
|
||||
\return
|
||||
`RES_OK` --- вектор целых псевдослучайных чисел рассчитан успешно. \n
|
||||
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
|
||||
|
||||
Пример использования функции:
|
||||
|
||||
\include randi_test.c
|
||||
|
||||
Программа рассчитывает целочисленный вектор
|
||||
псевдослучайных чисел в диапазоне [-4, 3].
|
||||
|
||||
В результате выполнения программы можно увидеть график:
|
||||
\image html randi_test.png
|
||||
|
||||
|
||||
\author
|
||||
Бахурин Сергей.
|
||||
www.dsplib.org
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*! ****************************************************************************
|
||||
\ingroup SPEC_MATH_RAND_GEN_GROUP
|
||||
\fn int randn(double* x, int n, double mu, double sigma, random_t* prnd)
|
||||
\brief
|
||||
Генерация вектора нормально распределенных псевдослучайных чисел.
|
||||
|
||||
Функция использует преобразование Бокса-Мюллера для приведения
|
||||
равномерно-распределенных псевдослучайных чисел к нормальному распределению
|
||||
с математическим ожиданием \f$\mu\f$ и средневадратическим
|
||||
отклонением \f$\sigma\f$.
|
||||
|
||||
\param[in,out] x
|
||||
Указатель на вектор случайных чисел. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n\n
|
||||
|
||||
\param[in] n
|
||||
Размер вектора случайных чисел. \n\n
|
||||
|
||||
\param[in] mu
|
||||
Математическое ожидание \f$\mu\f$. \n\n
|
||||
|
||||
|
||||
\param[in] sigma
|
||||
Cредневадратическое отклонение \f$\sigma\f$. \n
|
||||
Дисперсия сгенерированных чисел равна \f$\sigma^2\f$. \n\n
|
||||
|
||||
\param[in] prnd
|
||||
Указатель на структуру `random_t` параметров датчиков
|
||||
псевдослучайных чисел. \n
|
||||
Структура должна быть предварительно заполнена функцией \ref random_init. \n
|
||||
Данный указатель может быть `NULL`, тогда будет использоваться
|
||||
встроенный датчик, определенный стандартом языка Си. Однако для серьезных нужд,
|
||||
например в криптографии, данный режим использовать не рекомендуется.
|
||||
Нет гарантии в качестве произведенной случайной последовательности если
|
||||
параметр `prnd` задан как `NULL`. \n\n
|
||||
|
||||
\return
|
||||
`RES_OK` --- вектор нормально распределенных
|
||||
псевдослучайных чисел рассчитан успешно. \n
|
||||
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
|
||||
|
||||
Пример использования функции:
|
||||
|
||||
\include randn_test.c
|
||||
|
||||
Программа рассчитывает независимые векторы нормально распределенных
|
||||
псевдослучайных чисел, \f$\mu = 0\f$ и \f$\sigma=1\f$.
|
||||
|
||||
В результате выполнения программы можно увидеть график:
|
||||
\image html randn_test.png
|
||||
|
||||
|
||||
\author
|
||||
Бахурин Сергей.
|
||||
www.dsplib.org
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*! ****************************************************************************
|
||||
|
|
|
@ -97,6 +97,8 @@ int fir_linphase_lpf(int ord, double wp, int wintype,
|
|||
#define MRG32K3A_A13 810728.0
|
||||
#define MRG32K3A_A21 527612.0
|
||||
#define MRG32K3A_A23 1370589.0
|
||||
#define RAND_BUFSIZE 512
|
||||
|
||||
|
||||
int iir_ap(double rp, double rs, int ord, int type, double* b, double* a);
|
||||
|
||||
|
|
|
@ -222,7 +222,7 @@ int DSPL_API ratcompos(double* b, double* a, int n,
|
|||
}
|
||||
|
||||
k2 = (n*p)+1;
|
||||
k2s = k2*sizeof(double); /* alpha and beta size */
|
||||
k2s = k2*sizeof(double); /* alpha and beta size */
|
||||
nk2s = (n+1)*k2*sizeof(double); /* num, den, ndn and ndd size */
|
||||
|
||||
num = (double*)malloc(nk2s);
|
||||
|
@ -291,6 +291,7 @@ int DSPL_API ratcompos(double* b, double* a, int n,
|
|||
}
|
||||
|
||||
res = RES_OK;
|
||||
|
||||
exit_label:
|
||||
if(num)
|
||||
free(num);
|
||||
|
|
|
@ -222,7 +222,35 @@ int DSPL_API writetxt(double* x, double* y, int n, char* fn)
|
|||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Write a int arrays to the text file "fn"
|
||||
*******************************************************************************/
|
||||
int DSPL_API writetxt_int(int* x, int* y, int n, char* fn)
|
||||
{
|
||||
int k;
|
||||
FILE* pFile = NULL;
|
||||
if(!x)
|
||||
return ERROR_PTR;
|
||||
if(n < 1)
|
||||
return ERROR_SIZE;
|
||||
if(!fn)
|
||||
return ERROR_FNAME;
|
||||
|
||||
pFile = fopen(fn, "w+");
|
||||
if(pFile == NULL)
|
||||
return ERROR_FOPEN;
|
||||
|
||||
if(y)
|
||||
for(k = 0; k < n; k++)
|
||||
fprintf(pFile, "% -14d\t% -14d\n", x[k], y[k]);
|
||||
|
||||
else
|
||||
for(k = 0; k < n; k++)
|
||||
fprintf(pFile, "% -.14d\n", x[k]);
|
||||
|
||||
fclose(pFile);
|
||||
return RES_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -65,7 +65,59 @@ int DSPL_API random_init(random_t* prnd, int type, void* seed)
|
|||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
random generator of binary [0,1] signal
|
||||
*******************************************************************************/
|
||||
int DSPL_API randb(double* x, int n, random_t* prnd)
|
||||
{
|
||||
double z[RAND_BUFSIZE];
|
||||
int i, cnt, err;
|
||||
if(!x)
|
||||
return ERROR_PTR;
|
||||
if(n < 1)
|
||||
return ERROR_SIZE;
|
||||
cnt = 0;
|
||||
while(cnt < n)
|
||||
{
|
||||
i = cnt % RAND_BUFSIZE;
|
||||
if(!i)
|
||||
{
|
||||
err = randu(z, RAND_BUFSIZE, prnd);
|
||||
if(err != RES_OK)
|
||||
return err;
|
||||
}
|
||||
x[cnt] = z[i] > 0.5 ? 1.0 : 0.0;
|
||||
cnt++;
|
||||
}
|
||||
return RES_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
random generator of binary [-1, 1] signal
|
||||
*******************************************************************************/
|
||||
int DSPL_API randb2(double* x, int n, random_t* prnd)
|
||||
{
|
||||
double z[RAND_BUFSIZE];
|
||||
int i, cnt, err;
|
||||
if(!x)
|
||||
return ERROR_PTR;
|
||||
if(n < 1)
|
||||
return ERROR_SIZE;
|
||||
cnt = 0;
|
||||
while(cnt < n)
|
||||
{
|
||||
i = cnt % RAND_BUFSIZE;
|
||||
if(!i)
|
||||
{
|
||||
err = randu(z, RAND_BUFSIZE, prnd);
|
||||
if(err != RES_OK)
|
||||
return err;
|
||||
}
|
||||
x[cnt] = z[i] > 0.5 ? 1.0 : -1.0;
|
||||
cnt++;
|
||||
}
|
||||
return RES_OK;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
Uniform random generator mrg32k3a
|
||||
|
@ -122,6 +174,88 @@ int randu_mrg32k3a (double* u, int n, random_t* prnd)
|
|||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
random numbers generator of integers
|
||||
*******************************************************************************/
|
||||
int DSPL_API randi(int* x, int n, int start, int stop, random_t* prnd)
|
||||
{
|
||||
double z[RAND_BUFSIZE];
|
||||
double dx;
|
||||
int i, cnt, err;
|
||||
if(!x)
|
||||
return ERROR_PTR;
|
||||
if(n < 1)
|
||||
return ERROR_SIZE;
|
||||
|
||||
dx = (double)stop - (double)start;
|
||||
cnt = 0;
|
||||
while(cnt < n)
|
||||
{
|
||||
i = cnt % RAND_BUFSIZE;
|
||||
if(!i)
|
||||
{
|
||||
err = randu(z, RAND_BUFSIZE, prnd);
|
||||
if(err != RES_OK)
|
||||
return err;
|
||||
}
|
||||
x[cnt] = start + (int)round(z[i] * dx);
|
||||
cnt++;
|
||||
}
|
||||
return RES_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Gaussian random numbers generator
|
||||
*******************************************************************************/
|
||||
int DSPL_API randn(double* x, int n, double mu, double sigma, random_t* prnd)
|
||||
{
|
||||
int k, m;
|
||||
double x1[RAND_BUFSIZE], x2[RAND_BUFSIZE];
|
||||
int res;
|
||||
if(!x)
|
||||
return ERROR_PTR;
|
||||
|
||||
if(n<1)
|
||||
return ERROR_SIZE;
|
||||
|
||||
if(sigma < 0.0)
|
||||
return ERROR_RAND_SIGMA;
|
||||
|
||||
k=0;
|
||||
while(k < n)
|
||||
{
|
||||
if((res = randu(x1, RAND_BUFSIZE, prnd)) != RES_OK)
|
||||
goto exit_label;
|
||||
if((res = randu(x2, RAND_BUFSIZE, prnd)) != RES_OK)
|
||||
goto exit_label;
|
||||
m = 0;
|
||||
while(k < n && m < RAND_BUFSIZE)
|
||||
{
|
||||
if(x1[m] != 0.0)
|
||||
{
|
||||
x[k] = sqrt(-2.0*log(x1[m]))*cos(M_2PI*x2[m])*sigma + mu;
|
||||
k++;
|
||||
m++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
res = RES_OK;
|
||||
exit_label:
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Uniform random numbers generator
|
||||
*******************************************************************************/
|
||||
|
@ -161,47 +295,3 @@ int DSPL_API randu(double* x, int n, random_t* prnd)
|
|||
return RES_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Gaussian random numbers generator
|
||||
*******************************************************************************/
|
||||
int DSPL_API randn(double* x, int n, double mu, double sigma, random_t* prnd)
|
||||
{
|
||||
int k, m;
|
||||
double x1[512], x2[512];
|
||||
int res;
|
||||
if(!x)
|
||||
return ERROR_PTR;
|
||||
|
||||
if(n<1)
|
||||
return ERROR_SIZE;
|
||||
|
||||
if(sigma < 0.0)
|
||||
return ERROR_RAND_SIGMA;
|
||||
|
||||
k=0;
|
||||
while(k < n)
|
||||
{
|
||||
if((res = randu(x1, 512, prnd)) != RES_OK)
|
||||
goto exit_label;
|
||||
if((res = randu(x2, 512, prnd)) != RES_OK)
|
||||
goto exit_label;
|
||||
m = 0;
|
||||
while(k < n && m < 512)
|
||||
{
|
||||
if(x1[m] != 0.0)
|
||||
{
|
||||
x[k] = sqrt(-2.0*log(x1[m]))*cos(M_2PI*x2[m])*sigma + mu;
|
||||
k++;
|
||||
m++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
res = RES_OK;
|
||||
exit_label:
|
||||
return res;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "dspl.h"
|
||||
|
||||
/* Порядок фильтра */
|
||||
#define ORD 4
|
||||
|
||||
/* размер векторов частотной характеристики фильтра */
|
||||
#define N 1000
|
||||
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
void* hdspl; /* DSPL handle */
|
||||
void* hplot; /* GNUPLOT handle */
|
||||
hdspl = dspl_load(); /* Load DSPL function */
|
||||
|
||||
double a[ORD+1]; /* Коэффициенты числителя H(s) */
|
||||
double b[ORD+1]; /* Коэффициенты знаменателя H(s) */
|
||||
double Rp = 1.0; /* Неравномерность АЧХ (к-т передачи на частоте 1 рад/c) */
|
||||
double Rs = 60.0;/* Подавление в полосе заграждения (дБ) */
|
||||
double w[N]; /* Циклическая частота рад/c */
|
||||
double mag[N]; /* АЧХ фильтра */
|
||||
double phi[N]; /* ФЧХ фильтра */
|
||||
double tau[N]; /* ГВЗ фильтра */
|
||||
int k;
|
||||
|
||||
/* рассчитываем нормированный ФНЧ Чебышева 1 рода */
|
||||
int res = ellip_ap(Rp, Rs, ORD, b, a);
|
||||
if(res != RES_OK)
|
||||
printf("error code = 0x%8x\n", res);
|
||||
|
||||
/* печать коэффициентов фильтра */
|
||||
for(k = 0; k < ORD+1; k++)
|
||||
printf("b[%2d] = %9.3f a[%2d] = %9.3f\n", k, b[k], k, a[k]);
|
||||
|
||||
/* вектор частоты в логарифмической шакале от 0.01 до 100 рад/c */
|
||||
logspace(-2.0, 2.0, N , DSPL_SYMMETRIC, w);
|
||||
|
||||
/* частотные характеристика фильтра */
|
||||
filter_freq_resp(b, a, ORD, w, N,
|
||||
DSPL_FLAG_LOGMAG|DSPL_FLAG_UNWRAP | DSPL_FLAG_ANALOG,
|
||||
mag, phi, tau);
|
||||
|
||||
/* Сохранить характеристики для построения графиков */
|
||||
writetxt(w, mag, N, "dat/ellip_ap_test_mag.txt");
|
||||
writetxt(w, phi, N, "dat/ellip_ap_test_phi.txt");
|
||||
writetxt(w, tau, N, "dat/ellip_ap_test_tau.txt");
|
||||
|
||||
/* plotting by GNUPLOT */
|
||||
gnuplot_create(argc, argv, 920, 260, "img/ellip_ap_test.png", &hplot);
|
||||
gnuplot_cmd(hplot, "set logscale x");
|
||||
gnuplot_cmd(hplot, "unset key");
|
||||
gnuplot_cmd(hplot, "set grid");
|
||||
gnuplot_cmd(hplot, "set xlabel 'frequency, rad/s'");
|
||||
gnuplot_cmd(hplot, "set multiplot layout 1,3 rowsfirst");
|
||||
gnuplot_cmd(hplot, "set ylabel 'Magnitude, dB'");
|
||||
gnuplot_cmd(hplot, "set yrange [-100:5]");
|
||||
gnuplot_cmd(hplot, "plot 'dat/ellip_ap_test_mag.txt' with lines");
|
||||
gnuplot_cmd(hplot, "set ylabel 'Phase response, rad'");
|
||||
gnuplot_cmd(hplot, "unset yrange");
|
||||
gnuplot_cmd(hplot, "plot 'dat/ellip_ap_test_phi.txt' with lines");
|
||||
gnuplot_cmd(hplot, "set ylabel 'Groupdelay, sec'");
|
||||
gnuplot_cmd(hplot, "unset yrange");
|
||||
gnuplot_cmd(hplot, "plot 'dat/ellip_ap_test_tau.txt' with lines");
|
||||
gnuplot_cmd(hplot, "unset multiplot");
|
||||
gnuplot_close(hplot);
|
||||
|
||||
/* free dspl handle */
|
||||
dspl_free(hdspl);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,178 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "dspl.h"
|
||||
|
||||
|
||||
/*filter order */
|
||||
#define ORD 64
|
||||
|
||||
#define W0 0.3
|
||||
#define W1 0.7
|
||||
|
||||
/* Frequency response vector size */
|
||||
#define N 1024
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* function calculates filter frequency response and save magnitude to
|
||||
* the text file.
|
||||
* params: b - pointer to the transfer fuction H(z) numerator vector
|
||||
* a - pointer to the transfer fuction H(z) denominator vector
|
||||
* ord - filter order
|
||||
* n - number of magnitude vector size
|
||||
* fn - file name
|
||||
******************************************************************************/
|
||||
void freq_resp_write2txt(double* b, int ord, int n, char* fn)
|
||||
{
|
||||
double *w = NULL, *mag = NULL;
|
||||
int k;
|
||||
|
||||
w = (double*)malloc(n*sizeof(double));
|
||||
mag = (double*)malloc(n*sizeof(double));
|
||||
|
||||
/* Normalized frequency from 0 to pi */
|
||||
linspace(0, M_PI, n , DSPL_PERIODIC, w);
|
||||
|
||||
/* Magnitude (dB) calculation */
|
||||
filter_freq_resp(b, NULL, ord, w, n, DSPL_FLAG_LOGMAG, mag, NULL, NULL);
|
||||
|
||||
/* Frequency normaliztion from 0 to 1 */
|
||||
for(k = 0; k < N; k++)
|
||||
w[k] /= M_PI;
|
||||
|
||||
/* Save magnitude to the txt file */
|
||||
writetxt(w, mag, n, fn);
|
||||
|
||||
free(w);
|
||||
free(mag);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* Main program
|
||||
******************************************************************************/
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
void* hdspl; /* DSPL handle */
|
||||
void* hplot; /* GNUPLOT handle */
|
||||
hdspl = dspl_load(); /* Load DSPL functions */
|
||||
|
||||
/* FIR filter coeff. vectors */
|
||||
double h[ORD+1];
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
fir_linphase(ORD, W0, W1, DSPL_FILTER_LPF, DSPL_WIN_RECT, 0, h);
|
||||
freq_resp_write2txt(h, ORD, N, "dat/fir_lpf_rect.txt");
|
||||
|
||||
fir_linphase(ORD, W0, W1, DSPL_FILTER_LPF, DSPL_WIN_HAMMING, 0, h);
|
||||
freq_resp_write2txt(h, ORD, N, "dat/fir_lpf_hamming.txt");
|
||||
|
||||
fir_linphase(ORD, W0, W1, DSPL_FILTER_LPF, DSPL_WIN_BLACKMAN, 0, h);
|
||||
freq_resp_write2txt(h, ORD, N, "dat/fir_lpf_blackman.txt");
|
||||
|
||||
fir_linphase(ORD, W0, W1, DSPL_FILTER_LPF, DSPL_WIN_BLACKMAN_HARRIS, 0, h);
|
||||
freq_resp_write2txt(h, ORD, N, "dat/fir_lpf_blackman_harris.txt");
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
fir_linphase(ORD, W0, W1, DSPL_FILTER_HPF, DSPL_WIN_RECT, 0, h);
|
||||
freq_resp_write2txt(h, ORD, N, "dat/fir_hpf_rect.txt");
|
||||
|
||||
fir_linphase(ORD, W0, W1, DSPL_FILTER_HPF, DSPL_WIN_HAMMING, 0, h);
|
||||
freq_resp_write2txt(h, ORD, N, "dat/fir_hpf_hamming.txt");
|
||||
|
||||
fir_linphase(ORD, W0, W1, DSPL_FILTER_HPF, DSPL_WIN_BLACKMAN, 0, h);
|
||||
freq_resp_write2txt(h, ORD, N, "dat/fir_hpf_blackman.txt");
|
||||
|
||||
fir_linphase(ORD, W0, W1, DSPL_FILTER_HPF, DSPL_WIN_BLACKMAN_HARRIS, 0, h);
|
||||
freq_resp_write2txt(h, ORD, N, "dat/fir_hpf_blackman_harris.txt");
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
fir_linphase(ORD, W0, W1, DSPL_FILTER_BPASS, DSPL_WIN_RECT, 0, h);
|
||||
freq_resp_write2txt(h, ORD, N, "dat/fir_bpass_rect.txt");
|
||||
|
||||
fir_linphase(ORD, W0, W1, DSPL_FILTER_BPASS, DSPL_WIN_HAMMING, 0, h);
|
||||
freq_resp_write2txt(h, ORD, N, "dat/fir_bpass_hamming.txt");
|
||||
|
||||
fir_linphase(ORD, W0, W1, DSPL_FILTER_BPASS, DSPL_WIN_BLACKMAN, 0, h);
|
||||
freq_resp_write2txt(h, ORD, N, "dat/fir_bpass_blackman.txt");
|
||||
|
||||
fir_linphase(ORD, W0, W1, DSPL_FILTER_BPASS, DSPL_WIN_BLACKMAN_HARRIS, 0, h);
|
||||
freq_resp_write2txt(h, ORD, N, "dat/fir_bpass_blackman_harris.txt");
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
fir_linphase(ORD, W0, W1, DSPL_FILTER_BSTOP, DSPL_WIN_RECT, 0, h);
|
||||
freq_resp_write2txt(h, ORD, N, "dat/fir_bstop_rect.txt");
|
||||
|
||||
fir_linphase(ORD, W0, W1, DSPL_FILTER_BSTOP, DSPL_WIN_HAMMING, 0, h);
|
||||
freq_resp_write2txt(h, ORD, N, "dat/fir_bstop_hamming.txt");
|
||||
|
||||
fir_linphase(ORD, W0, W1, DSPL_FILTER_BSTOP, DSPL_WIN_BLACKMAN, 0, h);
|
||||
freq_resp_write2txt(h, ORD, N, "dat/fir_bstop_blackman.txt");
|
||||
|
||||
fir_linphase(ORD, W0, W1, DSPL_FILTER_BSTOP, DSPL_WIN_BLACKMAN_HARRIS, 0, h);
|
||||
freq_resp_write2txt(h, ORD, N, "dat/fir_bstop_blackman_harris.txt");
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
/* plotting by GNUPLOT */
|
||||
gnuplot_create(argc, argv, 920, 840, "img/fir_linphase_test.png", &hplot);
|
||||
gnuplot_cmd(hplot, "unset key");
|
||||
gnuplot_cmd(hplot, "set grid");
|
||||
gnuplot_cmd(hplot, "unset xlabel");
|
||||
|
||||
gnuplot_cmd(hplot, "set yrange [-130:5]");
|
||||
gnuplot_cmd(hplot, "set xtics 0,1");
|
||||
gnuplot_cmd(hplot, "set xtics add ('0.3' 0.3)");
|
||||
gnuplot_cmd(hplot, "set xtics add ('0.7' 0.7)");
|
||||
gnuplot_cmd(hplot, "set xtics add ('1' 1)");
|
||||
gnuplot_cmd(hplot, "set multiplot layout 4,4 rowsfirst");
|
||||
|
||||
gnuplot_cmd(hplot, "set ylabel 'Magnitude, dB'");
|
||||
gnuplot_cmd(hplot, "set title 'Rect win'");
|
||||
gnuplot_cmd(hplot, "plot 'dat/fir_lpf_rect.txt' with lines");
|
||||
gnuplot_cmd(hplot, "unset ylabel");
|
||||
gnuplot_cmd(hplot, "set title 'Hamming win'");
|
||||
gnuplot_cmd(hplot, "plot 'dat/fir_lpf_hamming.txt' with lines");
|
||||
gnuplot_cmd(hplot, "set title 'Blackman win'");
|
||||
gnuplot_cmd(hplot, "plot 'dat/fir_lpf_blackman.txt' with lines");
|
||||
gnuplot_cmd(hplot, "set title 'Blackman-Harris win'");
|
||||
gnuplot_cmd(hplot, "plot 'dat/fir_lpf_blackman_harris.txt' with lines");
|
||||
gnuplot_cmd(hplot, "unset title");
|
||||
|
||||
gnuplot_cmd(hplot, "set ylabel 'Magnitude, dB'");
|
||||
gnuplot_cmd(hplot, "plot 'dat/fir_hpf_rect.txt' with lines");
|
||||
gnuplot_cmd(hplot, "unset ylabel");
|
||||
gnuplot_cmd(hplot, "plot 'dat/fir_hpf_hamming.txt' with lines");
|
||||
gnuplot_cmd(hplot, "plot 'dat/fir_hpf_blackman.txt' with lines");
|
||||
gnuplot_cmd(hplot, "plot 'dat/fir_hpf_blackman_harris.txt' with lines");
|
||||
|
||||
gnuplot_cmd(hplot, "set ylabel 'Magnitude, dB'");
|
||||
gnuplot_cmd(hplot, "plot 'dat/fir_bpass_rect.txt' with lines");
|
||||
gnuplot_cmd(hplot, "unset ylabel");
|
||||
gnuplot_cmd(hplot, "plot 'dat/fir_bpass_hamming.txt' with lines");
|
||||
gnuplot_cmd(hplot, "plot 'dat/fir_bpass_blackman.txt' with lines");
|
||||
gnuplot_cmd(hplot, "plot 'dat/fir_bpass_blackman_harris.txt' with lines");
|
||||
|
||||
gnuplot_cmd(hplot, "set ylabel 'Magnitude, dB'");
|
||||
gnuplot_cmd(hplot, "set xlabel 'normalized frequency'");
|
||||
gnuplot_cmd(hplot, "plot 'dat/fir_bstop_rect.txt' with lines");
|
||||
gnuplot_cmd(hplot, "unset ylabel");
|
||||
gnuplot_cmd(hplot, "plot 'dat/fir_bstop_hamming.txt' with lines");
|
||||
gnuplot_cmd(hplot, "plot 'dat/fir_bstop_blackman.txt' with lines");
|
||||
gnuplot_cmd(hplot, "plot 'dat/fir_bstop_blackman_harris.txt' with lines");
|
||||
|
||||
gnuplot_cmd(hplot, "unset multiplot");
|
||||
gnuplot_close(hplot);
|
||||
|
||||
/* free dspl handle */
|
||||
dspl_free(hdspl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "dspl.h"
|
||||
|
||||
#define N 100
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
void* hdspl; /* DSPL handle */
|
||||
void* hplot; /* GNUPLOT handles */
|
||||
random_t rnd = {0}; /* random structure */
|
||||
hdspl = dspl_load(); /* Load DSPL function */
|
||||
|
||||
double x[N];
|
||||
int err;
|
||||
|
||||
err = random_init(&rnd, RAND_TYPE_MRG32K3A, NULL);
|
||||
if(err != RES_OK)
|
||||
goto exit_label;
|
||||
|
||||
err = randb(x, N, &rnd);
|
||||
if(err != RES_OK)
|
||||
goto exit_label;
|
||||
|
||||
writetxt(x, NULL, N, "dat/randb_mrg32k3a.txt");
|
||||
|
||||
err = randb2(x, N, &rnd);
|
||||
if(err != RES_OK)
|
||||
goto exit_label;
|
||||
|
||||
writetxt(x, NULL, N, "dat/randb2_mrg32k3a.txt");
|
||||
|
||||
/***************************************************************************/
|
||||
/* plotting by GNUPLOT */
|
||||
/***************************************************************************/
|
||||
/* Create window plot */
|
||||
err = gnuplot_create(argc, argv, 820, 320, "img/randb_test.png", &hplot);
|
||||
if(err != RES_OK)
|
||||
goto exit_label;
|
||||
|
||||
gnuplot_cmd(hplot, "set xlabel 'x'");
|
||||
gnuplot_cmd(hplot, "set ylabel 'y'");
|
||||
gnuplot_cmd(hplot, "unset key");
|
||||
gnuplot_cmd(hplot, "set yrange[-1.2:1.2]");
|
||||
gnuplot_cmd(hplot, "set title 'randb, randb2'");
|
||||
gnuplot_cmd(hplot, "plot 'dat/randb_mrg32k3a.txt' with lines, \\");
|
||||
gnuplot_cmd(hplot, " 'dat/randb2_mrg32k3a.txt' with lines");
|
||||
|
||||
exit_label:
|
||||
printf("Error code: %x\n", err);
|
||||
if(hplot)
|
||||
gnuplot_close(hplot);
|
||||
|
||||
/* free dspl handle */
|
||||
dspl_free(hdspl);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "dspl.h"
|
||||
|
||||
#define N 1000
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
void* hdspl; /* DSPL handle */
|
||||
void* hplot; /* GNUPLOT handles */
|
||||
random_t rnd = {0}; /* random structure */
|
||||
hdspl = dspl_load(); /* Load DSPL function */
|
||||
|
||||
int x[N];
|
||||
int err;
|
||||
|
||||
err = random_init(&rnd, RAND_TYPE_MRG32K3A, NULL);
|
||||
if(err != RES_OK)
|
||||
goto exit_label;
|
||||
|
||||
err = randi(x, N, -4, 3, &rnd);
|
||||
if(err != RES_OK)
|
||||
goto exit_label;
|
||||
|
||||
/* Save to file */
|
||||
err = writetxt_int(x, NULL, N, "dat/randi_mrg32k3a.txt");
|
||||
if(err != RES_OK)
|
||||
goto exit_label;
|
||||
|
||||
/***************************************************************************/
|
||||
/* plotting by GNUPLOT */
|
||||
/***************************************************************************/
|
||||
/* Create window plot */
|
||||
err = gnuplot_create(argc, argv, 820, 320, "img/randi_test.png", &hplot);
|
||||
if(err != RES_OK)
|
||||
goto exit_label;
|
||||
|
||||
gnuplot_cmd(hplot, "set xlabel 'n'");
|
||||
gnuplot_cmd(hplot, "set ylabel 'x(n)'");
|
||||
gnuplot_cmd(hplot, "unset key");
|
||||
gnuplot_cmd(hplot, "set yrange[-5:4]");
|
||||
gnuplot_cmd(hplot, "set title 'randi example'");
|
||||
gnuplot_cmd(hplot, "plot 'dat/randi_mrg32k3a.txt' with impulses");
|
||||
|
||||
exit_label:
|
||||
printf("Error code = 0x%.8x\n", err);
|
||||
|
||||
if(hplot)
|
||||
gnuplot_close(hplot);
|
||||
|
||||
/* free dspl handle */
|
||||
dspl_free(hdspl);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "dspl.h"
|
||||
|
||||
#define N 50000
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
void* hdspl; /* DSPL handle */
|
||||
void* hplot; /* GNUPLOT handles */
|
||||
random_t rnd = {0}; /* random structure */
|
||||
hdspl = dspl_load(); /* Load DSPL function */
|
||||
|
||||
double *x = NULL;
|
||||
double *y = NULL;
|
||||
int err;
|
||||
|
||||
x = (double*) malloc(N * sizeof(double));
|
||||
y = (double*) malloc(N * sizeof(double));
|
||||
|
||||
if(!x || !y)
|
||||
{
|
||||
err = ERROR_PTR;
|
||||
printf("malloc error!\n");
|
||||
goto exit_label;
|
||||
}
|
||||
|
||||
|
||||
err = random_init(&rnd, RAND_TYPE_MRG32K3A, NULL);
|
||||
if(err != RES_OK)
|
||||
goto exit_label;
|
||||
|
||||
err = randn(x, N, 0.0, 1.0, &rnd);
|
||||
if(err != RES_OK)
|
||||
goto exit_label;
|
||||
|
||||
err = randn(y, N, 0.0, 1.0, &rnd);
|
||||
if(err != RES_OK)
|
||||
goto exit_label;
|
||||
|
||||
/* Save to files "dat/randu_mrg32k3a.txt" */
|
||||
writetxt(x, y, N, "dat/randn_mrg32k3a.txt");
|
||||
|
||||
/***************************************************************************/
|
||||
/* plotting by GNUPLOT */
|
||||
/***************************************************************************/
|
||||
/* Create window plot */
|
||||
err = gnuplot_create(argc, argv, 420, 420, "img/randn_test.png", &hplot);
|
||||
if(err != RES_OK)
|
||||
goto exit_label;
|
||||
|
||||
gnuplot_cmd(hplot, "set xlabel 'x'");
|
||||
gnuplot_cmd(hplot, "set ylabel 'y'");
|
||||
gnuplot_cmd(hplot, "unset key");
|
||||
gnuplot_cmd(hplot, "set xrange[-3:3]");
|
||||
gnuplot_cmd(hplot, "set yrange[-3:3]");
|
||||
gnuplot_cmd(hplot, "set title 'MRG32K3A'");
|
||||
gnuplot_cmd(hplot, "plot 'dat/randn_mrg32k3a.txt' with points pointtype 0");
|
||||
|
||||
|
||||
exit_label:
|
||||
if(x)
|
||||
free(x);
|
||||
if(y)
|
||||
free(y);
|
||||
if(hplot)
|
||||
gnuplot_close(hplot);
|
||||
|
||||
/* free dspl handle */
|
||||
dspl_free(hdspl);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -143,6 +143,9 @@ p_poly_z2a_cmplx poly_z2a_cmplx ;
|
|||
p_polyval polyval ;
|
||||
p_polyval_cmplx polyval_cmplx ;
|
||||
|
||||
p_randb randb ;
|
||||
p_randb2 randb2 ;
|
||||
p_randi randi ;
|
||||
p_randn randn ;
|
||||
p_random_init random_init ;
|
||||
p_randu randu ;
|
||||
|
@ -173,6 +176,7 @@ p_writetxt_3d writetxt_3d ;
|
|||
p_writetxt_3dline writetxt_3dline ;
|
||||
p_writetxt_cmplx_im writetxt_cmplx_im ;
|
||||
p_writetxt_cmplx_re writetxt_cmplx_re ;
|
||||
p_writetxt_int writetxt_int ;
|
||||
|
||||
|
||||
|
||||
|
@ -338,6 +342,9 @@ void* dspl_load()
|
|||
LOAD_FUNC(polyval);
|
||||
LOAD_FUNC(polyval_cmplx);
|
||||
|
||||
LOAD_FUNC(randi);
|
||||
LOAD_FUNC(randb);
|
||||
LOAD_FUNC(randb2);
|
||||
LOAD_FUNC(randn);
|
||||
LOAD_FUNC(random_init);
|
||||
LOAD_FUNC(randu);
|
||||
|
@ -368,7 +375,7 @@ void* dspl_load()
|
|||
LOAD_FUNC(writetxt_3dline);
|
||||
LOAD_FUNC(writetxt_cmplx_im);
|
||||
LOAD_FUNC(writetxt_cmplx_re);
|
||||
|
||||
LOAD_FUNC(writetxt_int);
|
||||
|
||||
#ifdef WIN_OS
|
||||
return (void*)handle;
|
||||
|
|
|
@ -261,17 +261,19 @@ typedef struct
|
|||
#endif
|
||||
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
DECLARE_FUNC(int, acos_cmplx, complex_t*
|
||||
COMMA int
|
||||
COMMA complex_t*);
|
||||
/*----------------------------------------------------------------------------*/DECLARE_FUNC(int, array_scale_lin, double* x
|
||||
/*----------------------------------------------------------------------------*/
|
||||
DECLARE_FUNC(int, array_scale_lin, double* x
|
||||
COMMA int n
|
||||
COMMA double xmin
|
||||
COMMA double xmax
|
||||
COMMA double dx
|
||||
COMMA double xmin
|
||||
COMMA double xmax
|
||||
COMMA double dx
|
||||
COMMA double h
|
||||
COMMA double* y);
|
||||
COMMA double* y);
|
||||
/*----------------------------------------------------------------------------*/
|
||||
DECLARE_FUNC(int, asin_cmplx, complex_t*
|
||||
COMMA int
|
||||
|
@ -814,6 +816,20 @@ DECLARE_FUNC(int, polyval_cmplx, complex_t*
|
|||
COMMA int
|
||||
COMMA complex_t*);
|
||||
/*----------------------------------------------------------------------------*/
|
||||
DECLARE_FUNC(int, randb, double* x
|
||||
COMMA int n
|
||||
COMMA random_t* prnd);
|
||||
/*----------------------------------------------------------------------------*/
|
||||
DECLARE_FUNC(int, randb2, double* x
|
||||
COMMA int n
|
||||
COMMA random_t* prnd);
|
||||
/*----------------------------------------------------------------------------*/
|
||||
DECLARE_FUNC(int, randi, int* x
|
||||
COMMA int n
|
||||
COMMA int start
|
||||
COMMA int stop
|
||||
COMMA random_t* prnd);
|
||||
/*----------------------------------------------------------------------------*/
|
||||
DECLARE_FUNC(int, randn, double*
|
||||
COMMA int
|
||||
COMMA double
|
||||
|
@ -948,6 +964,12 @@ DECLARE_FUNC(int, writetxt_cmplx_re, double*
|
|||
COMMA int
|
||||
COMMA char*);
|
||||
/*----------------------------------------------------------------------------*/
|
||||
DECLARE_FUNC(int, writetxt_int, int*
|
||||
COMMA int*
|
||||
COMMA int
|
||||
COMMA char*);
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue