Как сделать осциллограмму в матлабе
Далее мы расскажем о том, как создать модель энергосистемы в среде Simulink и записать результаты ее работы в файлы формата COMTRADE для дальнейшего использования в ходе испытаний устройств и алгоритмов РЗА.
В области РЗА моделирование позволяет наглядно изучить принципы и особенности работы элементов энергетической системы, закрепить теоретические знания, полученные из учебников и специализированной литературы. Кроме того, компьютерная техника позволяет выполнить модель реального устройства релейной защиты и автоматики и проанализировать его поведение в различных режимах работы защищаемого объекта.
Моделирование позволяет инженеру не только проанализировать теоретические вопросы, но дает возможность выполнить конкретные практические эксперименты. Такой подход полезен как при разработке цифровых устройств, так и в процессе их наладки и эксплуатации.
Для проведения практических исследований инженеру необходимо:
- Создать и верифицировать модель энергосистемы;
- Определить перечень и параметры исследуемых режимов (тип и место возникновения короткого замыканий (КЗ) и пр.);
- Провести вычисление исследуемых режимов и сохранить данные в формате COMTRADE ;
- Выполнить испытания цифровой модели устройства РЗА;
- Выполнить испытания исследуемого устройства РЗА, путем подачи на него реальных токов и напряжений, воспроизведенных из записанных ранее файлов в формате COMTRADE , например, с помощью РЕТОМ-51;
- Сопоставить результаты работы исследуемого устройства РЗА с его теоретической моделью, проанализировать выявленные отклонения и принять соответствующие меры.
COMTRADE (IEEE Standard Common Format for Trancient Data Exchange for Power Systems) — это международный формат записи осциллограмм, предназначенный для хранения информации о значениях и параметрах электрических сигналов. На момент написания данной статьи актуальной версией стандарта является C37.111-2013.
В Simulink данная модель может быть упрощенно представлена в следующем виде:
Рисунок 1 – упрощенная модель энергосистемы с двухобмоточным понижающим трансформатором и симметричной нагрузкой.
На рисунке 1 оранжевым цветом представлены элементы моделируемой сети, желтым — блоки измерения токов и напряжений, белым — блоки параметров модели.
В блоке имитаторе КЗ задано двухфазное КЗ между фазами А и С на интервалах времени с 0,3 по 0,4 с и с 0,6 по 1 с от момента начала расчета. Фазные токи на стороне ВН трансформатора, полученные в результате работы модели, представлены на рисунке 2.
Рисунок 2 – результаты моделирования двухфазного КЗ на стороне НН силового трансформатора
Съём данных с модели и их передача в рабочую область MATLAB для сохранения в файлы формата COMTRADE выполняется следующей схемой:
Рисунок 3 – схема съема данных с измерителей и передачи в MATLAB с наложением шкалы времени
Для скачивания доступны следующие файлы:
-
– файл модели в Simulink , представленной на рисунках 1 и 3; – файл MATLAB , преобразующий данные с рисунка 2 в файлы формата COMTRADE ; – вспомогательный файл MATLAB , преобразующий формат каналов.
Для генерации осциллограммы в формате COMTRADE необходимо выполнить следующие действия:
- Запустить M . slx ;
- В открывшемся окне Simulink нажать кнопку Run (произойдет моделирование КЗ);
- Двойным щелчком левой кнопки мыши открыть осциллограф. Удостовериться, что картина переходного процесса соответствует приведенной на рисунке 2;
- Запустить comtrade _ generator . m и в окне MATLAB нажать кнопку Run (произойдет сохранения результатов моделирования КЗ в файлы формата COMTRADE ).
Результатом успешного выполнения действий 1 – 4 будет генерация и сохранение двух файлов M . cfg и M . dat , файлы будут сохранены там же где расположен файл comtrade _ generator . m
Файл с расширением *. dat содержит данные по каналам, файл с расширением *. cfg – описание каналов (наименования каналов, коэффициенты приведения, частоту дискретизации, время записи осциллограммы и прочее).
Рисунок 4 – COMTRADE из М.slx открыт в инструменте анализа осциллограмм KIWI
Изучив рекомендуемую литературу, а также текст стандарта IEC 60255-24, описывающий формат COMTRADE , Вы сможете усовершенствовать предложенную модель. Например, записать в осциллограмму не только токи на стороне ВН, но и напряжения.
Полученный на данном этапе результат позволит Вам перейти к следующим, более трудоемким шагам:
По работе неоднократно сталкивался с необходимостью быстро определить наличие в сигнале гармонических составляющих. Часто для примерной оценки достаточно воспользоваться алгоритмом быстрого преобразования Фурье. Тем более, что его реализации есть практически во всех математических пакетах и библиотеках, да и собственноручно реализовать не составит особого труда. Между тем, опыт показывает, что, при всей своей простоте, метод начинает вызывать некоторые вопросы, когда возникает необходимость не просто посмотреть наличие дискреток в сигнале, но и выяснить их абсолютные значения, т.е. нормализовать полученный результат.
В этой статье я постараюсь объяснить, что же все-таки выдает в качестве результата fft (Fast Fourier transform) на примере MATLAB (и в качестве бонуса проведу небольшой ликбез по этому весьма полезному, на мой взгляд, языку).
MATLAB позволяет не заморачиваться с ручным удалением ненужных объектов, однако, при работе с более менее объемными массивами данных, имеет привычку капризничать и жаловаться на недостаток памяти. Для освобождения памяти используется процедура clear с указанием имени объекта, который необходимо удалить.
С этого и начнем. Так как все необходимое мы сгенерируем самостоятельно, можно смело удалять все, что накопилось в рабочем пространстве за активную сессию, просто добавив ключевое слово all:
clear all% Очистка памяти
Итак, прежде всего, зададим исходные данные для нашей модели. Фурье анализ идеально подходит для выделения гармонических сигналов на фоне помех. Для того чтобы продемонстрировать это, возьмем в качестве сигнала сумму некоторой постоянной и двух синусоид с разной частотой и амплитудой. Дисперсию шума возьмем в 3 раза больше амплитуды первой синусоиды. Так же зададим количество частотных полос, которые должен будет посчитать fft алгоритм. Точка с запятой в конце строк не обязательна, и если ее не ставить, результат вычисления функций и задания переменных будет дублироваться в командную строку, что можно использовать для отладки кода (однако, 512 значений сплошным полотном в командной строке вряд ли помогут вам, тем более что их вывод тоже занимает некоторое количество времени, так что все же лучше не забывать закрывать строки).
%% Параметры
Tm=5;% Длина сигнала (с)
Fd=512;% Частота дискретизации (Гц)
Ak=0.5;% Постоянная составляющая (Попугаев)
A1=1;% Амплитуда первой синусоиды (Попугаев)
A2=0.7;% Амплитуда второй синусоиды (Попугаев)
F1=13;% Частота первой синусоиды (Гц)
F2=42;% Частота второй синусоиды (Гц)
Phi1=0;% Начальная фаза первой синусоиды (Градусов)
Phi2=37;% Начальная фаза второй синусоиды (Градусов)
An=3*A1;% Дисперсия шума (Попугаев)
FftL=1024;% Количество линий Фурье спектра
MATLAB (Matrix Laboratory), как следует из названия, предназначен прежде всего для работы с массивами, практически все алгоритмы счета в нем оптимизированы для работы с векторами. Обилие удобных инструментов работы так же ненавязчиво подталкивает представлять как можно больше исходных данных в виде матриц. В частности, можно легко сгенерировать массив возрастающих (убывающих) величин с заданным шагом (1\Fd в данном примере):
%% Генерация рабочих массивов
T=0:1/Fd:Tm;% Массив отсчетов времени
Случайный Гауссов шум задается функцией randn, результатом которой является массив размерности, заданной в ее параметрах. Для единообразия зададим его в виде строки (первый параметр 1) длиной соответствующей длине нашего массива отсчетов времен, что в свою очередь вычислим функцией length.
Noise=An*randn(1,length(T));% Массив случайного шума длиной равной массиву времени
Символ * используется для обозначения перемножения. Т.к. чаще всего действия производятся над векторами, то и умножение подразумевается векторное, но так же легко можно, не перегружая этот оператор, использовать его для поэлементного перемножения, добавив перед ним точку (.*). При умножении вектора на скаляр точка перед умножением не является обязательной. Также добавленная точка сделает поэлементным возведение в степень и деление.
Signal=Ak+A1*sind((F1*360).*T+Phi1)+A2*sind((F2*360).*T+Phi2);% Массив сигнала (смесь 2х синусоид и постоянной составляющей)
Теперь перейдем к тому, ради чего и затевалась данная статья — функции fft(). Аргументами стандартной функции MATLAB являются сам сигнал (в нашем случае Signal), размерность вектора-результата (FftL), а также измерение.
Последний аргумент определяет вдоль какого измерения располагается сигнал в случае если на вход подается многомерный массив (Иногда этот параметр ошибочно принимают за размерность преобразования Фурье, но это не так. Хотя в MATLAB есть реализации 2-хмерного fft2() и многомерного fftn() алгоритмов). Так как наш сигнал представляет собой вектор, то его вполне можно опустить.
Рассмотрим сначала сигнал без примеси шума. В качестве результата мы получим вектор комплексных чисел. Это и есть представление нашего сигнала в частотном домене в показательной форме. Т.е. модули этих комплексных чисел представляют амплитуды соответствующих частот (точнее полосы частот см. дальше), а аргументы – их начальные фазы. И если полученная фаза, однозначно вычисляется в радианах, то с амплитудой и частотами не все так просто.
Например, если мы просто применим к нашему сигналу преобразование Фурье, и возьмем абсолютные значения вектора на выходе, то получим приблизительно следующую картинку:
Для построения двухмерных графиков удобно использовать функцию plot. Основные параметры, используемые в этой функции – одномерные массивы точек, первый задает ось ординат, второй – значение функции в соответствующих точках. Если передать только один массив, то он будет отображен с фиксированным шагом 1.
Если присмотреться к полученной картинке выяснится, что она несколько отличается от наших ожиданий. На приведенном графике 5 пиков вместо ожидаемых 3х (постоянная + 2 синусоиды), их амплитуды не совпадают с амплитудами исходных сигналов, и ось абсцисс вряд ли отображает частоты.
Теперь обратим внимание на ось значений.
Согласно теореме отсчетов (так же известной как теорема Найквиста-Шеннона или более патриотично теорема Котельникова) спектр дискретного сигнала будет ограничен половиной частоты дискретизации (Fd). Или в нашем случае –Fd/2 слева и Fd/2 справа. Т.е. весь полученный массив покрывает Fd частот. Отсюда, учитывая что мы знаем (вернее даже самостоятельно задали в качестве параметра) длину массива, получим частоты в виде массива значений от –Fd/2 до Fd/2 с шагом Fd/FftL (на самом деле крайняя правая частота будет меньше границы на один отсчет т.е. Fd/2-Fd/FftL):
Теперь это уже похоже на тот результат, который мы ожидаем. Единственное, что смущает теперь – это амплитуды. С этим все достаточно просто. Т.к. быстрое преобразование Фурье фактически представляет собой суммирование сигнала перемноженного на ядро преобразования (комплексную экспоненту) для каждой из частот, то реальный результат будет меньше полученного ровно в количество суммирований (частот в результате), т.е. полученный результат надо разделить на количество элементов в результате (не забываем, что под результатом понимается весь ответ, вместе с отброшенной частью, т.е. наше заданное FftL):
Стоит упомянуть еще одну вещь. В спектральном представлении вычисляется не значение сигнала на той частоте на которую попал алгоритм (как мы помним частоты следуют с шагом Fd/FftL), а значение в полосе (шириной равной шагу). Т.е. если в эту полосу попало несколько дискреток, то они суммируются. Для примера можно уменьшить количество линий в результате работы алгоритма:
Или более близко окрестности одной из дискреток:
Код для нормировки fft будет выглядеть приблизительно следующим образом:
%% Спектральное представление сигнала
FftS=abs(fft(Signal,FftL));% Амплитуды преобразования Фурье сигнала
FftS=2*FftS./FftL;% Нормировка спектра по амплитуде
FftS(1)=FftS(1)/2;% Нормировка постоянной составляющей в спектре
FftSh=abs(fft(Signal+Noise,FftL));% Амплитуды преобразования Фурье смеси сигнал+шум
FftSh=2*FftSh./FftL;% Нормировка спектра по амплитуде
FftSh(1)=FftSh(1)/2;% Нормировка постоянной составляющей в спектре
Нам осталось только вывести результаты. Функция subplot позволяет разбить окно на несколько областей для отображения графиков.
%% Построение графиков
subplot(2,1,1);% Выбор области окна для построения
plot(T,Signal);% Построение сигнала
title('Сигнал');% Подпись графика
xlabel('Время (с)');% Подпись оси х графика
ylabel('Амплитуда (Попугаи)');% Подпись оси у графика
subplot(2,1,2);% Выбор области окна для построения
plot(T,Signal+Noise);% Построение смеси сигнал+шум
title('Сигнал+шум');% Подпись графика
xlabel('Время (с)');% Подпись оси х графика
ylabel('Амплитуда (Попугаи)');% Подпись оси у графика
F=0:Fd/FftL:Fd/2-1/FftL;% Массив частот вычисляемого спектра Фурье
figure% Создаем новое окно
subplot(2,1,1);% Выбор области окна для построения
plot(F,FftS(1:length(F)));% Построение спектра Фурье сигнала
title('Спектр сигнала');% Подпись графика
xlabel('Частота (Гц)');% Подпись оси х графика
ylabel('Амплитуда (Попугаи)');% Подпись оси у графика
subplot(2,1,2);% Выбор области окна для построения
plot(F,FftSh(1:length(F)));% Построение спектра Фурье сигнала
title('Спектр сигнала');% Подпись графика
xlabel('Частота (Гц)');% Подпись оси х графика
ylabel('Амплитуда (Попугаи)');% Подпись оси у графика
Результат выполнения кода будет выглядеть следующим образом:
Несмотря на то, что полезного сигнала не видно на фоне шума, спектральная характеристика позволяет определить его частоту и амплитуду.
но видимо в данном случае в матрице а1 не может быть квадратной функции. Может кто подсказать, как правильно задавать ЛЧМ? Заранее спасибо.
ЛЧМ-сигнал
Есть сигнал состоящий из N чипов, чип - косинусоида со своей частотой fi и в пределах чипа частота.
ЛЧМ сигнал в матлабе
Суть задания проста как тапок. В среде матлаба построить ЛЧМ сигнал. параметры сигнала: частота.
Построить ЛЧМ сигнал и построить его спектр
Здравствуйте! Дали следующее задание! В матлабе написать код 1)Построить ЛЧМ сигнал и построить.
Как создать ЭКГ сигнал?
всем привет . ребята помогите создать экг сигналы из 6 отведений . нужны экг сигналы здорового.
Это если задавать частоту от omega до freqEnd. Можно также задавать omega как массив, если нужно идти с заданным шагом по частоте. Но проще всего использовать функцию
Спасибо, но не подскажите, как эта chirp задавать в коде, чтобы получить ЛЧМ с заданными характеристиками? И извините за возможно глупый вопрос, но почему там точка перед умножением на время?)
MATLAB – популярный пакет программ для решения технических, математических, статистических задач, вычислений и моделирования. Так же называется и одноимённый язык программирования, который используется в этом пакете. Давайте рассмотрим порядок работы с окном команд и редактором среды MATLAB.
1 Работа с окном команд в среде MATLAB
В среде MATLAB есть несколько режимов работы. Самый простой – это ввод команд непосредственно в окно команд (Command Window).
Окно команд MATLAB
Если оно не видно в интерфейсе программы, откроем его. Найти окно команд можно через меню Desktop Command Window.
Давайте для примера введём в это окно последовательно друг за другом команды
Стрелками клавиатуры вверх и вниз в окне команд мы можем переключаться между введёнными командами, тут же изменять их, а по нажатию Enter отправлять среде MATLAB на исполнение. Стрелками влево и вправо можно перемещаться по введённой команде и редактировать её. Если в конце команды стоит точка с запятой, то результат будет посчитан, но не будет выведен в окно команд; в противном случае результат выполнения команды будет отображён тут же. По любой функции в среде MATLAB есть подробная встроенная справка. Например, чтобы получить справку по команде plot, выделите эту команду, нажмите на неё правой кнопкой мыши, и в открывшемся контекстном меню выберите пункт Help on Selection или нажмите клавишу F1.
Получение справки по командам MATLAB
Удобно? Безусловно. И главное – очень быстро. Все эти действия занимают несколько секунд.
Но что если нужна более сложная организация команд? Если нужно циклическое исполнение каких-то команд? Вводить команды вручную по одной, а потом долго искать их в истории может быть довольно утомительным делом.
2 Работа с редактором в среде MATLAB
Чтобы упростить жизнь учёному, инженеру или студенту, служит окно редактора (Editor). Давайте откроем окно редактора через меню Desktop Editor.
Открытие редактора MATLAB
В окне редактора можно создавать новые переменные, строить графики, писать программы (скрипты), создавать компоненты для обмена с другими средами, создавать приложения с пользовательским интерфейсом (GUI), а также редактировать имеющиеся.
Нас в данный момент интересует написание программы, содержащей функции для повторного использования в будущем. Поэтому идём в меню File редактора и выбираем New M-File.
Создание нового M-файла в MATLAB
М-файлами в среде МАТЛАБ называются файлы, содержащие текст программ (скрипты) или определённые пользователем функции.
Давайте напишем в редакторе простую функцию draw_plot:
Ввод текста программы в окне редактора MATLAB
Мы добавили вторую функцию и будем выводить сразу два графика рядом друг с другом. Знаком процента обозначаются в среде MATLAB комментарии.
Не забудем сохранить программу. Стандартное расширение файла с программой МАТЛАБ – *.m. Теперь закройте редактор и окно с графиком, который мы построили ранее.
Переходим обратно в окно команд.
Можно очистить историю команд, чтобы лишняя информация нас не отвлекала. Для этого кликните правой кнопкой мыши на поле ввода команд и в открывшемся контекстном меню выберите пункт Clear Command Window.
Переменная X у нас осталась после предыдущего эксперимента, мы её не изменяли и не удаляли. Поэтому в окно команд можно сразу ввести:
Вы увидите, что MATLAB прочитает нашу функцию из файла и выполнит её, нарисовав график.
Результат выполнения скрипта, написанного в редакторе MATLAB
Читайте также: