28.11.2013 Формирование произвольных сигналов с помощью Waveform

Материал из SRNS
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
<summary [ hidden ]>В векторных генераторах Rohde&Schwarz для задания низкочастотного эквивалента сигнала используются Waveform-файлы (расширение .wv). До настоящего времени их формат оставался нам неизвестным, отсутствовала программа формирования. Эта заметка должна исправить сложившуюся ситуацию.
 
<summary [ hidden ]>В векторных генераторах Rohde&Schwarz для задания низкочастотного эквивалента сигнала используются Waveform-файлы (расширение .wv). До настоящего времени их формат оставался нам неизвестным, отсутствовала программа формирования. Эта заметка должна исправить сложившуюся ситуацию.
[[file:RTOScreenshot_2013-11-28_1_152254.png|center|300px]]
+
[[file:RTOScreenshot_2013-11-28_1_152254.png|center|400px]]
 
</summary>
 
</summary>
  
Строка 148: Строка 148:
  
 
[[Категория:How-to]]
 
[[Категория:How-to]]
 +
{{wl-publish: 2013-11-29 10:06:19 +0400 | Korogodin }}

Версия 10:06, 29 ноября 2013

Радиосигналы можно рассматривать как произведения двух процессов: низкочастотного эквивалента (baseband signal) и несущей гармоники (radio frequency). На этом принципе основаны векторные генераторы сигналов. Они умножают квадратуры I и Q, задающие комплексный низкочастотный сигнал, и гармоническое колебание несущей частоты.

Полоса сигнала редко превышает десятки мегагерц, а значит и спектр низкочастотного эквивалента относительно узок. Узок настолько, что квадратуры I и Q могут воспроизводится цифровыми устройствами, т.к. современные ЦАП обладают полосой в сотни мегагерц.

Векторные генераторы могут использовать произвольные последовательности квадратур, а значит и формировать произвольные сигналы. Остается ограничение в полосе сигналов и их длительности (периоде). Так, например, генератор R&S SMBV100A 257721 может создавать сигналы с полосой до 120 МГц и длительностью (периодом) до 256 миллионов отсчетов квадратур.

В векторных генераторах Rohde&Schwarz для задания низкочастотного эквивалента сигнала используются Waveform-файлы (расширение .wv). До настоящего времени их формат оставался нам неизвестным, отсутствовала программа формирования. Эта заметка должна исправить сложившуюся ситуацию.


Формат Waveform-файла

Формат был восстановлен по образцу Waveform'а, поставляемого с программой WinIQSim. Файл называется ArbMccwDummy.wv, содержит 100 точек одного периода комплексной гармоники частоты 1 кГц. Проиллюстрируем формат на примере этого файла.

Файл в HEX'редакторе:

2013 MccwHex.png

Файл состоит из нескольких полей, ограниченных фигурными скобками:

  • Тип

Формат: {TYPE:SMU-WV}

Есть предположение, что исторически Waveform-файлы создавались для векторных генераторов серии SMU, отсюда и такое значение поля. Waveform-файлы с другими полями пока не наблюдались.

  • Копирайт

Формат: {COPYRIGHT:2003 Rohde&Schwarz SMU}

  • Дата создания файла

Формат: {DATE:2008-10-21;16:08:33}

  • Постоянные слагаемые при квадратурах (предположительно)

Формат: {LEVEL OFFS:0.0,0.0}

  • Число отсчетов низкочастотного эквивалента сигнала

Формат: {SAMPLES:100}

Максимальное число отсчетов, предположительно, ограничено объемом памяти генератора.

  • Частота дискретизации низкочастотного эквивалента сигнала, Гц

Формат: {CLOCK:100000}

Максимальная частота, предположительно, ограничена генератором (полосой). Есть и ограничение снизу. Например, файл со 100 отсчетами на генераторе серии SMBV не удалось запустить с частотой дискретизации меньше 400 Гц.

  • Последовательность квадратур

Формат: {WAVEFORM-401:#I_1Q_1I_2Q_2...I_NQ_N}, где I_n и т.д. - отчет квадратурной компоненты в формате little endian int16, а 401 - это, предположительно, число байт от ":" до "}", т.е. 4N + 1.

Приведенный файл можно прочитать с помощью matlab-скрипта:

filename = 'ArbMccwDummy.wv';
fid = fopen(filename, 'r+');

for i = 1:135
    ch(i) = fread(fid, 1, 'char');
end

for i = 1:100
%     I2(i) = fread(fid, 1, 'uint8');
%     I1(i) = fread(fid, 1, 'int8');
%     I(i) = I1(i)*2^8 + I2(i) + sign(I1(i));  
%  
%     Q2(i) = fread(fid, 1, 'ubit8');
%     Q1(i) = fread(fid, 1, 'int8');
%     Q(i) = Q1(i)*2^8 + Q2(i) + sign(Q1(i));
I(i) = fread(fid, 1, 'int16', 'ieee-le');
Q(i) = fread(fid, 1, 'int16', 'ieee-le');
end

ch(i+1) = fread(fid, 1, 'char');
fclose(fid);

figure(1)
cost = 2^15*cos(2*pi*(0:(length(I)-1)) / 100);
sint = 2^15*sin(2*pi*(0:(length(I)-1)) / 100);
plot(1:length(I), [I; Q; cost; sint]);
xlabel('n')
ylabel('I, Q')


figure(2)
plot(1:length(I), Q - cost);
xlabel('n')
ylabel('Q_{file} - Q_{theor}');

Скрипт строит графики квадратурных компонент (считанных из файла и ожидаемых, сформированных теоретически):

2013 IQ waveform.png

и разницы между ожидаемой и полученной квадратурой:

2013 QQ waveform.png

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

Формирование Waveform-файла

Сформируем экзотический сигнал - радиопилу. Код скрипта:

filename = 'wave.wv';
fid = fopen(filename, 'w+');

fprintf(fid, '{TYPE:SMU-WV}{COPYRIGHT:2003 Rohde&Schwarz SMU}{DATE:2008-10-21;16:08:33}{LEVEL OFFS:0.0,0.0}{SAMPLES:100}{CLOCK:100000}{WAVEFORM-401:#');

for i = 1:100
    I = i/100 * 2^15;
    Q = 0;
    fwrite(fid, I, 'int16', 'ieee-le');
    fwrite(fid, Q, 'int16', 'ieee-le');
end

fprintf(fid, '}');

fclose(fid);

HEX-полученного файла:

2013 WaveHex.png

WinIQSim принимает файл без возражений:

2013 WinIQSimPila.png

Есть некоторое недопонимание почему встроенный вьювер считает, что нельзя засемплировать выборку более 6 раз. Но так он себя ведет и с файлом-примером. Вероятно, ограничение в ПО.

Файл был применен на SMBV100A 256433 (Baseband -> ARB -> Waveform file).

Выход I генератора (заодно узнали, что выход I с чертой - инвертированный I):

RTOScreenshot 2013-11-28 0 150909.png

Радиосигнал:

RTOScreenshot 2013-11-28 1 152254.png

Интересны переходные процессы, которые начинаются до резкого изменения сигнала. Мысли движутся в сторону интересного проявления эффекта Гиббса.

Оставшиеся вопросы

  • Как ведет себя ведут I,Q квадратуры на модуляторе в промежутках между отсчетами - линейно интерполируются или остаются на постоянном уровне. Иначе говоря, для задания BPSK модуляции потребуется 2 отсчета на символ или 1?
  • Какова реальная максимальная длина выборки?
  • Каковы реальные ограничения на минимальную и максимальную частоту дискретизации, чем они обусловлены?
  • В WinIQSim есть возможность собирать сценарий из нескольких Waveform-файлов. Есть ли возможность применить сценарий в приборе?
  • Можно ли создать сценарий из нескольких файлов, а затем динамически (по сети) подкачивать эти файлы? Тем самым динамически в ПК формировать произвольный сигнал и скармливать его генератору.

[ Хронологический вид ]Комментарии

< pre > Мысли движутся в сторону интересного проявления эффекта Гиббса < /pre > ...скорее в сторону ресемплера

Войдите, чтобы комментировать.

Персональные инструменты
Пространства имён

Варианты
Действия
SRNS Wiki
Рабочие журналы
Приватный файлсервер
QNAP Сервер
Инструменты