Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Корректировка мультиплексированных АЦП
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
akrabad
Здравствуйте. Для повышения частоты дискретизации с наименьшими затратами используют простой способ - параллельное включение 2-x АЦП или более, что дает увеличение частоты дискретизации в два раза. Минус такого способа состоит в том, что возникают ошибки усиления, смещения и фазы. Это прекрасно видно в спектре сигнала. К примеру, для сигнала с частотой f0, пропущенного через такую систему АЦП, будут присутствовать "ложные" пики. Для ошибки смещения - на частоте Fs/2. Для гэйна и фазовой ошибок на частоте (Fs/2 - fo). Существуют варианты корректировок таких сигналов. Самый простой из них - с помощью FIR фильтра. Этот фильтр, по сути, является задержкой во втором канале относительно первого. Он пересчитывает отсчеты сигнала так, чтобы они соответствовали своему "реальному положению". Импульсная характеристика такого фильтра есть не что иное, как кардинальный синус( sinc(Pi *x ) ), где x - рассчитанная задержка. Пускай x = 0.001; (Для Fs = 2064384 и задержки во втором канале в 1 нс). Сигнал корректируется. С определенными результатами, но корректируется. После Fs/4 сигнал корректируется только если x = - 0.001, хотя мне надо, чтобы x был равен 0.001. Объясните пожалуйста, в чем проблема. И как это можно исправить.
Информацию о методах корректировок беру из статей на английском, ибо наши об этом почти не пишут.
Myron
Цитата(akrabad @ Nov 16 2015, 22:28) *
Здравствуйте. Для повышения частоты дискретизации с наименьшими затратами используют простой способ - параллельное включение 2-x АЦП или более, что дает увеличение частоты дискретизации в два раза. Минус такого способа состоит в том, что возникают ошибки усиления, смещения и фазы. Это прекрасно видно в спектре сигнала. К примеру, для сигнала с частотой f0, пропущенного через такую систему АЦП, будут присутствовать "ложные" пики. Для ошибки смещения - на частоте Fs/2. Для гэйна и фазовой ошибок на частоте (Fs/2 - fo). Существуют варианты корректировок таких сигналов. Самый простой из них - с помощью FIR фильтра. Этот фильтр, по сути, является задержкой во втором канале относительно первого. Он пересчитывает отсчеты сигнала так, чтобы они соответствовали своему "реальному положению". Импульсная характеристика такого фильтра есть не что иное, как кардинальный синус( sinc(Pi *x ) ), где x - рассчитанная задержка. Пускай x = 0.001; (Для Fs = 2064384 и задержки во втором канале в 1 нс). Сигнал корректируется. С определенными результатами, но корректируется. После Fs/4 сигнал корректируется только если x = - 0.001, хотя мне надо, чтобы x был равен 0.001. Объясните пожалуйста, в чем проблема. И как это можно исправить. Информацию о методах корректировок беру из статей на английском, ибо наши об этом почти не пишут.
Приведите, пожалуйста, ссылки на статьи (или сами статьи).
akrabad
Цитата(Myron @ Nov 17 2015, 10:39) *
Приведите, пожалуйста, ссылки на статьи (или сами статьи).

https://drive.google.com/file/d/0B-a0qo3gvn...iew?usp=sharing
https://drive.google.com/file/d/0B-a0qo3gvn...iew?usp=sharing

Автор первой статьи продвигает немного измененную формулу для расчета импульсной характеристики фильтра, которая не подходит в моем случае - для разных частот нужны разные иксы. Из второй статьи беру детектор, который как раз и сходится к тому x = 0.001 для частот меньших Fs/4. Что и нужно.
_Anatoliy
Цитата(akrabad @ Nov 17 2015, 07:52) *
Автор первой статьи продвигает немного измененную формулу для расчета импульсной характеристики фильтра, которая не подходит в моем случае - для разных частот нужны разные иксы. Из второй статьи беру детектор, который как раз и сходится к тому x = 0.001 для частот меньших Fs/4. Что и нужно.

Поигрался в своё время с первой статьёй,потом понял что зря время теряю,и именно по этой причине для разных частот нужны разные иксы. В итоге сделал корректор по прилагаемой статье,результат превзошёл самые смелые ожидания.
akrabad
Цитата(_Anatoliy @ Nov 17 2015, 13:40) *
Поигрался в своё время с первой статьёй,потом понял что зря время теряю,и именно по этой причине для разных частот нужны разные иксы. В итоге сделал корректор по прилагаемой статье,результат превзошёл самые смелые ожидания.

Посмотрел по-быстрому статью. Схема корректировки содержит два фильтра, которые фильтруют "эффекты", вносимые SHA, и уничтожают(eliminate) мнимые компоненты. Результаты корректировки в статье отличные. Пики на уровне - 90dB, что мне и нужно. Но я не могу использовать SHA. Его попросту нет. У меня есть две АЦП в устройстве и ПЛИС, которая и будет выполнять цифровую корректировку на заднем плане (digital background calibration) Если я сказал что-то не так по поводу "вашей" статьи, то, пожалуйста, поправьте.
В первом сообщение я спрашивал о "физике" процесса корректировки фильтром. Фильтр sinc компенсирует фазовое отклонение сигнала.
Пускай отсчеты идеального сигнала приходят раньше, чем надо. Фильтром sinc мы их пересчитываем на те значение, которые должны были быть. Создаем задержку. Для идеального сигнала мы ее знаем. Тогда почему после Fs/4 такой косяк со знаком возникает?


http://www.labbookpages.co.uk/audio/beamfo...ionalDelay.html
Пример, после которого я решил заменить фильтр из статьи ( https://drive.google.com/file/d/0B-a0qo3gvn...1eTA/view?pli=1 ) на фильтр sinc.
_Anatoliy
Цитата(akrabad @ Nov 17 2015, 10:22) *
Посмотрел по-быстрому статью. Схема корректировки содержит два фильтра, которые фильтруют "эффекты", вносимые SHA, и уничтожают(eliminate) мнимые компоненты. Результаты корректировки в статье отличные. Пики на уровне - 90dB, что мне и нужно. Но я не могу использовать SHA. Его попросту нет. У меня есть две АЦП в устройстве и ПЛИС, которая и будет выполнять цифровую корректировку на заднем плане (digital background calibration) Если я сказал что-то не так по поводу "вашей" статьи, то, пожалуйста, поправьте.

Вам не нужен никакой SHA(он внутри АЦП). А я так и делал: два АЦП+FPGA. После калибровки проверял в диапазоне температур - полёт нормальный.
akrabad
Цитата(_Anatoliy @ Nov 17 2015, 14:42) *
Вам не нужен никакой SHA(он внутри АЦП). А я так и делал: два АЦП+FPGA. После калибровки проверял в дипазоне температур - полёт нормальный.

Хорошо, попробую. Спасибо за статью! Я ее до этого видел, вроде бы, но из-за моего незнания отбросил.
_Anatoliy
Цитата(akrabad @ Nov 17 2015, 10:46) *
Хорошо, попробую. Спасибо за статью! Я ее до этого видел, вроде бы, но из-за моего незнания отбросил.

Кстати я обошёлся одним фильтром,а не двумя.
_pv
Цитата(akrabad @ Nov 17 2015, 13:22) *
В первом сообщение я спрашивал о "физике" процесса корректировки фильтром. Фильтр sinc компенсирует фазовое отклонение сигнала.
Пускай отсчеты идеального сигнала приходят раньше, чем надо. Фильтром sinc мы их пересчитываем на те значение, которые должны были быть. Создаем задержку. Для идеального сигнала мы ее знаем. Тогда почему после Fs/4 такой косяк со знаком возникает?

помимо фазы есть еще амплитуда, почему бы просто не построить АЧХ и ФЧХ обоих каналов независимо, взять разницу и по получившимся разностных характеристикам построить подходящий фильтр.

но для начала попробуйте просто убрать ошибки усиления и смещения просто по DC, а для сдвига фазы одному каналу добавте интерполятор, для начала линейный, не хватит - http://www.dsplib.ru/content/farrow/farrow.html
akrabad
Цитата(_Anatoliy @ Nov 17 2015, 13:40) *
Поигрался в своё время с первой статьёй,потом понял что зря время теряю,и именно по этой причине для разных частот нужны разные иксы. В итоге сделал корректор по прилагаемой статье,результат превзошёл самые смелые ожидания.

При моделировании фильтров F1 и F2, по формулам из статьи, с частотой дискретизации = 206438400, тау1 = 1.001*10^(-9), тау2 = 1.003*10^(-9), где тау1 и тау2 - постоянные времени RC-цепочек, получил график АЧХ, похожий на график АЧХ в статье. Синий - F1. Зеленый - F2.

Эти фильтры зависят, по-сути, только от этих тау. Как узнать их для реального устройства? Как Вы их узнавали? Каким-то детектором?
И еще один вопрос. Для замены двух фильтров одним необходимо поделить F2(w) на F1(w)?
_Anatoliy
Вот модуль коэффициента передачи моего корректирующего фильтра в полосе 500МГц.

Цитата(akrabad @ Nov 24 2015, 12:33) *
Как Вы их узнавали? Каким-то детектором?

Нет,просто набирал отсчёты с каждого АЦП подавая на вход сетку частот контрольного сигнала. Отсчёты скармливал в матлаб,он мне выдавал нужную ИХ корректора. В статье есть все необходимые формулы.
Цитата(akrabad @ Nov 24 2015, 12:33) *
Для замены двух фильтров одним необходимо поделить F2(w) на F1(w)?

Да,именно так я и сделал.

Кстати,могу показать сигнал на выходе корректора.
akrabad
При корректирующей фильтрации канала, интерполированного нулями в два раза, происходит корректировка не только полезного сигнала, но и его "копии".
Т.к. мы эту "копию" откорректировали, то она появилась на выходе.
Как это надо учесть при расчете фильтров(а)?
По формулам из статьи, предоставленной пользователем _Anatoliy, я так до конца и не уяснил метод корректировки, а точнее, его реализацию.


_Anatoliy
Цитата(akrabad @ Dec 23 2015, 13:56) *
Т.к. мы эту "копию" откорректировали, то она появилась на выходе.
Как это надо учесть при расчете фильтров(а)?

Никак не учитывать. Не забывайте что при откорректированном основном сигнале образ интерливинга будет уничтожен.
akrabad
Цитата(_Anatoliy @ Dec 23 2015, 18:59) *
Никак не учитывать. Не забывайте что при откорректированном основном сигнале образ интерливинга будет уничтожен.

Если я корректирую канал фильтром от 0 до Fs/4, где Fs - результирующая частота дискретизации двух АЦП, то сигналы, поступающие от 0 до Fs/4 корректируются.
Но при использовании апсамплинга и фильтра от 0 до Fs/2 сигнал не корректируется. Они не корректируются потому что при апсамплинге возникает копия спектра.

Если задавать АЧХ и ФЧХ по значениям для конкретной частоты, то мы можем корректировать эту частоту.
_Anatoliy
Цитата(akrabad @ Dec 23 2015, 15:25) *
Если я корректирую канал фильтром от 0 до Fs/4, где Fs - результирующая частота дискретизации двух АЦП, то сигналы, поступающие от 0 до Fs/4 корректируются.
Но при использовании апсамплинга и фильтра от 0 до Fs/2 сигнал не корректируется. Они не корректируются потому что при апсамплинге возникает копия спектра.
Если задавать АЧХ и ФЧХ по значениям для конкретной частоты, то мы можем корректировать эту частоту.

Что то делаете не так. На моей картинке видно что образ надёжно сидит в шумах. А сколько тапов у вашего корректирующего фильтра?
akrabad
Цитата(_Anatoliy @ Dec 23 2015, 19:31) *
Что то делаете не так. На моей картинке видно что образ надёжно сидит в шумах. А сколько тапов у вашего корректирующего фильтра?

Количество тапов = 1025.
F1 - задерживающий фильтр.
F2 - фильтр, полученный обратным преобразование фурье по необходимой АЧХ и ФЧХ + окно Ханна.

_Anatoliy
Цитата(akrabad @ Dec 23 2015, 15:41) *
Количество тапов = 1025.
F1 - задерживающий фильтр.
F2 - фильтр, полученный обратным преобразование фурье по необходимой АЧХ и ФЧХ + окно Ханна.

Офигеть! У меня всего 62 тапа. И никаких окон не нужно - они только мешают.
А сколько точек FFT?А сколько точек IFFT? А сколько эталонных частот подавали для калибровки?
akrabad
Цитата(_Anatoliy @ Dec 23 2015, 20:01) *
Офигеть! У меня всего 62 тапа. И никаких окон не нужно - они только мешают.
А сколько точек FFT?А сколько точек IFFT? А сколько эталонных частот подавали для калибровки?

Что вы подразумеваете под эталонными частотами? А для чего вы использовали FFT в алгоритме получения фильтра?
  1. Подал 14 частот на АЦП;
  2. По этим сигналам получил 14 значений для разностных АЧХ и ФЧХ для фильтра F2;
  3. Произвел интерполяцию;
  4. Получил 1025 значений АЧХ и ФЧХ(теперь буду меньше);
  5. Задал комплексный коэффициент передачи;
  6. Выполнил IFFT и получил 1025 значений фильтра.
_Anatoliy
Цитата(akrabad @ Dec 23 2015, 16:27) *
Что вы подразумеваете под эталонными частотами? А для чего вы использовали FFT в алгоритме получения фильтра?
1.Подал 14 частот на АЦП;
2.По этим сигналам получил 14 значений для разностных АЧХ и ФЧХ для фильтра F2;
3.Произвел интерполяцию;
4.Получил 1025 значений АЧХ и ФЧХ(теперь буду меньше);
5.Задал комплексный коэффициент передачи;
6.Выполнил IFFT и получил 1025 значений фильтра.

Я не так делал.
1. Подаю 30 частот,можно не все сразу,а по одному сигналу. Частоты считаю так:
Код
fs=550;%Fs one ADC
Nfreq = 32;
Nfft = Nfreq-1;
TableFreq = fs*(1:Nfft-1)/Nfft;

2). Выполняю FFT размерностью Nfft для каждого АЦП.Результат G1 и G2.
3). Считаю результирующий фильтр и добавляю значения нулевой частоты и fs
Код
        
