Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Передискретизация и увеличение разрядности АЦП
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Страницы: 1, 2
Alexashka
Всем добрый день!

Встала такая задача: у имеющегося 10-битного АЦП нужно повысить эффективную разрядность до 12 бит. 

Структуру дельта-сигма АЦП вполне представляю, но там отсчеты фильтруются sinc-фильтром высокого порядка. А мне бы нужно попроще, с минимумом вычислений.

Прочитал эту статью Нажмите для просмотра прикрепленного файла однако остались вопросы. Например я делаю передискретизацию в 16 раз. Т.е это означает увеличение эфф.разрядности на 2 бита. При должной фильтрации наверно так и будет. Но в статье предлогается брать сумму по группам из 16 отсчетов. Внутренний голос подсказывает, что при этом произойдет увеличение шумов в корень из 16 раз, т.е в 4 раза (если считать в LSB). Однако вес одного LSB теперь будет в 16 раз меньше (входной диапазон напряжений АЦП остался тем же, а диапазон "кодов" на выходе сумматора вырос в 16 раз). Т.е если перевести полученный с сумматора код в "вольты", то эффективный шум вроде как уменьшается в 4 раза. Так ли это и какой смысл после этого делать деление на 16 -сигнал станет чище конечно, но шумы квантования при этом возрастают?  laughing.gif
ViKo
Цитата(Alexashka @ Apr 1 2011, 13:15) *
Т.е если перевести полученный с сумматора код в "вольты", то эффективный шум вроде как уменьшается в 4 раза. Так ли это и какой смысл после этого делать деление на 16 -сигнал станет чище конечно, но шумы квантования при этом возрастают?

То есть вопрос - отбрасывать ли два младших разряда, или оставить?
Вам же надо 12 разрядов. Вот их и оставьте. А поделить на 16 - значит выбросить все 4 младших. Зачем?
Tanya
Тема перемещена по просьбе ТС.
Alexashka
Цитата(ViKo @ Apr 1 2011, 13:46) *
То есть вопрос - отбрасывать ли два младших разряда, или оставить?
Вам же надо 12 разрядов. Вот их и оставьте. А поделить на 16 - значит выбросить все 4 младших. Зачем?

Да, по идее так и должно быть, только будет ли простое сложение достаточной фильтрацией чтобы повысить разрядность?

И вот собственно что в тексте не понял: 
Цитата
Adding these extra samples and right-shifting the result by a factor n,
yields a result with resolution increased by n bits.
 

Как так, делаем правый cдвиг на n бит (деление на 2^n) и получаем сигнал с бОльшим разрешением. Разрешение насколько я понимаю это величина LSB? Если сложить 4 выборки и поделить на 4 получим простое усреднение, а LSB-то останется таким же.

И вот еще цитата: 
Цитата
Normal averaging will only even out signal fluctuations, while Decimation will increase the resolution.
 

Опять не понятно. Усреднение убирает флуктуации. Это понятно, но как прореживание увеличивает разрешение?! Или это слово resolution можно вставлять где угодно, как в русское слово из 3х букв?  biggrin.gif
hobgoblin
Цитата(Alexashka @ Apr 1 2011, 15:45) *
Да, по идее так и должно быть, только будет ли простое сложение достаточной фильтрацией чтобы повысить разрядность?

Обычно, по крайней мере в сигма-дельта АЦП, по отдельности такое усреднение не используют, а сначала понижают в несколько раз путем усреднения (или CIC-фильтром), а потом ставят децимирующий FIR фильтр. Делается это по двум причинам. Во первых АЧХ будет иметь завал и единичный коэффициент пропускания только на DC. Во вторых вдали от DC будет засчет наложения попадать внеполосный шум. Представляете себе АЧХ moving average фильтра? Подумайте что с ним будет при понижении частоты отсчетов на выходе в N раз.

Цитата
И вот собственно что в тексте не понял:  

Как так, делаем правый cдвиг на n бит (деление на 2^n) и получаем сигнал с бОльшим разрешением. Разрешение насколько я понимаю это величина LSB? Если сложить 4 выборки и поделить на 4 получим простое усреднение, а LSB-то останется таким же.



На мой взгляд, понятно написано
Цитата
As seen from Equation 3-1, increasing the resolution from
10-bits to 12-bits requires the summation of 16 10-bit values. A sum of 16 10-bit
values generates a 14-bit result where the last two bits are not expected to hold
valuable information. To get ‘back’ to 12-bit it is necessary to scale the result.

Вы суммируете 16 чисел, то есть грубо говоря умножаете на шестнадцать (сигнал медленно меняется в пределах окна суммирования), а сдвигаете на два бита, то есть делите на 4. Получаете два дополнительных бита разрешения.

Цитата
Опять не понятно. Усреднение убирает флуктуации. Это понятно, но как прореживание увеличивает разрешение?! Или это слово resolution можно вставлять где угодно, как в русское слово из 3х букв?  biggrin.gif

В английской технической литературе используют термин decimation по разному, где-то под этим подразумевается простое прореживание, а где-то низкочастотная фильтрация плюс прореживание по выходу. Второй вариант более правильный, и именно он может дать повышение разрешения.
ViKo
Цитата(Alexashka @ Apr 1 2011, 14:45) *
Да, по идее так и должно быть, только будет ли простое сложение достаточной фильтрацией чтобы повысить разрядность?

На мой взгляд - это будет самое эффективное решение. Когда вес всех участвующих выборок (16 штук) одинаковый.
По цитатам - не понимаю. Нет возможности вникать. Не обращайте внимания.
vadimuzzz
Цитата(Alexashka @ Apr 1 2011, 18:45) *
Разрешение насколько я понимаю это величина LSB? Если сложить 4 выборки и поделить на 4 получим простое усреднение, а LSB-то останется таким же.

разрешение характеризует дисперсию шума квантования.


шум квантования в первом приближении белый. делаете усреднение по N отсчетам - пропорционально уменьшаете полосу => амплитуду шума (дисперсию).

