Все сообщения

  • Denis Zhegalin
    02.06.2016
    17:34
    Доброго времени суток,

    Мы рады рассказать о новом инструменте для облегчения жизни преподавателям высших учебных заведений, которые используют общеуниверситетскую лицензию Total Academic Headcount. Инструмент носит скромное название  MATLAB Online, сопровождается еще более скромным MATLAB Drive. Кратко о сути:
    1) MATLAB доступен лицензионным пользователям в виде облачного сервиса. Выглядит вот так:




    Список инструментов следующий (естественно Вам будут доступны те, которые есть в Вашей лицензии):

    Communications System Toolbox
    Computer Vision System Toolbox
    Control System Toolbox
    Curve Fitting Toolbox
    Econometrics Toolbox
    Financial Toolbox
    Fuzzy Logic Toolbox
    Global Optimization Toolbox
    Image Processing Toolbox
    Model Predictive Control Toolbox
    Neural Networks Toolbox
    Optimization Toolbox
    Partial Differential Equations Toolbox
    Phased Array SystemToolbox
    Robust Control Toolbox
    RF Toolbox
    Signal Processing Toolbox
    Statistics and Machine Learning Toolbox
    Symbolic Math Toolbox

    2) MATLAB Drive - это аналог любого облачного диска для хранения ваших скриптов и файлов. Необходимо установить клиент на ПК для синхронизации Ваших локальных файлов с облаком (или с MATLAB Mobile).

    3) Самое важно - как (или зачем) это использовать:

        - ВУЗы страдают от недостатка  современных компьютеров. Это настоящая головная боль, когда преподаватель не может использовать MATLAB, потому что у его ПК не хватает оперативной памяти. Теперь Ваши лабораторные классы являются тонкими клиентами (при наличии выхода в интернет), а сам MATLAB работает на серверах MathWorks. 
        - Если у Вас вдруг нет собственного класса, то можно попросить ваших чудесных студентов использовать личные планшеты/ноутбуки для решения задач на семинарах или лабораторных работах. Многие студенты ленятся устанавливать софт - просто отдайте им логин и пароль от личного кабинета. Естественно нужен поднятый Wi-Fi. 
        - Помню, что в студенческие времена можно было использовать следующие аргументы при сдаче домашних работ: "флешка не читается", "файлы битые и не открываются", "я забыл ДЗ дома". С помощью MATLAB Online и MATLAB Drive студент всегда будет с MATLAB (логин и пароль не сложно запомнить или восстановить), и его домашние работы всегда будут в его облачном MATLAB Drive, потому их нельзя будет забыть дома на сломанной флешке с битыми файлами.
  • Denis Zhegalin
    29.01.2016
    16:03
    Много лет MathWorks предоставляет сервис под названием Cody. Это и онлайн соревнования по программированию в MATLAB (очень похоже на наши олимпиады). Можно решать чужие задачи, повышать свои навыки, зарабатывать очки, а также свои собственные задачи добавлять. На базе такого игрового сервиса строится серьезный сервис автоматизации постановки и проверки домашних заданий Cody Coursework.

    Что может делать преподаватель с Cody Coursework:
     - Перенести в online домашние задания по MATLAB
     - Раздавать на электронную почту домашние задания студентам (решать будут внутри Cody Coursework)
     - Строить отчеты об успеваемости студентов
     - Интегрировать с Moodle, если такая система используется при преподавании


    Посмотрите подробное видео по использованию сервиса: How to set up a course
    Здесь доступна инструкция по использованию: http://www.mathworks.com/help/coursework/ug/instructor-walkthrough.html

    Какая возможная польза:
     - Разгрузить себя (преподавателя от проверки тьмы типовых расчетов). 
     - Студенты могут спокойно делать ДЗ дома и передавать решения не в виде "числа", а виде работающего алгоритма расчета. Студенты будут знать до встречи с вами правильно ли они решили задачу или нет
     - Вы сможете прогонять/пропускать большее количество студентов через себя или бОльшее количество задач проверять. 
     - Поскольку существенная доля ДЗ уходит на дом, можете расширить свой курс более интересными темами (все преподаватели жалуются на нехватку времени.)
     - Если в вашей лаборатории/классе есть ПК с доступом в интернет, то можно сделать небольшой тест в Cody Coursework на основании которого можно допустить студента для выполнения лабораторной работы. Если теоретически не подготовился, то зачем пускать?
     - Контрольные работы, коллоквиумы и срезы также можно устраивать в Cody Coursework. Непредвзято, неподкупно: открыли доступ к задачам на 2 часа, студенты за два часа решили, закрыли доступ, а вы спокойно пошли домой или в преподавательскую анализировать (и может быть проверять) результаты.

    Ваши усилия в этой затее:
     - посидеть и перенести ваши задачи на MATLAB (подготовить описания, проверки в электронном виде)
     - убедиться что все студенты имеют университетский e-mail (на который вы будете присылать ДЗ)
     - проконтролировать, что IT служба обеспечит ваш класс доступом в Internet, хотя современный студент обычно ходит с планшетом/ноутбуком, так что могут сами интернет себе обеспечить :)

    Мы постараемся подготовить видеоинструкцию по использованию сервиса на русском языке.

    UPDATE: Видео инструкция для преподавателей на русском языке: Cody Coursework: Инструкция для преподавателей
  • Сергей Сорокин
    30.01.2015
    19:06
  • Михаил
    30.09.2014
    10:18

    Новая графическая система в MATLAB

    В релизе MATLAB R2014b появилась новая графическая система.

    Содержание

    Улучшенный вид – пример 3D графики

    Новая цветовая палитра (colormap) по умолчанию, parula, упрощает интерпретацию данных путем более точного их представления. Она упорядочена от темных к светлым тонам и визуально воспринимается однородно. Также у фигур теперь новый цвет фона по умолчанию, а координатная сетка теперь серого цвета, так что ваши данные отображаются более выраженно. Графическое сглаживание (anti-aliasing) улучшает вид линий и текста на графике.

    surf(peaks)
    

    Улучшенный вид – пример 2D графики

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

    load besseldata
    
    plot(x,y1)
    hold on
    plot(x,y2,x,y3)
    plot(x,y4)
    hold off
    
    xlabel('x')
    ylabel('J_v(x)')
    title('Функции Бесселя');
    

    Графические объекты

    Новая графическая система использует стандартные объекты MATLAB. Это дает бóльшие возможности программного управления, а также легкой настройки ваших графиков.

    Графические объекты теперь отображают свои наиболее распространенные свойства в командном окне.

    s = surf(peaks)
    
    s = 
    
      Surface with properties:
    
           EdgeColor: [0 0 0]
           LineStyle: '-'
           FaceColor: 'flat'
        FaceLighting: 'flat'
           FaceAlpha: 1
               XDat a: [1x49 double]
               YDat a: [49x1 double]
               ZDat a: [49x49 double]
               CDat a: [49x49 double]
    
      Use GET to show all properties
    
    

    Вы можете обращаться и изменять индивидуальные графические свойства с использованием нотации object.property - подобно тому, как вы работаете с полями структуры.

    s.LineWidth
    s.EdgeColor = 'none';
    
    ans =
    
        0.5000
    
    

    Использование методов set и get для свойств объектов все еще работает в новой графической системе. Например, вы можете получить (get) все свойства объекта.

    get(s)
    
              AlignVertexCenters: 'off'
                       AlphaDat a: 1
                AlphaDataMapping: 'scaled'
                 AmbientStrength: 0.3000
                      Annotation: [1x1 matlab.graphics.eventdata.Annotation]
                BackFaceLighting: 'reverselit'
                    BeingDeleted: 'off'
                      BusyAction: 'queue'
                   ButtonDownFcn: ''
                           CDat a: [49x49 double]
                    CDataMapping: 'scaled'
                       CDataMode: 'auto'
                     CDataSource: ''
                        Children: []
                        Clipping: 'on'
                       CreateFcn: ''
                       DeleteFcn: ''
                 DiffuseStrength: 0.6000
                     DisplayName: ''
                       EdgeAlpha: 1
                       EdgeColor: 'none'
                    EdgeLighting: 'none'
                       FaceAlpha: 1
                       FaceColor: 'flat'
                    FaceLighting: 'flat'
                     FaceNormals: [48x48x3 double]
                 FaceNormalsMode: 'auto'
                HandleVisibility: 'on'
                         HitTest: 'on'
                   Interruptible: 'on'
                       LineStyle: '-'
                       LineWidth: 0.5000
                          Marker: 'none'
                 MarkerEdgeColor: 'auto'
                 MarkerFaceColor: 'none'
                      MarkerSize: 6
                       MeshStyle: 'both'
                          Parent: [1x1 Axes]
                        Selected: 'off'
              SelectionHighlight: 'on'
        SpecularColorReflectance: 1
                SpecularExponent: 10
                SpecularStrength: 0.9000
                             Tag: ''
                            Type: 'surface'
                   UIContextMenu: []
                        UserDat a: []
                   VertexNormals: [49x49x3 double]
               VertexNormalsMode: 'auto'
                         Visible: 'on'
                           XDat a: [1x49 double]
                       XDataMode: 'auto'
                     XDataSource: ''
                           YDat a: [49x1 double]
                       YDataMode: 'auto'
                     YDataSource: ''
                           ZDat a: [49x49 double]
                     ZDataSource: ''
    
    

    Новая возможность - Поворачиваемые подписи осей

    Дополнительно появились новые возможности в графической системе. Подписи к засечкам осей теперь можно поворачивать.

    open('PopulationPlot.fig')
    
    ax = gca;
    ax.XTickLabelRotation= -45;
    

    Новая возможность - Построение графиков с датами

    При использовании команды plot поддерживается новый тип данных datetime.

    load tempdata
    class(time)
    
    plot(time,temperature)
    ylabel('Температура')
    
    ans =
    
    datetime
    
    

    Подписи засечек осей форматируются и автоматически обновляются при изменении масштаба или перетаскивании графика.

    ax = gca;
    ax.XLim = [7.3275e+05 7.3319e+05];
    

    Новая возможность - Поддержка многоязычного текста и символов

    Теперь можно использовать символы Unicode в заголовках, подписях осей и пользовательских интерфейсах. Целочисленные значения для символов Unicode можно найти по адресу http://unicode-table.com.

    load unicodelabels
    open('SeismicData.fig')
    
    disp(xLabel);
    
    時間 (s) 
    
    disp(double(xLabel(1)));
    
           26178
    
    
    ax = gca;
    ax.XLabel.String = xLabel;
    ax.YLabel.String = yLabel;
    

    Новая возможность - Множественные цветовые палитры

    Вы теперь можете использовать отдельные цветовые палитры для каждой оси на фигуре.

    figure
    
    ax1 = subplot(1,2,1);
    sphere
    colormap(ax1, autumn)
    
    ax2 = subplot(1,2,2);
    sphere
    colormap(ax2, winter)
    

    Новая возможность - Вкладки в пользовательских интерфейсах

    f = figure;
    
    tabgp = uitabgroup(f);
    tab1 = uitab(tabgp,'Title','График Surface');
    tab2 = uitab(tabgp,'Title','График Contour');
    
    ax1 = axes('Parent',tab1);
    surf(peaks,'Parent',ax1);
    
    ax2 = axes('Parent',tab2);
    contourf(peaks,'Parent',ax2);
    
    tabgp.SelectedTab
    
    ans = 
    
      Tab (График Surface) with properties:
    
                  Title: 'График Surface'
        BackgroundColor: [0.9400 0.9400 0.9400]
               Position: [0.0036 0.0071 0.9911 0.9286]
                  Units: 'normalized'
    
      Use GET to show all properties
    
    

    Другие новые возможности

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

    data1 = randn(5000,1);
    data2 = randn(5000,1)+ 2;
    
    figure
    h1 = histogram(data1);
    hold on
    h2 = histogram(data2);
    hold off
    
    legend show
    

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

    morebins(h1);  %увеличить на 10%
    morebins(h1);  %увеличить на 10%
    
    fewerbins(h2); %уменьшить на 10%
    fewerbins(h2); %уменьшить на 10%
    
    h1.Normalization = 'countdensity';
    h2.Normalization = 'countdensity';
    
  • MeL
    19.09.2014
    19:06

    Робастное управления сервоконтроллером для двигателя постоянного тока

    В следующем примере рассмотрим, как использовать неопределенные объекты (uncertain objects) в Robust Control Toolbox ™ для моделирования неопределенных систем и автоматизировать расчет робастности системы, используя средства анализа надежности.

    Contents

    Читать подробнее...

  • Alexey Antipin
    17.07.2014
    10:38

    Измерение вектора ошибки для системы стандарта IEEE 802.15.4 (ZigBee)

    Данный пример демонстрирует, как использовать системный объект COMM.EVM для измерения величины векторной ошибки (EVM) при симуляции передатчика стандарта IEEE® 802.15.4 [ 1 ]. IEEE 802.15.4 - это основной документ спецификации ZigBee.

    Contents

    Величина векторной ошибки

    Велечина векторной ошибки (error vector magnitude, EVM) является мерой различия между идеальным модулированным сигналом и реально переданным сигналом. EVM используется для колличественной оценки точности модуляции передатчиком. Согласно [ 1 ], среднеквадратическая EVM передатчика стандарта 802.15.4 не должна превышать 35%.

    Параметры системы

    Система 802.15.4 для полосы 868 МГц применяет технику расширения спектра методом прямой последовательности (direct sequence spread spectrum, DSSS) и относительную двоичную фазовую манипуляцию (DBPSK) для модуляции последовательности чипов.

    dataRate = 20e3;   % Скорость битового потока в Гц
    M = 2;             % Порядок модуляции (BPSK)
    chipValues = [1;1;1;1;0;1;0;1;1;0;0;1;0;0;0];
                       % Значения чипов для бита равного 0
                       % Значения чипов для 1 имеют противоположные значения
    

    Раздел 6.7.3 из [ 1 ] определяет, что измерения проводятся для 1000 отсчетов синфазной (I) и квадратурной (Q) составляющих сигнала в основной полосе. Для учета задержки, вносимой фильтром, при симуляции передаваемых символов мы добавили 1 дополнительный бит. Передаваемый сигнал интерполируется с коэффициентом интерполяции равным 4. Мы предполагаем отношение сигнал/шум (SNR) равное 60 дБ для учета искажений вносимых передатчиком и тестируемым оборудованием.

    numSymbols = 1000;          % Число символов, необходимое для одного измерения EVM
    numFrames = 100;            % Число фреймов
    nSamps = 4;                 % Число отсчетов, представляющих символ
    filtSpan = 8;               % Длина фильтра в символах
    gain = length(chipValues);  % Усиление за счет расширения (число чипов в символе)
    chipRate = gain*dataRate;   % Скорость потока чипов
    sampleRate = nSamps*chipRate;    % Окончательная частота дискретизации
    numBits = ceil((numSymbols)/gain)+1;
                                % Число бит, необходимое для одного измерения EVM
    SNR = 60;                   % Отношение сигнал/шум в дБ
    

    Инициализация системы

    Мы можем получить символы с BPSK модуляцией применив простое преобразование: 0 --> +1 и 1 --> -1. Если мы выполним такое же преобразование для последовательности чипов, то получим модулированный сигнал еще до преобразования битов в чипы. В этом случае появляется возможность использовать матричную математику и за счет этого получить эффективный код MATLAB. Спецификация ZigBee также определяет характеристики формирующего импульсы фильтра. Это должен быть фильтр типа приподнятого косинуса с коэффициентом сглаживания (roll-of factor) равным 1.

    % Преобразование последовательности чипов
    chipValues = 1 - 2*chipValues;
    
    % Создание фильтра типа приподнятого косинуса с коэф. сглаживания равным 1
    hTxFilter = comm.RaisedCosineTransmitFilter('RolloffFactor', 1, ...
      'OutputSamplesPerSymbol', nSamps, ...
      'FilterSpanInSymbols', filtSpan);
    hRxFilter = comm.RaisedCosineReceiveFilter('RolloffFactor', 1, ...
      'InputSamplesPerSymbol', nSamps, ...
      'FilterSpanInSymbols', filtSpan, ...
      'DecimationFactor', nSamps);
    

    Измерение величины векторной ошибки

    Расширение Communications System Toolbox™ предоставляет системный объект COMM.EVM для расчета среднеквадратического, максимального и процентного значения EVM. Раздел 6.7.3 документа [ 1 ] определяет метод расчета EVM, при котором средняя ошибка по I и Q отсчетам нормируется к мощности символа. Для сигнала с BPSK мощности символом сигнального созвездия совпадают, поэтому мы можем использовать опцию нормировки 'Peak constellation power' (пиковая мощность сигнального созвездия). Доступные также и другие опции нормировки, которые могут использоваться в других стандартах систем связи. Это средняя мощность сигнального созвездия и средняя мощность эталонного сигнала.

    hEVM = comm.EVM('Normalization', 'Peak constellation power')
    
    hEVM = 
    
      System: comm.EVM 
    
      Properties:
                   Normalization: 'Peak constellation power'
          PeakConstellationPower: 1                         
            MaximumEVMOutputPort: false                     
        XPercentileEVMOutputPort: false                     
     X 
    

    Симуляция

    Первым делом генерируется последовательность случайных бит, затем выполняется дифференциальное кодирование с помощью системного объекта DifferentialEncoder и модуляция BPSK. Расширение спектра модулированных символов осуществляется путем матричного умножения на вектор содержащий последовательность чипов. Затем символы расширенной последовательности проходят через фильтр типа приподнятого косинуса. Объект EVM предполагает, что принятые символы (rd) и идеальные символы (с) синхронизированы и имеют одинаковую частоту дискретизации, поэтому мы понижаем частоту дискретизации принятого сигнала ® и синхронизируем его с идеальным сигналом (с).

    [ 1 ] требует, чтобы для расчета одного значения среднеквадратической EVM использовалось 1000 символов. Чтобы получить точные результаты мы выполняем симуляцию 100 фреймов, каждый из которых содержит 1000 символов, и выбираем максимальное значение из 100 полученных измерений EVM. Можно заметить, что разработанный передатчик удовлетворяет требованиям, описанным в предыдущей секции Величина векторной ошибки

    % Задержки, вносимые фильтрами передатчика и приемника, одинаковы и равны
    % половине длины фильтра. Общая задержка системы равняется их сумме, что
    % равносильно длине одного фильтра.
    refSigDelay = hTxFilter.FilterSpanInSymbols;
    
    % Число символов в одном фрейме
    simNumSymbols = numBits*gain;
    
    % Начальное значение пиковой среднеквадратической EVM
    peakRMSEVM = -inf;
    
    % Создание объекта comm.DifferentialEncoder для дифференциального
    % кодирования
    hdiffenc = comm.DifferentialEncoder;
    
    % Создание объекта comm.AWGNChannel и установка опции NoiseMethod
    % в значение 'Signal to noise ratio (SNR)'
    hChan = comm.AWGNChannel('NoiseMethod', 'Signal to noise ratio (SNR)',...
      'SNR', SNR);
    
    % Цикл обработки пакетов
    for p=1:numFrames
        % Создание случайно последовательности бит
        b = randi([0 M-1], numBits, 1);
        % Дифференциальное кодирование
        d = step(hdiffenc, b);
        % Модуляция
        x = 1-2*d;
        % Преобразование символов в чипы (расширение)
        c = reshape(chipValues*x', simNumSymbols, 1);
        % Формирование импульсов
        cUp = step(hTxFilter, c);
        % Расчет и настройка опции 'SignalPower' для объекта канала
        hChan.SignalPower = sum(cUp.^2)/length(cUp);
        % Добавление шума
        r = step(hChan, cUp);
        % Понижение частоты дискретизации сигнала. Учет задержек, вносимых
        % фильтрами.
        rd = step(hRxFilter, r);
        % Измерение с помощью системного объекта EVM
        rmsEVM = step(hEVM, ...
          complex(rd(refSigDelay+(1:numSymbols))), ...
          complex(c(1:numSymbols)));
        % Обновление пикового значения среднеквадратической EVM
        if (peakRMSEVM < rmsEVM)
            peakRMSEVM = rmsEVM;
        end
    end
    
    % Вывод результатов
    fprintf(' Наихудшее значение RMS EVM (%%): %1.2f\n', peakRMSEVM)
    
     Наихудшее значение RMS EVM (%): 0.19
    

    Комментарии

    Здесь рассмотрено, как использовать объект COMM.EVM для тестирования передатчика ZigBee, в соответствии с указаниями стандарта по расчету EVM. В данном примере использовалась грубая модель, учитывающая только аддитивный белый шум Гаусса, которая показала, что измеренное значение EVM меньше указанных в стандарте 35%.

    Библиография

    1. IEEE Standard 802.15.4, Wireless Medium Access Control (MAC) and Physical Layer (PHY) Specifications for Low-Rate Wireless Personal Area Networks, 2003.
  • Михаил
    03.04.2014
    09:00
    В этом видео вы узнаете, каким образом осуществляется запуск моделей Simulink на нескольких ядрах многоядерного процессора.

    Описывается, какие существуют возможности при симуляции многозадачных моделей и как осуществляется переход от симуляции, к генерации многозадачного кода и профилированию времени его выполнения.
  • Alexey Antipin
    10.02.2014
    18:04
    Начиная с релиза MATLAB R2013a в состав Phased Array System Toolbox входят три графических приложения, позволяющих анализировать сенсорные решетки и радиолокационные сигналы, а также оценивать основные характеристики радаров. С их помощью пользователи могут сразу же приступить к работе с инструментами данного расширения, не тратя времени на изучение командного интерфейса.

    Загрузка плеера
  • Alexey Antipin
    04.02.2014
    14:35

    Данный пример демонстрирует применение адаптивных фильтров для ослабления акустического шума в системах активного шумоподавления.

    Оглавление:

    Активное шумоподавление.

    Системы активного шумоподавления (active noise control) применяются для ослабления распространяющегося по воздуху нежелательного шума с помощью электроакустических приборов: измерительных устройств (микрофонов) и возбудителей сигнала (динамиков). Шумовой сигнал обычно исходит от некоторого устройства, например вращающегося механизма, и имеется возможность измерить шум рядом с его источником. Целью системы активного шумоподавления является создание «анти-шумового» сигнала с помощью адаптивного фильтра, который ослабит шум в определенной тихой области. Эта проблема отличается от обычного адаптивного шумоподавления тем, что: - ответный сигнал не может быть тут же измерен, а доступна только его ослабленная версия; - при адаптации система активного шумоподавления должна учитывать вторичную ошибку распространения сигнала от динамиков до микрофона.

    Более детально задачи активного шумоподавления рассмотрены в книге S.M. Kuo и D.R. Morgan, "Active Noise Control Systems: Algorithms and DSP Implementations", Wiley- Interscience, New York, 1996.

    Путь вторичного распространения.

    Путь вторичного распространения – это путь, который проходит «анти-шумовой» сигнал с выхода динамиков до измеряющего ошибку микрофона, находящегося в тихой зоне. Следующие команды описывают импульсную характеристику пути динамик-микрофон с ограниченной полосой 160-2000 Гц и длиной фильтра равной 0.1 с. Для этой задачи активного шумоподавления мы будем использовать частоту дискретизации равную 8000 Гц.

    Fs     = 8e3; % 8 КГц
    N      = 800; % 800 отсчетов на 8 КГц = 0.1 секунды
    Flow   = 160; % нижняя частота среза: 160 Гц
    Fhigh  = 2000; % верхняя частота среза: 2000 Гц
    delayS = 7;
    Ast    = 20; % подавление 20 дБ
    Nfilt  = 8; % порядок фильтра
    
    % Создание полосового фильтра для имитации канала с ограниченной полосой
    % пропускания
    Fd = fdesign.bandpass('N,Fst1,Fst2,Ast',Nfilt,Flow,Fhigh,Ast,Fs);
    Hd = design(Fd,'cheby2','FilterStructure','df2tsos',...
        'SystemObject',true);
    
    % Фильтрация шума для получения импульсной характеристики канала
    H = step(Hd,[zeros(delayS,1); log(0.99*rand(N-delayS,1)+0.01).* ...
        sign(randn(N-delayS,1)).*exp(-0.01*(1:N-delayS)')]);
    H = H/norm(H);
    
    t = (1:N)/Fs;
    plot(t,H,'b');
    xlabel('Время, с');
    ylabel('Значения коэффициентов');
    title('Импульсная характеристика вторичного пути распространения сигнала');
    

    Определение вторичного пути распространения.

    Первой задачей системы активного шумоподавления является определение импульсной характеристики пути вторичного распространения. Этот шаг обычно выполняется перед шумоподавлением с помощью синтезированного случайного сигнала, проигрываемого динамиками, при отсутствии шума. Нижеприведенные команды генерируют случайный сигнал длительностью 3.75 с, а также измеренный микрофоном сигнал с ошибкой.

    ntrS = 30000;
    s = randn(ntrS,1); % синтез случайного сигнал
    Hfir = dsp.FIRFilter('Numerator',H.');
    dS = step(Hfir,s) + ... % случайный сигнал прошедший через вторичный канал
        0.01*randn(ntrS,1); % шум микрофона
    

    Создание фильтра для оценки вторичного пути распространения.

    В большинстве случаев для адекватного управления алгоритмом длительность отклика фильтра, оценивающего вторичный путь распространения, должна быть короче самого вторичного пути. Мы будем использовать фильтр 250 порядка, что соответствует импульсной характеристике длиной 31 мс. Для этой цели подходит любой алгоритм адаптивной КИХ- фильтрации, но обычно используют нормализованный алгоритм нахождения минимальной среднеквадратической ошибки (normalized LMS-алгоритм) ввиду его простоты и устойчивости.

    M = 250;
    muS = 0.1;
    hNLMS = dsp.LMSFilter('Method','Normalized LMS','StepSize', muS,...
        'Length', M);
    [yS,eS,Hhat] = step(hNLMS,s,dS);
    
    n = 1:ntrS;
    plot(n,dS,n,yS,n,eS);
    xlabel('Число итераций');
    ylabel('Уровень сигнала');
    title('Идентификация вторичного пути распространения с NLMS-алгоритма');
    legend('Ожидаемый сигнал','Сигнал на выходе','Сигнал ошибки');
    

    Точность полученной оценки.

    Как точно оценивается импульсная характеристика вторичного пути? Этот график показывает коэффициенты настоящего пути и пути, рассчитанного алгоритмом. Только конец полученной импульсной характеристики имеет неточности. Эта остаточная ошибка не навредит производительности системы активного шумоподавления во время ее работы над выбранной задачей.

    plot(t,H,t(1:M),Hhat,t,[H(1:M)-Hhat(1:M); H(M+1:N)]);
    xlabel('Время, с');
    ylabel('Значения коэффициентов');
    title('Определение импульсной характеристики вторичного пути распространения');
    legend('Действительная','Оцененная','Ошибка');
    

    Основной путь распространения сигнала.

    Путь распространения шума, который должен быть подавлен, может быть также описан с помощью линейного фильтра. Следующие команды генерируют импульсную характеристику пути источник шума-микрофон с ограниченной полосой 200-800 Гц и имеет длительность отклика равную 0.1 с.

    delayW = 15;
    Flow   = 200; % нижняя частота среза: 200 Hz
    Fhigh  = 800; % верхняя частота среза: 800 Hz
    Ast    = 20;  % подавление 20 дБ
    Nfilt  = 10;  % порядок фильтра
    
    % Создание полосового фильтра для имитации импульсного отклика с
    % ограниченной полосой
    Fd2 = fdesign.bandpass('N,Fst1,Fst2,Ast',Nfilt,Flow,Fhigh,Ast,Fs);
    Hd2 = design(Fd2,'cheby2','FilterStructure','df2tsos',...
        'SystemObject',true);
    
    % Фильтрация шума для получения импульсной характеристики
    G = step(Hd2,[zeros(delayW,1); log(0.99*rand(N-delayW,1)+0.01).*...
        sign(randn(N-delayW,1)).*exp(-0.01*(1:N-delayW)')]);
    G = G/norm(G);
    
    plot(t,G,'b');
    xlabel('Время, с');
    ylabel('Значения коэффициентов');
    title('Импульсная характеристика первичного пути распространения');
    

    Подавляемый шум.

    Типичная область применения активного шумоподавления – приглушение звука от вращающихся механизмов из-за его раздражающих свойств. Здесь мы искусственно сгенерируем шум, который может поступать от обычного электрического мотора.

    Инициализация системы.

    Самым распространенным алгоритмом для систем активного шумоподавления является LMS- алгоритм с дополнительной фильтрацией выходного сигнала фильтра перед формированием сигнала ошибки (Filtered-x LMS algorithm). Этот алгоритм использует оценку вторичного пути распространения для расчета выходного сигнала, который разрушительно влияет на нежелательный шум в области датчика измерения ошибки. Опорным сигналом является зашумленная версия нежелательного звука, измеренная вблизи его источника. Мы будем использовать управляемый фильтр с длительностью отклика около 44 мс и шагом подстройки равным 0.0001.

    % КИХ фильтр используемый для моделирования первичного пути распространения
    Hfir = dsp.FIRFilter('Numerator',G.');
    
    % Адаптивный фильтр реализующий алгоритм Filtered-X LMS
    L = 350;
    muW = 0.0001;
    Hfx = dsp.FilteredXLMSFilter('Length',L,'StepSize',muW,...
        'SecondaryPathCoefficients',Hhat);
    
    % Синтез шума с помощью синусоид
    A = [.01 .01 .02 .2 .3 .4 .3 .2 .1 .07 .02 .01]; La = length(A);
    F0 = 60; k = 1:La; F = F0*k;
    phase = rand(1,La); % случайная начальная фаза
    Hsin = dsp.SineWave('Amplitude',A,'Frequency',F,'PhaseOffset',phase,...
        'SamplesPerFrame',512,'SampleRate',Fs);
    
    % Проигрыватель аудио для воспроизведения результатов работы алгоритма
    Hpa = dsp.AudioPlayer('SampleRate',Fs,'QueueDuration',2);
    
    % Анализотор спектра
    Hsa = dsp.SpectrumAnalyzer('SampleRate',Fs,'OverlapPercent',80,...
        'SpectralAverages',20,'PlotAsTwoSidedSpectrum',false,...
        'ShowLegend',true);
    

    Симуляция разработанной системы активного шумоподавления.

    Здесь мы сымитируем работу системы активного шумоподавления. Чтобы подчеркнуть разницу первые 200 итераций шумоподавление будет отключено. Звук на микрофоне до подавления представляет характерный «вой» промышленных моторов.

    Результирующий алгоритм сходится примерно через 5 с (имитационных) после включения адаптивного фильтра. Сравнивая спектры сигнала остаточной ошибки и исходного зашумленного сигнала, можно наблюдать, что большая часть периодичных компонент была успешно подавлена. Однако эффективность стационарного шумоподавления может быть неравномерна по всем частотам. Такое часто бывает в реальных системах, применяемых для задач активной борьбы с шумом. При прослушивании сигнала ошибки раздражающий «вой» значительно снижается.

    for m = 1:400
        s = step(Hsin); % генерация синусоид со случайной фазой
        x = sum(s,2);   % генерация шума сложением всех синусоид
        d = step(Hfir,x) + ... % распространение шума через первичный канал
            0.1*randn(size(x)); % добавление шума, сопроводающего процесс измерения
        if m <= 200
            % отключение шумоподавления на первые 200 итераций
            e = d;
        else
            % включение алгоритма шумоподавления
            xhat = x + 0.1*randn(size(x));
            [y,e] = step(Hfx,xhat,d);
        end
        step(Hpa,e);     % воспроизведение сигнала на выходе
        step(Hsa,[d,e]); % спектр исходного (канал 1) и ослабленного (канал 2) сигналов
    end
    release(Hpa); % отключение динамиков
    release(Hsa); % отключение спектроанализатора
    
    Warning: The queue has underrun by 3456 samples. Try increasing queue duration,
    buffer size, or throughput rate. 
    
  • Alexey Antipin
    28.01.2014
    18:57
    Как правило, процесс сбора данных с внешнего устройства состоит из следующих четырех этапов:
    1.   Инициализация: создание объекта устройства.
    2.   Настройка: добавление каналов и управление процессом сбора данных через параметры устройства.
    3.   Выполнение: запуск устройства с последующим сбором или пересылкой данных.
    4.   Завершение: удаление объекта устройства.



    Чтобы убедиться, что основная частота камертона составляет 440 Гц, сигнал оцифровывается и передается  в MATLAB  для анализа. Это установка для примера описанного ниже.

    В этом примере мы проверим, что основная (наименьшая) частота камертона составляет 440 Гц. Для этого будем использовать микрофон и звуковую карту, чтобы записать звуковые данные. А после применим к ним операцию БПФ и найдем частоты камертона.Начнем с записи двух секунд звукового сигнала на одном из каналов звуковой карты. Так как основная частота камертона составляет 440 Гц, то можно выбрать наименьшую частоту дискретизации равную 8000 Гц.
    Затем установим камертон рядом с микрофоном, придадим ему вибрацию и запустим сбор данных. Данная сессия сбора данных описана ниже.

    Инициализация.
    Первый шагом создадим объект с аналоговым входом (AI) для звуковой карты.

    Код
     AI = analoginput('winsound');

    Настройка.
    Затем добавим к AI один канал и установим частоту дискретизации 8000 Гц и время сбора данных 2 с.

    Код
    addchannel(AI, 1);
    Fs = 8000;                     % Частота дискретизации 8000 Гц
    set (AI, 'SampleRate', Fs)
    duration = 2;                  % Сбор будет длиться 2 секунды
    set(AI, 'SamplesPerTrigger', duration*Fs;

    Сбор данных.
    Теперь мы готовы начать сбор данных. По умолчанию, триггер устройства настроен на запуск по команде start. Перед этим нужно ударить по камертону, чтобы он начал вибрировать и издавать звук (свист будет также работать J).

    Код
    start(AI);

    Чтобы списать все данные.
    Код
    data = getdata(AI);

    Завершение работы с устройством.
    Как только все данные получены, можно завершить сессию сбора данных, удалив объект AI из пространства переменных.

    Код
    delete(AI)

    Обработка результатов.
    Теперь определим частотные компоненты сигнала и отобразим результаты. Сначала рассчитаем абсолютное значение от БПФ данных.

    Код
     xfft = abs(fft(data));

    A затем преобразуем его в дБ и выделим реальные частотные компоненты.
    Код
     mag = 20*log10(xfft);
     mag = mag(1:end/2);


    Результаты показывают основную частоту около 440 Гц и первую гармонику около 880 Гц. Простейший путь найти основную частоту:
    Код
    [ymax,maxindex]=max(mag);

    Ответ: 441 Гц.

    Применение других видов оборудования.
    Этот пример можно повторить и с другими устройствами, изменив всего две строчки кода. Например, возьмем многофункциональную карту от National Instruments и создадим для нее объект аналогового ввода:

    Код
    AI=analoginput('nidaq','Dev1');
    addchannel(AI,0)

    Аналогично, если бы мы использовали плату сбора данных компании Measurement Computing, наш код выглядел бы так:
    Код
    AI=analoginput('mcc',8);
    addchannel(AI,1)
  • Михаил
    25.11.2013
    15:53
    Simulink PLC Coder™ генерирует аппаратно-независимый структурированный текст (ST) по IEC 61131 из моделей Simulink®, диаграмм Stateflow® и функций Embedded MATLAB®. Структурированный текст генерируется в формате PLCopen XML и других форматах, широко поддерживаемых встроенными средами разработки (IDE). В результате, вы можете компилировать и разворачивать ваше приложение на различных программируемых логических контроллерах (ПЛК) и программируемых контроллерах автоматизации (ПКА).

    Основные возможности
    ▪   Автоматическая генерация структурированного текста по IEC 61131-3
    ▪   Поддержка Simulink, включая подсистемы (с возможностью повторного использования), блоки ПИД регуляторов и интерполяционные таблицы
    ▪   Поддержка Stateflow, включая графические функции, таблицы истинности и машины состояний
    ▪   Поддержка Embedded MATLAB – включая выражения if-else, циклы и математические операции
    ▪   Поддержка многих типов данных, включая булевские, целые, перечислимые и в плавающей точке, а также векторов, матриц, шин и настраиваемых параметров
    ▪   Поддержка сред разработки, включая B&R Automation Studio™, PLCopen XML, Rockwell Automation® RSlogix™ 5000, Siemens® SIMATIC® STEP® 7 и 3S-Smart Software Solutions CoDeSys
    ▪   Создание тестовой обвязки
  • Багров Артем
    18.11.2013
    12:18
    В MATLAB существует обширная поддержка для графических отображений данных и, кроме того, имеется возможность для создания собственной анимации. Создание анимации обеспечена hanlde графикой и функцией set, позволяющей установить свойства текущей фигуры. 
    В данном ролике показаны основные шаги для создания анимации с MATLAB. 
  • Багров Артем
    30.10.2013
    11:37
    Логическое индексирование - техника, позволяющая сделать код прозрачным, значительно сократить количество строк кода и, кроме того, "векторизовать" код, а это значит, сделать код более производительным. 
    Пример логического индексирования 
  • Михаил
    15.10.2013
    16:16
    HDL Verifier – это расширение для MATLAB и Simulink, позволяющее осуществлять верификацию HDL кода.

    В этом видео вы узнаете, как MATLAB и Simulink может использоваться для верификации HDL кода совместно с HDL симуляторами.
    Интеграция показана на примере Mentor Graphics ModelSim.
  • Alexey Antipin
    04.10.2013
    12:57
    Фильтрация сигналов – это одна из важнейших операций в системах ЦОС. Она применяется повсюду: в системах связи и радиолокации, в медицинском оборудовании и аудиосистемах… Вообще, везде, где стоит вопрос «запихнуть» сигнал из реального мира в компьютер. В одном только мобильном телефоне (или как сейчас модно говорить Smartphone) на скорую руку я насчитал их штук 30. Это и АЦП для радио и звуковых сигналов, и DDC в приемнике (тут их 4), и фильтры типа приподнятого косинуса (служат для формирования импульсов в радиоканал и из него), и фильтр Гаусса в модуляции GMSK, и схемы шумоподавления и автобалансировки уровня громкости при передаче речи, и банки фильтров в эквалайзере проигрывателя музыки и т.д. и т.п. Тут я не говорю еще о множестве фильтров, через которые сигнал со светочувствительной матрицы вашей фотокамеры проходит  прежде, чем отобразиться на дисплее, так как это относится к несколько другому типу (двухмерных) фильтров. О них не пойдет речи в этой статье, но, к слову, в MATLAB есть инструменты и для этого.
    Итак, вопрос о создании фильтров у инженеров возникает весьма часто, и сейчас мы посмотрим, как легко и непринужденно эти задачи решаются в среде MATLAB.
    .
    Загрузка плеера
  • Багров Артем
    03.10.2013
    14:16
    В новом релизе MATLAB 2013b появился новый тип данных table. Этот тип данных является удобным для экспорта/импорта и обработки данных, имеющих табличную структуру. Особенно полезен этот тип данных при работе с таблицами, имеющими в качестве переменных строковые типы данных. Основные шаги по созданию и использованию этого типа данных здесь
  • Михаил
    01.10.2013
    17:40
    В релизе MATLAB/Simulink R2013b появилась возможность генерации HDL кода из пользовательских системных объектов (User System Objects). Раньше эта возможность поддерживалась только для встроенных системных объектов, поставляемых с MATLAB и тулбоксами.

    В документации приводится пример пользовательского системного объекта, который реализует простейший счетчик.

    А какие нововведения в генерации HDL кода интересы и важны для вас?

    С обзором возможностей продукта HDL Coder вы можете также ознакомиться в этом видео.
  • Михаил
    01.10.2013
    17:27
    Добрый день!

    На нашем канале Youtube опубликовано обзорное видео, описывающее возможности продукта Simulink Verification and Validation.

    Три основные возможности - это:
    - Обеспечение трассируемости требований
    - Анализ покрытия модели тестами
    - Осуществление проверок на стандарты моделирования

    В видео я упоминаю стандарты моделирования MAAB, которые применяются многими компаниями, работающими с MATLAB/Simulink/Stateflow и Embedded Coder. Вы можете скачать сам стандарт с этой страницы: http://www.mathworks.com/automotive/standards/maab.html.
  • MeL
    26.08.2013
    18:59
         
    ·    В следующем примере рассмотрим, как можно автоматически оптимизировать  параметры системы по заданному критерию. Как и в случае задачи оценки параметров, мы воспользуемся  Simulink Design Optimization. Теперь это будет называться Response Optimization. Дальнейший пример показан в этом видео

         
    Загрузка плеера

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

    Она состоит из электромеханического привода с ПИ регуляторами по току и по скорости +
    трехмерная механическая модель самого элерона. Настраивать будем регулятор, хотя в принципе можно настраивать все, что задается параметрами.

    Вообще для ПИД регуляторов есть и другие инструменты со своими методами, но здесь будут использоваться алгоритмы оптимизации.
    ·     
    Когда мы запускаем моделирование и сравниваем результаты с требованиями, то видим, что угол не отслеживает задающий сигнал.


    Наша задача состоит в том, что нужно оптимизировать параметры регулятора скорости для удовлетворения двух требований: одно по отработке угла, другое по ограничению приложенной силе (Force, нижний рисунок).
    Дальше просто, все что нужно – описать наши требования, указать переменные для изменения в инструменте Response Optimization.

    Ждем какое-то время и вуа ля - получаем то, что просили (или не получаем, если все совсем сложно и ничего не сходится, но это надо постараться).


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

  • Михаил
    19.08.2013
    11:34
    В предыдущих записях в блоге я рассказывал о некоторых целевых платформах и средах разработки, поддерживаемых Embedded Coder:
    Запуск моделей Simulink на Arduino
    Поддержка TI MSP430 LaunchPad в Embedded Coder
    Embedded Coder встречает Green Hills Software MULTI

    В документации к Embedded Coder можно увидеть полный список поддерживаемого оборудования, сред разработки и операционных систем.

    В этом посте я расскажу о поддержке (Target Support Package) ОС реального времени QNX в Embedder Coder. Embedded Coder является расширяемой и настраиваемой системой, и, хотя QNX не обозначена в списке выше, поддержка этой RTOS была разрабатана инженерами MathWorks и предоставлена для общего использования. Это позволит всем инженерам, работающим в Simulink и разворачивающим свои системы на QNX, существенно упростить процесс разработки и тестирования, а также адаптировать эту поддержку для своих конкретных нужд.

    QNX - это Unix-подобная операционная система реального времени, в первую очередь предназначенная для встраиваемых систем.
    Simulink - это лидирующее окружение для симуляции мультидисциплинарных систем и модельно-ориентированного проектирования.
    Embedded Coder позволяет вам генерировать С код и разворачивать ваши алгоритмы на целевом аппаратном обеспечении.

    Вы можете скачать поддержку с ресурса пользователей File Exchange: http://www.mathworks.com/matlabcentral/fileexchange/42290-qnx-target-support-package-for-embedded-coder.
    Либо можете использовать последнюю версию из этого репозитория Github.

    Этот Target Support Package был протестирован на платформе Beagleboard xM, работающей под управлением QNX 6.5.1. В принципе, он также должен работать на других целевых платформах QNX, для которых есть BSP. Для этого потребуется внести минимальные изменения в Template Makefile, чтобы использовать другие флаги компилятора.

    Как я уже раньше писал, поддержка может заключаться в нескольких аспектах. В данном случае доступна автоматическая связь со средой разработки посредством Makefile (что подразумевает автоматическую компиляцию и линковку после генерации С кода), интеграция с QNX посредством POSIX таймеров (что позволяет запускать ваши многочастотные/многозадачные модели в реальном времени), а также поддержка симуляции в режиме External Mode. Такой режим симуляции позволяет осуществлять калибровку параметров, мониторинг и трассировку сигналов непосредственно из модели Simulink при работе вашего кода на встраиваемом процессоре в реальном времени.

    В небольшом видео вы можете увидеть эту поддержку в действии.

    Кстати, в Simulink также доступна встроенная поддержка BeagleBoard. Однако, это совсем другая возможность, не имеющая отношения к QNX и Embedded Coder. Больше информации об этом вы можете почерпнуть в предыдущем посте.
  • MeL
    12.08.2013
    14:24
    Приветствую Вас.

    Сегодня рассмотрим задачу параметрической идентификации или оценки параметров модели на основе экспериментальных данных. В нашем примере суть задачи в следующем – есть модель, есть ее структура, но нет самих значений параметров, которыми эта модель описывается. Зато имеются какие-то реальные данные в виде снятых опытных точек, что очень ценно, если мы хотим управлять чем-то хорошо и особенно хорошо, если у нас еще имеется аналитическая зав

    исимость этих параметров и объект для нас не черный ящик. Необходимо получить эти параметры из эксперимента, а еще лучше - автоматизировать оценку параметров имеющейся модели. Вообще решению задаче оценки параметров посвящено множество методов (МНК, фильтр Калмана и прочее).

    По части Matlab/Simulink смотрите здесь– http://www.mathworks.com/discovery/parameter-estimation.html.


    О чем будет идти речь ниже – можно посмотреть в коротком видео здесь –
    Загрузка плеера



    В целом алгоритм оценки получается почти такой «классический»:
    1. Набрать экспериментальные данные.
    2. Определить модель и параметры модели, которые требуют оценки.
    3. Настроить параметры процесса оценки и провести саму оценку.
    4. Проверить адекватность модели на тестовых наборах данных.

    Теперь более подробно про наш случай. Имеется двигатель постоянного тока, модель которого известна и реализована в Simulink средствами SimScape (физическое моделирование). Вообще что и чем реализовано в Simulink не суть. Главное есть модель. Параметры вместо конкретных значений заданы в маске модели переменными из Matlab, как это показано на рисунке.




    У нас всего 5 параметров – 3 для электрической части и 2 для механической. Дальше все просто – запускаем специальный инструмент из Simulink Design Optimization, Parameter Estimation в меню Analysis, указываем что хотим оценивать, откуда брать экспериментальные данные. Т.к. задача у нас оптимизационная (и требует еще установленного Optimization Toolbox), то указываем метод оптимизации, критерий, условия остановки оптимизации и прочее. Помимо этого необходимо задать начальные значения, границы поиска по каждому параметру, что в процессе оценки может помочь приблизить нашу модель по параметрам к реальному объекту (может существовать множество наборов параметров модели, которые по результатам симуляции могут подходить под имеющиеся экспериментальные данные) и ускорить процесс оценки. Задать значения можно, например, по паспорту двигателя, откуда знаем, что сопротивление и индуктивность лежат в таких-то пределах.
    Читать подробнее...
  • Михаил
    09.08.2013
    13:27
    Часто перед нами возникает необходимость интегрировать внешний С код в модель Simulink.

    Когда это может быть полезно?

    Например:
    • У нас есть существующий код, который реализует определенный алгоритм, и мы хотим быстро встроить его в модель Simulink.
    • Мы хотим интегрировать собственные драйвера устройств в Simulink.
    Существует несколько способов интеграции внешнего кода в Simulink:
    Если говорить про интеграцию внешнего кода при помощи S-функций, то есть несколько способов создания S-функций:
    • Legacy Code Tool. Этот инструмент создает C MEX S-функцию из существующего С кода и спецификаций, которые вы задаете при помощи кода MATLAB.
    • S-Function Builder. Этот блок создает C MEX S-функцию из спецификаций и фрагментов кода, которые вы задаете при помощи графического интерфейса пользователя.
    • Написание S-функции вручную. Вы можете написать C MEX S-функцию с нуля. В документации приведены шаблоны для C MEX S-функций, которые вы можете использовать как начальную точку для создания собственных S-функций.
    Обзор этих трех методов в документации дает представление об их преимуществах и недостатках.

    Если вы уже запутались, то диаграмма ниже, надеюсь, поможет вам разобраться:


    В этом видео продемонстрирован подход к интеграции внешнего С кода с использованием Legacy Code Tool.

    Все эти подходы по интеграции внешнего кода, их преимущества и недостатки, а также области применения подробно освещаются в официальном курсе MathWorks "Интеграция кода в Simulink": http://sl-matlab.ru/training/SLEX
  • MiSh
    25.06.2013
    06:20
    В MATLAB есть несколько возможностей по созданию GUI (графического интерфейса пользователя).

    Первый способ заключается в программировании отдельно каждого элемента. Т.е. описание окон, осей, кнопок и т.д. У каждого из этих элементов есть свойства по умолчанию, которые можно менять, а также те функции (Callback), которые вызываются при обращении к ним. Отдельно описываете эти Callbacks. 
    На выходе вы имеете m-файл интерфейса

    Второй способ - с помощью интерактивного инструмента GUIDE. Для его вызова так и надо написать в командной строке 

    Код
    >>guide

    В нём вы графически строите ваше интерфейс, при этом автоматически генерируется m-файл с комментариями. Там вам уже надо только прописать действия, происходящие при активации ваших элементов GUI.
    На выходе вы получаете 2 файла - fig-файл, с графической частью GUI и m-файл с программной частью.

    Небольшой пример по созданию GUI можно посмотреть в этом ролике на YouTube канале MATLABinRussia
  • Багров Артем
    03.04.2013
    11:15
    Среда Excel удобна с точки зрения наглядности и структурирования данных. Однако, многие функции и процедуры, которые содержать сложные математические либо статистические алгоритмы целесообразней производить в среде, специально для этого предназначенной, а затем использовать полученную процедуру в Excel. В этом видео: Создание надстройки для Excel показан путь от создания функции в MATLAB до реализации этой функции в среде  Excel.
  • MiSh
    01.04.2013
    09:08
    На минутку вернёмся к нашему сериалу.

    В далёкой-далёкой галактике…

    Понимая, что ему надо закончить обучение, Кодоход направляется обратно к магистру CUDA. Но тот ему отвечает, что больше научить его ничему не может. И что, только заборов Тёмный Кластер, он станет настоящим программистом.

    Но для этого надо научиться работать со специальным знанием, которое по традициям народов Севера ужато в одну фразу «одна программа – много данных». Как же разгадать эту головоломку?
    Т.к. ничего другого на ум Кодоходу не приходит, он решает воспользоваться уже проверенным средством – обучающими роликами с канала MATLABinRussia на YouTube. И таки находит тот материал, который искал.

    В нём он с удивлением встречает старого знакомца – функцию matlabpool. А рядом с ним - тот искомый функционал, который не только поможет запускать однотипную задачу на разных данных на его ПК, но и поможет сделать то же самое на кластере. Речь идёт, конечно же, про конструкцию spmd. Именно она реализует ту шаманскую фразу, о которой шла речь: «single program multiple data».

    С помощью этих подсказок он быстро обучается решать задачи с распределёнными данными на своём ноутбуке, и готов ко встрече с Тёмным Кластером.

    В решающей схватке, подменив только профиль в matlabpool-е, наш герой таки склоняет Кластер на свою сторону и молниеносно решает поставленные задачи с большими матрицами.

    Галактика ликует, теперь она не погибнет, теперь у неё снова есть гениальный программист, умеющий пользоваться всеми возможностями параллельных вычислений в MATLAB.
Страницы: 1 2 3 След.