Преобразования ФНЧ-ПФ

Все что касается фильтрации
Аватара пользователя
DimKaKiber
Сообщения: 29
Зарегистрирован: 26 мар 2020, 15:00
Откуда: Томск
Контактная информация:

Re: Преобразования ФНЧ-ПФ

Сообщение DimKaKiber »

Спасибо большое! С билинейным преобразованием у мня беда :) Буду разбираться.
Библиотеку я на домашнем (временно еще и рабочем) компе собрал. Буду воевать дальше как доберусь)
А насколько важен диапазон для построения АЧХ? Ведь реальные частоты за Pi рад/с не выйдут?

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1056
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Преобразования ФНЧ-ПФ

Сообщение Бахурин Сергей »

Ачх цифрового фильтра периодическая с периодом 2pi поэтому можно строить в любом диапазоне частот только она будет повторяться

Аватара пользователя
DimKaKiber
Сообщения: 29
Зарегистрирован: 26 мар 2020, 15:00
Откуда: Томск
Контактная информация:

Re: Преобразования ФНЧ-ПФ

Сообщение DimKaKiber »

Благодарю Вас за помощь!!!
Преобразование починил, отрисовку откорректировал, часть кода опять переделал :))
Дробно-рациональную подстановку сделал "в лоб" по Вашей статье. Остались Чебышевы и РФ, но это уже техника. Для других, более целевых для меня данных, такую цифровую АЧХ получаю:
АЧХ _золотарев ПФ.png
По ходу дела возник еще один вопрос. При применении коэффициентов к сигналу получаю в его начале последовательность, жутко похожую на импульсную характеристику фильтра + сдвиг по сигналу, который никак не могу устранить. Для КИХ, например, просто делал сдвиг на grade/2 отсчетов внутри результирующего сигнала и последовательности сырой-фильтрованный совпадали.

Для БИХ так не получается. Реализую фильтр так (пока тоже в лоб, чтобы разобраться):

Код: Выделить всё

template<typename dataType>
  int simple_iir(dataType *data,int dataSize,double *&out)
   {
    if (!data || dataSize <= 0)  return IIRanswers::ERR_FILTER_IIR;

    double ak = 0.0,
           bk = 0.0;
    int iir_size = Grade*P+1;

    if (out) { free(out); out = nullptr; }
    double *buff = (double*)calloc(dataSize+4*iir_size,sizeof(double));
    dataType *data_buff = (dataType*)calloc(dataSize+iir_size,sizeof(dataType));
    memcpy(data_buff,data,sizeof(dataType)*dataSize);
    for (int i = iir_size; i < dataSize; ++i)
     {
      bk = 0.0;
      ak = 0.0;
      for (int h = 0; h < iir_size; ++h) bk += DigitalNum[h]*data_buff[i-h];
      for (int y = 1; y < iir_size; y++) ak += DigitalDenum[y]*buff[i-y];
      buff[i] = bk-ak;
     }

    out = (double*)calloc(dataSize,sizeof(double));

    memcpy(out,buff+4*iir_size,sizeof(double)*dataSize);

    free(buff); buff = nullptr;
    free(data_buff); data_buff = nullptr;
    return  IIRanswers::IIR_OK;
   }
А начальная последовательность выглядит так:
Артефакт издалека.png
Артефакт поближе.png

Не подскажете, что это за зверь и как получить фильтрованные данные уже с самого начала выборки без их потери и как можно устранить сдвиг после обработки?
Последний раз редактировалось DimKaKiber 25 апр 2020, 19:00, всего редактировалось 1 раз.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1056
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Преобразования ФНЧ-ПФ

Сообщение Бахурин Сергей »

Это переходной процесс. Для того чтобы он не был таким большим, обычно делают ''power ramp" суть которого плавное включение сигнала при старте (линейное нарастание входного сигнала на длительности переходного процесса) . Если хочется без потери сигнала при старте, то можно попробовать добавить в сигнал перед началом его же кусок (желательно пристыковать в фазе). Тогда буферы фильтра будут заполонены к началу сигнала, и переходной процесс если и будет, то не такой явный.

Что касается задержки, то тут все сложнее, потому что групповая задержка БИХ-фильтра величина непостоянная, а значит разные частоты сигнала будут приобретать разную задержку и скомпенсировать ее, как в случае с КИХ-фильтром, не представляется возможным.

Аватара пользователя
DimKaKiber
Сообщения: 29
Зарегистрирован: 26 мар 2020, 15:00
Откуда: Томск
Контактная информация:

Re: Преобразования ФНЧ-ПФ

Сообщение DimKaKiber »

Интересная особенность. Из-за нее значит не получится выделить нужные участки на фильтрованном сигнале и точно зайти на сырой сигнал. У меня просто сейчас FIR 500 порядка в потоке (overlap-add механизм) трудится :) Думал что более гибкие в настройке IIR лучше себя покажут.
Ну да фиг с ними. для потокового вывода сигнала на наушники или динамик IIR лучше подойдут. Единственная проблема в том что сигнала изначально нет никакого. С оффлайн проще бы было. Получается что я могу в самом начале просто накопить какое то количество отсчетов сигнала (фильтруя его), затем просто получать результат после завершения переходного процесса. А длительность переходного процесса как то рассчитывается? Или просто статичное значение по времени/отсчетам задают?

