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

Корректировка мультиплексированных АЦП

Что то делаете не так. На моей картинке видно что образ надёжно сидит в шумах. А сколько тапов у вашего корректирующего фильтра?

Количество тапов = 1025.

F1 - задерживающий фильтр.

F2 - фильтр, полученный обратным преобразование фурье по необходимой АЧХ и ФЧХ + окно Ханна.

Corr_Block1.jpg

 

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


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

Количество тапов = 1025.

F1 - задерживающий фильтр.

F2 - фильтр, полученный обратным преобразование фурье по необходимой АЧХ и ФЧХ + окно Ханна.

Офигеть! У меня всего 62 тапа. И никаких окон не нужно - они только мешают.

А сколько точек FFT?А сколько точек IFFT? А сколько эталонных частот подавали для калибровки?

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


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

Офигеть! У меня всего 62 тапа. И никаких окон не нужно - они только мешают.

А сколько точек FFT?А сколько точек IFFT? А сколько эталонных частот подавали для калибровки?

Что вы подразумеваете под эталонными частотами? А для чего вы использовали FFT в алгоритме получения фильтра?

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

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


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

Что вы подразумеваете под эталонными частотами? А для чего вы использовали 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 и любуюсь результатом.

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


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

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)

Правильно ли?

 

6). Нормирую полученную ИХ.
Под нормированием вы подразумеваете только приведение суммы коэфф. к 1?

После ifft ИХ выглядит так. "Сдвигали" ли вы ее?

ifft.jpg

Изменено пользователем akrabad

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


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

Я получаю 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 ИХ выглядит так. "Сдвигали" ли вы ее?

ifft.jpg

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). Конечно сдвигал.

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


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

Читаю эту тему. Всплыло несколько вопросов.

1. Фильтры, что здесь обсуждаются, корректируют смещение выходов АЦП одного относительно другого? Например, постоянно один АЦП выдает значения на несколько единиц меньше другого. Если фильтр FIR умножает выборки на коэффициенты, как он сможет добавить постоянное число?

2. Аналогичный вопрос по коррекции сдвига между АЦП. Если они работают не строго в противофазе, это скорректируется?

3. Если АЧХ фильтра есть ДПФ от импульсной характеристики, то почему сразу не вычислить коэффициенты фильтра, подав на входы АЦП импульс? Дальше, почему именно импульс, а не перепад? Все равно потом вычисляется отношение частотных характеристик. То есть, подал перепад, вычислил спектры, поделил. Вычислил ОДПФ, получил коэффициенты корректирующего фильтра.

4. Если у меня полоса АЦП в несколько раз больше полосы сигнала, и АЧХ в интересующем меня диапазоне, можно считать, идентичная, может, мне ограничиться тремя величинами: смещением, коэффициентом передачи, временнЫм сдвигом?

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...