|
вопрос про интерполяцию |
|
|
|
Nov 5 2010, 16:45
|

тут может быть ваша реклама
    
Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280

|
Здравствуйте. Возник вопрос, который быть может, надуман, но хочется разобраться. Есть сигнал - результат НЧ фильтрации исходного сигнала с целью определить его постоянную составляющую. То есть полоса сигнала в общем то составляет доли Герца, но среднее значение (или нулевая гармоника) может варьироваться в довольно большом диапазоне. Частоту дискретизации этого сигнала нужно поднять в 25 раз, для чего требуется провести интерполяцию. В книжках прочитал, что делается это с помощью добавления нужного числа нулей между исходными отсчетами и пропусканием через ФНЧ для удаления размноженных гармоник. В принципе все работает, но появляются артефакты. Дело в том, что во всех книжках, где рассказывается про интерполяцию, нарисован сигнал с околонулевой постоянной составляющей, ну либо нулевая гармоника много меньше других гармоник в сигнале. И тут все прекрасно, добавляются нули, затем они сглаживаются ФНЧ. Но в случае когда, нулевая гармоника является преобладающей добавление в сигнал отсчетов, сильно отличающихся от текущего значения сигнала (а именно нулевые отсчеты) каждый раз вызывают всплеск на выходе фильтра, пропорциональный разнице между нулем и реальным значением сигнала и зависящим от ИХ фильтра. Этот всплеск у меня много больше шума исходного сигнала, являющейся собственно постоянным током и недопустим. Что делают гуру в таких ситуациях? У самого есть идея следующая. Не добавлять нулевых отсчетов и не ставить ФНЧ, а вписывать какой-нибудь полином, тот же сплайн, в реальные отсчеты сигнала, а затем, найдя коэффициенты сплайна, рассчитывать 24 значения между исходными выборками. Минус такого решения, что это не риал тайм, нужно дождаться следующего отсчета прежде чем получить 24 точки до него, но мне не страшно это. Справедливо ли решение или есть какие-то более мудрые действия? Спасибо.
|
|
|
|
|
 |
Ответов
|
Nov 5 2010, 18:49
|
Знающий
   
Группа: Участник
Сообщений: 674
Регистрация: 26-08-05
Пользователь №: 7 997

|
Цитата(jorikdima @ Nov 5 2010, 19:45)  Здравствуйте. Возник вопрос, который быть может, надуман, но хочется разобраться. Есть сигнал - результат НЧ фильтрации исходного сигнала с целью определить его постоянную составляющую. То есть полоса сигнала в общем то составляет доли Герца, но среднее значение (или нулевая гармоника) может варьироваться в довольно большом диапазоне. Частоту дискретизации этого сигнала нужно поднять в 25 раз, для чего требуется провести интерполяцию. В книжках прочитал, что делается это с помощью добавления нужного числа нулей между исходными отсчетами и пропусканием через ФНЧ для удаления размноженных гармоник. В принципе все работает, но появляются артефакты. Дело в том, что во всех книжках, где рассказывается про интерполяцию, нарисован сигнал с околонулевой постоянной составляющей, ну либо нулевая гармоника много меньше других гармоник в сигнале. И тут все прекрасно, добавляются нули, затем они сглаживаются ФНЧ. Но в случае когда, нулевая гармоника является преобладающей добавление в сигнал отсчетов, сильно отличающихся от текущего значения сигнала (а именно нулевые отсчеты) каждый раз вызывают всплеск на выходе фильтра, пропорциональный разнице между нулем и реальным значением сигнала и зависящим от ИХ фильтра. Этот всплеск у меня много больше шума исходного сигнала, являющейся собственно постоянным током и недопустим. Что делают гуру в таких ситуациях? У самого есть идея следующая. Не добавлять нулевых отсчетов и не ставить ФНЧ, а вписывать какой-нибудь полином, тот же сплайн, в реальные отсчеты сигнала, а затем, найдя коэффициенты сплайна, рассчитывать 24 значения между исходными выборками. Минус такого решения, что это не риал тайм, нужно дождаться следующего отсчета прежде чем получить 24 точки до него, но мне не страшно это. Справедливо ли решение или есть какие-то более мудрые действия? Спасибо. Только добавлять нули и фильтровать, как изначально правильно решил автор. Правильно подобранный фильтр все и решит. Полоса сигнала не может быть больше, чем Fs/2, то есть полоса фильтра должна быть ниже, но как можно ближе к Fs/2 (к исходной частоте дискретизации. А значит, фильтр (обязательно КИХ) должен быть крутой. Можно сделать интерполяцию в два захода (в пять и еще раз в пять раз). В этом случае фильтры будут в сумме короче. Для сравнения нужно профильтровать исходный сигнал на исходной частоте фильтром с такой же характеристикой и сравнивать уже этот сигнал с полученным после интерполяции. Совпадение должно быть хорошим.
|
|
|
|
|
Nov 7 2010, 12:23
|

Местный
  
Группа: Участник
Сообщений: 240
Регистрация: 20-09-08
Пользователь №: 40 347

|
1. Если надо оценить постоянную составляющую то надо делать фильтр скользящего среднего. Доказано что такой фильтр дает состоятельную несмещенную оценку постоянной составляющей, причем тем оценка точнее, чем фильтр длинее. Если ваша постоянка не меняется во времени (ваш процесс стационарен), то можно реализовать просто интегратор, который будет выдавать постоянную составляющую умноженную на интервал интегрирования. Реализовать фильтр интегратор очень просто.
2. Если ваша постоянка меняется во времени, значит ваш процесс нестационарен и в этом случае принято определять интервал стационарности сигнала, который и будет задавать длину фильтра скользящего среднего. Говорить о состоятельности и несмещенности оценки в этом случае не приходится.
3. Если вам надо вырезать какую-то часть спектра вблизи нуля, то для этого необходимо ставить фвч. При этом частота среза вашего цифрового ФВЧ будет зависеть от полосы вблизи нуля и частоты дискретизации. Если скажем вы хотите на частоте дискретизации 1 МГц отфильтровать все что ниже 1 Гц, то вам потребуется FIR фильтр ОЧЕНЬ большого порядка. IIR в этом случае вообще может быть неустойчив даже при 32 битном представлении с плавующей точкой. Это обусловленно самым фундаментальным принципом - принципом неопределенности и ни один смертный ничего не может с этим поделать.
Если я правильно понял, то частота дискретизации много больше условно верхней частоты сигнала. Поэтому чтобы реализовать нормальную фильтрацию надо децимировать. Это нормально. Мне не ясно зачем потом обратно интерполировать? Если сумели снизить частоту дискретизации ничего существенного не потеряв зачем обратно то задирать? Обрабатывайте дальше на пониженной частоте все алгоритмы будут работать с той же точностью, только быстрее.
4. Не понятрно, почему вы боитесь исказить фазу IIR фильтром? если у вас нулевая пч то ставьте один и тотже IIR на I и на Q и наслаждайтесь. Никакие характеристики вы не потеряете, потому что разность фаз квадратурных каналов в останется неизменной.
|
|
|
|
|
Nov 7 2010, 12:51
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(bahurin @ Nov 7 2010, 15:23)  1. Если надо оценить постоянную составляющую то надо делать фильтр скользящего среднего. .... Все правильно. Только хочется заметить, что никаких магических универсальных формул не бывает. Без априорной информации об "истинном" сигнале любые фильтры не имеют смысла. Вот имеются "измерения" в какие-то моменты времени. Без дополнительных знаний или предположений они и являются сигналом. А если я предполагаю, что должна быть линейная функция, то должна провести прямую (линейная аппроксимация) максимально близко к этим точкам. Или другой функцией приблизить. Тут еще нужно знать, какова ошибка "измерений". Вот пусть есть 4 точки - (0, 0), (1, 1), (100, 1) (101, 0). Можно приблизить квадратичной функцией... А, может, это горизонтальная прямая? Извините за банальности.
|
|
|
|
|
Nov 7 2010, 13:22
|

Местный
  
Группа: Участник
Сообщений: 240
Регистрация: 20-09-08
Пользователь №: 40 347

|
Цитата(Tanya @ Nov 7 2010, 15:51)  Все правильно. Только хочется заметить, что никаких магических универсальных формул не бывает. Без априорной информации об "истинном" сигнале любые фильтры не имеют смысла. Вот имеются "измерения" в какие-то моменты времени. Без дополнительных знаний или предположений они и являются сигналом. А если я предполагаю, что должна быть линейная функция, то должна провести прямую (линейная аппроксимация) максимально близко к этим точкам. Или другой функцией приблизить. Тут еще нужно знать, какова ошибка "измерений". Вот пусть есть 4 точки - (0, 0), (1, 1), (100, 1) (101, 0). Можно приблизить квадратичной функцией... А, может, это горизонтальная прямая? Извините за банальности. предлагаю не давить интеллектом, ибо вопрос и топик собственно не о том, что считать истиным сигналом и какая априорная инфа используется. К тому же фильтр (скажем верхних частот) вобщем-то совершенно достаточная вещь, которая расчитывается и реализуется без использования априорной информации о сигнале. Я например могу расчитать цифровой эллиптический ФВЧ с заданной частотой среза, подавлением в полосе заграждения и неравномерностью в полосе пропускания. И я могу реализовать этот фильтр программно и он будет фильтровать все сигналы одинаково подавляя сигнал в полосе заграждения и одинаково искажая их в полосе пропускания. И по правде сказать этому фильтру будет совершенно безразлично что на входе истинный сигнал или фальшивый. А вообще предположение о том что ваш случайный процесс - стационарный и эргодический достаточные априорные допущения чтобы применять фильтр скользящего среднего. Эти допущения взяты не с потолка, а исходя из закона больших чисел, который говорит, что сумма большого числа любых процессов всегда стремиться к гауссову процессу, который стационарен. Приведенный пример с 4-мя точками это не банальность, это очень короткая выборка, по которой определить статистические характеристики можно лишь очень приблеженно. Возьмите еще 400 точек, а лучше 4000 и тогда статистическими методами вы определите как лучше приближать параболой или линией. Кроме того чем больше у вас будет точек, тем лучше вы проведете это линию или параболу, по заданному критерию (как правило минимума СКО).
|
|
|
|
|
Nov 7 2010, 13:39
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(bahurin @ Nov 7 2010, 16:22)  Приведенный пример с 4-мя точками это не банальность, это очень короткая выборка, по которой определить статистические характеристики можно лишь очень приблеженно. Возьмите еще 400 точек, а лучше 4000 и тогда статистическими методами вы определите как лучше приближать параболой или линией. Кроме того чем больше у вас будет точек, тем лучше вы проведете это линию или параболу, по заданному критерию (как правило минимума СКО). А если я знаю (априорно), что погрешность измерения одна тысячная? Зачем мне статистикой убивать? Или ее набирать... А если больше нет точек? Вот представьте... Сейсмограф... Землятресение... Отфильтруем - и нет его. А по поводу скользящего среднего... Почему бы не ввести весовую функцию... Горбик... Или что-нибудь иное... А чтобы выбрать частоту среза и нужна априорная информация. Короче говоря, нужна модель процесса...
|
|
|
|
Сообщений в этой теме
jorikdima вопрос про интерполяцию Nov 5 2010, 16:45 alexPec А если не нулями 24 отсчета забивать, а собственно... Nov 5 2010, 17:08 Designer56 Цитата(alexPec @ Nov 5 2010, 22:08) А есл... Nov 5 2010, 18:00 Stanislav Цитата(jorikdima @ Nov 5 2010, 19:45) Эт... Nov 5 2010, 17:16 des00 Цитата(jorikdima @ Nov 5 2010, 10:45) У с... Nov 5 2010, 17:20 Stanislav Цитата(des00 @ Nov 5 2010, 20:20) потребу... Nov 5 2010, 17:23  des00 Цитата(Stanislav @ Nov 5 2010, 11:23)
По... Nov 5 2010, 17:27   Stanislav Цитата(des00 @ Nov 5 2010, 20:27) Под зер... Nov 5 2010, 17:32    des00 Цитата(Stanislav @ Nov 5 2010, 11:32) Это... Nov 5 2010, 17:37     Stanislav Цитата(des00 @ Nov 5 2010, 20:37) модель ... Nov 5 2010, 17:58 _Pasha Цитата(des00 @ Nov 5 2010, 20:20) потребу... Nov 5 2010, 17:30  des00 Цитата(_Pasha @ Nov 5 2010, 11:30) Полино... Nov 5 2010, 17:33 Stanislav Понеслась нелёгкая, похоже... Nov 5 2010, 17:36 thermit Цитатаjorikdima:
Что делают гуру в таких ситуациях... Nov 5 2010, 17:51 Stanislav Цитата(sup-sup @ Nov 5 2010, 21:49) ... Nov 5 2010, 19:24     bahurin Цитата(Tanya @ Nov 7 2010, 16:39) А если ... Nov 7 2010, 13:57  jorikdima Цитата(bahurin @ Nov 7 2010, 15:23) 3. Ес... Nov 7 2010, 13:04   bahurin Цитата(jorikdima @ Nov 7 2010, 16:04) Да,... Nov 7 2010, 13:37    sup-sup Цитата(bahurin @ Nov 7 2010, 17:37) 1. фи... Nov 7 2010, 14:05     bahurin Цитата(sup-sup @ Nov 7 2010, 17:05) ... Nov 7 2010, 14:56      sup-sup Не могу быстро ответить про Матлабовский пример. К... Nov 7 2010, 15:11       bahurin Цитата(sup-sup @ Nov 7 2010, 18:11) ... Nov 7 2010, 15:49        sup-sup Цитата(bahurin @ Nov 7 2010, 19:49) Вот т... Nov 7 2010, 18:07         sup-sup Прикидка размеров фильтров для интерполяции на 25 ... Nov 7 2010, 21:09         bahurin Цитата(sup-sup @ Nov 7 2010, 21:07) ... Nov 8 2010, 05:10          sup-sup Цитата(bahurin @ Nov 8 2010, 08:10) Вот с... Nov 8 2010, 05:59      Самурай Цитата(bahurin @ Nov 7 2010, 17:56) >Ц... Nov 7 2010, 16:17    jorikdima Цитата(bahurin @ Nov 7 2010, 16:37) Если ... Nov 7 2010, 14:48  sup-sup Цитата(bahurin @ Nov 7 2010, 15:23) 1. Ес... Nov 7 2010, 13:24 jorikdima Цитата(alexPec @ Nov 5 2010, 20:08) А есл... Nov 5 2010, 19:09 sup-sup Цитата(jorikdima @ Nov 5 2010, 22:09) На ... Nov 5 2010, 20:01 des00 Цитата(jorikdima @ Nov 5 2010, 13:09) Ито... Nov 6 2010, 05:31 jorikdima Цитата(Stanislav @ Nov 5 2010, 22:24) Дум... Nov 5 2010, 20:16 sup-sup Цитата(jorikdima @ Nov 6 2010, 00:16) С р... Nov 5 2010, 20:30 Stanislav Цитата(jorikdima @ Nov 5 2010, 23:16) С р... Nov 6 2010, 11:06  jorikdima Цитата(Stanislav @ Nov 6 2010, 14:06) Про... Nov 6 2010, 13:37   Stanislav Цитата(jorikdima @ Nov 6 2010, 16:37) Есл... Nov 6 2010, 13:45    Самурай Цитата(Stanislav @ Nov 6 2010, 16:45) Ваш... Nov 6 2010, 19:59     Stanislav Цитата(Самурай @ Nov 6 2010, 22:59) Фильт... Nov 7 2010, 00:39      sup-sup Цитата(Stanislav @ Nov 7 2010, 04:39) При... Nov 7 2010, 08:20 jorikdima Спасибо всем большое, не ожидал, что тема вызовет ... Nov 6 2010, 21:36
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|