www.analog.com/static/imported-files/tutorials/MT-003.pdf
sup-sup
Цитата(Alexashka @ Apr 1 2011, 13:15) *
Всем добрый день!
Встала такая задача: у имеющегося 10-битного АЦП нужно повысить эффективную разрядность до 12 бит. ..

Делал что-то подобное с 12-битным ADS788. Нужна была полоса до 100 кГц, а частоту сэмплирования можно было выбрать до 2 МГц (при питании 3.3В). В первую очередь подыскал АЦП, чтобы SFDR (Spurious free dynamic range) (кроме подходящей цены, скорости, и т.д..) был бы побольше, чем как для 12 бит. У ADS788 он 86 дБ как раз на 100 кГц, что соответствует примерно 14 разрядам. Сделал пробные оцифровки с частотой примерно 1500 ksps, посмотрел сигнал и сделал по нему спектр и спектрограмму (много раз с разными настройками). Действительно, получил нижний уровень не хуже -90 дБ относительно полной шкалы. Дальше было все понятно - делать FIR фильтр, децимацию. Кроме того, что внутренние шумы оказались меньше одного шага квантования, что приводило к тому, что при оцифровке сигнала, меньшего чем шаг квантования, АЦП выдавал один и тот же код длительное время. Естественно, это приводило к тому, что фильтровать на некоторых существенных отрезках было нечего. Выкрутился тем, что вне полосы подал тон (хотел шум, но простого меандра хватило) с уровнем выше шага квантования и тогда действительно был получен уровень -90 дБ.
Выводы сделал такие, что 1) - нужен АЦП с 'повышенной внутренней разрядностью', пусть хоть он 8-битный и 2) - возможно, для улучшения диапазона в полосе придется добавить шум вне полосы, который потом отфильтровать (почти как в сигма-дельте).
Для оценки фильтра можно применить тот же FFT анализ, подбирая подходящее окно, которое и является импульсной характеристикой фильтра. Понятно, применение прямоугольного окна (что эквивалентно простому суммированию, допустим, по 16 точек) менее эффективно, чем сглаживающего окна. И надо при выборе окна обязательно знать его частотную характеристику, чтобы в полосе сигнала получить единичную передачу (или какая нужна), а все, что вне полосы задавить на минимально необходимую величину.
rezident
Цитата(sup-sup @ Apr 2 2011, 00:57) *
возможно, для улучшения диапазона в полосе придется добавить шум вне полосы, который потом отфильтровать (почти как в сигма-дельте).
Дык наличие внеполосного шума это как бы обязательное условие для такого способа повышения разрядности. Иначе выходит то, что у вас и получалось.
Цитата(sup-sup @ Apr 2 2011, 00:57) *
при оцифровке сигнала, меньшего чем шаг квантования, АЦП выдавал один и тот же код длительное время
и никакого повышения разрядности не происходит.
sup-sup
Цитата(rezident @ Apr 1 2011, 22:05) *
Дык наличие внеполосного шума это как бы обязательное условие для такого способа повышения разрядности. Иначе выходит то, что у вас и получалось.
и никакого повышения разрядности не происходит.

Ну да, обязательное. Но этот шум может быть и естественным - зачем тогда стараться делать искусственный. В тестовой системе у меня был импульсный источник питания, так его хватало. Но потом его не стало и эффект вылез.
ViKo
Цитата(sup-sup @ Apr 1 2011, 21:57) *
Понятно, применение прямоугольного окна (что эквивалентно простому суммированию, допустим, по 16 точек) менее эффективно, чем сглаживающего окна.

А почему? Где бы увидеть математическое доказательство?
Одно дело - обрезать полосу сигнала, а другое - понизить его шум. Или нет?
Alexashka
Цитата(hobgoblin @ Apr 1 2011, 17:32) *
Обычно, по крайней мере в сигма-дельта АЦП, по отдельности такое усреднение не используют, а сначала понижают в несколько раз путем усреднения (или CIC-фильтром), а потом ставят децимирующий FIR фильтр. Делается это по двум причинам. Во первых АЧХ будет иметь завал и единичный коэффициент пропускания только на DC. Во вторых вдали от DC будет засчет наложения попадать внеполосный шум. Представляете себе АЧХ moving average фильтра? Подумайте что с ним будет при понижении частоты отсчетов на выходе в N раз.

На мой взгляд, понятно написано
Вы суммируете 16 чисел, то есть грубо говоря умножаете на шестнадцать (сигнал медленно меняется в пределах окна суммирования), а сдвигаете на два бита, то есть делите на 4. Получаете два дополнительных бита разрешения.

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

Я понял, т.е перед оцифровкой тогда мне нужно ограничить спектр до половинной частоты, с которой потом я буду брать отсчеты с выхода сумматора. Скажем я делаю оцифровку 8кГц, потом суммирую группы по 16 отсчетов, т.е на выходе получаю 500Гц. Тогда мне нужно ограничить спектр сигнала на входе АЦП до 250Гц?

Да теперь все стало ясно, спасибо.sm.gif Накапливаем дополнительно 4 бита и 2 отбрасываем т.к они содержат одни шумы.
sup-sup
Цитата(ViKo @ Apr 2 2011, 13:16) *
А почему? Где бы увидеть математическое доказательство?
Одно дело - обрезать полосу сигнала, а другое - понизить его шум. Или нет?