И еще вопрос один есть, не по теме правда - каким образом можно оценить качество обработки целевого сигнала разными цифровыми фильтрами? Как можно обосновать выбор конкретного метода из Фурье фильтра, IIR, FIR, скользящих средних, вейвлетов и т.д.? Работа просто очень тесно с научной частью связана и считаю что внутри докторской было бы уместным такое сравнение привести.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1056
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Преобразования ФНЧ-ПФ

Сообщение Бахурин Сергей »

Длительность переходного процесса можно определить как эффективную длительность импульсной характеристики. Т. е. интервал времени в котором сосредоточена заданная доля энергии импульсной характеристики (90, 95, 99 процентов).

Качество обработки оценивают объективными характеристиками (неравномерность ачх, уровень подавления, задержка обработки и т.д.). Разумеется это надо соизмерять с экономической эффективностью и сложностью реализации. Для акустических сигналов существует ещё субъективные оценки качества на основе экспертных оценок. Это когда берётся выборка пользователей и каждый на слух проводит субъективную оценку качества. На метод экспертных оценок даже ГОСТ существует.
Так что обоснование выбора в идеале должно включать: экономический фактор, а также объективные характеристики, подкрепленные экспертными оценками.

Ps. Скользящее среднее и вейвлеты это разновидности FIR.

Аватара пользователя
DimKaKiber
Сообщения: 29
Зарегистрирован: 26 мар 2020, 15:00
Откуда: Томск
Контактная информация:

Re: Преобразования ФНЧ-ПФ

Сообщение DimKaKiber »

Спасибо) С субъективной оценкой проблем не будет, т. к. итак проверяют все. Остальное продумаю. При реализации обращал внимание только на мнение врачей, возможность реализации (с ее сложностью) в потоке и составе программно-аппаратного комплекса и качество устранения мешающих шумов. Шумы причем не модельные, а "на живую" полученные.
Ps. Скользящее среднее и вейвлеты это разновидности FIR.
Сам для себя просто пытаюсь отделять методы, чтобы не путать. Простите неуча :oops:
Т. е. интервал времени в котором сосредоточена заданная доля энергии импульсной характеристики (90, 95, 99 процентов).
Правильно ли понял - можно подать на вход спроектированного фильтра любую последовательность и отследить момент уменьшения энергии на выходной последовательности (затухание ее)?

Аватара пользователя
DimKaKiber
Сообщения: 29
Зарегистрирован: 26 мар 2020, 15:00
Откуда: Томск
Контактная информация:

Re: Преобразования ФНЧ-ПФ

Сообщение DimKaKiber »

Бахурин Сергей писал(а):
02 апр 2020, 21:10
что значит много новых синусоид появляется при амплитудной модуляции?

Можно еще SSB перенос сделать. Останется верхняя боковая или нижняя боковая полоса.
Добрый день! Подскажите, пожалуйста, как правильно организовывать SSB модуляцию для потоковых данных? Спектр переносится верно, однако каждый новый пакет сопровождается выбросами (1-5 отсчетов), которые при прослушивании результата щелкают... Попробовал сделать свозной индекс отсчета (t) для формулы переноса, пробовал сделать по аналогии с Фурье-фильтром (с перекрытием(50%). Применял Корректировочные окна, но они сильно искажают сигнал. Пытался сгладить скользящими (знаю что идея совсем плохая) -- щелки плавнее, но суть не меняется.
Последний раз редактировалось DimKaKiber 11 май 2020, 20:06, всего редактировалось 1 раз.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1056
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Преобразования ФНЧ-ПФ

Сообщение Бахурин Сергей »

надо правильно стыковать пакеты при преобразовании Гильберта и для переноса по частоте надо сквозной индекс для времени. Преобразователь Гильберта как реализуется у вас?

Аватара пользователя
DimKaKiber
Сообщения: 29
Зарегистрирован: 26 мар 2020, 15:00
Откуда: Томск
Контактная информация:

Re: Преобразования ФНЧ-ПФ

Сообщение DimKaKiber »

Бахурин Сергей писал(а):
11 май 2020, 20:05
надо правильно стыковать пакеты при преобразовании Гильберта и для переноса по частоте надо сквозной индекс для времени. Преобразователь Гильберта как реализуется у вас?
Сделал через БПФ. Пытался через квадратурный преобразователь - получил искажение сигнала неясное и решил сначала через привычный БПФ сделать чтобы проверить как работает метод.
Сквозной индекс есть. А как состыковать Аналитический сигнал?

Кажись дошло. Надо сшить комплексный сигнал по типу как в Фурье фильтре, чтобы он непрерывным был. И использовать его для расчета. А я только реальную часть брал и еще усугубляют, т.к. брал уже все после расчетов и суммировал. Завтра сделаю)
Последний раз редактировалось DimKaKiber 11 май 2020, 21:41, всего редактировалось 1 раз.

Ответить