Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация непрерывного вейвлет-преобразования CWT 
:(
    Опции темы
Proger10
Дата 13.2.2013, 02:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот решил попробовать реализовать расчёт вейвлет-коэффициентов, только не получилось ничего. А точнее - какие-то градиентные горизонтальные полосы. Ровные полосы, даже не гнущиеся никак smile Очевидно какая-то проблема, поскольку и масштаб не такой маленький (ниже), и сдвиг, но как-то информации никакой не получаю - только горизонтальные полосы, что фигня какая-то.

Не посмотрите в чём может быть дело? С комплексными проблема может быть. Хреново у меня с ними :(

Неплохое объяснение вейвлетов: http://old.computerra.ru/offline/1998/236/1123/
Формула CWT: http://old.computerra.ru/printimages/236/Image160.gif

Вроде бы всё так и делаю, но в чём же дело-то :(

Код

    // Реализация вейвлета Морле:
    complex< double > waveletMorlet( double t, double alpha ) {
        complex< double > expVal( 0.0, 2.0 * M_PI * t );
        return ( 0.0, exp( ( - t * t ) / ( alpha * alpha ) ) * exp( expVal ) );
    }
     
    vector< vector < complex < double > > > waveletAnalysis( vector <double> &dataArr, int scalesCount, int startSignalPos, int analysingPointsCount ) {
     
        vector< vector < complex < double > > > waveletCoeffsArr;
        vector < complex < double > > waveletCoeffsOneRowArr;
     
        int endWaveletSignalPos = startSignalPos + analysingPointsCount;
     
        // Заполняем результирующий массив нулями:
        for( int b = 0; b < analysingPointsCount; b++ ) { // shift
     
            waveletCoeffsOneRowArr.clear();
     
            for ( int s = 1; s <= scalesCount; s++ ) { // scale
     
                complex < double > currCoeff1( 0.0, 0.0 );
                waveletCoeffsOneRowArr.push_back( currCoeff1 ); // Собираем массив значений одной строки
     
            }
     
            waveletCoeffsArr.push_back( waveletCoeffsOneRowArr ); // Добавляем в финальный массив
     
        }
     
        // Рассчитываем вейвлет-коэффициенты:
        for( int b = 0; b < analysingPointsCount; b++ ) { // shift - сдвиг
     
            for ( int s = 1; s <= scalesCount; s++ ) { // scale - масштаб
     
                complex < double > currCoeff( 0.0, 1.0 ); // инициализирую комплексное число с мнимой единицей
     
                for( int i = startSignalPos; i < endWaveletSignalPos; i++ ) {
     
                    currCoeff += dataArr[ i ] * waveletMorlet( ( (double) ( i - startSignalPos ) - b ) / (double) s, 3.0 );
     
                }
     
                waveletCoeffsArr[ b ][ s - 1 ] = ( 1.0 / (double)sqrt( s ) ) * currCoeff;
     
            }
     
        }
     
        return waveletCoeffsArr;
     
    }
     
    // ИСПОЛЬЗОВАНИЕ:
    int startAnalyzingPos = 0;
    // samplesArr - отсчёты из wave-сигнала, 22050Гц
     
    // указываем номер с какого отсчёта вычислять вейвлет-преобразование и сколько их брать:
    vector < vector < complex < double > > > waveletCoeffsArr = waveletAnalysis( samplesArr, 100, startAnalyzingPos, 1000 );


Это сообщение отредактировал(а) Proger10 - 13.2.2013, 03:53
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


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

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


 




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


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

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