К сожалению, с математикой трудновато. На пальцах как то понятно, что отфильтровать перед децимацией нужно все, что потом гармошкой сложится в рабочую полосу и не повысит существенно там шум. Так как прямоугольное окно дает sin(x)/x АЧХ, ясно,что это хуже того, что можно получить более оптимальным КИХом. Но может и хватить. Наверное (точно), это (выбор фильтра) зависит от наличия дополнительных внеполосных помех (кроме шума квантования). Все, что лежит выше частоты Найквиста (после децимации) должно быть отфильтровано (до децимации), да так, чтобы не было следов ни шумов квантования, ни любых возможных помех (в пределах заданного себе же порога). Если для этого хватает прямоугольного окна в конкретном случае, то и нормально. Можно прикинуть на пальцах, а можно просимулить в Матлабе сколько надо дБ (20 или 60).
Alexashka
Цитата(sup-sup @ Apr 1 2011, 22:57) *
Делал что-то подобное с 12-битным ADS788. Нужна была полоса до 100 кГц, а частоту сэмплирования можно было выбрать до 2 МГц (при питании 3.3В). В первую очередь подыскал АЦП, чтобы SFDR (Spurious free dynamic range) (кроме подходящей цены, скорости, и т.д..) был бы побольше, чем как для 12 бит. У ADS788 он 86 дБ как раз на 100 кГц, что соответствует примерно 14 разрядам. Сделал пробные оцифровки с частотой примерно 1500 ksps, посмотрел сигнал и сделал по нему спектр и спектрограмму (много раз с разными настройками). Действительно, получил нижний уровень не хуже -90 дБ относительно полной шкалы. Дальше было все понятно - делать FIR фильтр, децимацию. Кроме того, что внутренние шумы оказались меньше одного шага квантования, что приводило к тому, что при оцифровке сигнала, меньшего чем шаг квантования, АЦП выдавал один и тот же код длительное время. Естественно, это приводило к тому, что фильтровать на некоторых существенных отрезках было нечего. Выкрутился тем, что вне полосы подал тон (хотел шум, но простого меандра хватило) с уровнем выше шага квантования и тогда действительно был получен уровень -90 дБ.
Выводы сделал такие, что 1) - нужен АЦП с 'повышенной внутренней разрядностью', пусть хоть он 8-битный и 2) - возможно, для улучшения диапазона в полосе придется добавить шум вне полосы, который потом отфильтровать (почти как в сигма-дельте).
Для оценки фильтра можно применить тот же FFT анализ, подбирая подходящее окно, которое и является импульсной характеристикой фильтра. Понятно, применение прямоугольного окна (что эквивалентно простому суммированию, допустим, по 16 точек) менее эффективно, чем сглаживающего окна. И надо при выборе окна обязательно знать его частотную характеристику, чтобы в полосе сигнала получить единичную передачу (или какая нужна), а все, что вне полосы задавить на минимально необходимую величину.

Возникли вопросы. Спуры это палки которые постоянно сидят в спектре? Всмысле никакая фильтрация их уже не уберет если они попадают в полосу частот? У меня спектр чистенький до -120дб ровная полоска.
Чтобы оценить "внутреннюю разрядность"... я так понял можно делая FFT на длительной реализации? Чтобы FFT работало как избирательный фильтр убирающий шумы квантования. И тогда спуры будет видно?
Цитата
Для оценки фильтра можно применить тот же FFT анализ, подбирая подходящее окно, которое и является импульсной характеристикой фильтра. Понятно, применение прямоугольного окна (что эквивалентно простому суммированию, допустим, по 16 точек) менее эффективно, чем сглаживающего окна.

Не понял. Окно (взвешивающая функция) нужно чтобы минимизировать артефакты FFT преобразования. Т.е просто убирает сигнал вначале и в конце реализации. Разве оно работает как НЧ фильтр? Вы предлогаете делать свертку функции окна с сигналом? Зачем?
ViKo
Цитата(sup-sup @ Apr 2 2011, 16:46) *
Так как прямоугольное окно дает sin(x)/x АЧХ, ясно,что это хуже того, что можно получить более оптимальным КИХом.

В том-то и дело, что любое окно в фильтре КИХ служит для уменьшения пульсаций АЧХ за пределами полосы пропускания (боковых лепестков) путем расширения основного, расширения полосы пропускания. Вот я и сомневаюсь, что через такую АЧХ не пролезет больше шума.
sup-sup
Цитата(Alexashka @ Apr 2 2011, 17:15) *
Возникли вопросы. Спуры это палки которые постоянно сидят в спектре? Всмысле никакая фильтрация их уже не уберет если они попадают в полосу частот? У меня спектр чистенький до -120дб ровная полоска.
Чтобы оценить "внутреннюю разрядность"... я так понял можно делая FFT на длительной реализации? Чтобы FFT работало как избирательный фильтр убирающий шумы квантования. И тогда спуры будет видно?

Не понял. Окно (взвешивающая функция) нужно чтобы минимизировать артефакты FFT преобразования. Т.е просто убирает сигнал вначале и в конце реализации. Разве оно работает как НЧ фильтр? Вы предлогаете делать свертку функции окна с сигналом? Зачем?


Не вижу причины, по которой результат должен быть хуже, чем от FFT. Если в нужной нам полосе получается 120 дБ, то его же (120 дБ) можно получить и методом 'фильтрация - децимация'. То есть, дополнительных разрядов получается значительно больше, чем 2. Если линейность АЦП 120 дБ обеспечивает. Кстати, в сигма дельте результат также зависит от порядка модулятора.

Ну да, для нулевой частоты FFT как раз ФНЧ. Свертка делается между сигналом и окном. Для других частот уже получается (от перестановки результат ведь не меняется) свертка сигнала с косинусным и синусным ядром полосового фильтра. Только, действительно, это я не в тему, так как фильтр будет другой, для всей полосы. Но длина фильтра будет примерно как у понравившегося режима FFT

Цитата(ViKo @ Apr 2 2011, 17:22) *
В том-то и дело, что любое окно в фильтре КИХ служит для уменьшения пульсаций АЧХ за пределами полосы пропускания (боковых лепестков) путем расширения основного, расширения полосы пропускания. Вот я и сомневаюсь, что через такую АЧХ не пролезет больше шума.

Не вижу противоречия. Фильтр-то один. Просто ядро у одного упрощенное и требует меньше ресурса. А у другого позволяет получить подходящую характеристику. То есть, в общем случае применяется FIR. А прямоугольное окно - это один из его вариантов (вырождений).
ViKo
Цитата(sup-sup @ Apr 2 2011, 19:46) *
Не вижу противоречия. Фильтр-то один. Просто ядро у одного упрощенное и требует меньше ресурса. А у другого позволяет получить подходящую характеристику. То есть, в общем случае применяется FIR. А прямоугольное окно - это один из его вариантов (вырождений).

В том и вопрос - какое окно самое подходящее для максимального подавления шума за пределами полосы сигнала. Прямоугольное или ...? Так как у нас оверсэмплинг, то понятно, что лишнюю полосу можно и нужно отрезать. Как ее отрезать, чтобы пропустить сигнал по-максимуму, а шум по минимуму? У прямоугольного окна первый минимум на АЧХ на частоте fs/N, а у всех остальных окон на более высокой частоте. Зато после все непрямоугольные окна давят намного лучше.
Без расчета не определить.
sup-sup
Цитата(ViKo @ Apr 2 2011, 21:14) *
В том и вопрос - какое окно самое подходящее для максимального подавления шума за пределами полосы сигнала. Прямоугольное или ...? Так как у нас оверсэмплинг, то понятно, что лишнюю полосу можно и нужно отрезать. Как ее отрезать, чтобы пропустить сигнал по-максимуму, а шум по минимуму? У прямоугольного окна первый минимум на АЧХ на частоте fs/N, а у всех остальных окон на более высокой частоте. Зато после все непрямоугольные окна давят намного лучше.
Без расчета не определить.

Если взять крайности, то прямоугольная АЧХ лучше всего подходит для подавления внеполосных помех любого происхождения перед децимацией из-за максимального использования рабочей полосы частот. Допустим, частота Fs/2=100kHz. Если фильтр имеет пропускание до 99 кГц, а нужное затухание от 101 кГц, то это очень хорошо, но фильтр получится очень длинный (в 'идеале', бесконечная ИХ sin(x)/x) и нереализуемый.
Другая крайность - прямоугольная ИХ, что дает вид АЧХ sin(x)/x (неравномерность в полосе, широкую переходную полосу, пульсирующее затухание вне полосы).
Получается, что нужно брать реализуемый фильтр максимально возможной длины. В это случае получится максимальное подавление всего ненужного. Подходящее окно позволит выбрать требуемый баланс между затуханиями в полосе и вне полосы и шириной переходной зоны.
Если опять вернуться к FFT, то его частотное разрешение обратно пропорционально размеру окна FFT, что можно применить для первоначальной оценке размера фильтра.
Alexashka
Цитата(sup-sup @ Apr 1 2011, 22:57) *
Для оценки фильтра можно применить тот же FFT анализ, подбирая подходящее окно, которое и является импульсной характеристикой фильтра.

Дык вроде на окно то сигнал умножается . Вот к примеру я выбрал окно Хэннинга...или нет, чтото я запутался smile3046.gif

Да и еще такой момент, КИХ делать не хотелось бы, слишком затратно. БИХ лучше sm.gif думаю чтонибудь эллиптическое 2го порядка мнебы хватило. Квадратное окно...или усреднитель прельщает минимумом вычислительных затрат.
sup-sup
Цитата(Alexashka @ Apr 3 2011, 18:36) *
Дык вроде на окно то сигнал умножается . Вот к примеру я выбрал окно Хэннинга...или нет, чтото я запутался smile3046.gif

Да и еще такой момент, КИХ делать не хотелось бы, слишком затратно. БИХ лучше sm.gif думаю чтонибудь эллиптическое 2го порядка мнебы хватило. Квадратное окно...или усреднитель прельщает минимумом вычислительных затрат.


Я там неточно про окно. Окно требуемого фильтра не будет совпадать с окном FFT.
В оконном FFT сигнал умножается на окно, затем делается FFT. Но FFT это группа операций свертки сигнала (перемноженного уже на окно) с синусом и косинусом. На нулевой частоте получается ФНЧ, а на всех остальных полосовые фильтры эквивалентные по АЧХ с ФНЧ. Если мы сделаем фрагмент ДПФ только для одной частоты, то получим FIR. Разница только в том, что в FFT умножение сигнала на окно (с целью экономии) заранее делается, а в фильтрах окно умножается на синус (косинус) заранее (тоже для экономии) и результат является ядром (ИХ) фильтра, который потом много раз используется. Результат один и тот же.
КИХ (чем БИХ) лучше тем, что он по своему построению увеличивает разрядность тем больше, чем он длиннее. А БИХ, он накапливает ошибку. Кроме этого, нелинейная фазовая характеристика, что испортит сигнал на высоких частотах.
Если у Вас есть выборки сигналов, с ними надо помоделировать и выбрать подходящий фильтр. Любой из них может подойти.
shf_05
Цитата(Alexashka @ Apr 1 2011, 16:15) *
Но в статье предлогается брать сумму по группам из 16 отсчетов. Внутренний голос подсказывает, что при этом произойдет увеличение шумов в корень из 16 раз, т.е в 4 раза (если считать в LSB). Однако вес одного LSB теперь будет в 16 раз меньше (входной диапазон напряжений АЦП остался тем же, а диапазон "кодов" на выходе сумматора вырос в 16 раз). Т.е если перевести полученный с сумматора код в "вольты", то эффективный шум вроде как уменьшается в 4 раза. Так ли это и какой смысл после этого делать деление на 16 -сигнал станет чище конечно, но шумы квантования при этом возрастают?  laughing.gif

если принять что за время децимации - 16 отчетов сигнал не изменяется, а шум изменяется, то получается вы считаете мат. ожидание случайной величины:
МОсш= сумма значенией СВ / число значений,
где МОсш - это значение вашего сигнала с шумом, МОс- мат. ожидание сигнала- те значение самого сигнала
но МО нормального шума равно нулю, а МО суммы сигнала и шума равно МОс+МОш
МОсш= МОс+МОш= МОс+0. (если число значений бесконечно, если их не бесконечно, то МОш "примерно 0")
вот и выходит простое сложение уменьшает шумы в некотором роде.

