28.11.2013 Формирование произвольных сигналов с помощью Waveform
Korogodin (обсуждение | вклад) |
Korogodin (обсуждение | вклад) |
||
(не показаны 15 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
− | <summary [ hidden ]>В векторных генераторах Rohde&Schwarz для задания низкочастотного эквивалента сигнала используются Waveform-файлы (расширение .wv). До настоящего времени их формат оставался нам неизвестным, отсутствовала программа формирования. Эта заметка должна исправить сложившуюся ситуацию.</summary> | + | <summary [ hidden ]>В векторных генераторах Rohde&Schwarz для задания низкочастотного эквивалента сигнала используются Waveform-файлы (расширение .wv). До настоящего времени их формат оставался нам неизвестным, отсутствовала программа формирования. Эта заметка должна исправить сложившуюся ситуацию. |
+ | [[file:RTOScreenshot_2013-11-28_1_152254.png|center|link=Blog:Korogodin/28.11.2013 Формирование произвольных сигналов с помощью Waveform|400px]] | ||
+ | </summary> | ||
Радиосигналы можно рассматривать как произведения двух процессов: низкочастотного эквивалента (''baseband signal'') и несущей гармоники (''radio frequency''). На этом принципе основаны векторные генераторы сигналов. Они умножают квадратуры <math>I</math> и <math>Q</math>, задающие комплексный низкочастотный сигнал, и гармоническое колебание несущей частоты. | Радиосигналы можно рассматривать как произведения двух процессов: низкочастотного эквивалента (''baseband signal'') и несущей гармоники (''radio frequency''). На этом принципе основаны векторные генераторы сигналов. Они умножают квадратуры <math>I</math> и <math>Q</math>, задающие комплексный низкочастотный сигнал, и гармоническое колебание несущей частоты. | ||
+ | |||
+ | [[file:Smbv20131115013.png|center]] | ||
Полоса сигнала редко превышает десятки мегагерц, а значит и спектр низкочастотного эквивалента относительно узок. Узок настолько, что квадратуры <math>I</math> и <math>Q</math> могут воспроизводится цифровыми устройствами, т.к. современные ЦАП обладают полосой в сотни мегагерц. | Полоса сигнала редко превышает десятки мегагерц, а значит и спектр низкочастотного эквивалента относительно узок. Узок настолько, что квадратуры <math>I</math> и <math>Q</math> могут воспроизводится цифровыми устройствами, т.к. современные ЦАП обладают полосой в сотни мегагерц. | ||
Строка 17: | Строка 21: | ||
[[file:2013_MccwHex.png|center]] | [[file:2013_MccwHex.png|center]] | ||
− | Файл состоит из нескольких полей, ограниченных фигурными скобками: | + | Файл состоит из нескольких полей, ограниченных фигурными скобками. Каждый файл должен начинаться с поля TYPE. Порядок остальных полей произвольный. Поля, неизвестные прибору, в процессе чтения файла будут им игнорироваться, но не будут изменены - можно оставлять в файле разного рода комментарии. Значение полей: |
− | * Тип | + | * Тип (обязательное поле) |
Формат: <code>{TYPE:SMU-WV}</code> | Формат: <code>{TYPE:SMU-WV}</code> | ||
− | Есть предположение, что исторически Waveform-файлы создавались для векторных генераторов серии SMU, отсюда и такое значение поля. Waveform-файлы с другими полями пока не наблюдались. | + | Есть предположение, что исторически Waveform-файлы создавались для векторных генераторов серии SMU, отсюда и такое значение поля. Waveform-файлы с другими полями пока не наблюдались. В operating manual к SMBV указаны следующие возможные типы файла: SMU-WV (одна огибающая), SMU-MWV (файл, содержащий несколько огибающих), SMU-DL (data-list), SMU-CL (control list). |
− | * Копирайт | + | * Копирайт (необязательное поле) |
Формат: <code>{COPYRIGHT:2003 Rohde&Schwarz SMU}</code> | Формат: <code>{COPYRIGHT:2003 Rohde&Schwarz SMU}</code> | ||
− | * Дата создания файла | + | * Дата создания файла (необязательное поле) |
Формат: <code>{DATE:2008-10-21;16:08:33}</code> | Формат: <code>{DATE:2008-10-21;16:08:33}</code> | ||
− | * | + | * Смещения среднеквадратического и пикового значений (необязательное поле) |
− | Формат: <code>{LEVEL OFFS: | + | Формат: <code>{LEVEL OFFS:RMSOffset_dB,PeakOffset_dB}</code> |
− | * Число отсчетов низкочастотного эквивалента сигнала | + | Оба значения имеют тип float. RMSOffset_dB определяет смещение среднеквадратического уровня сигнала по отношению к полному размаху сигнала. Полный размах сигнала определяется как максимальная амплитуда вектора I/Q <math>max(|S_{IQ}|) = max(\sqrt{I^2+Q^2}) = 0 dB</math>. PeakOffset_dB определяет смещение пикового уровня сигнала относительно полного размаха. <math>full scale = 2^{15}-1 = 32767</math> |
+ | |||
+ | * Число отсчетов низкочастотного эквивалента сигнала (обязательное поле) | ||
Формат: <code>{SAMPLES:100}</code> | Формат: <code>{SAMPLES:100}</code> | ||
− | + | Число отсчетов сигнала, записанных в данном файле. | |
− | * Частота дискретизации низкочастотного эквивалента сигнала, Гц | + | * Частота дискретизации низкочастотного эквивалента сигнала, Гц (обязательное поле) |
Формат: <code>{CLOCK:100000}</code> | Формат: <code>{CLOCK:100000}</code> | ||
Строка 48: | Строка 54: | ||
Максимальная частота, предположительно, ограничена генератором (полосой). Есть и ограничение снизу. Например, файл со 100 отсчетами на генераторе серии SMBV не удалось запустить с частотой дискретизации меньше 400 Гц. | Максимальная частота, предположительно, ограничена генератором (полосой). Есть и ограничение снизу. Например, файл со 100 отсчетами на генераторе серии SMBV не удалось запустить с частотой дискретизации меньше 400 Гц. | ||
− | * Последовательность квадратур | + | * Последовательность квадратур (обязательное поле) |
− | Формат: <code>{WAVEFORM-401:#<math> | + | Формат: <code>{WAVEFORM-401:#<math>I_0Q_0I_1Q_1...I_{N-1}Q_{N-1}</math>}</code>, где <math>I_n</math> и т.д. - отсчет квадратурной компоненты в формате <code>little endian int16</code>, а 401 - это количество байт Length, вычисляемое по следующей формуле <math>Length = N*4 + 1</math>. Т.е. по 4 байта на каждый комплексный отсчет и 1 байт на символ #. |
Приведенный файл можно прочитать с помощью matlab-скрипта: | Приведенный файл можно прочитать с помощью matlab-скрипта: | ||
Строка 96: | Строка 102: | ||
[[file:2013_QQ_waveform.png|center]] | [[file:2013_QQ_waveform.png|center]] | ||
− | В целом, ожидания совпадают с полученными результатами, за исключением величины ошибки. Она превышает младший разряд (единицу) при отрицательных значениях квадратуры. Есть предположение, что немного некорректно происходит интерпретация доп.кода. | + | В целом, ожидания совпадают с полученными результатами, за исключением величины ошибки. Она превышает младший разряд (единицу) при отрицательных значениях квадратуры. Есть предположение, что немного некорректно происходит интерпретация доп.кода. |
== Формирование Waveform-файла == | == Формирование Waveform-файла == | ||
Строка 130: | Строка 136: | ||
Выход I генератора (заодно узнали, что выход I с чертой - инвертированный I): | Выход I генератора (заодно узнали, что выход I с чертой - инвертированный I): | ||
+ | [[file:RTOScreenshot_2013-11-28_0_150909.png|center]] | ||
+ | |||
+ | Радиосигнал: | ||
+ | [[file:RTOScreenshot_2013-11-28_1_152254.png|center]] | ||
+ | |||
+ | Интересны переходные процессы, которые начинаются ''до'' резкого изменения сигнала. Мысли движутся в сторону интересного проявления эффекта Гиббса. | ||
+ | |||
+ | == Оставшиеся вопросы == | ||
+ | [[File:20131130 Resample.PNG|frame|right|300x200px|К вопросу об интерполяции]] | ||
+ | * Как ведет себя ведут I,Q квадратуры на модуляторе в промежутках между отсчетами - линейно интерполируются или остаются на постоянном уровне. Иначе говоря, для задания BPSK модуляции потребуется 2 отсчета на символ или 1? | ||
+ | Согласно документации, в состав ARB Waveform Generator входит ресемплер который интерполирует входные отсчеты для получения требуемой частоты дискретизации на входе ЦАП. Входная частота дискретизации <math>f_{input}</math> получается либо из файла (поле CLOCK), либо устанавливается в настройках прибора. Согласно той же документации, ФНЧ на стадии ресемплирования является неискажающим для модулирующих сигналов с максимальной полосой <math>BaseBandwidth_{max} MHz = 0.31*f_{input}</math>. | ||
+ | * Какова реальная максимальная длина выборки? | ||
+ | Из документации на SMBV получена некоторая информация. ARB может воспроизводить waveform двумя способами: | ||
+ | #Напрямую из внутренней памяти. По-умолчанию (опция SMBV-B10) прибор имеет память (для целей ARB?) 128MB. 1 комплексный отсчет (1 пара I,Q) занимает 4 байта. Значит, waveform файл может содержать до 32M комплексных отсчетов (без маркеров). К отсчетам можно добавлять маркеры. Каждый маркер занимает 1 бит памяти - в памяти будет меньше комплексных отсчетов сигнала. Комплексные отсчеты из waveform файла считываются в память целиком и потом воспроизводятся. Минимальное количество отсчетов - 512. Если предоставить waveform с меньшим числом отсчетов, она будет повторяться пока не получится 512 отсчетов. | ||
+ | #Streaming from HDD. В данном режиме модулирующие данные считываются прибором с внутреннего жесткого диска. Данный режим ограничивает частоту дискретизации до 1 МГц. | ||
+ | * Каковы реальные ограничения на минимальную и максимальную частоту дискретизации, чем они обусловлены? | ||
+ | В разделе 5.9 мануала к прибору, посвященному модуляции с использованием внешних источников квадратур (непонятно, насколько это относится к ARB), написаны следующие требования к сигналам: | ||
+ | # Частота дискретизации. Внешние входные сигналы с частотой дискретизации, отличающейся от системной тактовой частоты (system clock) ресемплируются. SMBV может обрабатывать цифровые сигналы с частотой дискретизации от 400 Гц до 100 МГц, при этом внутренняя обработка основана на частоте дискретизации 200 МГц (может не совсем точно перевел). | ||
+ | * В WinIQSim есть возможность собирать сценарий из нескольких Waveform-файлов. Есть ли возможность применить сценарий в приборе? | ||
+ | * Можно ли создать сценарий из нескольких файлов, а затем динамически (по сети) подкачивать эти файлы? Тем самым динамически в ПК формировать произвольный сигнал и скармливать его генератору. | ||
+ | |||
+ | [[Категория:HOWTO]] | ||
+ | {{wl-publish: 2013-11-29 10:06:19 +0400 | Korogodin }} |
Текущая версия на 08:29, 21 декабря 2013
Радиосигналы можно рассматривать как произведения двух процессов: низкочастотного эквивалента (baseband signal) и несущей гармоники (radio frequency). На этом принципе основаны векторные генераторы сигналов. Они умножают квадратуры и , задающие комплексный низкочастотный сигнал, и гармоническое колебание несущей частоты.
Полоса сигнала редко превышает десятки мегагерц, а значит и спектр низкочастотного эквивалента относительно узок. Узок настолько, что квадратуры и могут воспроизводится цифровыми устройствами, т.к. современные ЦАП обладают полосой в сотни мегагерц.
Векторные генераторы могут использовать произвольные последовательности квадратур, а значит и формировать произвольные сигналы. Остается ограничение в полосе сигналов и их длительности (периоде). Так, например, генератор R&S SMBV100A 257721 может создавать сигналы с полосой до 120 МГц и длительностью (периодом) до 256 миллионов отсчетов квадратур.
В векторных генераторах Rohde&Schwarz для задания низкочастотного эквивалента сигнала используются Waveform-файлы (расширение .wv). До настоящего времени их формат оставался нам неизвестным, отсутствовала программа формирования. Эта заметка должна исправить сложившуюся ситуацию.
[править] Формат Waveform-файла
Формат был восстановлен по образцу Waveform'а, поставляемого с программой WinIQSim. Файл называется ArbMccwDummy.wv
, содержит 100 точек одного периода комплексной гармоники частоты 1 кГц. Проиллюстрируем формат на примере этого файла.
Файл в HEX'редакторе:
Файл состоит из нескольких полей, ограниченных фигурными скобками. Каждый файл должен начинаться с поля TYPE. Порядок остальных полей произвольный. Поля, неизвестные прибору, в процессе чтения файла будут им игнорироваться, но не будут изменены - можно оставлять в файле разного рода комментарии. Значение полей:
- Тип (обязательное поле)
Формат: {TYPE:SMU-WV}
Есть предположение, что исторически Waveform-файлы создавались для векторных генераторов серии SMU, отсюда и такое значение поля. Waveform-файлы с другими полями пока не наблюдались. В operating manual к SMBV указаны следующие возможные типы файла: SMU-WV (одна огибающая), SMU-MWV (файл, содержащий несколько огибающих), SMU-DL (data-list), SMU-CL (control list).
- Копирайт (необязательное поле)
Формат: {COPYRIGHT:2003 Rohde&Schwarz SMU}
- Дата создания файла (необязательное поле)
Формат: {DATE:2008-10-21;16:08:33}
- Смещения среднеквадратического и пикового значений (необязательное поле)
Формат: {LEVEL OFFS:RMSOffset_dB,PeakOffset_dB}
Оба значения имеют тип float. RMSOffset_dB определяет смещение среднеквадратического уровня сигнала по отношению к полному размаху сигнала. Полный размах сигнала определяется как максимальная амплитуда вектора I/Q . PeakOffset_dB определяет смещение пикового уровня сигнала относительно полного размаха.
- Число отсчетов низкочастотного эквивалента сигнала (обязательное поле)
Формат: {SAMPLES:100}
Число отсчетов сигнала, записанных в данном файле.
- Частота дискретизации низкочастотного эквивалента сигнала, Гц (обязательное поле)
Формат: {CLOCK:100000}
Максимальная частота, предположительно, ограничена генератором (полосой). Есть и ограничение снизу. Например, файл со 100 отсчетами на генераторе серии SMBV не удалось запустить с частотой дискретизации меньше 400 Гц.
- Последовательность квадратур (обязательное поле)
Формат: {WAVEFORM-401:#}
, где и т.д. - отсчет квадратурной компоненты в формате little endian int16
, а 401 - это количество байт Length, вычисляемое по следующей формуле . Т.е. по 4 байта на каждый комплексный отсчет и 1 байт на символ #.
Приведенный файл можно прочитать с помощью matlab-скрипта:
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}');
Скрипт строит графики квадратурных компонент (считанных из файла и ожидаемых, сформированных теоретически):
и разницы между ожидаемой и полученной квадратурой:
В целом, ожидания совпадают с полученными результатами, за исключением величины ошибки. Она превышает младший разряд (единицу) при отрицательных значениях квадратуры. Есть предположение, что немного некорректно происходит интерпретация доп.кода.
[править] Формирование Waveform-файла
Сформируем экзотический сигнал - радиопилу. Код скрипта:
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-полученного файла:
WinIQSim принимает файл без возражений:
Есть некоторое недопонимание почему встроенный вьювер считает, что нельзя засемплировать выборку более 6 раз. Но так он себя ведет и с файлом-примером. Вероятно, ограничение в ПО.
Файл был применен на SMBV100A 256433 (Baseband -> ARB -> Waveform file).
Выход I генератора (заодно узнали, что выход I с чертой - инвертированный I):
Радиосигнал:
Интересны переходные процессы, которые начинаются до резкого изменения сигнала. Мысли движутся в сторону интересного проявления эффекта Гиббса.
[править] Оставшиеся вопросы
- Как ведет себя ведут I,Q квадратуры на модуляторе в промежутках между отсчетами - линейно интерполируются или остаются на постоянном уровне. Иначе говоря, для задания BPSK модуляции потребуется 2 отсчета на символ или 1?
Согласно документации, в состав ARB Waveform Generator входит ресемплер который интерполирует входные отсчеты для получения требуемой частоты дискретизации на входе ЦАП. Входная частота дискретизации получается либо из файла (поле CLOCK), либо устанавливается в настройках прибора. Согласно той же документации, ФНЧ на стадии ресемплирования является неискажающим для модулирующих сигналов с максимальной полосой .
- Какова реальная максимальная длина выборки?
Из документации на SMBV получена некоторая информация. ARB может воспроизводить waveform двумя способами:
- Напрямую из внутренней памяти. По-умолчанию (опция SMBV-B10) прибор имеет память (для целей ARB?) 128MB. 1 комплексный отсчет (1 пара I,Q) занимает 4 байта. Значит, waveform файл может содержать до 32M комплексных отсчетов (без маркеров). К отсчетам можно добавлять маркеры. Каждый маркер занимает 1 бит памяти - в памяти будет меньше комплексных отсчетов сигнала. Комплексные отсчеты из waveform файла считываются в память целиком и потом воспроизводятся. Минимальное количество отсчетов - 512. Если предоставить waveform с меньшим числом отсчетов, она будет повторяться пока не получится 512 отсчетов.
- Streaming from HDD. В данном режиме модулирующие данные считываются прибором с внутреннего жесткого диска. Данный режим ограничивает частоту дискретизации до 1 МГц.
- Каковы реальные ограничения на минимальную и максимальную частоту дискретизации, чем они обусловлены?
В разделе 5.9 мануала к прибору, посвященному модуляции с использованием внешних источников квадратур (непонятно, насколько это относится к ARB), написаны следующие требования к сигналам:
- Частота дискретизации. Внешние входные сигналы с частотой дискретизации, отличающейся от системной тактовой частоты (system clock) ресемплируются. SMBV может обрабатывать цифровые сигналы с частотой дискретизации от 400 Гц до 100 МГц, при этом внутренняя обработка основана на частоте дискретизации 200 МГц (может не совсем точно перевел).
- В WinIQSim есть возможность собирать сценарий из нескольких Waveform-файлов. Есть ли возможность применить сценарий в приборе?
- Можно ли создать сценарий из нескольких файлов, а затем динамически (по сети) подкачивать эти файлы? Тем самым динамически в ПК формировать произвольный сигнал и скармливать его генератору.
[ Хронологический вид ]Комментарии
< pre > Мысли движутся в сторону интересного проявления эффекта Гиббса < /pre > ...скорее в сторону ресемплера
Войдите, чтобы комментировать.