Перейти к содержанию

Интерполяция CIC фильтром

Здравствуйте! Подскажите пожалуйста, делаю интерполяцию с помощью CIC фильтра, вроде бы всё по теории, но у получившегося сигнала амплитуда меньше, чем должна быть. Почему так получается? правильно ли я выбираю коэффициент для нормирования амплитуды?
Код
close all; clc; clear;

% Формирование сигнала.
Fs = 1000;
T = 1/Fs;
L = 50;
t = (0:L-1)*T;

x = 5*sin(2*pi*50*t);

% Коэффициент интерполяции
R = 5;
T1 = 1/(R*Fs);
t1 = (0:R*L-1)*T1;

% Величина задержки
D = 2*R;

% Порядок фильтра
N = 4;

% Усиление
Klg = 20*N*log10(D);
K = D^N;

% Расчет коэффициентов передаточной функции
% H(w) = (1 - z^(-D))^N / (1 - z^-1)^N
b = 1;
a = 1;
for n = 1 : N
    b = conv(b, [1 zeros(1,D-1) -1]);
    a = conv(a, [1 -1]);
end

% АЧХ и ФЧХ полученного фильтра стандартными средствами матлаб.
figure;
freqz(b,a);

% Применяем фильтр к сигналу стандартными средствами матлаб
nx = zeros(1,R*L);
nx(1:R:R*L) = x;
y = filter(b,a,nx);
y = (y/K)*R;

% И смотрим результат
figure;
plot(t,x,'-o',t1,y, '-o')

xlabel('Время, с')
ylabel('Амлитуда сигнала, у.е.')
legend({'сигнал', 'filter()'})

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А задержка вас не смущает? По-моему, оба эти свойства есть следствие того, что фильтр слишком низкочастотный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Добрый день!

Во-первых, судя по АЧХ синус попадает на наклон, где сигнал претерпевает ослабление.
Во-вторых, ваш фильтр не стабилен! Посмотрите на сигнал, при L = 50000;

На CIC не очень похоже - CIC это FIR фильтр, а у вас IIR.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(coding4dsp @ Nov 28 2017, 11:59) <{POST_SNAPBACK}>
На CIC не очень похоже - CIC это FIR фильтр, а у вас IIR.


CIC - это FIR (КИХ) ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(quato_a @ Nov 28 2017, 15:26) <{POST_SNAPBACK}>
CIC - это FIR (КИХ) ?



Ибоваистену.
cic1 - реализации однородного ких через бих. На форуме куча информации про этосамое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(quato_a @ Nov 28 2017, 15:26) <{POST_SNAPBACK}>
CIC - это FIR (КИХ) ?

По-сути, CIC (фильтр Хогенауэра) - это совершенно тупой (нерекурсивный изначально) фильтр скользящего среднего. Заслуга Хогенауэра (можно легко найти его статью в Инете), что, используя формулы бинома Ньютона, он представил его в виде рекурсивного фильтра. Мало того, при конечной разрядности, он использует сумматоры с циклическим перполнением, у которых ещё и переменная разрядность как функция номера секции. Во времена, когда ещё даже не сущестовало даже БМК (и, тем более, ПЛИС) - это было великим делом.

Но у CIC-фильтров есть один существенный недостаток: легко прикинуть, что, т.к. он равноценен некому фильтру СС, то его АЧХ будет типа sinc(f), что приводит к дикой неравномерности АЧХ в полосе пропускания. Как правило этот фильтр используется в квадратурных приёмниках и если допустимо, что бы частота оцифровки квадратур была заметно больше полуширины полосы сигнала, то - можно с этим жить. Но, как правило, это не позволительная роскошь. А тогда, на выходе этого фильтра приходится примастрячивать компенсирующей фильтр весьма нехилой длины. Да, он уже работает на пониженной частоте. Но по аппаратурной сложности все плюсы CIC-фильтра сходят на нет. Кроме того, CIC страдает просто фантастическом ростом выходной разрядности, поледующее грамотное упихивание оной в заданную - это не такая тривиальная задача, как кажется.

