Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
rethaker
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 7
#1

Надо переделать программу из матлаб в С++ - C++

07.07.2016, 21:18. Просмотров 863. Ответов 16
Метки нет (Все метки)

Вот моя программа в матлаб(рабочая).Писал сам, но с++ плохо понимаю, поэтому надеюсь на вашу помощь.
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
clear;
hold off;
A1=0.7;
f1=500;
A2=0.5;
f2=1500;
A3=1;
f3=1000;
t=0:0.0001:1;
x1=A1*sin(2*pi*f1*t);
x2=A2*sin(2*pi*f2*t);
x3=A3*sin(2*pi*f3*t);
plot(t,x1+x2+x3);
x4=x1+x2+x3;
y=fft(x4);
plot(abs(y(1:length(y)/2)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2016, 21:18
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Надо переделать программу из матлаб в С++ (C++):

надо переделать программу - C++
помогите переделать на Си или с++ Program posled; uses crt; var i,n,x1,x2,f:integer; Begin clrscr; ...

надо переделать программу - C++
помогите переделать программу нужно было из это программы: #include "stdafx.h" #include <iostream> int _tmain(int argc,...

Программу на С++ надо переделать под С - C++
Вот есть программа,которая подсчитывает количество слов. ее нужно переделать используя обычный С,а не С++ #include <iostream> ...

Надо переделать немного программу - C++
Смотрите есть программа на решение методом хорд нелинейных уравнений. Но проблема в том что я не могу ее переработать так чтоб данные можно...

Написал программу на С++, надо переделать на С (пару строк!) - C++
Здравствуйте, пользователи форума! Я начал изучать программирование с языка С++, минуя С. Мне нужно исправить в исходном коде несколько...

очень надо!!доделать/переделать программу с текстовыми файлами(повторы слов) - C++
нужно упорядочить слова находящиеся в тексте по убыванию частоты.При этом различия в регистре не учитывать и делать с текстовыми...

16
Хрисипп
19 / 29 / 8
Регистрация: 09.02.2016
Сообщений: 217
07.07.2016, 21:45 #2
0
Ferrari F1
623 / 521 / 101
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
07.07.2016, 21:46 #3
rethaker, скажи, что должна делать программа, и тебе переделают.
0
rethaker
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 7
08.07.2016, 23:01  [ТС] #4
Выводить в файл построенный график прямого преобразования Фурье
0
ura_111
14 / 16 / 5
Регистрация: 21.05.2016
Сообщений: 48
09.07.2016, 00:26 #5
Теорию быстрого преобразования Фурье знаешь? (только не Высшая математика, а практичная реализация).

Или в итернете найти можешь?
0
rethaker
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 7
10.07.2016, 01:22  [ТС] #6
ura_111, не знаю

Добавлено через 2 минуты
ura_111, я думал, что мне люди на этом сайте помогут полностью написать программу. Или так нельзя?
0
HenryDukart
124 / 124 / 35
Регистрация: 05.10.2013
Сообщений: 457
Завершенные тесты: 2
10.07.2016, 01:53 #7
rethaker, обычно в этом разделе форума помогают с конкретным "затыком" в программе.
0
rethaker
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 7
10.07.2016, 01:54  [ТС] #8
Я просто думал, что помогают на этом сайте, ну, в смысле, могут помочь сделать всю работу. Так-то здесь хорошие ребята, много раз искал на этом сайте ответы на вопросы)
0
easybudda
Модератор
Эксперт CЭксперт С++
10020 / 5943 / 1004
Регистрация: 25.07.2009
Сообщений: 11,230
10.07.2016, 01:54 #9
Цитата Сообщение от rethaker Посмотреть сообщение
я думал, что мне люди на этом сайте помогут полностью написать программу. Или так нельзя?
Либо запасайтесь терпением и ждите альтруиста, обладающего достаточным количеством знаний и свободного времени, либо создавайте тему в разделе "фриланс", но там платить прийдётся. Но правильный путь - пытаться решить самому попутно выкладывая свои попытки - вот тогда действительно есть шанс, что и помогут и подскажут...
1
rethaker
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 7
10.07.2016, 01:54  [ТС] #10
HenryDukart, хорошо, спасибо
0
ura_111
14 / 16 / 5
Регистрация: 21.05.2016
Сообщений: 48
10.07.2016, 02:02 #11
Да, это правда - люди за такую работу деньги берут...

Ну, уважаемый, не расстраивайся. Попробуй поискать на этом же форуме по ключевым словам (просмотри каждую ссылку):

Надо переделать программу из матлаб в С++


или в Википедии по ссылке:

https://ru.wikibooks.org/wiki/Реализ..._Фурье#C.2B.2B

или поищи еще в интернете.

Только будь осторожен - может быть лафа. Проверяй код на контрольных примерах (сопоставляй с Матлабом).
0
rethaker
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 7
14.07.2016, 17:02  [ТС] #12
Вот программа в С++, эх слишком много времени потратил, но понял)
Преобразование Фурье в C++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <iostream>
#include <complex>
#include <cstdlib>
#include <math.h>
#include <stdio.h>
#include <fstream>
#define MAX 16384
using namespace std;
#define M_PI 3.1415926535897932384
int log2(int N)    {
  int k = N, i = 0;
  while(k) {
    k >>= 1;
    i++; }
  return i - 1;
}
int check(int n)   {
  return n > 0 && (n & (n - 1)) == 0;
}
int reverse(int N, int n{
  int j, p = 0;
  for(j = 1; j <= log2(N); j++) { if(n & (1 << (log2(N) - j)))
      p |= 1 << (j - 1); }
  return p;
}
void ordina(complex<double>* f1, int N) {
  complex<double> f2[MAX];
  for(int i = 0; i < N; i++)
    f2[i] = f1[reverse(N, i)];
  for(int j = 0; j < N; j++)
    f1[j] = f2[j]; }:
void transform(complex<double>* f, int N) {
  ordina(f, N);      complex<double> *W;
  W = (complex<double> *)malloc(N / 2 * sizeof(complex<double>));
  W[1] = polar(1., -2. * M_PI / N);
  W[0] = 1;
  for(int i = 2; i < N / 2; i++)
    W[i] = pow(W[1], i);
  int n = 1;
  int a = N / 2;
  for(int j = 0; j < log2(N); j++) {
    for(int i = 0; i < N; i++) {
      if(!(i & n)) {
        complex<double> temp = f[i];
        complex<double> Temp = W[(i * a) % (n * a)] * f[i + n];
        f[i] = temp + Temp;
        f[i + n] = temp - Temp;
      } }
    n *= 2; a = a / 2;
  }
void FFT(complex<double>* f, int N, double d)
{transform(f, N);
  for(int i = 0; i < N; i++)
    f[i] *= d; //multiplying by step
}
int main()
{ int n;
  do {
   cout << "specify array dimension (MUST be power of 2)" << endl;
    cin >> n;
  } while(!check(n));
  double d;
  cout << "specify sampling step" << endl; //just write 1 in order to have the same results of matlab fft(.)
  cin >> d;
  complex<double> vec[MAX];
  //cout << "specify the array" << endl;
  double A1 = 0.7, f1 = 500;
  double A2 = 0.5, f2 = 1500;
  double A3 = 1, f3 = 1000;
  double t = 0;
  double sign;
  ofstream file1;
  file1.open("data2.txt");
  for(int i = 0; i < n; i++) {
    sign = A1*sin(2*3.14*f1*t) + A2*sin(2*3.14*f2*t) + A3*sin(2*3.14*f3*t);
    real(vec[i]) = sign;
    file1 << sign << ", ";
    //cout << vec[i];
    t = t + 0.1;
  } 
 file1.close();
 
  FFT(vec, n, d);
  cout << "...printing the FFT of the array specified" << endl;
  for(int j = 0; j < n; j++)
    cout << vec[j] << endl;
    ofstream file;
    file.open("data.txt");
      for(int j = 0; j < n; j++)
         {  file << real(vec[j]) << ", ";
         }
  file.close();
  return 0;
}
0
ura_111
14 / 16 / 5
Регистрация: 21.05.2016
Сообщений: 48
14.07.2016, 22:38 #13
Я пытался скомпилировать твой код (чтобы продолжить работу), но мне выдало ошибки:


Надо переделать программу из матлаб в С++



rethaker, скажи: "у тебя всё в порядке с кодом?". Может ошибки появились просто при механическом копировании кода.

Покрайней мере вижу одну ошибку в строчке 20 - нужна закрывающая скобка в перечне аргументов функции.

int reverse(int N, int n ) {


rethaker, скажи: "ты на форуме (и в википедии) искал примеры кода?"


rethaker, поверь, лучше говорить как есть.
0
S_el
2133 / 1661 / 313
Регистрация: 15.12.2013
Сообщений: 6,581
14.07.2016, 22:41 #14
rethaker, поищите библиотеки, где реализованы эти функции и воспользуйтесь ими. Так будет значительно проще.
0
ura_111
14 / 16 / 5
Регистрация: 21.05.2016
Сообщений: 48
14.07.2016, 23:06 #15
Вот ещё ошибки синтаксиса:

1)В строчке 31 после "}" не надо ":".
f1[j] = f2[j]; }:

2) И ещё одна, в строчке 50 нужно ещё одна скобка "}".

------------------------------------------------------------------------------

rethaker, скажи: "ты сверял результаты расчета в С++ и Матлаб (Маткад)?" (совпадают ли?).

------------------------------------------------------------------------------

А и правда, rethaker ты пытался искать просто нужную библиотеку (т.е. потребуется просто подключить эту библиотеку в твой проект и воспользоваться функцией fft(), по аналогии твоего Матлаба). Или, rethaker, тебе нужно именно самому написать на С++, в соответствии с теорией преобразования Фурье, код?

Добавлено через 12 минут
Вот ещё ошибки присвоения в строчке 76:

// real(vec[i]) = sign;

Вообще то это поправимо, но я её пока советую комментировать (двумя //), что бы не мешало работе программы.

Вроде ошибок синтаксиса больше не обнаруживает и программа запускается.

И еще вопрос: rethaker тебе запись/чтение из файл нужно (как в твоём коде)?
0
14.07.2016, 23:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2016, 23:06
Привет! Вот еще темы с ответами:

надо переделать - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace std; class chetbIreh_ugolnik { public: ...

надо переделать - C++
Надо сделать чтобы массив вводился с клавиатуры скиньте правильный код очень срочно надо буду очень благодарен#include &quot;stdafx.h&quot; ...

Надо переделать метод класса. - C++
Есть программа, надо переделать метод класса. Все - в описании. #include &lt;iostream&gt; using namespace std; class Complex { ...

Что надо чтобы с void переделать в int - C++
void theBestStudent(Student *students, int n) { double max = students.srBall; string theBest = students.nameSt; for (int i = 1;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru