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

 
 
> Артефакты в сигнале при децимации
alexkis
сообщение Aug 6 2018, 10:50
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 9-12-16
Пользователь №: 94 570



Добрый день! Есть проект в котором необходимо произвести децимацию сигнала вплоть до 16000. Столкнулся с тем что с определенного момента вижу артефакты в сигнале, хочу понять откуда они / их природу и можно ли с этим что-нибудь сделать. Объясню подробнее на упрощенном примере:

Есть необходимость децимировать сигнал с частотой дискретизации 96 МГц в 2^11 раз. Т.е. необходимо 11 фильтров с фактором децимации 2 (для того чтобы можно было посмотреть где начинают появляться артефакты).
Вход - 16 бит, внутренняя разрядность между каскадами - 18, коэффициенты фильтров - 18, выход каскада - 16. Так же производится скалирование между каскадами (усиление сигнала сдвигом к младшим разрядам выхода фильтра при усечении, при этом откидываются дублирующие знаковые биты).
Matlab модель каскада: Прикрепленный файл  df_2_firs.zip ( 1.97 килобайт ) Кол-во скачиваний: 14


Спектр входного сигнала (16 бит):
Прикрепленное изображение


При этом наблюдаю некоторые артефакты / составляющие в сигнале которых не ожидаю на выходе каскада (выход 16 бит)
Прикрепленное изображение

Под артефактами я имею ввиду этот "лес палок" над шумом. Уровень палок меняется.

Если выход сделать 18 бит, то спектр будет похож на то что ожидаю увидеть:
Прикрепленное изображение


При этом эти артефакты появляются начиная с 9 фильтра (в 16 битном представлении выхода), выходы фильтров 8 и 9 соответственно:
Прикрепленное изображение

Прикрепленное изображение


Так же собрал проект в железе с этими фильтрами на ядрах Xilinx (+ добавил DDС на входе). В качестве округления при переходе между фильтрами каскада использовал округление к ближайшему целому (когда добавляется старший из отбрасываемых разрядов, модель я смотрел и с таким округлением, по сути ничего не меняется).
При подаче мощного сигнала (5 дБм) с генератора, на выходе каскада, подстраиваясь скейлерами получаю следующий сигнал (16 бит):
Прикрепленное изображение

Т.е. сигнал такой каким я его ожидаю, но если не изменяя скейлеров уйти ниже по мощности (например с 5 дБм на -50 дБм на генераторе):
Прикрепленное изображение

Правда тут артефакты начинают появляться начиная с 8 фильтра.

При этом этот же сигнал в представлении 18 бит выглядит ожидаемо:

Прикрепленное изображение


Еще вопрос в том почему здесь палки похоже что стоят на тех же частотах, но не статичны и, судя по всему, перемещаются по частотам?
Прикрепленное изображение


Структурная схема каскада в железе:
Прикрепленное изображение


PS: если в модели подавать на вход не зашумленный сигнал, то эти палки будет отлично видно (16-битный выход последнего (11) фильтра в каскаде):
Прикрепленное изображение

Получается что это спуры от синусоиды, которые частично закрывает шум?
Если смотреть на выход предпоследнего фильтра (10) в 16 битном виде:

Прикрепленное изображение

Получается что они идут не со входа? Если построить спектр синусоиды (той же частоты что и на входе каскада и с частотой сэмплирования выхода фильтра) без awgn, то получится примерно такая же картина по спурам как и на выходах фильтров:
Код
Fs = 96e+6/2^11;
N = 2^14;
Fc = 15e+3;

t = 0:1/Fs:(N - 1)/Fs;
sig = complex(cos(2*pi*Fc*t), sin(2*pi*Fc*t)).';
% sig = awgn(sig, 65);
sig = sig / max(max(abs(real(sig))), max(abs(imag(sig))));
sig = round(sig * (2^(16 - 1) - 1));

data = sig;
figure(4); periodogram(data, blackmanharris(size(data, 1)), 'centered', 2^(nextpow2(size(data, 1))+1), Fs);


Прикрепленное изображение


Надеюсь Вы прольете мне свет на этот вопрос.
Спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alexkis
сообщение Aug 6 2018, 15:45
Сообщение #2





Группа: Новичок
Сообщений: 4
Регистрация: 9-12-16
Пользователь №: 94 570



Цитата(blackfin @ Aug 6 2018, 14:20) *
На мой взгляд, точность промежуточных вычислений недостаточна.

После каждой пары децимирующих фильтров разрядность вычислений должна увеличиваться на один бит. То есть, после децимации на 16000 разрядность семплов на выходе должна быть:

16 + 10*lg(16000)/6 = 16 + 7 = 23 бита.

Буквально каждые пару фильтров? Имеется ввиду конкретный пример с децимацией по 2, как я понял. В реальном проекте используется солянка разных фильтров в каскаде, например - 5 -> 4 -> 200 -> 4. И необходимое число разрядов между каскадами складывается из фактора децимации до каждого следующего фильтра? Если я сделаю в этом примере (с децимацией по 2) между каскадов разрядность 23, а не 18 как сейчас, то на выходе я могу усекать разрядность до 16 или все равно необходимо брать разрядность 23 и на выходе? Откуда берется этот необходимый рост разрядности?

Судя по MatLab модели нельзя на выходе брать разрядность 16 на выходе, даже если между каскадами разрядность 23 сохранять.
Цитата(andyp @ Aug 6 2018, 17:24) *
ИМХО Недофильтрованная ошибка округления предыдущего каскада заворачивается в полезную полосу при каждой децимации.

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

PSS. Извините за поток вопросов.

Сообщение отредактировал alexkis - Aug 6 2018, 15:47
Go to the top of the page
 
+Quote Post
andyp
сообщение Aug 6 2018, 17:20
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(alexkis @ Aug 6 2018, 18:45) *
В примере с MatLab модели используется усечение с round, артефакты есть. Попробую в железе сделать уточненное округление (оно больше похоже на round, чем текущее округление к ближайшему целому). Возможно дрожание по частотам от округления?

PSS. Извините за поток вопросов.


У ошибки округления спектр линейчатый так как сигнал, который округляется, периодический. Тип усечения-округления (варианты round, floor, ceil, это всё) будет влиять только на высоту спуров.
Сами спуры всё равно появятся на кратных входному колебанию частотах. Дальше они будут заворачиваться от новой частоты дискретизации от стадии к стадии, что еще разных гармоник даст.
Я бы первые стадии в виде пары каскадов CIC с фактором децимации раз в 16-32-64 (в зависимости от требуемой выходной полосы) делал , чтобы не иметь ошибок округления при каждой децимации в 2 раза.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 22:07
Рейтинг@Mail.ru


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