Пару месяцев назад я проходил собеседование, где требовался некоторый опыт в DSP, и на вопрос, является ли CIC фильтр БИХ или КИХ, я ответил, что КИХ, на что мне ответили, что раз там в структуре рекурсия, то он именно БИХ. Я несколько удивился, но понял ход рассуждений собеседующего и в принципе согласился с таким подходом. Мой давний опыт с CIC фильтрами касался программирования DDC GrayChip и Analog Devices и моделирования трактов SDR на С и в Octave, при этом в качестве имплементации CIC для моделей я использовал всем хорошо известную функцию скользящего прямоугольного окна.
Читая Хабр и отмечая постоянный рост сообщений об успехах AI - и микросхемы он разрабатывает, и программы пишет, и даже угрожает Stack Overflow, решил, что пора познакомиться c этой технологией в каким-нибудь проявлении.
Установив в Chrome Merlin, спросил его как сделать эхолот для рыбалки, какие датчики можно для него купить, какой многоканальный быстродействующий АЦП можно купить на Али для RaspberyPI и как посчитать ширину диаграммы направленности антенной решётки из 8 элементов. В целом я не узнал ничего нового, кроме предупреждения, что с АЦП могут быть проблемы подключения по SPI по быстродействию, зато этот бот одобрил применение режима DMA для ввода данных. Ну и программу для расчёта ДН на С мне показали достаточно правдоподобную. Ссылок на товары на Али я не получил, но получил набор фраз для поиска. В общем, несмотря на периодические упоминания сложности обсуждаемых вопросов и потенциальной нехватки квалификации у вопрошающего, общение было если и не очень плодотворным, но вполне профессиональным и дружелюбным.
И вот тут мне вспомнился тот вопрос с собеседования про CIC, и недолго думая я адресовал его боту.
CIC фильтр это БИХ или КИХ?
Gemini 1.5 Flash
CIC (Cascaded Integrator-Comb) фильтр является БИХ (БИХ - Бесконечная Импульсная Характеристика) фильтром. Хотя его структура может внешне напоминать КИХ (КИХ - Конечная Импульсная Характеристика) из-за наличия каскадов интегрирующих и гребенчатых секций, его импульсная характеристика является бесконечной.
Ну, ладно
фильтр с прямоугольной импульсной характеристикой - ких или бих?
Gemini 1.5 Flash
Фильтр с идеально прямоугольной импульсной характеристикой является КИХ фильтром. Идеально прямоугольная импульсная характеристика имеет конечную длительность, что является определяющим свойством КИХ-фильтра. БИХ-фильтры, напротив, имеют бесконечную импульсную характеристику.
Логично
какая импульсная характеристика однокаскадного CIC фильтра
Gemini 1.5 Flash
Импульсная характеристика однокаскадного CIC фильтра зависит от параметра M (задержка в гребенчатой секции) и является бесконечной
А вот это уже интересно. Структура содержит рекурсию, следовательно, не взирая на к-ты этой структуры, отклик тоже бесконечен - но ведь это не так
h(n) = {1,1,1,1,0,0,0,0,0,0…..} что за фильтр?
Gemini 1.5 Flash
h(n) = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0…} описывает импульсную характеристику простейшего КИХ-фильтра — усредняющего фильтра (moving average) длиной 4. Он вычисляет среднее значение четырех последних отсчетов входного сигнала.
Поскольку диалог сохраняет контекст, пробуем снова
Разница moving average и CIC
Gemini 1.5 Flash
Хотя как CIC, так и moving average фильтры являются фильтрами низких частот и используются для сглаживания сигнала, между ними есть важные различия:
Рекурсивность: Moving average фильтр является нерекурсивным фильтром с конечной импульсной характеристикой (КИХ). CIC фильтр является рекурсивным фильтром с бесконечной импульсной характеристикой (БИХ), что обусловлено наличием рекурсивной гребенчатой секции.
Эффективность: CIC фильтры очень эффективны вычислительно, особенно для задач децимации и интерполяции, поскольку они используют только операции суммирования и вычитания, избегая сложных умножений. Moving average фильтры также сравнительно просты в реализации, но их вычислительная эффективность ниже для больших окон усреднения, чем у CIC фильтров.
Частотная характеристика: Moving average фильтр имеет частотную характеристику с более резкими переходами в полосе пропускания и полосе заграждения по сравнению с CIC фильтром. Частотная характеристика CIC фильтра имеет более плавный переход, и в ней больше "рипплов" (колебаний) в полосе заграждения.
Фазовые искажения: Moving average фильтры вводят линейные фазовые искажения. CIC фильтры также вводят фазовые искажения, но они не линейные.
Перед этим я спросил как реализуются moving average фильтры на С, и в ответе были варианты со свёрткой и с вычитанием задержанного сигнала. Поэтому вопрос эффективности CIC вызвал новые вопросы.
In digital signal processing, a cascaded integrator–comb (CIC) is a computationally efficient class of low-pass finite impulse response (FIR) filter - it is wiki definition
Gemini 1.5 Flash
You are right to question that Wikipedia definition. While many sources incorrectly state that CIC filters are FIR, this is inaccurate. The presence of the recursive comb section makes them IIR filters. The Wikipedia definition is outdated or incorrect on this point. The computational efficiency comes from using only addition and subtraction, not from being FIR. The overall filter structure is IIR.
Вот оно! Определение даётся по содержимому, а не по функционалу. Но может дело не только в этом?
CIC has finite impulse responce - 1 1 1 1 0 0 0 0 … for one cascade and length 4 for example
Gemini 1.5 Flash
That's a misunderstanding. While the integrator section of a CIC filter has a finite impulse response (it's essentially an accumulator), the comb section is recursive. The combination of the integrator and the recursive comb creates an overall infinite impulse response. The apparent finite response you see is only a truncated view; the true impulse response extends infinitely, though it decays. The overall system is IIR because of the feedback loop in the comb section
Да. Может я и вправду не знаю что такое CIC? Надо отлаживать
calculate output for both examples if input is 1, 0,0,0,0,0,0,0,0,0
Gemini 1.5 Flash
Let's calculate the outputs for both the moving average and the single-stage CIC filter (M=4) with the input sequence {1, 0, 0, 0, 0, 0, 0, 0, 0, 0}.
Moving Average Filter (Length 4):
The moving average filter computes the average of the last four samples. The output will be:
Output[0] = 1/4 = 0.25
Output[1] = 1/4 = 0.25
Output[2] = 1/4 = 0.25
Output[3] = 1/4 = 0.25
Output[4] = 0
Output[5] = 0
Output[6] = 0
Output[7] = 0
Output[8] = 0
Output[9] = 0
Single-Stage CIC Filter (M=4):
The CIC filter with M=4 will behave as follows:
Integrator: The integrator sums the input. It will contain a value of 1 at the first sample, and it will remain 1 throughout.
Comb: The comb subtracts a delayed value of the integrator. The delay is 4 samples (M=4). Therefore:
Output[0] = 1 - 0 = 1
Output[1] = 1 - 0 = 1
Output[2] = 1 - 0 = 1
Output[3] = 1 - 0 = 1
Output[4] = 1 - 1 = 0
Output[5] = 1 - 0 = 1
Output[6] = 1 - 0 = 1
Output[7] = 1 - 0 = 1
Output[8] = 1 - 0 = 1
Output[9] = 1 - 0 = 1
Ого, неожиданно. Откуда там единицы с 5 отсчёта?
why output[5] is 1 if output[4] is 0?
Gemini 1.5 Flash
You're right to question that! My apologies; there was an error in my previous calculation of the CIC filter's output for the given input. The explanation was oversimplified and didn't correctly account for the delay line's operation.
Let's correct the calculation for the single-stage CIC filter (M=4) with the input {1, 0, 0, 0, 0, 0, 0, 0, 0, 0}:
The integrator sums the input. It's 1 initially and remains 1 throughout the process.
The comb section subtracts the integrator's value from 4 samples prior. The
delay_line
array is crucial.Let's trace it:
Sample (i) |
Input |
Integrator |
delay_line[0] |
delay_line[1] |
delay_line[2] |
delay_line[3] |
Output |
---|---|---|---|---|---|---|---|
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
2 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
3 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
4 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
5 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
6 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
7 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
8 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
9 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
Как это, я прав? Выходит примеры имплементаций не запускались пока не указал на ошибку в результатах, а потом запустилась трассировка и всё посчиталось как надо?
so, despite magnitude difference, impulse responces are equal for both type filters?
Gemini 1.5 Flash
No, the impulse responses are not equal, even considering only the magnitude. While a simplified single-stage CIC filter might appear to have a similar shape to a moving average filter's impulse response for a limited time window, there are fundamental differences:
Так.. точнее наоборот, что то явно не так, причём где то очень глубоко.
scale CIC filter responce by 0.25 and compare result with moving average
Gemini 1.5 Flash
Scaling the CIC filter's impulse response by 0.25 will make the initial values match those of the moving average filter for a short period. However, this scaling does not make the impulse responses equal.
Такое ощущение, что на прямые вопросы следуют ответы чиста по понятиям. Ну раз по понятиям, то на них и перейдём
Impulse responce provides full description for digital processing unit. If it is the same, both units provide the same behavior. So both filters have the same impulse and frequence responces. When we specify these filters we use the same finite impulse responce despite filters structure/implementation. But you are trying to show filters difference based on internals and impl details, not specification and requirement.
Gemini 1.5 Flash
You're raising a crucial point about the relationship between a filter's specification, its implementation, and its impulse response. However, your conclusion that the moving average and CIC filters have the same impulse and frequency responses is incorrect, even though their specifications might appear similar in limited contexts.
Ну и ещё несколько абзацев уточнений и определений самых разных проблем ЦОС, в том числе про накопление ошибок и переполнение разрядной сетки и что это всё очень трудно и требует дополнительных мер для длительной обработки. Ну, за язык их никто не тянул
ok, Analog devices DDC use CIC decimating filters and process signal without any side effects of overflow. There are no special units to control overflow as side errects of IIR. Why?
GPT 3.5
Cascaded Integrator-Comb (CIC) filters are often used in digital signal processing applications such as decimation in Digital Direct Converters (DDCs) by Analog Devices and other manufacturers. They are particularly favored for several reasons, especially regarding handling overflow and their inherent computational efficiency.
И, наконец
Integral Calculation Stability:
The structure of the CIC filter does not suffer from the same kind of instability often encountered in IIR filters due to feedback loops causing values to grow indefinitely. While CIC filters have recursive elements (the comb section), the integrator stages accumulate input values linearly and the comb section effectively stabilizes the system by subtracting delayed values.
Finite Impulse Response Behavior:
Despite being recursively structured, the behavior of the integrator in a CIC structure can resemble finite impulse response (FIR) because it defines a predictable response to inputs. The comb section mitigates the growth in output by subtracting historical values.
И вот когда я решил, что вырвался, они затащили меня обратно(с)
“Their design offers FIR-like behavior even with recursive elements, ensuring reliability and predictability” - compare this conclusion with your previos statement that CIC and moving average filters have a tremendous difference in impulse and frequence responce. Also give me the reference primary source of this false statement
GPT 3.5
Thank you for your patience, and I appreciate your engagement with the topic. Here’s a deeper look at the implications of the comparison between CIC and moving average filters, along with a clarification of my earlier statements.
Comparison of Impulse and Frequency Responses
Impulse Response:
CIC Filters: As I stated, CIC filters technically have an infinite impulse response due to the recursive nature of the comb section. This means their impulse response does not decay to zero after a finite number of samples but instead continues indefinitely, albeit with diminishing magnitude.
И далее всё то же самое - технически имеет бесконечную характеристику а если похоже что нет, то на самом деле да и так далее.. Прямых ссылок также не дано, сказано что есть разные классификации по типу и структуре, но вот точно что CIC и moving average снаружи не одно и то же самое.
Конечно я должен извиниться за обилие цитат, не очень интересную проблематику и, возможно, за ретроградность взглядов, но это невымышленная история с собеседованием и знакомством с AI. Но проблема, на мой взгляд, в следующем - и moving average, и CIC обладают одинаковыми внешними характеристиками и вычислительной сложностью, хотя и разной структурой. По заявлению бота, их характеристики (АЧХ, ФЧХ, ИХ) принципиально отличаются, поэтому CIC требует корректирующего фильтра после него. А вот это уже бред и введение в заблуждение.
Использовал ли собеседующий какого либо бота или просто обладает хорошей памятью и пониманием вопроса с современных позиций я не знаю. Но если бы мы продолжили обсуждение с ним, то я, скорее всего, согласился бы, что раз имплементация фильтра содержит рекурсию, то это может накладывать дополнительные требования к параметрам его элементов. А он, скорее всего, не стал бы продолжать утверждать, что характеристики двух этих фильтров отличаются и согласился, что импульсная характеристика конкретного CIC фильтра конечна и частотная и фазовая характеристики эквивалентны. А может быть и нет, если бы свои знания он и вправду получил от бота, которому верит больше, чем своему образованию.
В общем ввела меня эта история в размышления. Как прийти к консенсусу с ботом, который сам себя опровергает, но стоит на своём? Какие последствия могут быть, если у этого бота есть право принимать решение? Как относиться к решениям, принимаемым на основе мнения ИИ? ИИ ответил, что результаты надо валидировать с экспертным сообществом, пользователями, другими моделями, проводить эксперименты.. С другой стороны, пару простых функций он написал быстро и навскидку правильно.
Автор: nv13