F0(i) = conj(G1(ind)) ./ conj(G2(ind));
F0 = [1.04 F0 1.008];%%

4). Преобразую результат
Код
    N = length(F0);
    nF0 = [F0(1:N) conj(F0(N-1:-1:2))].';
    nF0([1 N]) = real(nF0([1 N]));

5). Выполняю IFFT размерностью 62 точки
6). Нормирую полученную ИХ.
7). Прошиваю в FPGA и любуюсь результатом.
akrabad
Цитата(_Anatoliy @ Dec 24 2015, 14:14) *
2). Выполняю FFT размерностью Nfft для каждого АЦП.Результат G1 и G2.
3). Считаю результирующий фильтр и добавляю значения нулевой частоты и fs

Я получаю G1 и G2 вот так
Код
for iter = 1:1:Nfreq-2 %Цикл по всем сигналам
    Temp = fft(ch_1, Nfft); %fft первой АЦП
    G1(iter) = Temp(iter+1); %G1 - 1x34 % Temp - 1x35
    Temp = fft(ch_2, Nfft); %fft второй АЦП
    G2(iter) = Temp(iter+1);
end
    F0 = conj(G1) ./ conj(G2);% По формуле нам надо только(-ws/2 + w)
Правильно ли?

Цитата(_Anatoliy @ Dec 24 2015, 14:14) *
6). Нормирую полученную ИХ.
Под нормированием вы подразумеваете только приведение суммы коэфф. к 1?
После ifft ИХ выглядит так. "Сдвигали" ли вы ее?
_Anatoliy
Цитата(akrabad @ Jan 12 2016, 09:48) *
Я получаю G1 и G2 вот так
Код
for iter = 1:1:Nfreq-2 %Цикл по всем сигналам
    Temp = fft(ch_1, Nfft); %fft первой АЦП
    G1(iter) = Temp(iter+1); %G1 - 1x34 % Temp - 1x35
    Temp = fft(ch_2, Nfft); %fft второй АЦП
    G2(iter) = Temp(iter+1);
