Всем доброго времени суток!
Хочу попросить помощи разобраться вот с какой задачкой.
Предыстория:
если мы регистрируем сигнал прибором, он ввиду несовершенства различных компонентов электроники и других причин он вносит некоторые искажения в выходной сигнал. Собственно задача и состоит в том, что от эти помехи отфильтровать. Т.е. необходимо почтитать переходную характеристику прибора, а затем с её помощью фильтровать получаемые данные.
Итак:
Если h(t) - импульсная переходная характеристика прибора, s(t) - сигнал, поступающий на вход прибора, то на выходе получим f(t)
если рассмотреть как свертку, то получается так:
F(w)= H(w)*S(w)
F(w), H(w), S(w) - фурье-образы функций f(t), h(t) и s(t), т.е. соответственно спектр отклика, передаточная функция системы и спектр входного сигнала. На прибор был подан меандр, записан ответ, на основе этих данных предполагается нахождение передаточной характеристики.
Ищу переходную характеристику:
1/H(w)= S(w) / F(w)
в конце перехожу обратно во временную область,
а потом уже делаю обратную свертку с реальным сигналом
А вот где у меня ошибка понять не могу:
по идее должена меняться только фаза сигнала, т.е. должна поменяться только форма сигнала, амплитуда не должна страдать, но как видно по картинке - ожидаемого результата не получается... где-то я в математике наврал, по видимому, не граммотное обращение со свертками... а где разобраться не могу
несколько книжек по обработке поштудировал, но в основном там теория как сама свертка делается и как фильтровать обычной сверткой, поэтому кроме лишней каши в голове подобное действо ничего не добавило
буду рад любому совету/подсказке
Фильтрация от помех прибора
-
- user
- Сообщения: 76
- Зарегистрирован: 26 июн 2011, 12:03
- Версия LabVIEW: 2012
- Контактная информация:
Re: Фильтрация от помех прибора
Рисунок 1. Тип данных на входе в блоки FFT-преобразования - комплексное число (CDB) ? Или DBL (по-умолчанию)? Если первое, то да - операция взятия модуля даст значения амплитуд (для реальных значений надо еще на N поделить), в случае с DBL - положительные числа. Фаза потеряна, да. Потом вы делаете обратное FFT с выводом результата в формате комплексного числа (CDB)
Рисунок 2. Если данные на входе (in) в формате DBL, а судя по тому, что красных точек у входов в блок Deconvolution я не наблюдаю, то это так, следовательно 1/h и идет сюда уже в формате DBL и, либо часть диаграммы отсутствует, либо действительно обратное FFT в комплексном виде не работает как надо, а комплексный вид тут и не нужен.
И еще непонятно, вы создаете массив нулей длиной в количество элементов в in и дополняете его массивом in, получается массив 2*(размер in) с половиной нулей...
Читаю помощь по Deconvolution и вижу:
The Deconvolution VI performs the discrete implementation of the deconvolution using the following steps.
Compute the Fourier transform of the input sequence X * Y.
Compute the Fourier transform of the input sequence Y.
Divide the Fourier transform of X * Y by the Fourier transform of Y. Call the new sequence h.
Compute the inverse Fourier transform of h to obtain the deconvolved sequence X.
т.е. она делает, то что вы описали на Рис 1
Рисунок 2. Если данные на входе (in) в формате DBL, а судя по тому, что красных точек у входов в блок Deconvolution я не наблюдаю, то это так, следовательно 1/h и идет сюда уже в формате DBL и, либо часть диаграммы отсутствует, либо действительно обратное FFT в комплексном виде не работает как надо, а комплексный вид тут и не нужен.
И еще непонятно, вы создаете массив нулей длиной в количество элементов в in и дополняете его массивом in, получается массив 2*(размер in) с половиной нулей...
Читаю помощь по Deconvolution и вижу:
The Deconvolution VI performs the discrete implementation of the deconvolution using the following steps.
Compute the Fourier transform of the input sequence X * Y.
Compute the Fourier transform of the input sequence Y.
Divide the Fourier transform of X * Y by the Fourier transform of Y. Call the new sequence h.
Compute the inverse Fourier transform of h to obtain the deconvolved sequence X.
т.е. она делает, то что вы описали на Рис 1
- kiparym
- advanced
- Сообщения: 178
- Зарегистрирован: 06 сен 2011, 08:52
- Версия LabVIEW: 8.2 & 2011
- Откуда: г. Саров
- Поблагодарили: 1 раз
- Контактная информация:
Re: Фильтрация от помех прибора
Для справки:На прибор был подан меандр, записан ответ, на основе этих данных предполагается нахождение передаточной характеристики.
Для снятия АЧХ устройства меандра явно не достаточно. Мало частот.
Меандр это сумма нечётных гармоник, остальное нули!
Пример:http://www.labviewportal.eu/viewtopic.p ... 415#p52627
-
- beginner
- Сообщения: 13
- Зарегистрирован: 02 мар 2010, 22:31
- Версия LabVIEW: 8.2
- Контактная информация:
Re: Фильтрация от помех прибора
AlexRX,
по рисунку 1:
на входе числа не комплексные, т.е. фазу я потерял и дальнейшие действия получается бессмысленны?
а подавая DBL на вход не будет считать, что мол есть действительная часть, а мнимую он всю по нулям примет? или добавление нулевой мнимой части надо сделать вручную? поможет ли, чтобы не потерять фазу?
или что сделать чтобы не потерять фазу то?
по 2 рисунку:
1/h идет в формате DBL, либо "в лоб" от предыдущего действа, либо выделив только дествитвительную часть из него (и так и так пробовал).
про "еще не понятно":
из хэлпа по обратной свертке:
X is the deconvolved sequence of X * Y and Y. The number of elements in X is size = n – m + 1 where n is the number of elements in X * Y and m is the number of elements in Y.
поскольку размер массивов 1/h и X одинаковой длины, то на выходе у меня получился бы массив из 1 точки, собственно поэтому и добавляю в начале массива X*Y массив с нулями той же длины.
еще вопрос:
"для реальных значений надо еще на N поделить" - что есть N? число элементов? и что получится? помню, что в двумерных массивах делят на определитель, а тут на число элементов? или я что-то не понимаю?
kiparym,
спасибо! эту особенность меандра я совсем забыл...
вопрос наивный, но: а как лучше тогда сделать?? набор гармоник в диапазане полезного сигнала создавать?
по рисунку 1:
на входе числа не комплексные, т.е. фазу я потерял и дальнейшие действия получается бессмысленны?
а подавая DBL на вход не будет считать, что мол есть действительная часть, а мнимую он всю по нулям примет? или добавление нулевой мнимой части надо сделать вручную? поможет ли, чтобы не потерять фазу?
или что сделать чтобы не потерять фазу то?
по 2 рисунку:
1/h идет в формате DBL, либо "в лоб" от предыдущего действа, либо выделив только дествитвительную часть из него (и так и так пробовал).
про "еще не понятно":
из хэлпа по обратной свертке:
X is the deconvolved sequence of X * Y and Y. The number of elements in X is size = n – m + 1 where n is the number of elements in X * Y and m is the number of elements in Y.
поскольку размер массивов 1/h и X одинаковой длины, то на выходе у меня получился бы массив из 1 точки, собственно поэтому и добавляю в начале массива X*Y массив с нулями той же длины.
еще вопрос:
"для реальных значений надо еще на N поделить" - что есть N? число элементов? и что получится? помню, что в двумерных массивах делят на определитель, а тут на число элементов? или я что-то не понимаю?
kiparym,
спасибо! эту особенность меандра я совсем забыл...
вопрос наивный, но: а как лучше тогда сделать?? набор гармоник в диапазане полезного сигнала создавать?
- kiparym
- advanced
- Сообщения: 178
- Зарегистрирован: 06 сен 2011, 08:52
- Версия LabVIEW: 8.2 & 2011
- Откуда: г. Саров
- Поблагодарили: 1 раз
- Контактная информация:
Re: Фильтрация от помех прибора
Одиночный импульс. Чем короче, тем выше частотный диапазон. Идеал – дельта функция....а как лучше тогда сделать?? набор гармоник в диапазане полезного сигнала создавать?
Импульс надо рассматривать как два перехода. Должен предупредить, что задача технически сложна в реализации.
ДПФ – это практически сумма синусоид. Что бы получить среднее, необходимо разделить на количество элементов. Если необходимо обратное преобразование, то делить не надо."для реальных значений надо еще на N поделить" - что есть N? число элементов? и что получится?