fun2.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. //
  2. // File: false_speed.cpp
  3. //
  4. // MATLAB Coder version : 5.2
  5. // C/C++ source code generated on : 02-Mar-2023 09:38:59
  6. //
  7. // Include Files
  8. #include "fun2.h"
  9. #include "colon.h"
  10. #include "rt_nonfinite.h"
  11. #include "coder_array.h"
  12. #include <cmath>
  13. #include <iostream>
  14. using namespace std;
  15. // Function Definitions
  16. //
  17. // Arguments : double fd
  18. // double fo
  19. // double ts
  20. // double tau
  21. // double Tr
  22. // double k
  23. // double t_r
  24. // double V
  25. // double N
  26. // coder::array<double, 2U> &S
  27. // Return Type : void
  28. //
  29. void false_speed(double, double fo, double ts, double tau, double Tr, double k,
  30. double t_r, double V, double N, coder::array<double, 2U> &S)
  31. {
  32. coder::array<double, 2U> b_b;
  33. coder::array<signed char, 2U> Signal_Radar;
  34. coder::array<signed char, 2U> rect;
  35. double a;
  36. double b;
  37. double b_a;
  38. int ncols;
  39. int ntilecols;
  40. // fo = 1e6;
  41. // ts = 1 / 2e7;
  42. // tau = 3e-6;
  43. // Tr = 5e-4;
  44. // k = 5e6 / 30e-6;
  45. // t_r = 60e3 / 3e8;
  46. // V = 600;
  47. // N = 1;
  48. b = Tr - ts;
  49. if (std::isnan(ts) || std::isnan(b)) {
  50. S.set_size(1, 1);
  51. S[0] = rtNaN;
  52. } else if ((ts == 0.0) || ((0.0 < b) && (ts < 0.0)) ||
  53. ((b < 0.0) && (ts > 0.0))) {
  54. S.set_size(1, 0);
  55. } else if (std::isinf(b) && (std::isinf(ts) || (0.0 == b))) {
  56. S.set_size(1, 1);
  57. S[0] = rtNaN;
  58. } else if (std::isinf(ts)) {
  59. S.set_size(1, 1);
  60. S[0] = 0.0;
  61. } else if (std::floor(ts) == ts) {
  62. ncols = static_cast<int>(std::floor(b / ts));
  63. S.set_size(1, ncols + 1);
  64. for (ntilecols = 0; ntilecols <= ncols; ntilecols++) {
  65. S[ntilecols] = ts * static_cast<double>(ntilecols);
  66. }
  67. } else {
  68. coder::eml_float_colon(ts, b, S);
  69. }
  70. // 以ts为间隔产生Tr/ts个抽样
  71. rect.set_size(1, S.size(1));
  72. ncols = S.size(1);
  73. for (ntilecols = 0; ntilecols < ncols; ntilecols++) {
  74. rect[ntilecols] = 0;
  75. }
  76. ntilecols = S.size(1);
  77. for (ncols = 0; ncols < ntilecols; ncols++) {
  78. b = S[ncols];
  79. if ((b >= t_r) && (b <= tau + t_r)) {
  80. rect[ncols] = 1;
  81. }
  82. }
  83. b = N * Tr - ts;
  84. if (std::isnan(ts) || std::isnan(b)) {
  85. S.set_size(1, 1);
  86. S[0] = rtNaN;
  87. } else if ((ts == 0.0) || ((0.0 < b) && (ts < 0.0)) ||
  88. ((b < 0.0) && (ts > 0.0))) {
  89. S.set_size(S.size(0), 0);
  90. } else if (std::isinf(b) && (std::isinf(ts) || (0.0 == b))) {
  91. S.set_size(1, 1);
  92. S[0] = rtNaN;
  93. } else if (std::isinf(ts)) {
  94. S.set_size(1, 1);
  95. S[0] = 0.0;
  96. } else if (std::floor(ts) == ts) {
  97. ncols = static_cast<int>(std::floor(b / ts));
  98. S.set_size(1, ncols + 1);
  99. for (ntilecols = 0; ntilecols <= ncols; ntilecols++) {
  100. S[ntilecols] = ts * static_cast<double>(ntilecols);
  101. }
  102. } else {
  103. coder::eml_float_colon(ts, b, S);
  104. }
  105. // 以ts为间隔产生N个脉冲信号的抽样间隔
  106. Signal_Radar.set_size(1, rect.size(1) * static_cast<int>(N));
  107. ncols = rect.size(1);
  108. ntilecols = static_cast<int>(N);
  109. for (int jtilecol{0}; jtilecol < ntilecols; jtilecol++) {
  110. int ibtile;
  111. ibtile = jtilecol * ncols;
  112. for (int jcol{0}; jcol < ncols; jcol++) {
  113. Signal_Radar[ibtile + jcol] = rect[jcol];
  114. }
  115. }
  116. // 目标回波信号,重复N个脉冲串
  117. a = 6.2831853071795862 * (fo + 2.0 * V * fo / 3.0E+8);
  118. S.set_size(1, S.size(1));
  119. ncols = S.size(1) - 1;
  120. for (ntilecols = 0; ntilecols <= ncols; ntilecols++) {
  121. S[ntilecols] = S[ntilecols] - t_r;
  122. }
  123. b_a = 3.1415926535897931 * k;
  124. b_b.set_size(1, S.size(1));
  125. ncols = S.size(1);
  126. for (ntilecols = 0; ntilecols < ncols; ntilecols++) {
  127. b = S[ntilecols];
  128. b_b[ntilecols] = b * b;
  129. }
  130. S.set_size(1, S.size(1));
  131. ncols = S.size(1) - 1;
  132. for (ntilecols = 0; ntilecols <= ncols; ntilecols++) {
  133. S[ntilecols] = a * S[ntilecols] + b_a * b_b[ntilecols];
  134. }
  135. ncols = S.size(1);
  136. for (ntilecols = 0; ntilecols < ncols; ntilecols++) {
  137. S[ntilecols] = std::cos(S[ntilecols]);
  138. }
  139. S.set_size(1, Signal_Radar.size(1));
  140. ncols = Signal_Radar.size(1) - 1;
  141. for (ntilecols = 0; ntilecols <= ncols; ntilecols++) {
  142. S[ntilecols] = static_cast<double>(Signal_Radar[ntilecols]) * S[ntilecols];
  143. // printf("%f ", S[ntilecols]);
  144. }
  145. }
  146. //int main()
  147. //{
  148. //
  149. // double fd = 4;
  150. // double fo = 1e6;
  151. // double ts = 1e-7;
  152. // double tau = 30e-6;
  153. // double Tr = 5e-4;
  154. // double k = 5e6/30e-6;
  155. // double t_r = 20e-5;
  156. // double V = 600;
  157. // double N = 1;
  158. // coder::array<double, 2U> S;
  159. //// coder::array<double, 2U> S_output;
  160. //
  161. // false_speed(fd, fo, ts, tau, Tr, k, t_r, V, N, S);
  162. //
  163. // // 输出结果
  164. // for (int i = 0; i < S.size(1); i++) {
  165. // std::cout << S[i] << " ";
  166. // }
  167. // std::cout << std::endl;
  168. // return 0;
  169. //}
  170. //