На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Правила раздела Ищу исходники!
Раздел создан для обмена исходниками, как своими, так и чужими. Попытки продажи собственных исходников крайне не приветствуются (для этого у нас есть разделы ПОМОЩЬ СТУДЕНТАМ и Разовые заказы и подработка), а попытки продажи чужих исходников будут наказываться.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Весьма вероятно, что кто-то до вас уже искал интересующие вас исходники.
3. При создании темы обязательно указывайте интересующий вас язык программирования! Указывать следует в таком формате: "[_язык_] Название темы". Например, "[C++] Ищу исходники простого графического редактора"
4. Не забывайте пользоваться тегом [ code=*** ] ...текст программы... [ /code ] для выделения текста программы подсветкой!

Полезные ссылки:
user posted image Поиск по Разделу
Модераторы: B.V.
  
> Wavelet спектрограмма, нужны исходники быстрого получения спектра сигнала
    Всем привет. Народ ищу исходники получения спектра любого сигнала, например длительностью в секунду.
    Собственно через гребенку из 20 БИХ фильтров уже получал спектр, но хочу понять как получить спектр сигнала максимально быстро с минимальными вычислительными ресурсами. Поэтому и возник вопрос работают ли вейвлеты быстрее чем 20-ти полосный БИХ фильтр, что там в вейвлетах как эти 20 полос получить. Диапазон например 0-5500Гц, частота дискретизапции 11025Гц.
    Исходники желательно на VB.

    Пока все что я понимаю о вейвлетах, это берется любая функция например прямоугольная Хаара и делается свертка с сигналом, а вот дальше что? Я понимаю вейвлет любой можно взять от балды нарисовать любую функцию и сделать свертку. Но что потом то, нужно масштабировать как я понял эту функцию и уже с сжатой этой функцией свертку делать. Вот сколько нужно так масштабировать чтобы получить 20 полос фильтрации не понимаю.

    Читал про сжатие картинки на вейвлетах SCINER прошу вас что нибудь подсказать, поскольку вы о помощи упоминали :)
    Сообщение отредактировано: TViT -
    Ремонт мобильной электроники. Разработка монтаж электроники.
      Быстрее всего применить M=20 раз один БИХ/КИХ и сжать сигнал M=20 раз для каждого фильтра.
      И степень K - БИХ/КИХ выбрать мене a*LOG(N) . Если степень будет больше, то быстрее будет вместо БИХ/КИХ использовать FFT.
      a- некоторая поправочная константа, зависит от компилятора и компьютера.
      Сложность алгоритма будет O(M*N*K) или O(M*N*Log(N))

      N=11025
      M=20
      Log(N)=14
      Скорость обработки на Бэсике маленькая порядка поэтому советую взять более подходящий язык.
      Т.е такой участок будет считать несколько секунд( до ~1 минуты).
      Правильный обед должен состоять из 5 блюд приготовленных из 33 ингредиентов.
        Pavia что такое М=20 ? 20 фильтров т.е. значений спектра после них? Нужно же 20 полос пропускания. И что значит сжать проредить семплы - децимация? Или 20 временных окон на которые делится сигнал по времени. Например если это слово длительностью в секунду. (забыл написать что хочу оптимизировать по скорости этот проект - Распознавание с помощью нейронной сети ) N я так понимаю длина значений сигнала?

        На Васике это только на компе моделируется для наглядности и комфорта работы. Потом все это на Си работает в микроконтроллере. Пускай а=1
        Сообщение отредактировано: TViT -
        Ремонт мобильной электроники. Разработка монтаж электроники.
          Цитата
          что такое М=20 ? 20 фильтров т.е. значений спектра после них? Нужно же 20 полос пропускания.

          Да это 20 фильтров.
          Wavelet - это разномасштабное разложение. Далее идут вариации на это тему.
          Схема вычислений мы можем строить по разному.
          f- сигнал
          Мы можем сделать 20 полос так.
          WT[1,t]=БИХ1(f(t));
          WT[2,t]=БИХ2(WT[1,t]);
          WT[3,t]=БИХ3(WT[2,t]);
          ....
          WT[20,t]=БИХ20(WT[19,t]);

          А можем так
          tmp[t]=Масштабирование(1/2,f(t))
          WT[1,t]:=БИХ(tmp(t))
          tmp[t]=Масштабирование(1/2,tmp[t])
          WT[2,t]:=БИХ(tmp(t))
          tmp[t]=Масштабирование(1/2,tmp[t])
          WT[3,t]:=БИХ(tmp(t))
          ...
          tmp[t]=Масштабирование(1/2,tmp[t])
          WT[20,t]:=БИХ(tmp(t))


          Вторая схема вычислений лучше, так как требуется один БИХ. И его можно сделать очень простым.

          Цитата
          И что значит сжать проредить семплы - децимация?
          Децимация не лучший алгоритм масштабирования.
          Так как обычно масштабирование выбирается 1/2, то я бы просто взял два соседних семпла и среднее между ними. т.е вт 0.5*f(2*t)+0.5*f(2*t+1);


          Цитата TViT @
          Пускай а=1

          Скорее всего не a=1, а a=10. FFT обычно плохо оптимизирован.

          Цитата TViT @
          N я так понимаю длина значений сигнала?

          Да.

          Цитата TViT @
          На Васике это только на компе моделируется для наглядности и комфорта работы.

          Какой же это комфорт, если оно тормозит и медленно работает.



          Цитата TViT @
          (забыл написать что хочу оптимизировать по скорости этот проект - Распознавание с помощью нейронной сети )

          С этого и стоило бы начать.
          Правильный обед должен состоять из 5 блюд приготовленных из 33 ингредиентов.
            Как то очень упрощенно получается. Везде написано что масштабируется функция-вейвлет. А у вас tmp я так понимаю сигнал. Также пишут что разложение состоит из 2х фильтров НЧ и ВЧ и из ВЧ фильтра также деревообразно. И также пишут что фильтры должны быть полуполосные КИХ сопряженные квадратурные или зеркальные?
            Сообщение отредактировано: TViT -
            Ремонт мобильной электроники. Разработка монтаж электроники.
              Цитата TViT @
              Везде написано что масштабируется функция-вейвлет. А у вас tmp я так понимаю сигнал.

              Так разницы никакой. Только в одном масштаб увеличивается в другом уменьшается.

              Цитата TViT @
              Как то очень упрощенно получается.

              :lol: А зачем усложнять?

              Цитата TViT @
              Также пишут что разложение состоит из 2х фильтров

              Я же сказал что есть вариации. Есть вейвлеты с 1 фильтром, а есть с 2 двумя. И про те и про эти на википедии расписано.
              НЧ из ВЧ легко получить
              НЧ+ВЧ=исходный сигнал.
              НЧ=исходный сигнал - ВЧ
              ВЧ=исходный сигнал - НЧ

              НЧ, ВЧ разложение появилось из теории сжатия.
              Думаю что для анализа и работы это удобно, когда классы не пересекаются.

              Цитата TViT @
              И также пишут что фильтры должны быть полуполосные КИХ сопряженные квадратурные или зеркальные?

              Что касается требованиям к фильтрам, то их определяет предметная область. В данном случае говориться, что НЧ и ВЧ фильтре должны составлять полный базис. В верху было просто сопряжение в виде сложение. А можно придумать и посложнее.
              (НЧ+ВЧ)^2=(исходный сигнал)^2 ; тут уже НЧ и ВЧ условные названия фильтров.

              Зачем нужен полный базис вообще мне непонятно. Он нужен только в одном случае если вы хотите сделать однозначное разложение. Что-бы можно было провести обратное преобразование.(сжатие без потери качества)
              А если вы сжимаете с потерью или отсекаете всё лишнее. То 2 фильтра вам не нужны вам и одного должно хватить.
              Сообщение отредактировано: Pavia -
              Правильный обед должен состоять из 5 блюд приготовленных из 33 ингредиентов.
                Т.е. грубо говоря как я и думал берется функция какая либо - вейвлет. Сигнал сворачивается с этой функцией, потом масштабируется и снова делается свертка с сигналом. Как бы мы подбираем резонанс - отклик наших мат функции с сигналом и получим значения энергии - спектр?

                От сюдава вопрос. Как получить например 20-ть полос фильтрации для сигнала в каждом временном окне. Чтобы сигнал был максимально контрастный т.е. как будто у нас фильтр с высоким порядком с резкой частотой среза.
                Вейвлет Хаара сможет это реализовать, чтобы как можно меньше вычислений было?

                Может полифазное FFT с соответствующим окном будет лучше для получения такой гребенки фильтров?

                Цитата
                Вторая схема вычислений лучше, так как требуется один БИХ. И его можно сделать очень простым.


                Ну так у нас куча масштабирований получается. На них время то тоже не мало тратится? А один фильтр это по моему плюс только в том что память под коэффициенты не занимается для 20ти фильтров, зато теряем в скорости нет?
                Сообщение отредактировано: TViT -
                Ремонт мобильной электроники. Разработка монтаж электроники.
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script Execution time: 0,1275 ]   [ 20 queries used ]   [ Generated: 15.09.19, 14:11 GMT ]