реклама на сайте
подробности

 
 
> вопрос про интерполяцию
jorikdima
сообщение Nov 5 2010, 16:45
Сообщение #1


тут может быть ваша реклама
*****

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



Здравствуйте.
Возник вопрос, который быть может, надуман, но хочется разобраться.
Есть сигнал - результат НЧ фильтрации исходного сигнала с целью определить его постоянную составляющую. То есть полоса сигнала в общем то составляет доли Герца, но среднее значение (или нулевая гармоника) может варьироваться в довольно большом диапазоне. Частоту дискретизации этого сигнала нужно поднять в 25 раз, для чего требуется провести интерполяцию. В книжках прочитал, что делается это с помощью добавления нужного числа нулей между исходными отсчетами и пропусканием через ФНЧ для удаления размноженных гармоник. В принципе все работает, но появляются артефакты. Дело в том, что во всех книжках, где рассказывается про интерполяцию, нарисован сигнал с околонулевой постоянной составляющей, ну либо нулевая гармоника много меньше других гармоник в сигнале. И тут все прекрасно, добавляются нули, затем они сглаживаются ФНЧ. Но в случае когда, нулевая гармоника является преобладающей добавление в сигнал отсчетов, сильно отличающихся от текущего значения сигнала (а именно нулевые отсчеты) каждый раз вызывают всплеск на выходе фильтра, пропорциональный разнице между нулем и реальным значением сигнала и зависящим от ИХ фильтра. Этот всплеск у меня много больше шума исходного сигнала, являющейся собственно постоянным током и недопустим.
Что делают гуру в таких ситуациях?
У самого есть идея следующая. Не добавлять нулевых отсчетов и не ставить ФНЧ, а вписывать какой-нибудь полином, тот же сплайн, в реальные отсчеты сигнала, а затем, найдя коэффициенты сплайна, рассчитывать 24 значения между исходными выборками. Минус такого решения, что это не риал тайм, нужно дождаться следующего отсчета прежде чем получить 24 точки до него, но мне не страшно это.
Справедливо ли решение или есть какие-то более мудрые действия?
Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sup-sup
сообщение Nov 5 2010, 18:49
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 674
Регистрация: 26-08-05
Пользователь №: 7 997



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

