SHOW:
|
|
- or go back to the newest paste.
1 | - | /****************************************************************************** |
1 | + | |
2 | #include <math.h> | |
3 | - | Задание: |
3 | + | |
4 | - | реализовать класс С++, моделирующий ФМ сигнал вида |
4 | + | |
5 | - | s(t) = a*cos(w*t + b*f(t)), |
5 | + | |
6 | - | где f(t) - модулирующий сигнал, |f(t)|<=1 |
6 | + | |
7 | - | Коэффициенты a, b, w и функцию f(t) задавать в момент инициализации сигнала |
7 | + | return sin(x); |
8 | - | Генерировать массив N (задать с клавиатуры) сигналов одинаковой модулирующей частоты w. |
8 | + | |
9 | - | Для каждого сигнала получить энергию на длительности 10 с. |
9 | + | |
10 | class FM_signal { | |
11 | - | *******************************************************************************/ |
11 | + | |
12 | double a = 0, w = 0, b = 0; | |
13 | double (*fun) (double); | |
14 | public: | |
15 | FM_signal(double, double, double, double (*f) (double)); | |
16 | double get(double); | |
17 | double get_energy(double, double); | |
18 | - | return x / 100; |
18 | + | |
19 | ||
20 | int main() | |
21 | { | |
22 | // Получаем данные | |
23 | int n; | |
24 | - | double (*f) (double); |
24 | + | |
25 | cout << "Vvedi n: "; | |
26 | cin >> n; | |
27 | double *a = new double[n]; | |
28 | double *b = new double[n]; | |
29 | cout << "Vvedi w: "; | |
30 | cin >> w; | |
31 | cout << "Vvedi a: " << endl; | |
32 | for (int i = 0; i < n; i++) | |
33 | { | |
34 | cout << " #" << i + 1 << ": "; | |
35 | - | // Получаем необходимые данные |
35 | + | |
36 | - | cout << "Please, enter n: "; |
36 | + | |
37 | cout << "Vvedi b: " << endl; | |
38 | for (int i = 0; i < n; i++) | |
39 | { | |
40 | - | cout << "Please, enter w: "; |
40 | + | |
41 | cin >> b[i]; | |
42 | - | cout << "Please, enter a: " << endl; |
42 | + | |
43 | ||
44 | // Выделение памяти | |
45 | FM_signal* mass = static_cast<FM_signal*>(operator new[] (n * sizeof(FM_signal))); | |
46 | ||
47 | // Инициализация каждого элемента массива | |
48 | - | cout << "Please, enter b: " << endl; |
48 | + | |
49 | { | |
50 | new (mass + i) FM_signal(a[i], b[i], w, fun); | |
51 | } | |
52 | ||
53 | // Выводим на экран необходимые значения | |
54 | for (int i = 0; i < n; i++) | |
55 | { | |
56 | cout << "Energiya signala #" << i + 1 << " = " << mass[i].get_energy(0, 10) << endl; | |
57 | } | |
58 | return 0; | |
59 | } | |
60 | ||
61 | FM_signal::FM_signal(double a, double b, double w, double (*f) (double)) { | |
62 | this -> a = a; | |
63 | this -> b = b; | |
64 | this -> w = w; | |
65 | this -> fun = f; | |
66 | } | |
67 | - | cout << "Energy of signal #" << i + 1 << " = " << mass[i].get_energy(0, 10) << endl; |
67 | + | |
68 | double FM_signal::get(double t) { | |
69 | return this -> a * cos(this -> w * t + this -> b * this->fun(t)); | |
70 | } | |
71 | ||
72 | double FM_signal::get_energy(double start, double end) { | |
73 | double h = 0.001, s = 0, lastHeight = 0, height = pow(this -> get(a), 2); | |
74 | int n = (end - start) / h; | |
75 | for (int k = 1; k <= n; k++) | |
76 | - | this -> f = f; |
76 | + | |
77 | lastHeight = height; | |
78 | height = pow(this -> get(start + h * k), 2); | |
79 | - | return this -> a * cos(this -> w * t + this -> b * this->f(t)); |
79 | + | |
80 | } | |
81 | return s; | |
82 | } | |
83 |