Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ДПФ и построение спектрограммы, дискретное преобразование Фурье и спектр 
:(
    Опции темы
nerig
Дата 28.6.2012, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 26.4.2010

Репутация: нет
Всего: нет



Всем доброго дня! smile 
Нужна небольшая помощь или пример. 
Как правильно реализовать дискретное преобразование фурье?  А то все борюсь, строю спектограмму, но получается откровенная чушь. Есть ли у кого нибудь пример?
PM MAIL   Вверх
borisbn
Дата 28.6.2012, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



nerig, 
1) какой сигнал на входе - вещественный или комплексный ?
2) покажи свою функцию DFT
3) покажи, что ты подаёшь на график


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
nerig
Дата 4.7.2012, 05:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 26.4.2010

Репутация: нет
Всего: нет



borisbn, 
сейчас начал использовать вот этот код. Вроде работает, но почему то если в массиве больше 128 значений, вылетает с ошибкой.
Код

int nn, ii, jj, n, mmax, m, j, istep, i, isign;
double wtemp, wr, wpr, wpi, wi, theta, tempr, tempi;
nn = Memo1->Lines->Count;
double* a = new double[nn];
for (int i=0; i<Memo1->Lines->Count; i++)
        {
        a[i] = StrToFloat(Memo1->Lines->Strings[i]);
        }


n = 2*nn;
j = 1;
ii=1;
while (ii<=nn)
        {
        i = 2*ii-1;
        if (j>i)
                {
                tempr = a[j-1];
                tempi = a[j];
                a[j-1] = a[i-1];
                a[j] = a[i];
                a[i-1] = tempr;
                a[i] = tempi;
                }
        m = n/2;
        while (m>=2 && j>m)
                {
                j = j-m;
                m = m/2;
                }
        j = j+m;
        ii=ii+1;
    }
    mmax = 2;
    while (n>mmax)
    {
        istep = 2*mmax;
        theta = 2*M_PI/(isign*mmax);
        wpr = -2.0*(sin(0.5*theta))*(sin(0.5*theta));
        wpi = sin(theta);
        wr = 1.0;
        wi = 0.0;
        ii=1;
        while (ii<=mmax/2)
        {
            m = 2*ii-1;
            jj=0;
            while (jj<=(n-m)/istep)
            {
                i = m+jj*istep;
                j = i+mmax;
                tempr = wr*a[j-1]-wi*a[j];
                tempi = wr*a[j]+wi*a[j-1];
                a[j-1] = a[i-1]-tempr;
                a[j] = a[i]-tempi;
                a[i-1] = a[i-1]+tempr;
                a[i] = a[i]+tempi;
                jj=jj+1;
            }
            wtemp = wr;
            wr = wr*wpr-wi*wpi+wr;
            wi = wi*wpr+wtemp*wpi+wi;
            ii=ii+1;
        }
        mmax = istep;
    }
  for (int i=0; i<nn; i++)
        {
        Memo2->Lines->Add(FloatToStr(a[i]));
        Form2->Series1->Add(a[i],2,Color1);
        }
delete(a);

PM MAIL   Вверх
ksili
Дата 4.7.2012, 06:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



а где nn инициализируется?


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0443 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.