На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
Страницы: (5) [1] 2 3 ... Последняя » все  ( Перейти к последнему сообщению )  
> Преобразование фурье
    Еще раз о FFT

    Может ли спектр быть больше самого сигнала? т.е. есть функция fft(double *In, int Size);

    она делает преобразование фурье от буфера In и выдает его в тот же буфер.

    Например
    входной сигнал имеет амплитуду 32767. Может ли после преобразования фурье буфер In содержать значения больше 32767 (или меньше -32678)
      Знаешь, сам когда-то возился с этим. Вообще не может, только в редких случаях, когда колебания накладываются и получается резонанс, но это редкий случай. Это теория, но на практике у меня выходило наоборот. Вот сорец, он  100\% работоспособный, переработанный алгоритм из книги Рабинера и Гоулда.
      int math_inverse_bits( int value, int bits )
      // инвертируем биты для преобразования Фурье
      {

         int result = 0 ;
         int mask = 1 << (bits-1) ;

         for ( int i=0; i<bits; i++ )
         {
             
             if ( value & mask )
                 result |= 1 << i ;

             mask = mask >> 1 ;

         }

         return ( result ) ;

      }

      BOOL math_fft( double* dbl_array, int* nSize )
      {

         // определяем длину для преобразования фурье
         int tmp_size = *nSize ;
         for( int M=0; tmp_size>1; tmp_size/=2,M++ ) ;

         int fft_size = 1 << M ; // 1<<M == 2^M

         // подготавливаем массив
         std::complex<double>* fft_array =
                                 new std::complex<double>[ fft_size ] ;
         ASSERT( fft_array ) ;

         // устанавливаем порядок для fft
         for ( int i=0; i<fft_size; i++ )
         {
             fft_array[ math_inverse_bits(i,M) ] =
                 std::complex<double>(dbl_array[ i ],0.0) ;
         }

         double pi = 3.141592653589793 ;

         // M этапов
         for ( int l=0; l<M; l++ )
         {

             int le = 1 << (l+1) ;  // le - смещение между бабочками
             int le1 = le >> 1 ;    // le1 - размер бабочки
             std::complex<double> U ( 1.0, 0.0 ) ;
             std::complex<double> W ( cos( pi / le1  ), sin( pi / le1 ) ) ;

             for ( int j=0; j<le1; j++ )
             {
                 for ( int i=j; i<fft_size; i+=le )
                 {
                     int ip = i + le1 ;
                     std::complex<double> T = fft_array[ ip ] * U ;
                     fft_array [ ip ] = fft_array[ i ] - T ;
                     fft_array [ i ] = fft_array[ i ] + T ;
                 }

                 U *= W ;

             }

         }

         for ( i=0; i<fft_size / 2 ; i++ )
         {
             dbl_array[ i ] = std::abs( fft_array[ i ] ) ;
         }

         *nSize = fft_size / 2 ;

         delete[] fft_array ;   fft_array = NULL ;

         return ( TRUE ) ;

      }
        Исходник мне не нужен, мне нужно знать может ли фурье образ быть больше самого сигнала и в каких случаях это может быть?
          и на сколько (или во сколько) фурье образ может быть больше сигнала
            безусловно может... математическое доказательство - это например дельта-функция... что, в свою очередь, дает ответ на второй вопрос - не просто может а может быть больше в любое число раз (и в бесконечное тоже)...
              А разве фурье от дельта функции не 1?
              если берем дискретную послелдовательность то дельта функция будет выглядеть так.
              0, 0, 0, 0, 0, .... 1, 0, 0, 0, 0,

              дискретное фурье от нее разве будет больше 1?

              Мне о реальных сигналах? Может ли так получится что из 16 битного сигнала получится после фурье 32 битный спектр ( к примеру)?
                я наверное не совсем ясно выразился (продолжая тему матемитики). фурье от дельты - единица. но есть преобразование лапласа (взаимнооднозначное), которое в частности, используется в задачах на исследование поведения распределеия Гиббса в предельных случаях.
                с помошью него показывается, это самое распределение и дельта являются образами/прообразами друг друга. Но распределение Гиббса конечно. Это и есть ответ на твой вопрос. :-[ пример реального сигнала - цуг синуса и его спектр.
                  Вот это мне понравилось:
                  Цитата
                  Вообще не может, только в редких случаях
                  Напоминает "В военное время значение синуса может достигать двух!" ;)))
                    Цитата vot, 04.04.02, 16:30:07
                    Вот это мне понравилось:
                    Напоминает "В военное время значение синуса может достигать двух!" ;)))

                    Ой-ой, больно ты умен :-) , ну подумаешь, потрещал я , вот.
                    На самом деле, ФФТ - загадка природы и доконца еще не изучена человечеством,
                    так что вы, ребята, зря паритесь, я сорец залил, вот и юзайте. А вообще я знаю человека, СУПЕРПРОФЕССИОНАЛА по преобразованию Фурье и вообще по обработке сигналов в цифре, могу порекомендовать в индивидуальном порядке, правда...он не с этой планеты, но думаю это вас не остановит.
                    поки


                      2Melan
                      Порекомендуй человека плиз!
                        Цитата Melan, 08.04.02, 19:41:28

                        могу порекомендовать в индивидуальном порядке, правда...он не с этой планеты, но думаю это вас не остановит.
                        поки


                        И мне плиз.
                          Если у кого есть вопросы то могу немного помочь про фурье, я вроде как достаточно уже с ним разобрался
                            Цитата Z@, 03.05.02, 23:48:21
                            Если у кого есть вопросы то могу немного помочь про фурье, я вроде как достаточно уже с ним разобрался

                            Здравствуй!
                            Мне нужны исходники преобразования Фурье на jave, где я мог бы их достать?
                              Ну во первых В военное время значение синуса может достигать двух! так это правда просты чайник в области функций комплексных переменных.
                              Цитата
                              Z@
                              13.03.02 19:07:22 Еще раз о FFT  
                              Может ли спектр быть больше самого сигнала? т.е. есть функция fft(double *In, int Size);
                              она делает преобразование фурье от буфера In и выдает его в тот же буфер.  
                              Например
                              входной сигнал имеет амплитуду 32767. Может ли после преобразования фурье буфер In содержать значения больше 32767 (или меньше -3267

                              Ответ может на пример чистая синусоида, при обратном приобразованиии делят на  Size
                                Блин, хочу  сделать преобразование Фурье.... Нифига не получается, вернее получается, но какая-то фигня. Числа охрененно большие, рисует полную парашу. Конечно спектр это напоминает, но совсем отдаленно.  Я вот вообще не  рублю: это преобразование  ничего "не знает ни о частоте дискретизиции сигнала, ни о ширине спектра, так что же означают выходные данные, амплитуду какой частоты они  показывают, и вообще, какая это нахрен амплитуда 10^10.  
                                Я вот думаю.... преобразование Фурье - это ведь по сути скалярное произведение векторов (т.е. сигнала на комплексные экспоненты) которое позволяет выявить меру присутствия комплексной экспоненты той или иной частоты в сигнале. Если я не прав, то поправьте меня скорее, пока не наделал глупостей и не погубил весь мир. Так вот, модет, чтобы не париться с выходными величинами нужно просто нужно привести весь сиггнал к амплитуде
                                от -1 до 1, потом сделать ффт и получить приоичный  результат.
                                 Кстати, кто-нибудь в кусре - неужели программы типа Winamp делают "честное" FFT для визуализации спектра или же там делаются какие-то упрощения и допущения, чтобы ускорить процесс и сделать картинку более красивой?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0402 ]   [ 15 queries used ]   [ Generated: 27.04.24, 05:24 GMT ]