Перейти к содержанию
    

iggylike

Участник
  • Постов

    8
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Всем спасибо за ответы, наконец-то более менее разобрался в вопросе
  2. to: petrov что за квадратурный смеситель? ткните носом! по образованию я математик, многих терминов не знаю. везде пишут про квадратурную и синфазную составляющую, а что оно такое нигде найти не могу. Это разве не к аналоговому сигналу относится?
  3. Кругом, в том числе на www.dsprelated.com, народ говорит о преобразовании Гильберта, как о самом подходящем и универсальном способе выделения амплитудной огибающей. Но теперь есть одно но. Я уже сошелся на мысли, что лучше использовать фильтр Гильберта, но есть одна проблема - реализация на си. В природе нашлась только одна библиотека, которая может синтезировать фильтр методом Паркса-МакЛиллана (автор Jake Janovetz), но именно фильтр Гильберта она строит некорректно. Есть еще какая то его модификазия в проекте Octave, но я так и не смог ее портировать в Visual Studio. Времени разбираться и писать самому, к сожалению, нет. Может подскажете, есть ли какие простые способы синтезировать фильтр с асимметричной ЧХ? Остается два варианта: использовать преобразование Гильберта "в лоб" с припиской, что частота заполнения должна быть где то в 50 раз больше самого сигнала, либо использовать метод возведения в квадрат и последующей низкочастотной фильтрации :(. З.ы. При следующем вызове функции Джейка Яновеца: numBands = 3; numTaps = 128; desired[0] = 0; desired[1] = 1; desired[2] = 0; weights[0] = 1; weights[1] = 1; weights[2] = 1; bands[0] = 0; bands[1] = 0.02; bands[2] = 0.05; bands[3] = 0.45; bands[4] = 0.48; bands[5] = 0.5; remez(h, numTaps, numBands, bands, desired, weights, HILBERT); получается ЧХ как на нижнем рисунке.
  4. На сколько я понимаю, фильтр Гильберта имеет асимметричную частотную характеристику, тоесть обрезает отрицательные частоты, но я ни как не пойму, как его строить в матлабе. h = remez(30,[0.1 0.9],[1 1],'Hilbert'); f = fft ([zeros(1, 30), h, zeros(1, 30)]); plot (abs(f)); Характеристика вс равно симметрична. Может потому что надо использовать firpm? Но у меня старый матлаб, и таковой нет
  5. alex_os: в последнем вашем ответе, который ушел в небытие, вы говорили про такой способ: 1). Посчитать хороший фильтр гильберта (например, Парксом-МакКлеланом). 2). Взять ДПФ от фильтра. Как я понял, что бы получить частотную характеристику. 3). Преремножить с S, вместо того, что бы обнулять S. 4). Дальше все так же (...как я делал). Вобщем, не очень понял суть этого метода. Если посчитать Парксом-МакКлеланом фильтр, то разве на выходе этого фильтра мы не получим мнимый сигнал?
  6. To DRUID3: Про модуль отсчетов ничего не знаю:( Фильтр что ли? Но переделывать, если честно не хотелось бы, разве что, если действительно на много быстрее. Да и FFT использую заточенное под процеccор. Описание метода нашел тут: http://www.mathworks.com/products/demos/sh...ml?product=DS#2. Там описан еще один метод: возведение в квадрат и пропускание через НЧ фильтр, но он дает худший результат. Это ТЗ, причем, кроме названия Envelope Analysis, в нем, по сути, ничего нет. Я это проинтерпретировал именно как выделение огибающей. Сигнал real. Повысил частоту заполняющего сигнала, и действительно, метод начал давать хорошие результаты. Но все же, интересно, как бороться с неровностями по краям? Если решения не найдется, то прийдется юзать другой метод :( To alex_os: Заклинание это смесь латеха с с++, вырвалось само собой) Там мнимая часть от неполного обратного преобразования Фурье с 1 по N/2 элемент (если положить, что все действительное БПФ лежит в массиве с индексами 0..N), удвоенная и деленная на частоту дискретизации. Я тоже так подумал, но проблема в том, что увеличение размера преобразования не особо то повышает качество работы алгоритма.
  7. Необходимо вычислить огибающую дискретного сигнала. Для этого использую преобразование Гильберта следующим образом: 1). Вычисляю БПФ X(f) по сигналу x(k). 2). Считаю преобразование Гильберта: x'(k) = (2 / F_d) * Im (sum_{i=1}^{N/2}[X(n) * exp^{2*pi*k*n * i/ N}] ), k = 0..N-1, где F_d - частота дискретизации. 3). Нахожу аналитический сигнал z = x + ix'. 4). Модуль |z| и будет огибающей. На практике получается, что в начальные и конечные моменты времени |z| имеет большие скачки, определенно не являющиеся огибающей. Подскажите, является ли такой эффект нормальным результатом или я все же напортачил где-то в вычислениях? И если это нормально, то каким способом лучше склеить огибающие подряд идущих сигналов? Дело в том, что для разных сигналов длина этих "выбросов" разная. На рисунке слева сигналы во временной области, справа ДПФ. Сигнал x= sin(2*pi*100*i) * exp(-100 *i). Частота дискретизации 1000, длина x - 128. Построчно: 1). Слева: Входной x (Красный) и расчитанная огибающая |z|(Голубой) На конце значительное расхождение с сигналом. Справа: ДПФ входного. 2). Слева: Обратное преобразование Фурье от предыдущего ДПФ (синий)(посчитал для проверки) и преобразование Гильберта(Зеленый). Справа ДПФ от ОДПФ :). 3). Слева: преобразование Гильберта (Зеленый). Справа: ДПФ от преобразования Гильберта. Спасибо за ответ
  8. Помогите разобраться, каким образом реализовать Order Analysis и Limit Monitor и что это собсно такое (программирую под dsp процессор)
×
×
  • Создать...