если вам не важны искажения фазы и разрядность позволяет создать БИХ фильтр с небольшими шумами, то можно применять- я так делал, работало.
если важна фаза- то придется КИХ, кстати суммирование и деление на число отчетов- тоже КИХ фильтр.
по вычислительным затратам- смотря что за проц. у вас, если может умножать+складывать за такт, то разницы большой нет умножить или сложить или сложить+умножить. если умножает долго- то суммирование может быть рациональнее.
Alexashka
Цитата(shf_05 @ Apr 4 2011, 09:07) *
если принять что за время децимации - 16 отчетов сигнал не изменяется, а шум изменяется, то получается вы считаете мат. ожидание случайной величины:
МОсш= сумма значенией СВ / число значений,
где МОсш - это значение вашего сигнала с шумом, МОс- мат. ожидание сигнала- те значение самого сигнала
но МО нормального шума равно нулю, а МО суммы сигнала и шума равно МОс+МОш
МОсш= МОс+МОш= МОс+0. (если число значений бесконечно, если их не бесконечно, то МОш "примерно 0")
вот и выходит простое сложение уменьшает шумы в некотором роде.


Вопрос был не в этом sm.gif а в том что при делении на кол-во слагаемых мы уменьшаем число рабочих бит и таким образом уменьшаем (ограниченное разрядностью) отношение сигнал/шум. Но впринципе с этим уже разъяснил ув.hobgoblin. Т.е делить надо не на число слагаемых, а на кол-во бит, на которое увеличивается эффективное разрешение сигнал/шум, в моем случае на 2 бита (в 4 раза).

Цитата(shf_05 @ Apr 4 2011, 09:07) *
если вам не важны искажения фазы и разрядность позволяет создать БИХ фильтр с небольшими шумами, то можно применять- я так делал, работало.


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

Вот это как раз вопрос...в сигнале желательно не потерять амплитуду импульсов, я так понимаю это может произойти если применить фильтр не с линейной ФЧХ?
тау
Цитата(Alexashka @ Apr 4 2011, 14:42) *
Вот это как раз вопрос...в сигнале желательно не потерять амплитуду импульсов, я так понимаю это может произойти если применить фильтр не с линейной ФЧХ?

применяйте простейший CIC с прореживанием N , если T импульса будет более чем в 2 раза больше чем N/Fs то в выходных отсчетах всегда будет появляться неискаженная амплитуда.
hobgoblin
Цитата
Я понял, т.е перед оцифровкой тогда мне нужно ограничить спектр до половинной частоты, с которой потом я буду брать отсчеты с выхода сумматора. Скажем я делаю оцифровку 8кГц, потом суммирую группы по 16 отсчетов, т.е на выходе получаю 500Гц. Тогда мне нужно ограничить спектр сигнала на входе АЦП до 250Гц?


В подходе с усреднением - да, потому что характеристика фильтра вне полосы Fs_вх/N получается не ахти какая. В случае с использованием децимирующего фильтра с хорошим подавлением - не обязательно, но усложняет цифровую реализацию, поскольку все что выше 250 Гц должен будет подавить цифровой фильтр.

Цитата
Вот это как раз вопрос...в сигнале желательно не потерять амплитуду импульсов, я так понимаю это может произойти если применить фильтр не с линейной ФЧХ?

Смотря какая длительность импульса и какая фазовая характеристика. В случае с БИХ тоже есть вариант получить хорошую фазовую характеристику. Кое-какую информацию можно почерпнуть здесь
http://www.dspguide.com/ch19/4.htm

Вариант с усреднением будет самым простым, и вероятно для вашей задачи его хватит за глаза. Второй вариант, получше с точки зрения подавления внеполосных шумов, как уже написал тау, это взять CIC фильтр, который тоже просто реализуется. Учтите, что оба варианта дадут непрямоугольную АЧХ в основной полосе после децимации, и может потребоваться применение дополнительного короткого КИХ фильтра (но уже работающего с меньшей частотой отсчетов) для коррекции частотной характеристики. И КИХ с непрямоугольным окном, и БИХ фильтр могут оказаться сложными для реализации (во втором случае из-за возможно потребующегося увеличения разрядности при вычислениях), и не факт, что вам это действительно нужно.
ViKo
Цитата(тау @ Apr 4 2011, 14:58) *
применяйте простейший CIC с прореживанием N

то есть просто "сложить и поделить", правильно?
тау
Да, правильно.
При этом , если ТС подгадает с длительностью интервала суммирования отсчетов Fs , совместив во времени с ожидаемым "импульсом" , то SNR будет максимально возможным для такого случая и белого шума.
Alexashka
Спасибо за наводку тау, hobgoblin, не слышал ранее про такие фильтры.
Вот нашел как раз по теме статейку:
http://dsplib.ru/content/cic/cic.html
и читается легко sm.gif

Цитата(тау @ Apr 4 2011, 15:58) *
применяйте простейший CIC с прореживанием N , если T импульса будет более чем в 2 раза больше чем N/Fs то в выходных отсчетах всегда будет появляться неискаженная амплитуда.

Спасибо, это обнадеживает!)
ViKo
Цитата(Alexashka @ Apr 4 2011, 21:12) *
Вот нашел как раз по теме статейку:
http://dsplib.ru/content/cic/cic.html

Есть книжка - Ричард Лайонс. Цифровая обработка сигналов. Вот она действительно, легко читается. sm.gif Имеется, где положено. Там есть раздел, посвященный каскадным интеграторам - гребенчатым фильтрам. И все остальные вопросы ЦОС тоже описаны.
Alexashka
Промоделировал я "простейший CIC с прореживанием N". Получилось то что и ожидалось, однако с амплитудами не очень хорошо. Завал на частотах близких к fs/2 уже приличный (около 0.64), однако некоторые импульсы обрезаются сильней чем 0.64. Это понятно связано с тем что выборка не попадает в точку максимальной амплитуды. Вопрос, это впринципе невозможно вылечить, т.е выбрав такую частоту дискретов, я должен смириться с тем, что некоторые импульсы будут измерены с искажениями? 

На первом рисунке показаны результаты с испытательным сигналом в виде линейно-частотно-модулированного сигнала (f меняется от 0 до 250Гц, т.е до fs/2). Виден завал АЧХ после прореживающего CIC.

На втором рисунке -результаты обработки периодического Sinc паттерна.

Нажмите для просмотра прикрепленного файла

Нажмите для просмотра прикрепленного файла



shf_05
Цитата(Alexashka @ Apr 5 2011, 16:18) *
однако некоторые импульсы обрезаются сильней чем 0.64. Это понятно связано с тем что выборка не попадает в точку максимальной амплитуды. Вопрос, это впринципе невозможно вылечить, т.е выбрав такую частоту дискретов, я должен смириться с тем, что некоторые импульсы будут измерены с искажениями? 

завал АЧХ конечно будет, об этом Вам писали, надо применять корректирующий ких фильтр, а вот там где "выборка не попадает в точку" это не искажения, это "обман зрения".
Alexashka
Цитата(shf_05 @ Apr 5 2011, 14:40) *
завал АЧХ конечно будет, об этом Вам писали, надо применять корректирующий ких фильтр, а вот там где "выборка не попадает в точку" это не искажения, это "обман зрения".


Да бог с ним, с завалом. Это учесть можно. А вот учесть то что я не попадаю в максимум -как? 


Почему обман зрения? посмотрите на нижний левый график на втором рисунке. Это то что получится при реальной обработке, - две точки попадают по бокам импульса.

sup-sup
Цитата(Alexashka @ Apr 5 2011, 14:36) *
Да бог с ним, с завалом. Это учесть можно. А вот учесть то что я не попадаю в максимум -как? 


Почему обман зрения? посмотрите на нижний левый график на втором рисунке. Это то что получится при реальной обработке, - две точки попадают по бокам импульса.

А Вы выполните интерполяцию (для проверки) из полученного сигнала и получите опять гладкую огибающую и красивые точки (только завал частотки еще сильнее будет, если применить такой же интерполирующий фильтр как и при децимации).
Alexashka
Цитата(sup-sup @ Apr 5 2011, 18:02) *
А Вы выполните интерполяцию (для проверки) из полученного сигнала и получите опять гладкую огибающую и красивые точки (только завал частотки еще сильнее будет, если применить такой же интерполирующий фильтр как и при децимации).

Идею понял. Только вот возникает вопрос - а целесообразно ли это, сначала уменьшать частоту дискрет в 16 раз, а потом скажем увеличивать в 2 раза? Можно ли получить те же результаты сделав фильтрацию-децимацию в 8 раз -одним проходом?
sup-sup
Цитата(Alexashka @ Apr 5 2011, 20:22) *
Идею понял. Только вот возникает вопрос - а целесообразно ли это, сначала уменьшать частоту дискрет в 16 раз, а потом скажем увеличивать в 2 раза? Можно ли получить те же результаты сделав фильтрацию-децимацию в 8 раз -одним проходом?

Конечно, сразу децимацию на 8, если нужна повышенная разборчивость во временной области. Это я предложил интерполяцию для самопроверки, что децимация сделана правильно. Хотя и на спектре это видно - он то не искажен почти. Для уточнения кроме chirp-сигнала можно взять пару частот рядом в верхнем диапазоне. В этом случае будут видны все 'помехи', так как частоты постоянные, а размер FFT можно взять побольше (максимальный для имеющейся выборки). В конце концов, нужно же увидеть в спектре результат повышения разрядности.
Децимацию на 8 лучше делать каскадную, каждый раз на два. В этом случае фильтры получается короче и каждый следующий работает на вдвое низкой частоте.
Alexashka
Цитата(sup-sup @ Apr 5 2011, 23:51) *
Конечно, сразу децимацию на 8, если нужна повышенная разборчивость во временной области.

С этим ясно. Попробую какойнить простенький фильтр из той статейки.

Насчет шумов и эфф.разрядности АЦП хочу уточнить. С усреднением понятно, даже с точки зрения математики разрядность повышается при усреднении показаний, т.к уменьшается дисперсия. А вот если для децимации используется другой (произвольный грубо говоря) фильтр НЧ? Правильно ли я понимаю, что уровень шума снизится в корень из [(Fs/2)/BW] раз, где Fs- частота отсчетов на выходе АЦП, BW -полоса пропускания децимирующего фильтра.
Дмитрий_Б
Цитата(Alexashka @ Apr 1 2011, 14:15) *
Встала такая задача: у имеющегося 10-битного АЦП нужно повысить эффективную разрядность до 12 бит. ...


Действительно, передискретизация даёт эффект улучшения отношения сигнал/шум квантования при условии некоррелированности соседних выборок. Это обеспечивается дополнительным шумом, спектр которого сосредоточен вне полосы частот измеряемого сигнала. При этом надо обеспечивать такое подавление спектра дополнительного шума в полосе частот измеряемого сигнала, чтобы его спектральная плотность была на ~10дБ меньше спектральной плотности шума квантования (тогда улучшение отношения сигнал/шум будет примерно на 0.5 дБ меньше теоретического).
При этом надо иметь ввиду, что передискретизация не снижает уровень паразитных спектральных компонент, связанных с нелинейностью самого АЦП.
sup-sup
Цитата(Alexashka @ Apr 5 2011, 23:13) *
С этим ясно. Попробую какойнить простенький фильтр из той статейки.

Насчет шумов и эфф.разрядности АЦП хочу уточнить. С усреднением понятно, даже с точки зрения математики разрядность повышается при усреднении показаний, т.к уменьшается дисперсия. А вот если для децимации используется другой (произвольный грубо говоря) фильтр НЧ? Правильно ли я понимаю, что уровень шума снизится в корень из [(Fs/2)/BW] раз, где Fs- частота отсчетов на выходе АЦП, BW -полоса пропускания децимирующего фильтра.

Усреднение это ФНЧ с ЧХ Sin(x)/x. Другой ФНЧ при похожей полосе примерно такой же уровень шума даст. Чем уже полоса, тем меньше шума.
Другое дело, что для максимального повышения разрядности нужно подмешать к исходному сигналу шум вне полосы. Иначе сигнал меньше одного кванта не пройдет. Это можно увидеть и на модели. Для этого нужно взять в верхней части полосы маленький тон, посмотреть спектр, а затем подмешать к нему вне полосы тон побольше. После децимации у второго варианта шумы вокруг первого тона опустятся.
alexkok
Цитата(Дмитрий_Б @ Apr 5 2011, 23:33) *
При этом надо иметь ввиду, что передискретизация не снижает уровень паразитных спектральных компонент, связанных с нелинейностью самого АЦП.

Зависит от вида нелинейности.
На плавную нелинейность не влияет, а локальную, особенно в середине шкалы (в нуле) и при малой амплитуде сигнала - уменьшает.
Самый простой и эффективный способ - это не шум, а пилообразное напряжение с частотой Найквиста после децимации.
Для данного случая реализуется счётчиком на 16 и ЦАПом на резисторах с ЕМР в 1/4 от ЕМР АЦП.
тау
Цитата(Alexashka @ Apr 6 2011, 00:13) *
Правильно ли я понимаю, что уровень шума снизится в корень из [(Fs/2)/BW] раз, где Fs- частота отсчетов на выходе АЦП, BW -полоса пропускания децимирующего фильтра.

правильно.
sup-sup
Еще раз обращаю внимание на то, что без внеполосного шума ничего не получится (почти). Если естественный шум есть в полосе, то какой он есть, такой и останется. Все надо делать как в сигма дельта. Если естественный шум вне полосы есть, то это очень хорошо. Я предлагал для пробы дать простой тон - это тоже поможет (для проверки).
А чтобы оценить возможности ADC нужно посмотреть спектр при большом размере FFT.
Можно дать входной сигнал на ADC вверху диапазона (который будет после децимации) с уровнем равным уровню квантования (разрешению ADC). Напустить на эту выборку FFT максимального размера. И весь запас в децибеллах, который мы увидим внизу от уровня сигнала будет нашими приобретенными битиками и это должно быть достижимо после децимации. Мы увидим, что чем выше частота дискретизации, тем ниже опускаются шумы, оставляя палки. Вот эти палки и определяют возможности ADC. Которые определены в параметре SFDR в datasheet. После подачи дополнительного внеполосного тона (с более высоким уровнем, чем сигнал, мы увидим улучшение (понижение шума) в полосе. Как говорится 'тот, кто нам мешает, нам поможет'. Это про шум.
Alexashka
Цитата(sup-sup @ Apr 6 2011, 15:52) *
Еще раз обращаю внимание на то, что без внеполосного шума ничего не получится (почти). Если естественный шум есть в полосе, то какой он есть, такой и останется. Все надо делать как в сигма дельта. Если естественный шум вне полосы есть, то это очень хорошо. Я предлагал для пробы дать простой тон - это тоже поможет (для проверки).
А чтобы оценить возможности ADC нужно посмотреть спектр при большом размере FFT.
Можно дать входной сигнал на ADC вверху диапазона (который будет после децимации) с уровнем равным уровню квантования (разрешению ADC). Напустить на эту выборку FFT максимального размера. И весь запас в децибеллах, который мы увидим внизу от уровня сигнала будет нашими приобретенными битиками и это должно быть достижимо после децимации. Мы увидим, что чем выше частота дискретизации, тем ниже опускаются шумы, оставляя палки. Вот эти палки и определяют возможности ADC. Которые определены в параметре SFDR в datasheet. После подачи дополнительного внеполосного тона (с более высоким уровнем, чем сигнал, мы увидим улучшение (понижение шума) в полосе. Как говорится 'тот, кто нам мешает, нам поможет'. Это про шум.

внеполосный сигнал снизит диф.нелинейность АЦП, но я уже писал что АЦП по шумам (SFDR) лучше 120дб (я делал FFT на 1млн.выборок), так что мне это не надо, а естественных шумов в сигнале достаточно (даже у самого АЦП первые 2 разряда прыгают постоянно).
Я какбы тоже думал что спектральная плотность шумов не уменьшаются, просто сужается полоса частот, но вот Вы пишете:
Цитата
Другое дело, что для максимального повышения разрядности нужно подмешать к исходному сигналу шум вне полосы. Иначе сигнал меньше одного кванта не пройдет. Это можно увидеть и на модели. Для этого нужно взять в верхней части полосы маленький тон, посмотреть спектр, а затем подмешать к нему вне полосы тон побольше. После децимации у второго варианта шумы вокруг первого тона опустятся.

Теперь Вы пишете, что шумы уменьшаются...почему? И разве самого сигнала недостаточно чтобы при децимации(+фильтрации) начали снижаться шумы (ведь скачки между уровнями есть)?

Цитата(alexkok @ Apr 6 2011, 10:54) *
Самый простой и эффективный способ - это не шум, а пилообразное напряжение с частотой Найквиста после децимации.

Т.е подать на вход АЦП сигнал 250Гц? А какой амлитуды? Ох боюсь трудно мне потом будет его отфильтровать от полезного сигнала rolleyes.gif .
update 2 sup-sup: мдя, про 2 прыгающих разряда я погорячился, на закороченном входе прыгает только младший разряд и то если попадаешь на ступеньку LSB yeah.gif .
Кстати в модели шумы тоже есть, только с ними я не успел поиграться. Какой параметр лучше смотреть чтобы оценить улучшение сигнал/шум? SINAD? Завтра сделаю как Вы сказали и расскажу что получилось
alexkok
Цитата(Alexashka @ Apr 6 2011, 18:37) *
Т.е подать на вход АЦП сигнал 250Гц? А какой амлитуды?

Легко посчитать:
Размах: 1/4 ЕМР * 16 = 4 ЕМР Вашего АЦП, амплитуда будет в два раза меньше. rolleyes.gif
Цитата
Ох боюсь трудно мне потом будет его отфильтровать от полезного сигнала rolleyes.gif .

А его специально фильтровать не надо, он внеполосный и убирается при децимации (если не забудете скомпенсировать постоянную составляющую).
Но если у Вас во входном сигнале и так достаточно помех и шумов, то ничего дополнительного не нужно.
Alexashka
Цитата(alexkok @ Apr 6 2011, 21:03) *
Легко посчитать:
Размах: 1/4 ЕМР * 16 = 4 ЕМР Вашего АЦП, амплитуда будет в два раза меньше. rolleyes.gif

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

Может я чего не понимаю..."с частотой Найквиста после децимации" -в моем случае 250Гц, значит на один период "пилы" приходится 4мс или 2 интервала (результата) суммирования (частота на выходе дециматора -500Гц). Если первый интервал придется на начало (подъем) пилы, а второй на верхнюю ее часть, то два эти результата будут разные. Т.е на выходе сумматора будет прыгающий с частотой 250Гц код. Разве не так?
Alexashka
В общем попробовал все о чем говорили на модели. Что получилось: 

1) При интерполяции сигнал восстанавливается очень хорошо, с меньшей амплитудой правда, но она меньше у всех импульсов, что можно списать на завал частотки в усредняющем окне.

2) Ввел функцию замера SINAD для исходного сигнала и прореженного. Для проверки брал синус 60Гц с наложенным на него белым шумом с таким соотношением амплитуд, чтобы получить сигнал/шум=2 (6дб).

В прореженном сигнале сигнал/шум увеличился на 10,8дб. Не знаю на сколько это хорошо, но получается близко к 12дб (что соответсвует увелич.разрядности на 2 бита). См.рисунок 1.

3) Добавление пилы с амплитудой =10 LSB незначительно уменьшает сигнал/шум. См. рисунок 2. Видно что появилась палка на 250Гц на спектре исходного сигнала. Сама пила показана на рисунке 3.

4) Пила при усреднении остается и в прореженном и в интерполированном сигнале (рисунок 3, красный и фиолетовый лучи).

Нажмите для просмотра прикрепленного файла

Нажмите для просмотра прикрепленного файла

Нажмите для просмотра прикрепленного файла

5) Все ясно! Пилу надо было брать с частотой прореженного сигнала (500Гц), тогда она полностью удаляется при децимации и не ухудшает сигнал/шум (рис.4)  cool.gif

Нажмите для просмотра прикрепленного файла

sup-sup
А зачем Вы добавляете шум в полосе?Это некорректный эксперимент. Естественно, если шум белый, то получится 'ожидаемый' результат. А если цель - увеличить эффективную разрядность, то в полосу ничего добавлять не надо, кроме маленького сигнала. Сигнал должен помещаться внутри младшего разряда. Нужно посмотреть исходный результат, а потом добавить внеполосный шум или треугольник.
Alexashka
Цитата(sup-sup @ Apr 7 2011, 15:20) *
А зачем Вы добавляете шум в полосе?Это некорректный эксперимент. Естественно, если шум белый, то получится 'ожидаемый' результат. А если цель - увеличить эффективную разрядность, то в полосу ничего добавлять не надо, кроме маленького сигнала. Сигнал должен помещаться внутри младшего разряда. Нужно посмотреть исходный результат, а потом добавить внеполосный шум или треугольник.

Ну это предложение alexkok, мне показалось интересным и простым в реализации. Справедливости ради нужно отметить, что на малых амплитудах С/Ш увеличивается при наложении треугольника (он оказался лучше, чем пила), оптимальная его амплитуда составляет 0,5 LSB. Например для синуса с амплитудой=2LSB сигнал/шум улучшается с 11,4 до 33дб. Так что метод наложения пилы(треугольника) с f=fdecim работает хорошо на малых амплитудах.


И мне кажется такой сигнал можно считать внеполосным поскольку он полностью подавляется усредняющим окном, а Вы предлогаете как сделать -подать скажем 2кГц и потом до децимации отфильтровать их?
Нажмите для просмотра прикрепленного файла
update. Не сразу дошло о чем Вы говорите sm.gif. Понял, дополнительный шум не нужен, он итак будет изза дискретности уровней. Ок, завтра проверю!
P.S. Спасибо за помощь a14.gif и как говорят ребята из South Park'а "мы многое поняли сегодня..."))
alexkok
Цитата(Alexashka @ Apr 7 2011, 08:24) *
Может я чего не понимаю..."с частотой Найквиста после децимации" -в моем случае 250Гц, значит на один период "пилы" приходится 4мс или 2 интервала (результата) суммирования (частота на выходе дециматора -500Гц). Если первый интервал придется на начало (подъем) пилы, а второй на верхнюю ее часть, то два эти результата будут разные. Т.е на выходе сумматора будет прыгающий с частотой 250Гц код. Разве не так?

Да, с частотой децимации, моя ошибка.

Насчёт амплитуды, здесь приходится выбирать между максимальным улучшением с/ш и подавлением дифференциальной нелинейности.
"Пила" эквивалентна КИХ фильтру с прямоугольным окном по отношению к характеристике преобразования и лучше подавляет дифференциальную нелинейность при длинном окне (большой амплитуде).
Вы вероятно использовали в модели идеальный АЦП с нулевой дифференциальной нелинейностью, поэтому получили наилучший результат при малой амплитуде.
Если у Вашего АЦП очень низкий уровень собственных шумов, то таким методом можно и на четыре разряда разрешение повысить.
Alexashka
Вообщем при наложении треугольника A=1LSB происходит какбы разравнивание спектра, отдельные пички размываются в более низкие и широкие. Сигнал/шум в некоторых случаях увеличивается, в некоторых уменьшается, я бы сказал 50/50.
Слева сигнал без наложения, справа- с наложением треугольника Амп=1LSB, 500Гц. Сигнал/шум увеличился всего 0,5дБ, но SFDR возрос прилично.

Нажмите для просмотра прикрепленного файла  Нажмите для просмотра прикрепленного файла
ViKo
для Alexashka
намекните, какой программой смотрите. LabView?
Alexashka
Цитата(ViKo @ Apr 8 2011, 12:19) *
для Alexashka
намекните, какой программой смотрите. LabView?

Да, ей sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.