Только добавлять нули и фильтровать, как изначально правильно решил автор. Правильно подобранный фильтр все и решит. Полоса сигнала не может быть больше, чем Fs/2, то есть полоса фильтра должна быть ниже, но как можно ближе к Fs/2 (к исходной частоте дискретизации. А значит, фильтр (обязательно КИХ) должен быть крутой. Можно сделать интерполяцию в два захода (в пять и еще раз в пять раз). В этом случае фильтры будут в сумме короче. Для сравнения нужно профильтровать исходный сигнал на исходной частоте фильтром с такой же характеристикой и сравнивать уже этот сигнал с полученным после интерполяции. Совпадение должно быть хорошим.
Go to the top of the page
 
+Quote Post
bahurin
сообщение Nov 7 2010, 12:23
Сообщение #3


Местный
***

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



1. Если надо оценить постоянную составляющую то надо делать фильтр скользящего среднего. Доказано что такой фильтр дает состоятельную несмещенную оценку постоянной составляющей, причем тем оценка точнее, чем фильтр длинее. Если ваша постоянка не меняется во времени (ваш процесс стационарен), то можно реализовать просто интегратор, который будет выдавать постоянную составляющую умноженную на интервал интегрирования. Реализовать фильтр интегратор очень просто.

2. Если ваша постоянка меняется во времени, значит ваш процесс нестационарен и в этом случае принято определять интервал стационарности сигнала, который и будет задавать длину фильтра скользящего среднего. Говорить о состоятельности и несмещенности оценки в этом случае не приходится.

3. Если вам надо вырезать какую-то часть спектра вблизи нуля, то для этого необходимо ставить фвч. При этом частота среза вашего цифрового ФВЧ будет зависеть от полосы вблизи нуля и частоты дискретизации. Если скажем вы хотите на частоте дискретизации 1 МГц отфильтровать все что ниже 1 Гц, то вам потребуется FIR фильтр ОЧЕНЬ большого порядка. IIR в этом случае вообще может быть неустойчив даже при 32 битном представлении с плавующей точкой. Это обусловленно самым фундаментальным принципом - принципом неопределенности и ни один смертный ничего не может с этим поделать.

Если я правильно понял, то частота дискретизации много больше условно верхней частоты сигнала. Поэтому чтобы реализовать нормальную фильтрацию надо децимировать. Это нормально. Мне не ясно зачем потом обратно интерполировать? Если сумели снизить частоту дискретизации ничего существенного не потеряв зачем обратно то задирать? Обрабатывайте дальше на пониженной частоте все алгоритмы будут работать с той же точностью, только быстрее.

4. Не понятрно, почему вы боитесь исказить фазу IIR фильтром? если у вас нулевая пч то ставьте один и тотже IIR на I и на Q и наслаждайтесь. Никакие характеристики вы не потеряете, потому что разность фаз квадратурных каналов в останется неизменной.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Nov 7 2010, 13:04
Сообщение #4


тут может быть ваша реклама
*****

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



Цитата(bahurin @ Nov 7 2010, 15:23) *
3. Если вам надо вырезать какую-то часть спектра вблизи нуля, то для этого необходимо ставить фвч. При этом частота среза вашего цифрового ФВЧ будет зависеть от полосы вблизи нуля и частоты дискретизации. Если скажем вы хотите на частоте дискретизации 1 МГц отфильтровать все что ниже 1 Гц, то вам потребуется FIR фильтр ОЧЕНЬ большого порядка. IIR в этом случае вообще может быть неустойчив даже при 32 битном представлении с плавующей точкой. Это обусловленно самым фундаментальным принципом - принципом неопределенности и ни один смертный ничего не может с этим поделать.

Да, скорее этот вариант
Цитата(bahurin @ Nov 7 2010, 15:23) *
Если я правильно понял, то частота дискретизации много больше условно верхней частоты сигнала. Поэтому чтобы реализовать нормальную фильтрацию надо децимировать. Это нормально. Мне не ясно зачем потом обратно интерполировать? Если сумели снизить частоту дискретизации ничего существенного не потеряв зачем обратно то задирать? Обрабатывайте дальше на пониженной частоте все алгоритмы будут работать с той же точностью, только быстрее.

Интерполировать, чтобы из сигнала с большой частотой дискретизации вычесть постоянную составляющую. Следовательно они должны идти с одним самплинг рэйтом, а именно тем, который выше.
Go to the top of the page
 
+Quote Post
bahurin
сообщение Nov 7 2010, 13:37
Сообщение #5


Местный
***

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



Цитата(jorikdima @ Nov 7 2010, 16:04) *
Да, скорее этот вариант

Интерполировать, чтобы из сигнала с большой частотой дискретизации вычесть постоянную составляющую. Следовательно они должны идти с одним самплинг рэйтом, а именно тем, который выше.


Если вы поставите ФВЧ то вам не придется ничего вычитать. Ваша постоянка будет подавлена ФВЧ. Если вы поставите ФВЧ после децимации, то ФВЧ будет меньшего порядка, т.к. частота дискретизации ниже. И всю дальнейшую обработку можно вести после децимации и соотвественно фильтрации ФВЧ без интерполяции и прочих прелестей жизни. Только надо децимировать правильно чтобы не потерять полезный сигнал.

Цитата(sup-sup @ Nov 7 2010, 16:24) *
1. FIR с прямоугольным окном (скользящее среднее) заведомо хуже, а фильтр длиннее, чем FIR с окном, расчитанным под задачу.

фильтр скользящего среднего обеспечивает несмещенную состоятельную оценку мат. ожидания. читайте матчасть.
Цитата(sup-sup @ Nov 7 2010, 16:24) *
2. Если бы не было проблем, автор сразу бы решил просто вычесть грубо постоянку и резко уменьшить таким образом динамический диапазон. Возможно, постоянка - это низкочастотный шум, диапазон которого гораздо больше сигнала и по каким-то причинам его нельзя убрать до оцифровки. Возможно, это полезный сигнал для другой части устройства. Можно погадать. В этом случае лучшее решение - нормально расчитанный FIR (я бы взял подходящее окно, например Гаусса и подобрал подходящий коэффициент и длину под затухание вне полосы.
3. Автор сказал, что постоянку надо вернуть с помощью интерполяции на исходную частоту чтобы вычесть ее из сигнала. То есть, такой способ реализации фильтра высоких частот.

Еще раз повторяю. Капитан очевидность утверждает что убирать постоянную составляющую надо фильтром верхних частот. В технике для устранения постоянной составляющей ставят емкость, а не вычитатель. Убирать постоянку вычитанием крайне неэффективно. ПРичем с интерполяцией дейимацией и прочего.

Цитата(sup-sup @ Nov 7 2010, 16:24) *
4. Тут я не понял. А раз так, что применил бы FIR c которым не должно быть проблем.


поясняю пропускание через IIR фильтр добавляет к синфазной и квадратурному каналам одинаковую фазовую добавку exp(j*Ф(w)), которая не повлияет на амплитудную огибающую и скомпенсируется при вычислении фазовой огибающей при делении atan(Q(t)/I(t)).


Go to the top of the page
 
+Quote Post
sup-sup
сообщение Nov 7 2010, 14:05
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 674
Регистрация: 26-08-05
Пользователь №: 7 997



Цитата(bahurin @ Nov 7 2010, 17:37) *
1. фильтр скользящего среднего обеспечивает несмещенную состоятельную оценку мат. ожидания. читайте матчасть...
2. Еще раз повторяю. Капитан очевидность утверждает что убирать постоянную составляющую надо фильтром верхних частот. В технике для устранения постоянной составляющей ставят емкость, а не вычитатель. Убирать постоянку вычитанием крайне неэффективно. ПРичем с интерполяцией дейимацией и прочего.
3. поясняю пропускание через IIR фильтр добавляет к синфазной и квадратурному каналам одинаковую фазовую добавку exp(j*Ф(w)), которая не повлияет на амплитудную огибающую и скомпенсируется при вычислении фазовой огибающей при делении atan(Q(t)/I(t)).

1. Скользящее среднее имеет частотку sin(x)/x. И это значительно хуже того, что можно получить фильтром с другим окном. По-другому, при очередном сдвиге фильтра с прямоугольным окном из него выпадает и в него попадает попадает полный сэмпл, а в фильтре с неприподнятым окном только очень маленькая его часть, что и приводит к лучшей частотке. В конце концов, любой FIR можно назвать фильтром скользящего среднего., тогда да. Еще, можно поставить подряд несколько одинаковых скользящих фильтров с прямоугольным окном и получим в пределе гауссовское.
2. В конце концов и получится ФВЧ. Если при такой 'неправильной' организации на него уйдет меньше ресурса, то и нормально.
3. Так тут вроде нет действительной и мнимой частей. А IIR на подозрении, так как кажется лучше, чтобы фазовая была линейна, чтобы при вычитании не нарушилось ничего. Все-таки 80 дБ.

Сообщение отредактировал sup-sup - Nov 7 2010, 14:07
Go to the top of the page
 
+Quote Post
bahurin
сообщение Nov 7 2010, 14:56
Сообщение #7


Местный
***

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



Цитата(sup-sup @ Nov 7 2010, 17:05) *
1. Скользящее среднее имеет частотку sin(x)/x. И это значительно хуже того, что можно получить фильтром с другим окном. По-другому, при очередном сдвиге фильтра с прямоугольным окном из него выпадает и в него попадает попадает полный сэмпл, а в фильтре с неприподнятым окном только очень маленькая его часть, что и приводит к лучшей частотке. В конце концов, любой FIR можно назвать фильтром скользящего среднего., тогда да. Еще, можно поставить подряд несколько одинаковых скользящих фильтров с прямоугольным окном и получим в пределе гауссовское.
2. В конце концов и получится ФВЧ. Если при такой 'неправильной' организации на него уйдет меньше ресурса, то и нормально.
3. Так тут вроде нет действительной и мнимой частей. А IIR на подозрении, так как кажется лучше, чтобы фазовая была линейна, чтобы при вычитании не нарушилось ничего. Все-таки 80 дБ.


1. А с чего вы взяли, что на точность оценки мат ожидания оказывает влияние АЧХ вашего скользящего окна? вот вам пример из матлаба который говорит о том что использование окна хэмминга при оценки матожидания увеличивает СКО оценки
Код
N = 10000;  %длина исходного сигнала
L = 100;    %длина фильтра
s = randn(1,N)+1;   % исходный СП с матожиданием равным 1

h = ones(1,L)/L;    %прямоуглольное скользящее окно
w = hamming(L);     %скользящее окно хемминга
w = w/sum(w);       %нормирую окно хемминга чтобы сумма равна была 1 для точного определения мат ожидания

sh = filter(h,1,s); %фильтрую скользящим среднем с прямоугольным окном
sw = filter(w,1,s); %фильтрую скользящим среднем с окном хэмминга

stdh = std(sh(L:N))   %СКО на выходе прямоугольного окна беру без первых L элементов чтобы устранить переходной процесс
stdw = std(sw(L:N))   %СКО на выходе окна хэмминга беру без первых L элементов чтобы устранить переходной процесс

plot(1:N,sh,1:N,sw) % графики


при этом получаем СКО оценки мат ожидания прямоугольным окном stdh = 0.0952, а окном хэмминга stdw = 0.11. Видно что СКО оценки при окне хэмминга БОЛЬШЕ.

2. вряд ли с интерполяцией и т.д. на него уйдет меньше ресурсов.



Цитата(jorikdima @ Nov 7 2010, 17:48) *
Не соглашусь с капитаном. ФВЧ и ФНЧ дуальны, используя ФНЧ можно вычитанием получить ФВЧ, почему нет. И в моем случае не эффективно именно не использовать децимацию.


Категорически не согласен. Если речь идет о FIR (КИХ) фильтре с линейной фазой, то еще может после некоторых танцев с бубнами путем утсранения задержки вы получите что-то похожее на ФВЧ. Но если возьмете IIR фильтр (баттерворта, чебышева или кауэра), то тут у вас точно вычитанием результата как на выходе ФВЧ не получится никогда.
Go to the top of the page
 
+Quote Post
sup-sup
сообщение Nov 7 2010, 15:11
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 674
Регистрация: 26-08-05
Пользователь №: 7 997



Не могу быстро ответить про Матлабовский пример. Как я понял, там взят белый шум. Реально () есть низкочастотная составляющая, которую надо убрать. Мне понятнее это представлять как фильтр. В этом случае, требуемое затухание нужно около 100 дБ. Это решение легко проверить. Нужна только реальная выборка. Автор, наверное, имеет и проверит, что посчитает нужным. Насчет бубна, так нет, применяя FIR можно и без бубна. Задержка конкретная, которую с точность до сэмпла надо учесть при вычитании.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - Tanya   Цитата(bahurin @ Nov 7 2010, 15:23) 1. Ес...   Nov 7 2010, 12:51
||- - bahurin   Цитата(Tanya @ Nov 7 2010, 15:51) Все пра...   Nov 7 2010, 13:22
||- - Tanya   Цитата(bahurin @ Nov 7 2010, 16:22) Приве...   Nov 7 2010, 13:39
||- - bahurin   Цитата(Tanya @ Nov 7 2010, 16:39) А если ...   Nov 7 2010, 13:57
||||- - 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


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 12:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01498 секунд с 7
ELECTRONIX ©2004-2016