АЦП с чередованием во времени
Аналого-цифровой преобразователь с чередованием во времени
В данном примере рассматривается модель аналого-цифрового преобразователя с чередованием во времени. АЦП с чередованием во времени являются достаточно быстрыми по скорости оцифровки сигнала за счет того, что в схеме используются несколько преобразователей, частоты дискритизации которых отличаются друг от друга на определенный интервал времени.
Описание работы АЦП с чередованием во времени
На рисунке ниже представлена структурная схема АЦП с чередованием во времени с четыремя параллельно включенными АЦП:
Пусть N - число преобразователей, а тактовый генератор формирует импульсы с частотой F (Период T = 1 / F). Количество фазовращателей M должно равнятся N - 1, а угол смещения d равняется 360 / N. Тогда из одного генератора получится N одинаковых по форме и по частоте сигналов, но с разными равноудаленными фазами. Тогда, чтобы схема работала стабильно, длительность одного импульса должна быть равна T / 2N, чтобы после суммирования получившийся тактовый сигнал для цилического переключателя оказался с частотой f = 4F и скважностью q = 2.
Так как сигналы разнофазные, то и преобразователи будут работать не одновременно. Пока первый преобразователь оцифровывает сигнал, второй преобразователь делает выборку входного сигнала. Пока второй преобразователь работает, третий делает выборку и т.д. К тому моменту, когда последний АЦП начнет работу, первый АЦП уже ее завершит и произведет следующую выборку. Благодоря этому можно существенно сократить время простоя всей схемы, при котором напряжение аналогового сигнала может измениться, но выборка уже была сделана.
Пример
Пусть N = 4, T = 8 нс. Тогда:
Количество фазовращателей M = 4 - 1 = 3;
Угол смещения d = 360 / 4 = 90;
Длительность импульса t = 8 / (2*4) = 1 нс;
При суммировании всех четырех последовательностей получается новая последовательность с частотой следования импульсов, равной четырем частотам изначального сигнала, и со скважностью, равной двум. Новая последовательность является тактирующей для циклического переключателя - устройства, которое с каждым новым тактом соединяет выход со следующим входом, а при достижении последнего входа, возвращает на первый. К его входам подключены выходы преобразователей. За один пероид основного тактирующего сигнала входной аналоговый сигнал выбирается для оцифровки 4 раза, причем все выборки разные, а сигналы с выходов преобразователей чередуются, из-за чего результирующий цифровой сигнал на выходе всех схемы полностью представляет собой цифровой эквивалент входного сигнала.
Сами аналого-цифровые преобразователи могут использоваться любые. Выбор ограничивается лишь технологическим процессом разрабатываемого устройства. Низкие скорости работы некоторых видов АЦП, как например сигма-дельта АЦП, компенсируется архитектурой АЦП с чередованием во времени.
Для демонстрации работы АЦП с чередованием во времени предлагается следующая модель:
Данная модель реализована немного иначе. Преобразователя в данной схеме два, и работают синхронно. Чередование реализовано путем поступления на вход второго АЦП сигнала с задержкой. Время запаздывания выбирается таким образом, что выборка второго АЦП во времени находится между выборками первого АЦП. За счет этого выборки входного сигнала чередуются между преобразователями.
Настройка окружения и запуск модели
Перед началом необходимо проинициализировать необходимые переменные и константы, а также подключить библиотеку для построения графиков:
engee.clear()
using Plots;
plotlyjs();
Fadc = Fs_adc = 1e9 # @param {type:"number"}
Tsim = 5e-6 # @param {type:"number"}
U = 0.6 # @param {type:"number"}
# параметры, расчитываемые из ранее введенных
tsamp = .5/Fs_adc # Время задерживания сигнала на входе второго АЦП, с
F = Fadc / 384 # Частота сигнала, Гц
# параметры для изучения шумовых характеристик и нелинейных искажений
seed = 123 # @param {type:"number"}
threshold = 3 # @param {type:"number"}
alpha = 0.1 # @param {type:"number"}
Джиттер = "Да" # @param ["Да", "Нет"]
Нелинейность = "Да" # @param ["Да", "Нет"]
Шум_квантования = "Да" # @param ["Да", "Нет"]
jitter = Джиттер == "Да" ? 1 : 0; # Включить моделирование джиттера (0 - нет; 1 - да)
nonlinearity = Нелинейность == "Да" ? 1 : 0; # Включить моделирование нелинейности (0 - нет; 1 - да)
quantization = Шум_квантования == "Да" ? 1 : 0; # Включить моделирование шумов квантования (0 - нет; 1 - да)
Fadc - частота дискритизации, Гц
Tsim - длительность симуляции, с
U - амплитуда напряжение сигнала, В
seed - сид генератора шума
threshold - пороговое (максимальное) напряжение на входе АЦП, В
alpha - коэффициент усиления при моделировании нелинейных искажений
3 параметра с выпадающими меню включают или выключают моделирование джиттера, нелинейных искаженний и шумов квантования.
Частота тестового сигнала и время задерживания на входе второго АЦП расчитываются исходя из заданной частоты дискритизации:
F = Fadc / 384
t = 0.5 / Fadc
Запуск модели:
function run_model( name_model, path_to_folder ) # определение функции для прогона модели
Path = path_to_folder * "/" * name_model * ".engee"
if name_model Base.in [m.name for m Base.in engee.get_all_models()] # Проверка условия загрузки модели в ядро
model = engee.open( name_model ) # Открыть модель
out = engee.run( model, verbose=true ); # Запустить модель
engee.close( name_model, force=true ); # Закрыть модель
else
model = engee.load( Path, force=true ) # Загрузить модель
out = engee.run( model, verbose=true ); # Запустить модель
engee.close( name_model, force=true ); # Закрыть модель
end
return out;
end;
name = "INTERLEAVED_ADC"
path = @__DIR__
results = run_model(name, path) # Запуск модели
Осциллограммы входного сигнала и сигнала на выходе АЦП после обратного преобразования:
t = results["Input"].time;
out = results["Input"].value;
t2 = results["Output"].time;
adc = results["Output"].value;
Plots.plot(t, out, label="Вход", linewidth=3)
Plots.plot!(t2, adc, label="АЦП", linewidth=3)
Plots.plot!(title = "Осциллограммы", xlabel = "Время, с", ylabel = "Напряжение, В")
Выходной сигнал имеет схожий вид на входной, значит оцифровка прошла штатно. На выходной осциллограмме заметны характерые для оцифрованного сигнала "ступеньки". В случае большого значения в переменной alpha также на выходе ожидаются сильные нелинейные искажения.
Далее построим спектрограммы обоих сигналов:
using EngeeDSP
import EngeeDSP: spectrumAnalyzer
dataIN = collect(workspace_out)
dataADC = collect(workspace_out_1)
saInput = spectrumAnalyzer(
SampleRate = Fadc,
PlotAsTwoSidedSpectrum = false,
ViewType = "spectrum",
Title = "Спектр входного сигнала",
FrequencySpan = "start-and-stop-frequencies",
StartFrequency = 0,
StopFrequency = 3 * F)
saOutput = spectrumAnalyzer(
SampleRate = Fadc,
PlotAsTwoSidedSpectrum = false,
ViewType = "spectrum",
Title = "Спектр выходного сигнала",
FrequencySpan = "start-and-stop-frequencies",
StartFrequency = 0,
StopFrequency = 3 * F)
figIN = step!(saInput, vcat(dataIN[:,2]...))
figADC = step!(saOutput, vcat(dataADC[:,2]...))
print("Частота сигнала F = ", trunc(F, digits=3), " Гц");
display(figIN)
display(figADC)
Джиттер и шум квантования в данной модели не имеют большого влияния на выходной сигнал, однако при больших значениях коэффициента усиления при моделировании нелинейных искажений на осциллограммах проявляются ограничения сигнала, а на спектрограмме проявляются неравномерности в области верхних частот. Аналогичная ситуация возникает, если амплитуда входного сигнала больше порогового значения АЦП. Пользователю предлагается самому поменять значения параметров модели и оценить изменения формы выходных осциллограммы и спектрограммы.
Суммарная частота дискритизации входного сигнала в АЦП с чередованием во времени равна N частотам дискритизации одного преобразователя в схеме. Так как в данной модели 2 преобразователя, что частота дискретизации должна оказаться удвоенной частоте Fs_adc:
Fs_x = round(results["SampleRate"].value[1], digits=5);
Fs_adc_x = round(Fs_adc / 1e9, digits=5);
print("Частота дискритизации одного АЦП Fs_adc = ", Fs_adc_x, " ГГц \n");
print("Частота дискритизации сигнала Fs = ", Fs_x, " ГГц \n");
print("Fs / Fs_adc = ", Fs_x / Fs_adc_x);
Заключение
В данном примере была продемонстратирована работа АЦП с чередованием во времени. Были представлены осциллограммы и спектрограммы входного и выходного сигналов.
Из графиков можно сделать вывод, что наибольшее влияние на форму сигнала имеют нелинейные искажения, формирующиеся в АЦП из-за, например, слишком высокого входного напряжения. Образщующиеся в схеме джиттер и шум квантования в данной модели не оказывают существенного влияния на форму выходного сигнала.
Список использованной литературы
- Walt Kester. Mixed-signal and DSP design techniques. ISBN-0-916550-23-0
- Walt Kester, Dan Sheingold, James Bryant. Fundamentals of sampled data systems.
- James Bryant, Walt Kester. Data converter architectures.
