В последние 3 года произошел рост цен на измерительное оборудование. В частности, анализаторы спектра фирмы Rohde & Schwarz стали практически недоступны. С другой стороны, они заменяются китайскими аналогами, что тоже очень неплохо.
При этом, анализаторы спектра данной фирмы широко были распространены из-за их адекватной работы.

По факту данное оборудование еще активно используется, но тратить его ресурс на обучение работе на нем студентов не совсем целесообразно. Для решения данной проблемы разработан симулятор анализатора спектра Rohde & Schwarz FSP-30.

Наиболее очевидным напрашивается подход на  основе MATLAB или LabVIEW, но вместо манипуляций с интерфейсом FSP-30 будет интерфейс MATLAB или LabVIEW. Кроме этого лицензии на данное программное обеспечение очень дорогие, что затрудняет его официальное использование. Поэтому был выбран свой путь – разработка симулятора на моем любимом Delphi.

Интерфейс разработанного симулятора
Интерфейс разработанного симулятора

Решаемую задачу можно сформулировать следующим образом:

разработать симулятор анализатора спектра с диапазоном частот до 30 ГГц, повторяющий интерфейс Rohde & Schwarz FSP-30, обладающий адекватным визуальным отображением в зависимости от изменений параметров, позволяющим сформировать задания в виде набора сигналов и оценить правильность их измерения.

Зачем так сложно? А затем, что симулятор анализатора спектра без набора измеряемых сигналов не нужен, а возможность оценки правильности настройки при измерениях позволяет проводить одновременное обучение большого числа студентов.

Ладно, подальше от лирики, поближе к коду…

Что мы будем измерять…

В качестве измеряемых предлагается набор узкополосных модулированных сигналов. У которых возможно настроить частоту несущего колебания, амплитуду, частоту модулирующего сигнала и кучу всего еще в зависимости от конечного применения данного симулятора…

Для простоты идентификации сигналов имеется возможность их включения и выключения…отдельными кнопками (ТЕСТ 1 – ТЕСТ 5).

Теперь все стало предельно понятно и можно переходить к формированию осциллограммы и получению амплитудного спектра с использованием быстрого преобразования Фурье.

Сначала планировалось решать задачу в лоб – честно построить все сигналы, вычислить спектры и вывести нужный кусок спектра, но это оказалось невозможно. Современный ПЭВМ с 8 ГБ оперативки отказывался просчитывать спектр сигнала до 30 ГГц с требуемым разрешением. Поэтому, пришлось все упростить… Построен только один АМн сигнал, получен его спектр, а дальше идет его отображение с заданными параметрами в нужном месте спектра.

     T1:=4;   
     T2:=round(span*2/Sign[i,3,triger[i]]);
     if T2<1 then T2:=2048;

     // Формирование сигнала
     for ij:=0 to DFT.nmax do
      if ((ij mod T1)<(T1/2)) and ((ij mod T2)<(T2/2))
      then
       DFT.fdata[ij]:=0
      else
       DFT.fdata[ij]:=500;

где T1 и T2 – это два периода АМн сигнала (несущего и модулирующего), при этом T2 берется из массива исходных данных сигналов Sign с учетом значения span (ширина полосы обзора). В строках 6-11 происходит классическое построение дискретного АМн сигнала.

f_z:=Sign[i,1,triger[i]]; // Частота в МГц
   N_garm:=round(f_stop/f_z);//расчитали число гармоник
   for grm:=1 to min(N_garm,Sign[i,4,1]) do
    begin
     f_i:=f_z*grm;
     k_z:=round((f_i-f_start)*1024/(f_stop-f_start)); // номер гармоники
     j0:=512-k_z;
     j:=0;
     //Формирование общего спектра сигнала
     for k:=0 to DFT.kmax-1 do
      begin
       k1:=round(j0+j);
       if (k1>300) and (k1<724) and (f_i>f_start) then
          Spectr_sign[k]:=Spectr_sign[k]+round(Angle(i)*(Sign[i,2,triger[i]]*Spectr[k1]*abs(sin(grm*pi/2)/(grm*pi/2))/10));
       j:=j+1;
      end;
    end;
 end;  

f_z – частота узкополосного сигнала (значение берем из массива заданий); N_garm – число гармоник (надо учесть если в полосу обзора попадет несколько гармоник сигнала).

В строках 10-16 происходит добавление отображения сигнала в общем спектре в зависимости от его частоты и установленной полосы обзора.

При этом сигнал формируется только при изменении настроек симулятора один раз. А шум надо генерить постоянно.

 Randomize;
  //Получение спектра шума
 for k:=0 to DFT.kmax-1 do begin
  Spectr_sum[k]:=Max(Spectr_sign[k],0.1*random(rbw*Amp));
 end;

На данный момент шум представляет собой рандомное число, значение которого зависит от rbw (значение полосы пропускания).

Из функций анализатора доступны: выбор детектора, изменение частотного диапазона, выбор полосы пропускания, задание режима отображения (average, maxhold, clearwrite), выбор линейной или логарифмической шкалы отображения амплитуды, работа с маркером.

Реализация данного подхода позволила оживить «картинку спектра» при минимальной загрузке ЦП (у меня получается не более 3%). Вариантов применения данного симулятора очень много. При этом можно придумать различные сценарии... В момент добавления измеренного сигнала в отчет производится фиксация амплитуды маркера, частоты маркера, детектора и любых других параметров и настроек симулятора в зависимости от цели использования.

Комментарии (8)


  1. zatim
    17.08.2024 14:45

    Надо на СК4-56 переходить. Когда я учился у нас были лабы на них, несмотря на то, что эти приборы стоили в свое время, наверное, в разы поболее чем сейчас роде-шварц.


  1. AnSa8x
    17.08.2024 14:45

    А где симулятор то?


    1. Dmitry740 Автор
      17.08.2024 14:45

      Здесь приводится обзор решаемой задачи и ключевые моменты решения. Выкладывать полноценное ПО на которое потрачено 3 месяца работы, мне кажется, не целесообразно. Причем самая главная фишка симулятора - "живая картинка", зависящая от настроек анализатора. Если Вы заинтересованы в его адаптации под определенную область, то готов обсудить условия взаимодейтсвия.


  1. Ar0312
    17.08.2024 14:45

    Он по com порту работает, хотелось бы больше узнать , возможно даже купил бы эту прогу для себя


    1. Dmitry740 Автор
      17.08.2024 14:45

      Нет это локальная прога. Если Вам надо дистанционное управление приборами, то обычно в документации все хорошо расписано. А использование матлаба дает Вам возможность добавить любую логику к дистанционному управлению приборами. Для того чтобы скрыть от пользователя процесс работы с матлабом был опыт запуска матлаба из интерфейса делфи, передача настроек в матлаб, дальше в прибор, считывание данных в матлаб и возвращение их для обработки в делфи. Для пользоватаеля все выглядело как привычное приложение на делфи.


      1. Ar0312
        17.08.2024 14:45

        Правильно понимаю что ваша прога просто симулятор интерфейса и не способена провести замеры?


        1. Dmitry740 Автор
          17.08.2024 14:45

          Она симулятор интерфейса анализатора спектра + симулятор генератора сигналов + система контроля настройки анализатора при измерении


        1. Dmitry740 Автор
          17.08.2024 14:45

          Проведение измерений с помощью анализатора даже с учетом автоматизации этого процесса является штатной операцией, описанной в руководстве.