end
    F0 = conj(G1) ./ conj(G2);% По формуле нам надо только(-ws/2 + w)
Правильно ли?

Под нормированием вы подразумеваете только приведение суммы коэфф. к 1?
После ifft ИХ выглядит так. "Сдвигали" ли вы ее?

1).Я получаю G1 и G2 вот так
Код
   for i=1:Nfft-1
        NumBin = i+1;
        sp = fft(squeeze(sg(1,i,:)))/(Nfft/2);
        G1(i) = sp(NumBin);
        sp = fft(squeeze(sg(2,i,:)))/(Nfft/2);
        stem(abs(sp));
        m = abs(sp(NumBin));
        a = angle(sp(NumBin)) - pi*TableFreq(i)/fs;
        G2(i) = m.*exp(1i*a);
    end;

Тактовый сигнал для второго АЦП сдвинут на pi, это нужно учесть.
2). Как считается F0 я приводил.
3). Да
4). Конечно сдвигал.
ViKo
Читаю эту тему. Всплыло несколько вопросов.
1. Фильтры, что здесь обсуждаются, корректируют смещение выходов АЦП одного относительно другого? Например, постоянно один АЦП выдает значения на несколько единиц меньше другого. Если фильтр FIR умножает выборки на коэффициенты, как он сможет добавить постоянное число?
2. Аналогичный вопрос по коррекции сдвига между АЦП. Если они работают не строго в противофазе, это скорректируется?
3. Если АЧХ фильтра есть ДПФ от импульсной характеристики, то почему сразу не вычислить коэффициенты фильтра, подав на входы АЦП импульс? Дальше, почему именно импульс, а не перепад? Все равно потом вычисляется отношение частотных характеристик. То есть, подал перепад, вычислил спектры, поделил. Вычислил ОДПФ, получил коэффициенты корректирующего фильтра.
4. Если у меня полоса АЦП в несколько раз больше полосы сигнала, и АЧХ в интересующем меня диапазоне, можно считать, идентичная, может, мне ограничиться тремя величинами: смещением, коэффициентом передачи, временнЫм сдвигом?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.