Поэтому, у нас в конторе, например, уже давно от CIC-фильтров отказались - в квадратурных приёмниках производится 2-3-ступенчатое понижение частоты на обычных нерекурсивных фильтрах невысокого порядка. Для современнных мощных и скоростных ПЛИС - это гораздо более экономичное и практичное решение (во всех смыслах).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(coding4dsp @ Dec 11 2017, 10:37) <{POST_SNAPBACK}>
Kluwert, а какие у вас коэффициенты интерполяции/децимации?

Весьма разные. В связных задачах и до сотни доходило, потому что там в какой-нибудь системе связи на КВ/УКВ выходная полоса измеряется единицами килогерц, а на входе - десятки мегагерц. Сначала - "гетеродинирование на АЦП" (когда АЦП работает на частоте в несколько раз ниже частоты сигнала, обобщённая т. Котельникова) давала 3-4-кратный сброс частоты оцифровки, ну а затем - в цифре. В радиолокационных задачах - меньше, там полосы обычно гораздо шире.
Мало того, было даже как-то "соревнование", когда в 4 руки делали квадратурный приёмник на разных плисовских платформах. Я - на базе обычных фильтров, "соперник" - на CIC. Я сделал раза в 2 быстрее sm.gif
Кстати, по поводу CIC я допустил небольшую неточность: если вы решаете радиолокационную/гидроакустическую задачу и фильтры в квадратурных каналах у вас - это фильтры сжатия или согласованные фильтры, ну, или, дальше у вас стоит коррелятор (кому что нравиться), то компенсирующий фильтр на выходе можно вообще не ставить: вы просто можете учесть завалы в АЧХ CIC'а в АЧХ фильтров, или в опорном сигнале в коррелятора. Правда, здесь могут начаться тонкие игры с разрядностью: ибо разрешение как раз определяется в основном ВЧ-частью спектра, а эта часть как раз и будет давиться и проваливаться в младшие разряды. Так что ... вот.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Интересно! Я полагал, что аппаратная реализация CIC'ов лаконична и прозрачна по сложности. Собственно, как и в software.

А что с использованием ресурсов ПЛИС? Как работать с ПЛИС я не знаю, но слышал о кол-ве использованных лутов, брамов, DSP и пр.
А что с качеством? Подавление вне полезной полосы и пульсации в полосе пропускания одинаковы у обоих методов?
Не критикуя Вас и ваших коллег, Вы уверены, что одинаково хорошо работали над своими реализациями?




Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Kluwert @ Dec 11 2017, 11:51) <{POST_SNAPBACK}>
Мало того, было даже как-то "соревнование", когда в 4 руки делали квадратурный приёмник на разных плисовских платформах. Я - на базе обычных фильтров, "соперник" - на CIC. Я сделал раза в 2 быстрее sm.gif


Соревнование без корок? sm.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Спасибо за ответы! Я так поняла, что амплитуда идеально не совпадет, если использовать только CIC фильтр. Для улучшения результата в литературе рекомендуют перед CIC фильтром поставить фильтр-корректор(АЧХ на рисунке). Но данный фильтр имеет высокий порядок для обеспечения необходимой характеристики (пример из статьи). Целесообразно ли вообще его применять? Если да, то подскажите как можно уменьшить его порядок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Olga_woroncova @ Dec 22 2017, 08:24) <{POST_SNAPBACK}>
Целесообразно ли вообще его применять?

У себя в проекте отказался от CIC интерполяции в R раз при формировании OFDM-сигнала как раз-таки из-за большого порядка фильтра-корректора. Использую интерполяцию через БПФ.
Может вместо борьбы с сокращением порядка фильтра-корректора воспользоваться добавлением нулей к сигналу и FIR на полосу сигнала? Думаю, ресурсов потребует меньше.
Изменено пользователем quato_a

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
(написал ерунду потому что невнимательно прочитал начало темы, перепутал интерполятор с дециматором)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(quato_a @ Dec 22 2017, 11:12) <{POST_SNAPBACK}>
У себя в проекте отказался от CIC интерполяции в R раз при формировании OFDM-сигнала как раз-таки из-за большого порядка фильтра-корректора. Использую интерполяцию через БПФ.
Может вместо борьбы с сокращением порядка фильтра-корректора воспользоваться добавлением нулей к сигналу и FIR на полосу сигнала? Думаю, ресурсом потребует меньше.


Что мешало скорректировать искажения цика на этапе формирования поднесущих?


Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация