Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Борискевич А.А. Цифровая обработка речи и изображений - файл Тема 13.doc


Борискевич А.А. Цифровая обработка речи и изображений
скачать (5335.1 kb.)

Доступные файлы (16):

Литература.doc34kb.28.04.2007 17:48скачать
Содержание.doc68kb.28.04.2007 17:09скачать
тема10.doc1416kb.28.04.2007 17:42скачать
тема11.doc917kb.28.04.2007 17:47скачать
тема12.doc1926kb.28.04.2007 17:45скачать
Тема 13.doc5561kb.28.04.2007 17:46скачать
тема14.doc177kb.28.04.2007 17:46скачать
Тема 1.doc182kb.28.04.2007 17:34скачать
Тема 2.doc549kb.28.04.2007 17:41скачать
Тема 3.doc243kb.28.04.2007 17:33скачать
тема 4.doc297kb.28.04.2007 17:34скачать
Тема 5.doc1150kb.28.04.2007 17:35скачать
Тема 6.doc3287kb.28.04.2007 17:41скачать
Тема 7.doc529kb.28.04.2007 17:38скачать
Тема 8.doc985kb.28.04.2007 17:39скачать
тема 9.doc1022kb.28.04.2007 17:42скачать

Тема 13.doc

Тема 13. Компьютерная обработка звуков и изображений (2 часа) [7, 10, 14]
13.1 MATLAB в задачах цифровой обработки сигналов
Благодаря таким качествам Matlab и Simulink, как интегрированная разработка алгоритмов, возможность ген( кода и большое количество функций анализа данных, разработка приложений для цифровой обработки сигн (ЦОС) значительно упрощается и ускоряется. Обеспечивая инженеров языком рабочего общения, Matlab сокращает разрыв между идеей, научными исследованиями и конечным продуктом. Его открытая архитектура позволяе-работать во взаимодействии с другими программными средствами и системами в реальном времени. С помощью Matlab разработчик может проверять свои идеи, просчитывать допуски и генерировать решения, удовлетворяющие самым требовательным запросам.

^ Быстрая разработка приложений для ЦОС.

Matlab ускоряет проектирование приложений благодаря интеграции в единой среде таких разноплановых средств как язык работы с матрицами, визуальное моделирование, автоматическая генерация программного кода и дополнительным пакетам программ для самых разных областей знаний. Инженеры находят Matlab идеальным средством для обработки сигналов. Его мощный язык матричных вычислений естественен для представлена сигналов и разработки алгоритмов для ЦОС. Написание программы в Matlab занимает малую долю времени по сравнению с программированием на C/C++ без какой-либо потери гибкости или качества.

Дополнительные пакеты прикладных программ Matlab (Toolboxes) и блоков Simulink являются богатейшим источником готовых функций, базовых блоков для построения моделей и визуальных средств работы с сигналов. Это обеспечивает прекрасную основу для собственных алгоритмов и программ пользователя. Simulink, как составная часть комплекта продукции Matlab для обработки сигналов, позволяет быстро проектировать, моделировать и тестировать системы ЦОС, используя интерактивное визуальное моделирование с помощью диаграмм. Simulink помогает анализировать работу алгоритмов уже на самых ранних стадиях разработки программ. По мере приближения разработчика к окончательной реализации своих планов ему не становится сложнее модифицировать свой алгоритм - детализация приложения или дальнейшее приближение к реальным условиям нисколько не усложняет задачу программиста. Matlab Toolboxes содержат самые современные алгоритмы, снабженные документацией и подробным руководством по использованию. Они помогают разработчику быть в курсе последних новинок в области цифровой обработки сигналов, таких как вейвлеты или современный спектральный анализ, и применять их в собственных исследованиях (рис.13.1).

Matlab и Simulink позволяют осуществлять автоматическую генерацию программного кода ваших приложений Real-Time Workshop способен генерировать код стандарта ANSI С для работы со встроенными платами. Matia Compiler конвертирует алгоритмы, реализованные на языке Matlab в C/C++ код, что во взаимодействии с Math Libraries позволяет создавать автономные приложения.

Р
ис.13.1 Средства Matlab для цифровой обработки сигналов
Команды разработчиков могут взаимодействовать, используя Matlab в качестве языка общения и базового проектирования. Эта открытая система позволяет легко модифицировать исходный код, связывать внешние программы и данные, разделять идеи и программы для работы на платформах PC, UNIX и Macintosh.

^ Разработка алгоритмов и моделей

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

Язык Matlab идеален для программирования алгоритмов для цифровой обработки сигналов. Поскольку основным элементом языка является массив, разработка алгоритмов в точности такова, как будто Вы привычно записываете математические формулы. Кроме того, Вы можете выбирать алгоритмы из обширной коллекции проверенных математических функций и функций обработки сигналов Matlab. В отличие от программирования на С или C++ не нужно начинать программу с нуля или думать о том как подсоединить сложные библиотеки. Ваши поиски в интерактивном режиме приведут к полнофункциональному, прекрасно отлаженному алгоритму. Блок-диаграммы Simulink отражают иерархическую структуру моделей, упрощающую проектирование систем ЦОС и моделирование их поведения (рис.13.2.). Блок Simulink может представлять собой отдельный элемент системы, большую подсистему или нечто среднее между ними. Каждый блок можно модифицировать, настраивать в соответствии с необходимостью и получать в точности такое поведение системы, которое в каждом конкретном случае, не прибегая к традиционному программированию. С помощью Simulink можно интерактивно или программно изменять параметры модели в ходе самого моделирования. Сменные блоки выводить на дисплей, анализа частот и др. позволят Вам анализировать работу системы налету. Simulink может работать как с непрерывными, так и с дискретными системами. Таким образом, Вы можете без труда моделировать сложные системы, включающие изменяющиеся во времени компоненты (подсистемы) наряду с аналоговыми компонентами. Вы можете включать в свой проект внешние программы, написанные на С, C++ или Фортране как динамически связываемые объектные модули можно вызывать из любой функции Matlab или блока Simulink. Используя такой открытый подход, Вы можете сохранить свои уже проверенные временем разработки и создавать библиотеки для целевых приложений.



Рис.13.2. Модель Simulink

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

^ Инструментарий для обработки сигналов

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

В Signal Processing Toolbox включены современные средства проектирования фильтров, спектрального анализа обработки сигналов

DSP Blockset дополняет библиотеки Simulink блоками адаптивной фильтрации.

Image Processing Toolbox представляет собой робастное средство для совершенствования, реставрации, фильтрацииизображений и операций над отдельными областями.

Optimisation Toolbox позволяет настраивать параметры проекта, чтобы удовлетворить наложенным ограничениям например, на потребление энергии.

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

Symbolic Math Toolbox предоставляет доступ к ядру символьных вычислений для решения уравнений и расчете с произвольной точностью.

Communications Toolbox предлагает гибкий открытый подход к моделированию коммуникационных систем. Bы можете комбинировать и настраивать более 100 функций Matlab и блоков Simulink для виртуального модели всех деталей коммуникационных систем,

Wavelet Toolbox - современное графическое средство для анализа нестационарных сигналов в задачах сжати подавления шумов и др.

Neural Network Toolbox и Fuzzy Logic Toolbox созданы для того, чтобы помочь использовать в своих исследованиях нейронные сети и нечеткую логику. Среди их приложений адаптивная фильтрация, распознавание образов и моделирование нелинейных систем.

Higher-Order Spectral Analysis Toolbox включает методы высокого порядка, справляющиеся с нелинейностью, негауссовыми сигналами, дающими о себе знать в задачах акустики, обработки векторных сигналов и др.

Среди других дополнительных пакетов Matlab - System Inentification Toolbox и Frequency Domain System Ident Toolbox для параметрического моделирования и оценивания. Control System Toolbox для проектирования сие управления, анализа устойчивости систем с обратной связью.

Современный набор программ Matlab для обработки сигналов помогает инженерам, работающим в области ЦОС быть в курсе последних достижений науки и технологии. Прекрасная документация, множество примеров позволят без труда разобраться в новых методах и включить их в свой арсенал. Тысячи пользователей Matlab разрабатывают программы, пишут книги и создают веб-сайты, помогающие их коллегам использовать и самим реализовывать алгоритмы ЦОС в Matlab.
^ Генерация кода, тестовые модели и проверка адекватности

Matlab и Simulink автоматически генерируют код ANSI С, позволяя довольно быстро создавать моделирующие программы и тестировать их в реальном времени на соответствующем аппаратном обеспечении. Это позволяет легко создавать тестовые модели, корректировать возможные ошибки и находить узкие места уже ранних стадиях проектирования. Таким образом можно избежать дорогостоящих переделок, которые типичны при традиционном подходе к разработке систем ЦОС.

Средства генерации кода Matlab способствуют концентрации внимания разработчика на исследовании поведения системы и качестве модели, а не на деталях низкоуровневого кодирования. Следствием этого является минимизация временных затрат на разработку систем ЦОС.

Real Time Workshop расширяет возможности Simulink по реализации ЦОС-приложений. Он позволяет генерировать быстрый переносимый код ANSI С для блок-диаграмм Simulink, который предназначен для работы с платами оцифровки сигнала. Построение исполняемых модулей с помощью Real Time Workshop полностью автоматизировано. Он создает код, готовый к исполнению в реальном времени, а также оптимизированный в соответствии с особенностями конкретного процессора. Вы можете единожды настроить средство разработчика, имеющиеся в наличии платы и аппаратное обеспечение. В дальнейшем можно будет быстро вносить изменения, редактируя блок-диаграммы и генерируя новые исполняемые модули.

В режиме Simulink External Mode можно менять такие параметры модели как коэффициенты усиления, пapaметры фильтров и др. налету, при этом наблюдая изменения отклика системы, работающей в реальном времени. Любая программа Matlab может быть конвертирована в С или C++ с помощью Matlab Compiler. Это ускоряет моделирование в среде Matlab и позволяет создавать автономные приложения с использованием C/C++ Matt Libraries.

^ Анализ и исследования.

Help. Помимо обычных и довольно многочисленных книг по покету Matlab, обращаем внимание на мощный, хорошо развитый (и особенно хорошо структурированный в последних версиях пакета) режим помощи (Help). Он просто незаменим в работе, даже если у вас есть литература (которая быстро устаревает). Запомнить имена многочисленных функций Matlab’a, не говоря уже об их синтаксисе – дело непосильное для нормального человека. Это – естественная расплата за мощь пакета, позволяющего осуществлять сложнейшие математические операции с помощью всего лишь одной-двух кратких команд.

Demos. В разделе Help имеется очень полезный подраздел Demos. Начиная с версии Matlab 6.0, вначале раздела Demos даны несколько мультимедийных уроков, обучающих использованию интерфейса пакета Matlab. Затем следует несколько тематических подразделов, среди которых нам особенно интересны:

Toolboxes>Symbolic Math

Toolboxes>Filter Design

Toolboxes>Image Processing

Toolboxes>Signal Processing

Toolboxes>Wavelet

Чрезвычайно полезно воспользоваться этими разделами для первоначального беглого знакомства с возможностями Matlab.

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

Любопытным следствием такого подхода является то, что «обыкновенное» единичное число, именуемое скаляром, в Matlab’e также представляется как вектор - единичного размера.

Другое, значительно более важное, следствие матричного подхода – пользователю нужно быть чрезвычайно внимательным при выполнении операций умножения (*), деления (/), возведения в степень (^). Например, при простых вычислениях, где участвуют скалярные величины, можно использовать оператор умножения * в его привычном смысле – как оператор умножения числа на число. Однако если речь идет о перемножении векторов, тогда применение знака * дает результат в виде матрицы (при условии, что один из векторов – столбец, а другой - строка), а применение знака .* (знак умножения с точкой перед ним) дает новый вектор, элементы которого являются результатом перемножения соответствующих элементов множителей (при условии, что оба вектора – столбцы или строки).

Еще более сложно “устроена” операция деления: здесь различают деление слева направо (/ или ./) и справа налево (\ и .\).

Главное окно.

По окончании загрузки пакета Matlab 6.0 открывается главное окно (рис.13.3), составными частями (фреймами) которого являются:

  • командное окно (Command Window),

  • окно быстрого запуска субпакетов (Launch Pad),

  • окно рабочего пространства (Workspace),

  • окно истории команд (Command History),

  • окно текущей директории (Current Directory).





Рис.13.3 Главное окно.
Командное окно и простейшие операции в нем.

Среди перечисленных окон главную роль играет командное окно, позволяющее производить вычисления в диалоговом режиме:

  • в строке с приглашением в виде знака >> набирается имя команды или вычисляемое математическое выражение, после чего нажимается клавиша ввода (Enter);

  • результат вычислений отображается в командном окне.

Вводимую в строке команду можно редактировать обычными для MS DOS и Windows способами: удалять символы слева и справа от курсора клавишами Backup и Delete, перемещаться по строке влево и вправо клавишами со стрелками и .

Однако есть интересная особенность: нажатием клавиш со стрелками “вверх” и “вниз” ( и ) можно вызвать из стековой памяти отдававшиеся ранее команды. Это удобно, поскольку экономит время при работе с длинными строками-командами.

И еще одно замечание, касающееся реакции окна на ввод команды. Если в конце строки-команды поставить точку с запятой (;), тогда окно не откликается на ввод команды - результат вычислений не отображается на мониторе. При отсутствии точки с запятой в конце строки-команды окно откликается - результат вычислений отображается на мониторе.

Пример:

>> a = 2;

>> a = 2

a = % отклик командного окна на введенную команду

2

>>

^ Прочие окна-фреймы.

Остальные окна-фреймы играют служебную роль.

Среди них на первое место “просится” окно рабочего пространства (Workspace). Полезность его в том, что оно позволяет контролировать тип и размерность переменных, участвующих в вычислениях (рис.13.4).

^

Рис13.4. Окно рабочего пространства (Workspace)



На рис.13.4 показана ситуация, когда в вычислениях задействованы: скаляр a, двухэлементные векторы-строки b и d, четырехэлементная квадратная (2х2) матрица c, символьная переменная e.

Окно быстрого запуска субпакетов (Launch Pad) удобно, поскольку позволяет легко находить и запускать субпакеты из раздела Toolboxes. На рис.13.5 показана ситуация, в подразделе Signal Processing Toolbox найден субпакет SPTool (Signal Processing Tool) – для запуска этого субпакета достаточно дважды щелкнуть по имени субпакета.



^

Рис.13.5. Окно быстрого запуска субпакетов


(Заметим впрочем, что субпакеты можно запускать и из командного окна. В данном конкретном случае, например, достаточно в командной строке набрать команду >>sptool).

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


Рис.13.6. Интерфейс для фильтрации и спектрального анализа акустических сигналов.


Окно истории команд представляет собой дневник, в котором в хронологическом порядке хранятся все отдававшиеся когда-либо команды (рис.13.7). Полезность этого окна становится понятной после попытки перетащить мышкой команду из окна-истории в окно команд.



Рис.13.7. Окно истории команд

Окно текущей директории (Current Directory) выполняет очень простую и понятную функцию: в нем видны папки и файлы, находящиеся в текущей, т.е. рабочей директории (рис.13.8).

Рис.7


Рис.13.8. Окно текущей директории (Current Directory)
Очистку окон - командного, рабочего пространства и истории – проще всего производить из позиции меню главного окна: Edit|Clear…
Аналитические выкладки в Matlab.

Интересным и, безусловно, полезным свойство Matlab является возможность производить не только вычисления, но и аналитические выкладки – упрощать громоздкие выражения, брать интегралы и производные и т.п.
^ Графический интерфейс пользователя.

Работать в пакете Matlab можно по крайней мере тремя способами:

- в диалоговом режиме, набирая в командном окне вручную команду за командой;

- в режиме автоматического выполнения заранее написанной программы вычислений (скрипта, именуемого также m-файлом);

- отдавая команды нажатием соответствующих кнопок на заранее сконструированном пользовательском окне, именуемом графическим интерфейсом пользователя (GUI).

Достаточно полное представление о третьем способе можно получить, выполняя лабораторные работы по курсу «Методу обработки акустических сигналов».

^ Специализированные пакеты (sptool, fdatool,…).

Работа со специализированными пакетами (субпакетами) весьма сходна с работой с GUI – в обоих случаях на мониторе открываются специальные окна-панели с кнопками, строками ввода, зонами отображения графиков и т.п. На рис.13.6 показано окно-панель, появляющееся при активизации субпакета sptool – инструментария для фильтрации и спектральной обработки акустических сигналов.

В том же разделе Signal Processing Toolbox находим еще один интересный субпакет – fdatool (Filter Design and Analysis Tool). Вид окна-панели этого субпакета показан на рис.13.9.



^

Рис.13.9. Окно-панели субпакета Субпакет – fdatool (Filter Design and Analysis Tool)

13.2. Создание графического интерфейса пользователя в системе MATLAB


В состав MatLab входит среда GUIDE (Graphical User Interface Design Environment) для создания приложений с графическим интерфейсом пользователя. Работа в этой среде достаточно проста - элементы управления (кнопки, раскрывающиеся списки и т.д.) размещаются при помощи мыши, а затем программируются события, которые возникают при обращении пользователя к данным элементам управления.

Чтобы перейти в среду GUIDE достаточно выполнить команду

>> guide

При этом появляется диалоговое окно GUIDE Quick Start (рис. 13.10)



^



Рис. 13.10. Диалоговое окно GUIDE Quick Start






Выбираем пункт Blank GUI (Default) во вкладке Create New GUI, чтобы создавать интерфейс с пустой заготовкой (фигурой). При этом появляется основное окно среды GUIDE (рис. 13.11), содержащее заготовку для окна приложения, панель инструментов для добавления элементов интерфейса, управляющую панель и меню.


^

Рис. 13.11. Среда GUIDE с заготовкой для окна приложения



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

Свойства компонентов устанавливаются в инспекторе свойств (Property Inspector), который открывается двойным щелчком по компоненту. Некоторые свойства компонентов:

Tag – название, по которому осуществляется программное обращение к компоненту

Enable – делает компонент доступным или недоступным

Visible – делает компонент видимым или невидимым

String – надпись на компоненте

FontSize – размер шрифта надписи

ForegroundColor – цвет надписи

BackgroundColor – цвет компонента

HorisontalAlignment – выравнивание слева, справа или по центру

TooltipString – всплывающая подсказка

Приложение с GUI сохраняется в два файла: файл с расширением .fig (файл фигуры) и m-файл, в котором описываются подфункции обработки событий. Для перехода в m-файл достаточно щелкнуть по пиктограмме M-file Editor на управляющей панели. Приложение можно запустить из командной строки, введя имя файла интерфейса, а также из среды GUIDE или m-файла, щелкнув по пиктограмме Run.

^ Пример1. Приложение Myplot

Приложение myplot с графическим интерфейсом пользователя служит для построения графиков функций одной переменной (рис.13.12). Окно приложения myplot содержит оси, область ввода Function для задания функции одной переменной, области ввода Left и Right для задания границ интервала для построения графика и две кнопки: Plot - для вывода графика очередной функции и Clear - для удаления графика.


Рис. 13.12. Приложение myplot

В среде GUIDE создайте заготовку для нового приложения и разместите на ней:

· оси (при помощи компонента Axes);

· три области ввода (при помощи компонента Edit Text);

· три области статического текста (при помощи компонента Static Text);

· две кнопки (при помощи компонента Push Button).

Свойства Tag для статического текста оставлены такими, какие даются по умолчанию (text1, text2, text3), поскольку мы не будем обращаться к статическому тексту при программировании приложения. Остальные теги желательно задать в соответствии с рис. 13.13, поскольку они понадобятся при программировании событий.



^

Рис. 13.13. Размещение элементов управления в среде GUIDE



Задайте теги в инспекторе свойств, а также установите значения другим свойствам объектов:

·- свойство Position фигуры в значения х=50, у=15 для расположения окна приложения в центре экрана;

·- свойство осей NextPlot в add для того, чтобы линии графиков добавлялись на оси с сохранением предыдущих;

· свойство String областей статического текста в подходящие значения (Function, Left и Right);

·- цвет статического текста и надписи на кнопках (Plot, Clear) при помощи свойства ForegroundColor;

·- свойства шрифта статического текста при помощи свойств, названия которых начинаются со слова Font;

·- свойство String областей ввода - пустую строку.

Нажатие на кнопку в окне приложения, ввод данных в строку ввода, выбор пункта в раскрывающемся списке и т. д. вызывает событие Callback соответствующего элемента. Действия, вызванные этим событием, программируются в подфункциях обработки событий m-файла интерфейса. В приложении myplot обрабатываются два события: нажатие кнопки Plot и нажатие кнопки Clear.

При возникновении события Callback кнопки Plot выведем график. Для визуализации функции воспользуемся fplot, которая строит график функции с адаптивным подбором шага, учитывающим поведение функции. В самом простом случае обращение к fplot выглядит так:

fplot(fun, [a b]).

Здесь fun - строка или строковая переменная с записью выражения для функции в соответствии с правилами MatLab, a и b - границы изменения аргумента. Строку с выражением для функции мы получим, обратившись к свойству String области ввода Function (при помощи функции get), а для получения границ изменения аргумента придется не только считать строковые значения свойства String области ввода Left и Right, но и преобразовать их в числовые, обратившись к функции str2num. Подфункция обработки события кнопки Plot выглядит следующим образом:
function btnPlot_Callback(hObject, eventdata, handles)

fun = get(handles.edtFunction, 'String');

Left = str2num(get(handles.edtLeft, 'String'));

Right = str2num(get(handles.edtRight, 'String'));

fplot(fun, [Left Right]);
График будет выведен на оси, размещенные в окне приложения. Для очистки осей проще всего применить команду cla. Функция обработки события кнопки Clear должна также удалять содержимое областей ввода. Подфункция обработки события кнопки Clear:
function btnClear_Callback(hObject, eventdata, handles)

cla;

set(handles.edtFunction, 'String', '');

set(handles.edtLeft, 'String', '');

set(handles.edtRight, 'String', '');

Для того, чтобы при наведении мыши на элемент управления появлялась всплывающая подсказка, нужно в инспекторе свойств установить его свойство TooltipString в подходящее значение, например:

· для области ввода Function - Input formula;

· для области ввода Left - Input left boundary of interval и т.д.
^ Пример 2. Приложение Calculator

В демонстрационном приложении Calculator (рис. 13.14) используются компоненты Popup Menu, Checkbox и Radio Button. Popup Menu позволяет выбирать один пункт из раскрывающегося списка. Номер пункта соответствует значению свойства Value. Checkbox и Radio Button имеют два состояния: включенное и выключенное. Во включенном состоянии свойство Value имеет значение 1, в выключенном – 0. Три элемента Radio Button организованы так, чтобы в любой момент был включен только один из них.




Рис. 13.14. Приложение Calculator

Для этого в процедуре обработки события каждого элемента свойству Value данного элемента присваивается 1, а для двух других – 0. Подпрограмма обработки события одного из Radio Button:
function rsin_Callback(hObject, eventdata, handles)

set(handles.rsin,'Value',1);

set(handles.rcos,'Value',0);

set(handles.rtg,'Value',0);
При нажатии кнопки Calculate переменным a и b присваивается содержимое строк ввода edit1 и edit2. В переменную op записывается значение свойства Value элемента Checkbox. В зависимости от этого значения переменная с становится равной выражению a+b, a-b, a*b или a/b, а в переменную z заносится символ соответствующей арифметической операции. Проверяется, какой из элементов Radio Button находится во включенном состоянии, и исходя из этого берется соответствующая тригонометрическая фунция от переменной с. Если Сheckbox включен, то с берется по модулю. Для объединения нескольких строк используется функция strcat, а для преобразования числовой величины в строковую – функция str2num. Формула вычисляемого выражения и ответ выводятся на окно приложения через два компонента Static Text. Подфункция обработки события кнопки Calculate:
function pushbutton1_Callback(hObject, eventdata, handles)

a=str2num(get(handles.edit1,'String'));

b=str2num(get(handles.edit2,'String'));

op=get(handles.operat,'Value');

switch op

case 1

c=a+b;

z='+';

case 2

c=a-b;

z='-';

case 3

c=a*b;

z='*';

case 4

c=a/b;

z='/';

end;

f=strcat(get(handles.edit1,'String'),z,get(handles.edit2,'String'));

if get(handles.rsin,'Value')==1

f=strcat('sin(',f,')');

c=sin(c);

end;

if get(handles.rcos,'Value')==1

f=strcat('cos(',f,')');

c=cos(c);

end;

if get(handles.rtg,'Value')==1

f=strcat('tg(',f,')');

c=tan(c);

end;

if get(handles.checkbox1,'Value')==1

f=strcat('|',f,'|');

c=abs(c);

end;

%c=num2str(c);

%str=strcat('answer: ',c);

set(handles.fun,'String',f);

set(handles.an,'String',num2str(c));
В приложении имеется небольшое меню, состоящее из одного пункта File и одного подпункта Exit. Для перехода в редактор меню нужно щелкнуть по пиктограмме Menu Editor на управляющей панели среды GUIDE. В подфункции обработки события подпункта меню Exit записана функция close('calculator'), которая закрывает окно приложения calculator.
^

Пример 3. Приложение Imtrans


Приложение Imtrans предназначено для обработки изображений (рис.13.15). Оно содержит два компонента Axes для отображения исходного и обработанного изображений и три кнопки для открытия, обработки и сохранения изображения.

Для того чтобы при открытии приложения в осях axes1 уже отображалось изображение в подфункцию imtrans_OpeningFcn записано следующее:

handles.pict=imread('Moscow.jpg');

guidata(hObject,handles);

axes(handles.axes1);

imshow(handles.pict);

Р
ис. 13.15. Приложение Imtrans
Переменные одной подфункции могут быть использованы в других подфункциях. Эти переменные должны принадлежать структуре handles и после присвоения им какого-либо значения должна следовать строка guidata(hObject,handles).

Для вывода изображения на оси axes1 их нужно проинициализировать выражением axes(handles.axes1).

При нажатии на кнопку Open image появляется стандартное окно открытия файла. Для этого в подфункции open_Callback используется функция uigetfile:

[FileName,PathName]=uigetfile('*.bmp;*.jpg;*.gif');
В скобках указываются расширения открываемых файлов. В переменную FileName сохраняется имя открывшегося файла, а в переменную PathName – путь к этому файлу. В переменную FullName заносим полное имя файла:

FullName=[PathName FileName];

Подфункция обработки события кнопки Open image:
function open_Callback(hObject, eventdata, handles)

[FileName,PathName]=uigetfile('*.bmp;*.jpg;*.gif');

if FileName~=0

FullName=[PathName FileName];

handles.pict=imread(FullName);

guidata(hObject,handles);

axes(handles.axes1);

cla;

imshow(handles.pict);

axes(handles.axes2);

cla;

set(handles.save,'Enable','off');

end;
Подфункция обработки события кнопки Transform image:
function trans_Callback(hObject, eventdata, handles)

handles.pict=color2bw(handles.pict);

guidata(hObject,handles);

axes(handles.axes2);

imshow(handles.pict);

set(handles.save,'Enable','on');
В данной подфункции производится обращение к функции color2bw, описанной в файле color2bw.m. Входной параметр данной функции – массив изображения handles.pict, выходной параметр – обработанное изображение – также сохраняется в handles.pict. В данном случае функция color2bw преобразует полноцветное изображение в полутоновое.

Для сохранения обработанного изображения служит кнопка Save transformed image. При нажатии на нее появляется стандартное окно сохранения файла. Подфункция обработки события кнопки Save transformed image:
function save_Callback(hObject, eventdata, handles)

[filename,pathname]=uiputfile('*.*','Save image as');

if filename~=0

imwrite(handles.pict,filename);

end;


^ 13.3 Работа с изображением в среде Matlab.

A = imread(filename) – чтение графического файла

А – трехмерная матрица((x,y,n), где x, y – координаты пикселя, а n – номер цветовой компоненты. Например – A(10,20,2) – показывает для rgb значение зеленой компоненты пикселя с координатами (10,20) в диапазоне от 0 до 255)

Filename – имя файла, передается как строка. Матлаб ищет данный файл в текущей директории, поэтому лучше записывать полный адрес.

imwrite(A,filename,fmt) – запись графического файла

А – трехмерная матрица((x,y,n)

Filename – имя файла, передается как строка. Матлаб ищет данный файл в текущей директории, поэтому лучше записывать полный адрес.

Fmt – формат файла, передается как строка. Наиболее распространненные форматы: ‘bmp’, ‘jpeg’, ‘jpg’.

imtool(A) или imshow(A) – отображает изображение, загруженное в A с помощью функции imread

info = imfinfo(filename, fmt) – запись в структуру info информации о файле. Например, размер файла, последнее редактирование и т.п.

Пример:

A = imread(‘pic’, ‘jpeg’); % load image

imshow(A); % show image

h = fspecial(‘gaussian’); % make filter

B = imfilter(A, h); % use filter h on image A (blur image)

imwrite(B, ‘pic1’, ‘jpeg’); % save image

imshow(B); % show new image B

Вся дальнейшая обработка файлов осуществляется через массив A как A(i,j,z), где i и j – координаты пикселя, z задает цветовую компоненту ( для цветных изображений). Для более подробной информации о функциях обработки графических файлов и всего матлаба в целом, используйте Help матлаба.

^ 13.4 Работа со звуковыми файлами в среде Matlab

1. Создать wav-файл формата PCM (использовать cooledit, brainwave и пр.)

2. Поместить данные из wav-файла в рабочую область MATLAB, т.е. инициализировать переменную.

Y=wavread('pink22050_16',10*22050);

Здесь Y-имя переменной, которая будет хранить данные из файла;

pink22050_16 – имя wav-файла;

22050 – частота дискретизации, Гц;

10 – количество секунд звука, помещаемых в переменную;

3. Если звук в файле стереофонический, а нужен только один канал, то один из каналов можно отбросить:

Y=Y(:,1);

4. Если необходимо уменьшить размер переменной, то можно ограничить данные напр. 5-ю секундами

Y=Y(1:5*22050);

5. Прослушать данные из рабочей области позволяет строка

wavplay(Y,22050);

6. Создать задержку на 32 отсчета

Y=[eye(32,1);Y];

^ Построение цифрового фильтра, моделирующего АЧХ КТЧ

В таблице первые 2 столбца из графика, остальные рассчитаны

частота, кГц

затухание Нп

(мощность)

aнп

затухание Дб (мощность) a=анп*8,688

коэф. передачи (мощность) раз

Км=10анп/10

коэф. пер (напр) раз

К=

0










0

0,3

0,75

6,52

0,223

0,472

0,4

0,3

2,61

0,548

0,740

0,6

0

0

1

1

2,4

0,15

1,3

0,741

0,861

3

0,25

2,172

0,606

0,778

3,4

0,75

6,52

0,223

0,472

4










0


f = [0 0.3 0.32 0.4 0.6 2.4 3 3.38 3.4 4];%точки на оси частот, для которых будет задан коэф прд.

Теперь нормируем частоту

f = f ./ 4 % 4 -- половина частоты дискретизации

a = [ 0 0 0.47 0.740 1.0 0.86 0.780 0.4720 0 0] %Кпрд

B = fir2(51,f,a); % в В получаем ИХ фильтра 51 порядка, окно Хэмминга

impz(B) % чертим полученную ИХ (рис.13.16)



Рис.13.16. Импульсная характеристика фильтра
[h, fn] = freqz(B, 1, [], 8000) % получим в h – комплексный Кпрд, fn – вектор частот 8000 – частота дискретизации

plot(fn, abs(h)) % чертим АЧХ (рис.13.17)

plot(fn, angle(h)) % ФЧX (рис.13.18)


Рис.13.17. Амплитудн--частотная характеристика фильтра


Рис.13.18. Фазо-частотная характеристика фильтра
Обработаем построенным фильтром звуковой файл, предварительно помещенный в переменную Y

Yk = filter(B,1,Y);








Скачать файл (5335.1 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации