Книга
Книга
ЬЬК 32.811.3Я7
УДК 621.391.26(075)
С32
Федеральная целевая программа «Культура России»Поддержке полиграфии и книгоиздания России
Рецензенты:
Еркович С. П., доктор физико-математических наук, профессорМосковского Государственного технического университета (МГТУ) им. Н. Э. Баумана
Ревунков Г. И., кандидат технических наук, доцент
Московского Государственного технического университета (МГТУ) им. Н. Э. Баумана
С32 Цифровая обработка сигналов/А. Б. Сергиенко — СПб.: Питер, 2003. — 604 с.: ил.
ISBN 5-318-00666-3
Учебник представляет собой базовый курс по цифровой обработке сигналов. В ием изложены основы теории дискретных сигналов и систем, рассмотрены методы спектрального анализа и фильтрации дискретных сигналов, алгоритмы синтеза дискретных фильтров, влияние эффектов квантования и конечной точности вычислений иа работу цифровых устройств, а также методы модуляции, применяемые для передачи цифровой информации. Вводные главы посвящены основам анализа сигналов и теории аналоговых систем. Материал изложен так, чтобы наглядно продемонстрировать сущность алгоритмов, их взаимосвязь и области применения.
Теоретические сведения сопровождаются примерами реализации обсуждаемых алгоритмов с помощью системы MATLAB и ее пакетов расширения Signal Processing, Communications и Filter Design.
Книга допущена в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлению подготовки дипломированных специалистов «Информатика и вычислительная техника», преподавателей, научных работников, программистов, а также всех, кто интересуется компьютерной обработкой сигналов и иных данных.
ББК 32.811.3я7
УДК 621.391.26(075)
^ Краткое содержание
Введение13
■fГлава 1. Основы анализа сигналов 17
tГлава 2. Аналоговые системы87
Глава 3. Дискретные сигналы127
'Глава 4. Дискретные системы189
Глава 5. Спектральный анализ249
!
Глава 6. Проектирование дискретных фильтров313
Глава 7. Эффекты квантования в цифровых системах373
Глава 8. Модуляция и демодуляция"426
Приложение А. Основы работы с MATLAB508
. Приложение Б. Обзор функций MATLAB557
& * Приложение В. Компоненты MATLAB568
ВПриложение Г. Программа SPTool 574
Ж Литература . . . . 585
Ж Алфавитный указатель586
Содержание
Введение 13
Структура книги 14
Чего нет в этой книге16
Благодарности16
От издательства16
Глава 1. Основы анализа сигналов17
Классификация сигналов18
Энергия и мощность сигнала21
Ряд Фурье22
Синусно-косинусная форма23
Вещественная форма24
Комплексная форма 24
Примеры разложения сигналов в ряд Фурье25
Преобразование Фурье 31
Примеры расчета преобразования Фурье 34
Свойства преобразования Фурье42
Фурье-анализ неинтегрируемых сигналов47
Корреляционный анализ50
Корреляционная функция 50
Взаимная корреляционная функция 52
Связь между корреляционными функциями и спектрами сигналов53
Энергетические расчеты в спектральной области 54
Комплексная огибающая55
Преобразование Гильберта56
Спектр аналитического сигнала58
Случайные сигналы60
Ансамбль реализаций60
Модели случайных процессов 60
Вероятностные характеристики случайных процессов63
Корреляционные функции случайных процессов68
Стационарные и эргодические случайные процессы71
Спектральные характеристики случайных процессов74
Теорема Винера—Хинчина76
Узкополосный случайный процесс80
Глава 2. Аналоговые системы 87
Классификация систем87
Характеристики линейных систем88
Импульсная характеристика 88
Переходная характеристика 89
Условие физической реализуемости89
Комплексный коэффициент передачи 89
Коэффициент передачи по мощности 90
Фазовая и групповая задержка90
Взаимный спектр выходного и входного сигналов90
Взаимная корреляция между входом и выходом91
Преобразование случайного процесса в линейной системе91
Спектральная плотность мощности91
Корреляционная функция92
Дисперсия 92
Плотность вероятности92
Частный случай белого шума92
Способы описания линейных систем93
Дифференциальное уравнение93
Функция передачи 93
Нули и полюсы94
Полюсы и вычеты94
Пространство состояний96
Функции MATLAB для расчета линейных цепей 97
Расчет частотных характеристик97
Построение графиков фазочастотных характеристик99
Преобразование способов описания линейных цепей100
Расчет аналоговых фильтров-прототипов104
Преобразования фильтров-прототипов116
Расчет аналоговых фильтров 120
Выбор порядка фильтра121
Расчет групповой задержки123
Глава 3. Дискретные сигналы127
Аналоговые, дискретные и цифровые сигналы127
Аналого-цифровое и цифро-аналоговое преобразование129
Частота Найквиста129
Спектр дискретного сигнала131
Влияние формы дискретизирующих импульсов135
Теорема Котельникова 137
Восстановление радиосигнала по отсчетам видеосигнала141
Квадратурная дискретизация узкополосных сигналов142
/-преобразование 143
Примеры вычисления z-преобразования144
Связь z-преобразования с преобразованиями Лапласа и Фурье145
Свойства z-преобразования146
Обратное z-преобразование147
Дискретные случайные сигналы 148
Корреляционная матрица149
Дискретный белый шум150
Дискретные сигналы в MATLAB150
Расчет временных функций151
Функции генерации одиночных импульсов 155
Генерация последовательности импульсов161
Функции генерации периодических сигналов164
Генерация сигнала с меняющейся частотой168
Формирование случайных сигналов172
Получение данных из внешних источников178
Чтение wav-файлов178
Запись wav-файлов182
Воспроизведение звука183
Запись звука185
Готовые записи сигналов185
Пакет расширения Data Acquisition 186
Глава 4. Дискретные системы189
Сущность линейной дискретной обработки189
Способы описания дискретных систем193
Импульсная характеристика193
Функция передачи195
Нули и полюсы196
Полюсы и вычеты198
Пространство состояний 200
Преобразование случайного сигнала в дискретной системе200
Рекурсивные и нерекурсивные дискретные фильтры 202
Нерекурсивные фильтры 202
Рекурсивные фильтры205
Формы реализации дискретных фильтров206
Каноническая форма 206
Транспонированная форма 208
Последовательная (каскадная) форма210
Параллельная форма210
Дискретная фильтрация в MATLAB211
Дискретная свертка212
Обращение свертки212
Функция дискретной фильтрации213
Доступ к внутреннему состоянию фильтра 214
Компенсация фазового сдвига 215
Расчет импульсной характеристики216
Расчет частотной характеристики217
Расчет групповой задержки дискретной системы219
Отображение нулей и полюсов фильтра222
Свертка как матричное умножение223
Преобразование способов описания дискретных фильтров 224
•Изменение частоты дискретизации230
Прореживание231
Интерполяция 235
Передискретизация237
Некоторые идеализированные фильтры 240
Дискретное преобразование Гильберта240
Идеальный дифференцирующий фильтр244
Визуализатор фильтров 247
Глава 5. Спектральный анализ249
Дискретное преобразование Фурье 250
Свойства дискретного преобразования Фурье251
Восстановление непрерывного сигнала с помощью ДПФ253
Матрица ДПФ254
Связь ДПФ и спектра дискретного сигнала254
Алгоритм быстрого преобразования Фурье256
БПФ с прореживанием по времени256
БПФ с прореживанием по частоте258
Основание алгоритма БПФ260
Выводы 261
Взаимосвязь ДПФ и фильтрации262
ДПФ как дискретная фильтрация262
Дискретная фильтрация с помощью ДПФ265
Растекание спектра 270
Весовые функции273
Спектр дискретного случайного процесса 274
Непараметрические методы 275
Периодограмма275
Метод Уэлча 276
Параметрические методы277
Авторегрессионная модель 277
Метод MUSIC 282
Метод EV 284
Функции спектрального анализа в MATLAB284
Прямое и обратное ДПФ 285
Функция fftshift286
Матрица ДПФ 287
Блочная фильтрация вчастотной области287
Окна287
Функции непараметрического спектрального анализа 298
Параметрический спектральный анализ в MATLAB305
Реализация метода MUSIC 308
Функции peig и rooteig311
Глава 6. Проектирование дискретных фильтров313
Синтез рекурсивных фильтров по аналоговому прототипу313
Метод билинейного z-преобразования314
Метод инвариантной импульсной характеристики315
Прямые методы синтеза317
Оптимальные методы318
Субоптимальные методы 319
Субоптимальный синтез нерекурсивных фильтров320
Синтез с использованием окон320
Фильтры с косинусоидальным сглаживанием АЧХ324
Синтез дискретных фильтров в MATLAB 328
Функции, использующие билинейное z-преобразование329
Функция impinvar 335
Функции прямого синтеза рекурсивных фильтров336
Функции синтеза с использованием окон340
Функции расчета ФНЧ с косинусоидальным сглаживанием344
Функция расчета рекурсивного фильтра Гильберта348
Функции минимизации среднеквадратической ошибки349
Реализация метода Ремеза355
Функции пакета Filter Design362
Графическая среда для синтеза и анализа фильтров367
Глава 7. Эффекты квантования в цифровых системах 373
Форматы представления чисел374
Представление отрицательных чисел .374
Формат с фиксированной запятой375
Формат с плавающей запятой377
Процесс квантования380
Шум квантования380
Неравномерное квантование 382
Эффекты квантования в цифровых фильтрах383
Квантование коэффициентов цифровых фильтров383
Масштабирование коэффициентов цифровых фильтров 386
Переполнение разрядной сетки в процессе вычислений388
Округление промежуточных результатов вычислений391
Предельные циклы393
Учет эффектов конечной точности вычислений в MATLAB395
Функции квантования396
Функции пакета расширения Filter Design399
Квантователи 400
Квантованные фильтры408
Анализ предельных циклов 417
Расширение программы fdatool 418
Квантованное БПФ .'421
Глава 8. Модуляция и демодуляция426
Амплитудная модуляция 427
Однотональная АМ 429
АМ-сигнал в общем случае432
Энергетические соотношения в АМ-сигнале 434
Демодуляция АМ 436
Разновидности амплитудной модуляции438
АМ с подавленной несущей438
Однополосная модуляция439
Полярная модуляция 444
Угловая модуляция447
Фазовая и частотная модуляция . 447
Гармоническая угловая модуляция 449
Спектр сигнала с гармонической угловой модуляцией . . 451
Ширина спектра сигнала с гармонической УМ 454
Демодуляция УМ 456
Квадратурная модуляция 458
Спектр сигнала с квадратурной модуляцией 459
Демодуляция сигнала с квадратурной модуляцией".. 459
Способы модуляции, используемые при передаче цифровой информации . . 461
Частотная манипуляция462
Амплитудная манипуляция466
Фазовая манипуляция 467
Квадратурная манипуляция467
Широтно-импульсная модуляция477
Функции модуляции и демодуляции пакетаSignal Processing 481
Амплитудная модуляция482
АМ с подавленной несущей483
Однополосная модуляция 483
Фазовая модуляция484
Частотная модуляция484
Квадратурная модуляция 485
Широтно-импульсная модуляция . е486
Время-импульсная модуляция486
Функции модуляции и демодуляции пакетаCommunications487
Аналоговая модуляция в пакете Communications488
Цифровая модуляция в пакете Communications499
Приложение А. Основы работы с MATLAB508
Установка508
Работа в интерактивном режиме510
Справочная система515
Интерфейс главного окна517
Массивы 518
Другие типы данных521
Многомерные массивы 521
Строки522
Структуры523
Массивы ячеек523
Программирование524
Программы и функции525
Редактор/отладчик М-файлов526
Создание функций526
Путь поиска527
Логические условия528
Условный оператор528
Оператор выбора529
Циклы529
Функции с переменным числом параметров 531
Ввод и вывод данных532
Работа с отладчиком 533
Оптимизация MATLAB-программ534
MATLAB и русский язык 542
Графика 542
Двумерная графика542
Трехмерная графика545
Настройка внешнего вида графиков549
Одновременный вывод нескольких графиков553
Дальнейшее использование графиков555
Дополнительные источники информации556
Приложение Б. Обзор функций MATLAB557
Audio 557
Datafun557
Datatypes559
Demos559
Elfun559
Elmat 560
Funfun562
General562
Graph2d562
Graph3d562
Graphics563
lofun563
Lang563
Matfun564
Ops564
Polyfun 564
Sparfun565
Specfun565
Specgraph566
Strfun566
Timefun567
Uitools567
Verctrl567
Winfun567
Приложение В. Компоненты MATLAB 568
MATLAB568
Пакеты расширения MATLAB569
Математика и анализ 569
Чк'Г'попт м ммпппт nauuuiY........... S6Q
Обработка сигналов и изображений570
Разработка систем управления570
Финансовое моделирование и анализ571
Simulink571
Наборы блоков Simulink573
Приложение Г. Программа SPTool574
Загрузка сигнала575
Просмотр графика сигнала576
Спектральный анализ сигнала 577
Расчет фильтра578
Просмотр характеристик фильтра 579
Фильтрация сигнала 580
Сохранение результатов работы582
Литература583
Алфавитный указатель586
Введение
Цифровая обработка сигналов как направление развития науки и техники зародилась в 1950-х годах и поначалу представляла собой довольно экзотическую отрасль радиоэлектроники, практическая ценность которой была далеко не очевидной. Однако за прошедшие пятьдесят лет благодаря успехам микроэлектроники системы цифровой обработки сигналов не только воплотились в реальность, но и вошли в нашу повседневную жизнь в виде CD- и DVD-проигрывателей, модемов, сотовых телефонов и многого другого. Более того, в некоторых прикладных областях цифровая обработка сигналов стала вытеснять «традиционную» (аналоговую). В значительной мере это произошло в аудиотехнике, интенсивно идет процесс перехода телевизионного вещания на цифровую основу.
Бурное развитие цифровых технологий во многом изменило как смысл самого понятия «радиотехника», так и требования, предъявляемые к подготовке специалистов в этой области, сделав необходимыми новые знания и умения.
Для приобретения знаний нужна соответствующая литература, однако выбор книг, содержащих информацию о цифровой обработке сигналов, весьма невелик. Учебники и учебные пособия по курсу «Радиотехнические цепи и сигналы» и родственным дисциплинам, такие как [1-4], содержат лишь минимальные сведения о теории дискретных сигналов и фильтров. Фундаментальные труды [7, 8] изданы давно и в настоящее время малодоступны. С момента издания книги [10] тоже прошло более десяти лет, и она охватывает только вопросы, связанные со спектральным анализом. Начавшие появляться в последнее время книги, посвященные цифровым сигнальным процессорам (например, [И]), уделяют больше внимания архитектуре процессоров и средствам разработки программ для них, нежели теоретическим вопросам и алгоритмам.
Данная книга является попыткой хотя бы частично восполнить этот пробел, рассмотрев теоретические основы базовых алгоритмов цифровой обработки сигналов, продемонстрировав их сущность, взаимосвязь и области применения.
В качестве средства создания иллюстрационных примеров выбрана система MATLAB®, созданная фирмой The MathWorks, Inc. и являющаяся мировым стандартом в области научных и технических расчетов. Базовая библиотека MATLAB, а также пакеты расширения Signal Processing, Filter Design и Communications
содержат большое количество функций, позволяющих легко и быстро осуществлять разнообразные расчеты, связанные с цифровой обработкой сигналов. Для читателей, незнакомых с этой системой, в приложении А приводится краткое описание принципов работы с ней.
Книга предназначена для широкого круга читателей — студентов, преподавателей, научных работников, программистов и вообще всех, кто интересуется компьютерной обработкой сигналов и иных данных. Требуемая для понимания материала математическая подготовка соответствует примерно первому курсу технического вуза.
Структура книги
Книга состоит из восьми глав и четырех приложений. Первые две главы, «Основы анализа сигналов» и «Аналоговые системы», являются вводными и посвящены не цифровым, а аналоговым сигналам и системам. Поскольку методы анализа цифровых и аналоговых сигналов и систем тесно связаны друг с другом, хорошее понимание обсуждаемых здесь вопросов необходимо для освоения материала последующих глав.
В главе 3, «Дискретные сигналы», рассматриваются принципы математического описания и анализа числовых последовательностей, которые и являются дискретными сигналами. Здесь же обсуждается разница между понятиями аналоговых, дискретных и цифровых сигналов.
В главе 4, «Дискретные системы», изложены принципы линейной обработки дискретных сигналов (дискретной фильтрации), рассмотрены способы описания дискретных систем и формы их реализации.
Глава 5, «Спектральный анализ», как явствует из ее названия, посвящена вопросам спектрального анализа дискретных сигналов. Здесь рассматриваются дискретное преобразование Фурье и быстрые алгоритмы его вычисления, способы реализации фильтрации в частотной области, а также непараметрические и параметрические методы оценивания спектра дискретного случайного процесса.
В главе 6, «Проектирование дискретных фильтров», рассматриваются методы синтеза дискретных фильтров, то есть способы расчета дискретных систем, удовлетворяющих заданным требованиям. Обсуждаются как методы, связанные с использованием аналоговых фильтров-прототипов, так и прямые методы, основанные на использовании численных алгоритмов оптимизации.
Глава 7, «Эффекты квантования в цифровых системах», посвящена эффектам, возникающим при практической реализации алгоритмов цифровой обработки сигналов из-за конечной точности представления чисел в вычислительных устройствах. Здесь рассматриваются такие вопросы, как шум квантования, округление коэффициентов и промежуточных результатов вычислений в цифровых фильтрах, возможности возникновения переполнения при вычислениях, а также предельные циклы.
Наконец, в главе 8, «Модуляция и демодуляция», речь идет о способах преобразования сигналов для их передачи по каналам связи. Рассматриваются методы
модуляции, используемые для передачи как аналоговых сигналов (амплитудная, угловая и квадратурная модуляция), так и цифровой информации (амплитудная, частотная, фазовая и квадратурная манипуляция).
Три из четырех приложений посвящены системе MATLAB. В приложении А изложены основы работы с MATLAB, приложение Б содержит краткий обзор базовой библиотеки функций MATLAB, а в приложении В перечислены компоненты MATLAB.
В приложении Г приводится описание графической среды SPTool (Signal Processing Tool), имеющейся в одном из рассматриваемых в книге пакетов расширения MATLAB — Signal Processing Toolbox. Эта программа позволяет просматривать графики сигналов, производить спектральный анализ, рассчитывать дискретные фильтры и осуществлять фильтрацию сигнала. Данные операции относятся к тематике глав 3-6, поэтому, чтобы не разбивать описание программы SPTool па несколько частей, соответствующая информация помещена в отдельное приложение.
Во всех главах, начиная со второй, важное место отводится описанию функций MATLAB, реализующих рассматриваемые алгоритмы. Как правило, в первой половине главы содержится теоретическая информация, а вторая половина посвящена соответствующим средствам MATLAB. При этом демонстрационные примеры в теоретической части реализованы в основном с помощью общематематических функций MATLAB, без использования специализированных средств обработки сигналов. Это сделано для того, чтобы более наглядно продемонстрировать внутреннюю сущность реализуемых алгоритмов. Однако упомянутое разделение материала не является абсолютным — иллюстрации, необходимые при изложении теоретических вопросов, не всегда удается получить без специальных средств MATLAB, а при описании функций MATLAB иногда возникает необходимость привести дополнительные теоретические сведения. Таким образом, теоретическая и «компьютерная» части глав книги дополняют друг друга, предоставляя читателю возможность взглянуть на обсуждаемые вопросы с разных точек зрения.
В книге много иллюстраций, полученных с помощью MATLAB, при этом во всех случаях приводится и соответствующий программный код. Разумеется, при описании многих функций MATLAB также демонстрируется их использование. Таким образом, книга содержит множество примеров реализации алгоритмов обработки сигналов средствами MATLAB, так что заинтересованный читатель сможет освоить эту систему и использовать ее для решения собственных задач.
Следующее необходимое замечание касается терминологии. Наука и техника интернациональны по самой своей природе, и бурное развитие информационных технологий лишь сделало это еще более очевидным. Поэтому любому, кто занимается обработкой сигналов, приходится иметь дело со множеством зарубежных, и прежде всего англоязычных, источников информации. Помимо собственно владения английским языком это требует знания терминологии, которая не всегда соответствует принятой в отечественной литературе. Чтобы облегчить читателю работу с англоязычной литературой, при введении новых понятий в книге приводятся соответствующие английские термины.
Чего нет в этой книге
Книга является базовым курсом по цифровой обработке сигналов, поэтому в ней обсуждаются фундаментальные положения и отсутствуют разделы, касающиеся более сложных вопросов, таких как адаптивные фильтры, решетчатые фильтры, вейвлет-анализ, спектральный анализ высокого порядка, двумерная обработка сигналов, помехоустойчивое кодирование и т. д. Задача книги — лишь подготовить читателя к восприятию этих актуальных и современных тем.
Не является данная книга и справочником по рассматриваемым пакетам расширения MATLAB, хотя в ней описана большая часть функций пакетов Signal Processing и Filter Design и значительная часть функций пакета Communications. Следует иметь в виду, что при описании некоторых функций MATLAB приведены не все, а лишь наиболее употребительные способы их вызова. Наиболее полную информацию о функциях можно получить лишь из документации MATLAB и пакетов расширения.
Благодарности
Прежде всего хотелось бы поблагодарить самых близких мне людей — жену Юлию и сына Андрея — за терпение и понимание, проявленное ими на протяжении долгих месяцев. И конечно, никто не смог бы сверстать эту книгу лучше, чем Юля.
Этот проект не был бы возможен без поддержки издательства «Питер», и прежде всего, главного редактора Екатерины Строгановой и заведующего компьютерной редакцией Ильи Корнеева. Огромная благодарность также корректору Виктории Листовой и вообще всем сотрудникам издательства, принявшим участие в подготовке и выпуске книги.
Особой благодарности заслуживает фирма The MathWorks, Inc. — за создание замечательной компьютерной системы MATLAB и за предоставление в распоряжение автора последних версий MATLAB и описываемых в книге пакетов расширения.
От издательства
Ваши замечания, предложения, вопросы отправляйте по адресу электронной почты comp@piter.com (издательство «Питер», компьютерная редакция). Мы будем рады узнать ваше мнение!
Подробную информацию о наших книгах вы найдете на web-сайте издательства http://www.piter.com.
ГЛАВА 1 Основы анализа
сигналов
Анализ — один из ключевых компонентов обработки сигналов. Его теоретические основы рассматриваются в большом числе книг — от учебников и учебных пособий по курсу «Радиотехнические цепи и сигналы» [1-4] до фундаментальных монографий, таких как [5]. В данной главе будут приведены основополагающие понятия и методы анализа сигналов.
Эта глава является вводной и в ней рассматриваются аналоговые сигналы, а не дискретные или цифровые. Однако методы анализа аналоговых и дискретных сигналов тесно взаимосвязаны, поэтому полноценное освоение изложенного здесь материала необходимо для глубокого понимания главы 3, посвященной дискретным сигналам. Глава получилась весьма объемной, поскольку в ней вводится и обсуждается большое количество базовых понятий. Средства MATLAB в данной главе используются в основном для построения графиков.
Основной целью анализа является сравнение сигналов друг с другом для выявления их сходства и различия. Можно выделить три основных составляющих анализа сигналов:
измерение числовых параметров сигналов. К таким параметрам прежде всего относятся энергия, средняя мощность и среднеквадратическое значение, а речь об их расчете пойдет в разделе «Энергия и мощность сигнала»;
разложение сигнала на элементарные составляющие для их рассмотрения по отдельности либо для сравнения свойств различных сигналов. Такое разложение производится с использованием рядов и интегральных преобразований, важнейшими среди которых являются ряд Фурье и преобразование Фурье. Им будут посвящены одноименные разделы;
количественное измерение степени «похожести» различных сигналов. Такое измерение производится с применением аппарата корреляционного анализа, который будет рассмотрен в соответствующем разделе.
Классификация сигналов
Прежде чем приступать к рассмотрению задач анализа сигналов, выделим некоторые классы сигналов, которые будут часто встречаться нам в дальнейшем. Это необходимо по двум причинам. Во-первых, проверка принадлежности сигнала к конкретному классу сама по себе является процедурой анализа. Во-вторых, для представления и анализа сигналов разных классов зачастую приходится использовать разные средства и подходы.
Итак, что же такое сигнал? В наиболее общей формулировке это зависимость одной величины от другой (то есть с математической точки зрения сигнал является функцией?). Чаще всего рассматриваются зависимости от времени, хотя это не обязательно. Например, в системах оптической обработки информации сигналом может являться зависимость интенсивности света от пространственных координат. Физическая природа сигнала может быть весьма различной. Очень часто это напряжение, несколько реже — ток, возможны и многие другие физические величины.
В данной книге подразумевается (если иное не оговорено специально), что сигнал представляет собой зависимость напряжения от времени.
К теперь обратимся к собственно классификации.
В зависимости от того, известен ли нам сигнал точно, различают детерминированные и случайные сигналы. Детерминированный сигнал полностью известен — его значение в любой момент времени можно определить точно. Случайный же сигнал в любой момент времени представляет собой случайную величину, которая принимает конкретные значения с некоторой вероятностью. Специфические свойства случайных сигналов будут рассмотрены в конце данной главы, а основы анализа сигналов мы будем обсуждать применительно к сигналам детерминированным.
Следующий важный класс сигналов — сигналы с интегрируемым квадратом. Еще их называют сигналами с ограниченной энергией (почему, станет ясно из раздела «Энергия и мощность сигнала»). Для таких сигналов s(t) выполняется соотношение
Js2(l)dt < ос.
Многие важные соотношения теории сигналов получены в предположении о конечности энергии анализируемых сигналов. Если это условие не выполняется, приходится менять подходы к решению задачи (см., например, определения понятия корреляционной функции для сигналов с конечной и бесконечной энергией в разделе «Корреляционная функция») или прибегать к использованию аппарата обобщенных функций (см. раздел «Фурье-анализ неинтегрируемых сигналов»).
Еще один признак классификации сигналов, существенно влияющий на методы их анализа, — периодичность. Для периодического сигнала с периодом Т выполняется соотношение
s(t + пТ) = s(t) при любом t,
где п — произвольное целое число. Если величина Т является периодом сигнала s(t), то периодами для него будут и кратные ей значения: 2/ ЗГ и т. д. Как правило, говоря о периоде сигнала, имеют в виду минимальный из возможных периодов.
Величина, обратная периоду, называется частотой повторения сигнала: / = Y/T. В теории сигналов также часто используется понятие круговой частоты со = 2л/, измеряемой в радианах в секунду.
Очевидно, что любой периодический сигнал (за исключением сигнала, тождественно равного нулю) имеет бесконечную энергию.
Следующий класс — сигналы конечной длительности (их еще называют финитными сигналами). Такие сигналы отличны от нуля только на ограниченном промежутке времени. Иногда говорят, что сигнал существует на конечном временном интервале.
Очевидно, что сигнал конечной длительности будет иметь и конечную энергию — если только он не содержит разрывов второго рода (с уходящими в бесконечность ветвями функции).
Перейдем к более узким классам сигналов. Очень важную роль в технике обработки сигналов играют гармонические колебания, которые в самом общем виде записываются следующим образом:
s(t) - Л cos(co? + ф).
Гармонический сигнал полностью определяется тремя числовыми параметрами: амплитудой А, частотой со и начальной фазой ф.
Гармонический сигнал является одним из широко распространенных тестовых сигналов, применяющихся для анализа характеристик цепей. Кроме него к тестовым относятся еще две очень важные в радиотехнике функции: дельта-функция и функция единичного скачка.
Дельта-функция 5(f), или функция Дирака, представляет собой бесконечно узкий импульс с бесконечной амплитудой, расположенный при нулевом значении аргумента функции. «Площадь» импульса тем не менее равна единице:
8(0 = /
[оо, t =0,
J S(t)dt = 1.
Разумеется, сигнал в виде дельта-функции невозможно реализовать физически, однако эта функция очень важна для теоретического анализа сигналов и систем.
На графиках дельта-функция обычно изображается жирной стрелкой, высота которой пропорциональна множителю, стоящему перед дельта-функцией (рис. 1.1). Одно из важных свойств дельта-функции — так называемое фильтрующее свойство. Оно состоит в том, что если дельта-функция присутствует под интегралом в качестве множителя, то результат интегрирования будет равен значению остального подынтегрального выражения в той точке, где сосредоточен дельта-импульс:
//(Г)8(Г-Г0)Д=Ж). (1.1)
25(f- 1)25(f- 1)11
25(f- 1)
25(f- 1)
1
1
Рис. 1.1. Г рафик сигнала s(t) = б( t) + 25(t - 1)
Пределы интегрирования в (1.1) не обязательно должны быть бесконечными, главное, чтобы в интервал интегрирования попадало значение t0; в противном случае интеграл будет равен нулю.
Из того факта, что интеграл от дельта-функции дает безразмерную единицу, следует, что размерность самой дельта-функции обратна размерности ее аргумента. Например, дельта-функция времени имеет размерность 1/с, то есть размерность частоты.
Функция единичного скачка o(t), она же функция Хевисайда, она же функция включения, равна нулю для отрицательных значений аргумента и единице — для положительных. При нулевом значении аргумента функцию считают либо неопределенной, либо равной 1/2:
(1.2)
В MATLAB данную функцию можно смоделировать с помощью оператора сравнения, возвращающего значение 0 или 1:
У = (х >= 0);
Отличие такой реализации функции включения от формулы (1.2) состоит только в том, что при нулевом значении аргумента результат равен единице; впрочем, в большинстве случаев это отличие несущественно.
График функции единичного скачка приведен на рис. 1.2.
а(0 1
1
—
0
t
Рис. 1.2. Функция единичного скачка
Функцию единичного скачка удобно использовать при создании математических выражений для сигналов конечной длительности. Простейшим примером
является формирование прямоугольного импульса с амплитудой Л и длительностью Т;
s(t) = Л(ст(() - a(t - Г)).
Вообще, любую кусочно-заданную зависимость можно записать в виде единого математического выражения с помощью функции единичного скачка.
Энергия и мощность сигнала
В начале этой главы в качестве одной из составляющих анализа сигналов было названо измерение их количественных параметров. На практике очень часто используются такие параметры, как энергия и мощность сигнала. Их определения, принятые в теории сигналов, отличаются от обычных, а потому требуют некоторых комментариев.
Начнем с обычных, «физических» понятий мощности и энергии. Если к резистору с сопротивлением R приложено постоянное напряжение U, то выделяющаяся в резисторе мощность будет равна
R
За время Т в этом резисторе выделится тепловая энергия, равная U'2T
R
Пусть теперь к тому же резистору приложено не постоянное напряжение, а сигнал s(?)- Рассеивающаяся в резисторе мощность при этом тоже будет зависеть от времени, то есть в данном случае речь идет о мгновенной мощности (instantaneous power):
Чтобы вычислить выделяющуюся за время Т энергию, мгновенную мощность необходимо проинтегрировать:
т, т
Е = j p^dt = — js2 (t)dt.
Можно ввести также понятие средней мощности (average power) за заданный промежуток времени, разделив энергию на длительность временного интервала:
Р =— =— fs2(t)^-'
ср т RT^ V /
Во все приведенные формулы входит сопротивление нагрузки R. Однако, если энергия и мощность интересуют нас не как физические величины, а как средство сравнения различных сигналов, этот параметр можно из формул исключить (принять R = 1). Тогда мы получим определения энергии, мгновенной мощности и средней мощности, принятые в теории сигналов:
(1.3)(1.3)(1.4)(1.4)
(1.3)
(1.3)
(1.4)
(1.4)
Е = j s2(t)</t,
Р(0 = s2(0,
^„ = ^V4tW
«Мощность» здесь имеет размерность В2, а «энергия» — В2 ■ с.
ЗАМЕЧАНИЕ
Данные параметры иногда называют удельной мощностью и энергией, чтобы подчеркнуть подразумеваемое при этом единичное значение сопротивления нагрузки.
Энергия сигнала может быть конечной или бесконечной. Например, любой сигнал конечной длительности будет иметь конечную энергию (если только он не содержит дельта-функций или ветвей, уходящих в бесконечность). А любой периодический сигнал, напротив, имеет бесконечную энергию.
Если энергия сигнала бесконечна, можно определить его среднюю мощность на всей временной оси. Для этого нужно воспользоваться формулой (1.3) и выполнить предельный переход, устремив интервал усреднения в бесконечность:
s2(t) Д-
Квадратный корень из средней мощности дает среднеквадратическое {действующее) значение сигнала (английский термин — root mean square, RMS):
(1.5)
Для периодического сигнала с периодом Г предельный переход в формулах (1.4) и (1.5) выполнять не обязательно — достаточно выполнить усреднение по периоду.
Ряд Фурье
Разложению в ряд Фурье могут подвергаться периодические сигналы. При этом они представляются в виде суммы гармонических функций либо комплексных экспонент с частотами, образующими арифметическую прогрессию. Для того чтобы такое разложение существовало, фрагмент сигнала длительностью в один период должен удовлетворять условиям Дирихле'.
не должно быть разрывов второго рода (с уходящими в бесконечность ветвями функции);
число разрывов первого рода (скачков) должно быть конечным;
число экстремумов должно быть конечным (в качестве примера функции, которая на конечном интервале имеет бесконечное число экстремумов, можно привести sin(l/x) в окрестности нуля).
В зависимости от конкретной формы базисных функций различают несколько форм записи ряда Фурье.
ЗАМЕЧАНИЕ
Ряд Фурье может быть применен для представления не только периодических сигналов, но и сигналов конечной длительности. При этом оговаривается временной интервал, для которого строится ряд Фурье, а в остальные моменты времени сигнал считается равным нулю. Для расчета коэффициентов ряда такой подход фактически означает периодическое продолжение сигнала за границами рассматриваемого интервала.
Синусно-косинусная форма
В этом варианте ряд Фурье имеет следующий вид:
s(t) = — + ^(at cos(^ro1t)+ bk sin(^cO]O)-(1.6)
2k=\
Здесь to] = 2к/Т — круговая частота, соответствующая периоду повторения сигнала, равному Т. Входящие в формулу кратные ей частоты ко, называются гармониками; гармоники нумеруются в соответствии с индексом к; частота ю^ = к«р называется к-й гармоникой сигнала. Коэффициенты ряда ак и Ьь рассчитываются по формулам:
2 г/2
ак — — ^ s(t)cos(ktoxt)dt,
2 т/2
bk =— j s(t)sm(ktoxt)dt.
-Т/2
Константа а0 рассчитывается по общей формуле для ак. Ради этой общности и введена несколько странная на первый взгляд форма записи постоянного слагаемого (с делением на два). Само же это слагаемое представляет собой среднее значение сигнала на периоде:
ЗАМЕЧАНИЕ
Пределы интегрирования не обязательно должны быть такими, как в приведенных выше формулах (от -Т/2 до Т/2). Интегрирование может производиться по любому интервалу длиной Т — результат от этого не изменится. Конкретные пределы выбираются из соображений удобства вычислений; например, может оказаться удобнее выполнять интегрирование от 0 до Г или от -Т до 0.
Если s(t) является четной функцией, то все bk будут равны нулю и в формуле ряда Фурье будут присутствовать только косинусные слагаемые. Если s(t) явля-
ется нечетной функцией, равны нулю будут, наоборот, косинусные коэффициенты ак и в формуле останутся лишь синусные слагаемые.
Вещественная форма
Некоторое неудобство синусно-косинусной формы ряда Фурье состоит в том, что для каждого значения индекса суммирования к (то есть для каждой гармоники с частотой кго^ в формуле фигурируют два слагаемых — синус и косинус. Воспользовавшись формулами тригонометрических преобразований, сумму этих двух слагаемых можно трансформировать в косинус той же частоты с иной амплитудой и некоторой начальной фазой:
=+ соз^Г+фД(1.7)
Если s(f) является четной функцией, фазы ф4 могут принимать только значения 0 и л, а если s(t) — функция нечетная, то возможные значения для фазы равны ±л/2.
Комплексная форма
Данная форма представления ряда Фурье является, пожалуй, наиболее употре- бимой в радиотехнике. Она получается из вещественной формы представлением косинуса в виде полусуммы комплексных экспонент (такое представление вытекает из формулы Эйлера е?А = cos х + j sin x):
cos .г = -(е,х + e'ixY 2
Применив данное преобразование к вещественной форме ряда Фурье, получим суммы комплексных экспонент с положительными и отрицательными показателями:
5(0 =+ ^^Mexp(JktoYt + уф,) + exp(-jktolt -]ц>к)).
24=1 2
А теперь будем трактовать экспоненты со знаком «минус» в показателе как члены ряда с отрицательными номерами. В рамках этого же общего подхода постоянное слагаемое а0/2 станет членом ряда с нулевым номером. В результате получится комплексная форма записи ряда Фурье:
5(0= УЛке^.(1.8)
Комплексные коэффициенты ряда связаны с амплитудами Аь и фазами ф^, фигурирующими в вещественной форме записи ряда Фурье (1.7), следующими несложными соотношениями:
1
Ct = ~Аке»,
Ак = 2\Ск\, ^к = ^Ск).
Несложно выглядят и формулы связи с коэффициентами ак и Ьк синусно-косинусной формы ряда Фурье (1.6):
к 27 2 ’
ак=2МСк\ Ьк=-2ЩСк).
Отсюда сразу же следует и формула непосредственного расчета коэффициентов Ск ряда Фурье в комплексной форме:
Ск =- \ s^ex^-jk^dt.(1.9)
-тц
Если s(t) является четной функцией, коэффициенты ряда Ск будут чисто вещественными, а если s(t) — функция нечетная, коэффициенты ряда окажутся чисто мнимыми.
Совокупность амплитуд гармоник ряда Фурье часто называют амплитудным спектром, а совокупность их фаз — фазовым спектром. Эти понятия не следует путать с амплитудно- и фазочастотными характеристиками, которые относятся не к сигналам, а к цепям.
Если анализируемый сигнал s(t) является вещественным, то его амплитудный и фазовый спектры обладают симметрией:
А_к=Ак, ^_к=-^к,
С= Ск.
Примеры разложения сигналов в ряд Фурье
В данном разделе мы применим ряд Фурье для анализа конкретных сигналов.
Последовательность прямоугольных импульсов
Первым рассматриваемым сигналом будет последовательность прямоугольных импульсов с амплитудой А, длительностью т и периодом повторения Т. Начало отсчета времени примем расположенным в середине импульса (рис. 1.3).
Рис. 1.3. Периодическая последовательность прямоугольных импульсов
Данный сигнал является четной функцией, поэтому для его представления удобнее использовать синусно-косинусную форму ряда Фурье — в ней будут присутствовать только косинусные слагаемые ак, равные
n Т/21 -ТЦn Т/21 -ТЦ(2л& Л , 2А . cos t \at = —sinl Г J л^(2л& Л , 2А . cos t \at = —sinl Г J л^л^тл^т
n Т/2
1 -ТЦ
n Т/2
1 -ТЦ
(2л& Л , 2А . cos t \at = —sin
l Г J л^
(2л& Л , 2А . cos t \at = —sin
l Г J л^
л^т
л^т
Внимательно рассматривая полученную формулу, можно заметить, что длительность импульсов и период их следования входят в нее не обособленно, а исключительно в виде отношения. Этот параметр — отношение периода к длительности импульсов — называют скважностью последовательности импульсов и обозначают буквой g: q = Г/т. Введем этот параметр в полученную формулу для коэффициентов ряда Фурье, а затем приведем формулу к виду sin(x)/x:
2А . I а, = —sin4 лА2А . I а, = —sin4 лА. (nk sin — л^ | 2A V q. (nk sin — л^ | 2A V qqqq uh qq uh q(1.10)(1.10)
2А . I а, = —sin
4 лА
2А . I а, = —sin
4 лА
. (nk sin — л^ | 2A V q
. (nk sin — л^ | 2A V q
q
q
q uh q
q uh q
(1.10)
(1.10)
ЗАМЕЧАНИЕ
В зарубежной литературе вместо скважности используется обратная величина, называемая коэффициентом заполнения (duty cycle) и равная т/Г.
При такой форме записи становится хорошо видно, чему равно значение постоянного слагаемого ряда: поскольку при х —> 0 sin(x)/x —> 1, то
ай _ А _ Ат
Теперь можно записать и само представление последовательности прямоугольных импульсов в виде ряда Фурье:
А ^2А . (/2л& Л s(t) = — + у— sin — cos t . q k=\^k \ q) V T )
Амплитуды гармонических слагаемых ряда зависят от номера гармоники по закону sin(x)/x (рис. 1.4).
График функции sin(r)/x имеет лепестковый характер. Говоря о ширине этих лепестков, следует подчеркнуть, что для графиков дискретных спектров периодических сигналов возможны два варианта градуировки горизонтальной оси — в номерах гармоник и в частотах. На рис. 1.4 градуировка оси соответствует номерам гармоник, а частотные параметры спектра нанесены на график с помощью размерных линий.
Итак, ширина лепестков, измеренная в количестве гармоник, равна скважности последовательности (при k = nq имеем 5т(л&/<?) = 0, если и * 0). Отсюда следует важное свойство спектра последовательности прямоугольных импульсов — в нем отсутствуют (имеют нулевые амплитуды) гармоники с номерами, кратными скважности.
Рис. 1.4. Коэффициенты ряда Фурье для последовательности прямоугольных импульсов
Расстояние по частоте между соседними гармониками равно частоте следования импульсов — 2л/Г. Ширина лепестков спектра, измеренная в единицах частоты, равна 2л/т, то есть обратно пропорциональна длительности импульсов. Это, как мы увидим далее, проявление общего закона — чем короче сигнал, тем шире его спектр.
Меандр
Важным частным случаем предыдущего сигнала является меандр — последовательность прямоугольных импульсов со скважностью, равной двум, когда длительности импульсов и промежутков между ними становятся равными (рис. 1.5).
Подставив q = 2 в формулу (1.10), получим
A, k=0,
л8т(л&/2)
6л ^/2
0,к = 2т, т * 0,
2Л, ,
—,я = 4т+1,
тх.к
1А, ,,
,к = 4т-1.
л/г
Здесь т — произвольное целое число.
Таким образом, в спектре меандра присутствуют только нечетные гармоники. Это согласуется с общим правилом, приведенным выше. Представление меандра в виде ряда Фурье с учетом этого может быть записано следующим образом:
. Л 2Л|(2л Л 1 f о 2л Л 1 Г с 2 л
s(t) = — + — cos — t — cos 3— t + — cos 5 — t
л I IT J 3 ( Г J 5 I г .
Гармонические составляющие, из которых складывается меандр, имеют амплитуды, обратно пропорциональные номерам гармоник, и чередующиеся знаки.
Покажем на примере меандра, как складывается заданный сигнал из отдельных гармоник (рис. 1.6):
» N=8;%число ненулевыхгармоник
» 1=-1:0.01:1: %вектор моментоввремени
» А=1:%амплитуда
» Т=1:%период
» nh = (1:N)*2-1: % номера ненулевых гармоник
» % строки - гармоники
» harmonics = cos(2*pi*nh'*t/T):
» Am = 2/pi./nh:% амплитуды гармоник
» Am(2:2:end) = -Am(2:2:end):% чередование знаков
» si = harmonics .* repmat(Am'. 1. length(t)):
» % строки - частичные суммы гармоник
» s2 = cumsum(sl):
» for k=l:N, subplot(4, 2. k). plot(t. s2(k,:)), end
Вообще, последовательность прямоугольных импульсов плохо подходит для представления рядом Фурье — она содержит скачки, а сумма любого числа гармонических составляющих с любыми амплитудами всегда будет непрерывной функцией. Поэтому поведение ряда Фурье в окрестностях разрывов представляет особый интерес. На графиках рис. 1.6 хорошо видно, что в окрестности точки разрыва суммирование ряда Фурье дает наклонный участок, причем крутизна наклона возрастает с ростом числа суммируемых гармоник. В самой точке разрыва ряд Фурье сходится к полусумме правого и левого пределов:
s'Go) = ~f 1™ S(O + Um s(h)\ 2v->to-o t-»ro+o j
Здесь s(f) — исходный сигнал, s’(t) — сумма ряда Фурье для него.
На примыкающих к разрыву участках сумма ряда Фурье дает заметные пульсации, причем на графиках рис. 1.6 заметно, что амплитуда этих пульсаций не уменьшается с ростом числа суммируемых гармоник — пульсации лишь сжимаются по горизонтали, приближаясь к точке разрыва. Это явление, присущее рядам Фурье для любых сигналов с разрывами первого рода (скачками), называется эффектом Гиббса. Можно показать, что амплитуда первого (самого большого) выброса составляет примерно 9 % от величины скачка.
10.50-0.5-110.50-0.5-1-101-101Рис. 1.6. Промежуточные стадии суммирования ряда Фурье для меандраРис. 1.6. Промежуточные стадии суммирования ряда Фурье для меандра
1
0.5
0
-0.5
-1
1
0.5
0
-0.5
-1
-101
-101
Рис. 1.6. Промежуточные стадии суммирования ряда Фурье для меандра
Рис. 1.6. Промежуточные стадии суммирования ряда Фурье для меандра
Пилообразный сигнал
Следующий сигнал, который мы рассмотрим, — пилообразный (рис. 1.7). В пре- делах периода он описывается линейной функцией:
ОД11
s^ = ^<t-kT\ (k-^T<t<(k + l)T.
Данный сигнал является нечетной функцией, поэтому его ряд Фурье в синуснокосинусной форме (1.6) будет содержать только синусные слагаемые:
,2 Ч 2А . <2^ Л . 2А .
Ьк =-—fsmt\dt =—-(-1) .
1 Г / Г I Г J кк
т ) ( 2)(2;т ) ( 2)(2;Рис. 1.8. Последовательность треугольных импульсовРис. 1.8. Последовательность треугольных импульсов
т ) ( 2)(2;
т ) ( 2)(2;
Рис. 1.8. Последовательность треугольных импульсов
Рис. 1.8. Последовательность треугольных импульсов
Сам ряд Фурье для пилообразного сигнала выглядит следующим образом:
У рассмотренных выше спектров прямоугольного и пилообразного периодических сигналов есть одна общая черта — амплитуды гармоник с ростом их номеров убывают пропорционально к. У следующего сигнала скорость затухания спектра будет иной, а почему, мы обсудим после расчета коэффициентов ряда Фурье для него.
Последовательность треугольных импульсов
Очередной сигнал, для которого мы получим разложение в ряд Фурье, представляет собой периодическую последовательность треугольных импульсов. Строго говоря, импульсы в предыдущем сигнале тоже были треугольными, но в данном случае они будут иметь не пилообразную, а симметричную форму (рис. 1.8):
х(Г) = А 1-4
Вычислим коэффициенты ряда Фурье (сигнал является четной функцией, поэтому в синусно-косинусной форме ряда Фурье (1.6) будут присутствовать только косинусные слагаемые):
о т/2 (\ хл^ = 2m,
а,= — А 1-4— cos t \dt =-(l-(-l) ) = <
” t Jг г/„гл2 \/s=2m+l.
1-th VW^(n&)2
Как и в случае меандра, здесь присутствуют только нечетные гармоники. Сам ряд Фурье имеет следующий вид:
.(2л )1 Г„2л Л 1 2л Л )
s(t) = — cos — t + —cos 3—t +—— cos 5 — t +... .
ТС у \ j у и \1/ J \1 J у
Как видите, в отличие от последовательностей прямоугольных и пилообразных импульсов, для треугольного периодического сигнала амплитуды гармоник убывают пропорционально второй степени номеров гармоник к. Это проявление общего правила, гласящего, что скорость убывания спектра зависит от степени гладкости сигнала. Прямоугольный и пилообразный сигналы имеют разрывы первого рода (скачки), и в их спектрах присутствует множитель 1Д. Треугольный сигнал является непрерывной функцией (но ее первая производная содержит разрывы), и амплитуды гармоник его ряда Фурье содержат множитель 1 /к2. Экстраполировав эту зависимость, получим следующее правило: если N — номер последней непрерывной производной сигнала, то спектр этого сигнала будет убывать со скоростью 1Д‘. Предельным случаем является гармонический сигнал, дифференцировать который без потери непрерывности можно бесконечно. Согласно общему правилу, это даст бесконечную скорость убывания спектра, что вполне соответствует действительности (ряд Фурье для гармонического сигнала содержит только одну гармонику).
Преобразование Фурье
Преобразование Фурье (Fourier transform) является инструментом спектрального анализа непериодических сигналов. Впрочем, чуть позже мы увидим, что его можно применять и к сигналам периодическим, но это потребует использования аппарата обобщенных функций.
Для наглядной иллюстрации перехода от ряда Фурье к преобразованию Фурье часто используется не вполне строгий математически, но зато понятный подход. Представим себе периодическую последовательность импульсов произвольного вида и сформируем ряд Фурье для нее. Затем, не меняя формы одиночных импульсов, увеличим период их повторения (заполнив промежутки нулевым значением) и снова рассчитаем коэффициенты ряда Фурье. Формула (1.9) для расчета коэффициентов ряда показывает, что нам придется вычислить тот же самый интеграл, но для более тесно расположенных частот 0^ = кюх. Изменение пределов интегрирования не играет роли — ведь на добавившемся между импульсами пространстве сигнал имеет нулевое значение. Единственное дополнительное изменение будет состоять в уменьшении общего уровня гармоник из-за деления результата интегрирования на увеличившийся период Т.
На рис. 1.9 описанные изменения иллюстрируются на примере двукратного увеличения периода следования прямоугольных импульсов. Обратите внимание на
то, что горизонтальная ось спектральных графиков проградуирована в значени ях частот, а не номеров гармоник.
Рис. 1.9. Изменение спектра последовательности импульсов при двукратном увеличении периода их следованияРис. 1.9. Изменение спектра последовательности импульсов при двукратном увеличении периода их следования
Рис. 1.9. Изменение спектра последовательности импульсов при двукратном увеличении периода их следования
Рис. 1.9. Изменение спектра последовательности импульсов при двукратном увеличении периода их следования
Итак, с ростом периода следования импульсов гармоники располагаются ближе друг к другу по частоте, а общий уровень спектральных составляющих становится все меньше. При этом вид вычисляемого интеграла (1.9) не меняется.
Наконец, если устремить период к бесконечности (превратив тем самым периодическую последовательность в одиночный импульс), гармоники спектра будут плотно занимать всю частотную ось, а их амплитуды упадут до нуля (станут бесконечно малыми). Однако взаимное соотношение между уровнями гармоник остается неизменным и определяется все тем же интегралом (1.9). Поэтому при спектральном анализе непериодических сигналов формула для расчета коэффициентов комплексного ряда Фурье модифицируется следующим образом:
частота перестает быть дискретно меняющейся и становится непрерывным параметром преобразования (то есть ^cot в формуле (1.9) заменяется на ш);
удаляется множитель 1/Г;
результатом вычислений вместо нумерованных коэффициентов ряда Q является функция частоты 5(ю) — спектральная функция сигнала s(t). Иногда ее называют также спектральной плотностью.
В результате перечисленных модификаций формула (1.9) превращается в формулу прямого преобразования Фурье;
(1.11)(1.11)5(со) = J s( t ')e ' dt.
(1.11)
(1.11)
В формуле самого ряда Фурье суммирование, естественно, заменяется интегрированием (и, кроме того, перед интегралом появляется деление на 2п). Получающееся выражение называется обратным преобразованием Фурье:
s(t) = —^S(to)e№ldto.(1.12)
2 л
ЗАМЕЧАНИЕ
Если использовать не круговую частоту со, а обычную частоту f - го/(2л), формулы прямого и обратного преобразования Фурье становятся еще более симметричными, отличаясь лишь знаком в показателе экспоненты:
5(/)= ]s(t)e^fldt,
5(0= p(/)^”^/.
Чтобы преобразование Фурье было применимо, сигнал должен удовлетворять следующим требованиям:
должны выполняться условия Дирихле (см. раздел «Ряд Фурье»);
сигнал должен быть абсолютно интегрируемым. Это означает, что интеграл от его модуля должен быть конечной величиной:
/кСОИ <«•
Однако с привлечением математического аппарата обобщенных функций возможно выполнение Фурье-анализа и для некоторых сигналов, не удовлетворяющих этим требованиям (речь об этом пойдет далее, в разделе «Фурьс-ашишз ие- нитегрируемых сигналов»).
Если анализируемый сигнал ,s(/) — вещественная функция, то соответствующая спектральная функция 5(ш) является «сопряженно-симметричной» относительно нулевой частоты. Это означает, что значения спектральной функции па частотах со и -со являются комплексно-сопряженными по отношению друг к другу:
5(-ш) = 5 (со).
Если s(l) — четная функция, то, как и в случае ряда Фурье, спектр будет чисто вещественным (и, следовательно, будет являться четной функцией). Если, напротив, s(t) — функция нечетная, то спектральная функция 5(со) будет чисто мнимой (и нечетной).
Модуль спектральной функции часто называют амплитудным спектром, а ее аргумент — фазовым спектром. Легко показать, что для вещественного сигнала амплитудный спектр является четной, а фазовый — нечетной функцией частоты:
| 5(-со)| = | 5(со)|,
<P.s(-co) = -ффш).
Примеры расчета спектральных функций конкретных сигналов и соответствующие графики будут приведены далее.
Итак, преобразование Фурье (1.11) ставит в соответствие сигналу, заданному во времени, его спектральную функцию. При этом осуществляется переход из временной области в частотную. Преобразование Фурье является взаимно-однозначным, поэтому представление сигнала в частотной области (спектральная функция) содержит ровно столько же информации, сколько и исходный сигнал, заданный во временной области.
Примеры расчета преобразования Фурье
В этом разделе будут рассмотрены примеры расчета преобразования Фурье для некоторых сигналов, часто встречающихся при решении различных задач.
Прямоугольный импульс
Начнем с прямоугольного импульса, центрированного относительно начала отсчета времени (рис. 1.10):
s(t) =s(t) =[A <т/2,to, |t|>V2.[A <т/2,to, |t|>V2.-т/2-т/2Рис. 1.10. Прямоугольный импульсРис. 1.10. Прямоугольный импульс
s(t) =
s(t) =
[A <т/2,to, |t|>V2.
[A <т/2,to, |t|>V2.
-т/2
-т/2
Рис. 1.10. Прямоугольный импульс
Рис. 1.10. Прямоугольный импульс
Вычисляем спектральную функцию:
5(со) = \Ае'^а1= — sinf—5(со) = \Ае'^а1= — sinf—sin(coT/2) = Ат—го т/2sin(coT/2) = Ат—го т/2
5(со) = \Ае'^а1= — sinf—
5(со) = \Ае'^а1= — sinf—
sin(coT/2) = Ат—
го т/2
sin(coT/2) = Ат—
го т/2
Как видите, спектр представляет собой функцию вида sin(x)/x (рис. 1.11). Амплитудный спектр имеет лепестковый характер, и ширина лепестков равна 2л/т, то есть обратно пропорциональна длительности импульса. Значение спектральной функции на нулевой частоте равно площади импульса — Ат. Спектральная функция является вещественной, поэтому фазовый спектр принимает лишь два значения — Ойл, в зависимости от знака функции sin(x)/x. Значения фазы л и -л неразличимы, разные знаки для фазового спектра при со > 0 и со < 0 использованы лишь с целью представить его в виде нечетной функции.
Теперь посмотрим, что изменится после сдвига импульса во времени. Пусть импульс начинается в пулевой момент времени (рис. 1,12):
Рис. 1.11. Амплитудный (слева) и фазовый (справа) спектры прямоугольного импульса
5(Г) А
Рис. 1.12. Прямоугольный импульс, задержанный во времени
Вычисляем преобразование Фурье и строим графики амплитудного и фазового спектров (рис. 1.13):
(1.14)(1.14)• I , Л ■ sin(wT/2)5(со) = J Ае^м dt =4-О- e"^) = Ат — оj®шт/2• I , Л ■ sin(wT/2)5(со) = J Ае^м dt =4-О- e"^) = Ат — оj®шт/2задержанного прямоугольного импульсазадержанного прямоугольного импульса
(1.14)
(1.14)
• I , Л ■ sin(wT/2)
5(со) = J Ае^м dt =4-О- e"^) = Ат — оj®шт/2
• I , Л ■ sin(wT/2)
5(со) = J Ае^м dt =4-О- e"^) = Ат — оj®шт/2
задержанного прямоугольного импульса
задержанного прямоугольного импульса
ЗАМЕЧАНИЕ
Этот пример демонстрирует проявление свойства преобразования Фурье, касающегося изменения спектра при сдвиге сигнала во времени. Это свойство в общем виде будет рассмотрено далее, в разделе «Свойства преобразования Фурье».
Из формулы (1.14) и графиков рис. 1.13 видно, что после сдвига импульса во времени его амплитудный спектр остался прежним, а фазовый приобрел сдвиг, линейно зависящий от частоты.
Строго говоря, спектр данного сигнала простирается до бесконечности, лишь постепенно затухая. Поэтому вводят понятие эффективной ширины спектра. Как видно из графиков, спектр имеет лепестковый характер и ширина главного лепестка равна 2л/т. При лепестковом характере спектра за эффективную ширину спектра можно принять ширину главного лепестка. Из графиков видно, что она составляет 2л/т, то есть обратно пропорциональна длительности импульса. Это общее соотношение: чем короче сигнал, тем шире его спектр. Произведение же эффективных значений длительности сигнала и ширины его спектра (оно называется базой сигнала) остается равным некоторой константе, зависящей от конкретного способа определения этих параметров. В нашем примере эго произведение. очевидно, равно 2л. Вообще, для сигналов простой формы (не имеющих сложной внутриимпульсной структуры) величина базы независимо от способа определения эффективных значений длительности и ширины спектра составляет несколько единиц.
Длительность сигнала и ширина его спектра подчиняются соотношению неопределенности, гласящему, что произведение этих параметров (база сигнала) по может быть меньше единицы. Ограничений максимального значения базы сигнала не существует. Отсюда следует, что можно сформировать сигнал большой длительности, одновременно имеющий и широкий спектр (такие сигналы называют широкополосными, или сложными, или сигналами с большой базой). А вот короткий сигнал с узким спектром, согласно соотношению неопределенности, существовать не может.
Несимметричный треугольный импульс
Далее рассмотрим несимметричный треугольный импульс (рис. 1.14):
s(0 =s(0 =A — , 0<t<T, Т
s(0 =
s(0 =
О, t <0, t>T.
Рис. 1.14. Несимметричный треугольный импульс
U®)2T (j®)2TU®)2T (j®)2T
U®)2T (j®)2T
U®)2T (j®)2T
Рассчитываем спектр и строим графики (рис. 1.15):
т ,
A_e-).<r j®A_e-).<r j®5(со) = J А - е"7ш' dt = о ^
A_e-).<r j®
A_e-).<r j®
- Юл-8 л-6п-4л-2л 0 2л 4л 6л 8л гоТ -Юл-8л-6л-4л-2л 0 2л 4л 6л 8л шГ
Рис. 1.15. Амплитудный (слева) и фазовый (справа) спектры несимметричного треугольного импульса
На сен раз амплитудный спектр не содержит ярко выраженных лепестков, поэтому для определения его эффективной ширины необходим иной критерий. Будем определять эффективную ширину спектра по уровню 0,1 от максимума. Из графика видно, что эта ширина (опа показана стрелкой) составляет примерно бп/Г База сигнала, таким образом, равна 6л.
Симметричный треугольный импульс
Следующий сигнал — симметричный треугольный импульс (рис. 1.16):
s(0 = <s(0 = <0,0,И<г, \t\ >т.И<г, \t\ >т.Рис. 1.16. Симметричный треугольный импульсРис. 1.16. Симметричный треугольный импульс
s(0 = <
s(0 = <
0,
0,
И<г, \t\ >т.
И<г, \t\ >т.
Рис. 1.16. Симметричный треугольный импульс
Рис. 1.16. Симметричный треугольный импульс
sin2(co772)(«Wsin2(co772)(«WРассчитываем спектральную функцию:
sin2(co772)(«W
sin2(co772)(«W
5(со) = /Л 1-^1 \е",0>1 dt = АТ
-г V Т )
Далее строим график амплитудного спектра (рис. 1.17). Спектральная функция оказывается не только вещественной (это сразу же следует из четности сигнала), но и неотрицательной, поэтому фазовый спектр в данном случае чисто нулевой и строить его график не имеет смысла.
Рис. 1.17. Амплитудный спектр симметричного треугольного импульса
Из графика видно, что спектр опять имеет лепестковую структуру и ширина главного лепестка составляет 2л/Г, как и в случае прямоугольного импульса. Однако длительность сигнала в данном случае вдвое больше (2Г), н база оказывается равной 4л.
Далее перейдем от сигналов конечной длительности к бесконечно протяженным сигналам.
Односторонний экспоненциальный импульс
Первым из сигналов бесконечной длительности будет рассмотрен односторонний экспоненциальный импульс (рис. 1.18):
[Ле"", t>0,
[О,Г<0.
Рис. 1.18. Односторонний экспоненциальный импульс
Рассчитываем преобразование Фурье:
5(о) = \Ае-'“ е",ю1 dt=-A-.
*)а + ;со
Далее строим графики амплитудного и фазового спектров (рис. 1.19).
Рис. 1.19. Амплитудный (слева) и фазовый (справа) спектры одностороннего экспоненциального импульса
Двусторонний экспоненциальный импульс
Теперь пусть экспоненциальный импульс будет двусторонним (симметричным, рис. 1.20):
$(Г)=Л^"'!
Рис. 1.20. Двусторонний экспоненциальный импульс
Рис. 1.21. Амплитудный спектр двустороннего экспоненциального импульса
Рассчитываем преобразование Фурье:
5(ю) = [,2Л-- .
н + со
Спектр в данном случае чисто вещественный, поэтому строить график фазового спектра нет смысла (рис. 1.21).
Гауссов импульс
Следующий очень важный сигнал — гауссов импульс (рис. 1.22). Как и предыдущий, он имеет бесконечную протяженность в обоих направлениях временной оси:
s(0 = Ле-"2'2.
Вычисляем спектр:
5(со) = ^Ae^^e-^dt =
Поскольку сигнал является четной функцией, его спектр чисто вещественный. Поэтому строим график только для амплитудного спектра (рис. 1.23).
Важным свойством гауссова импульса является то, что его спектр тоже описывается гауссовой функцией.
Гауссов импульс имеет бесконечную протяженность как во временной, так и в частотной области. Определим его эффективную длительность и ширину спектра по уровню 1/е от максимума: т = 2/а, Део = 2н. База сигнала, таким образом, равна четырем.
Рис. 1.23. Амплитудный спектр гауссова импульса
Сигнал вида sin(x)/x
Следующий пример призван продемонстрировать дуальность преобразования Фурье. Если сравнить формулы прямого и обратного преобразования Фурье, можно заметить, что они отличаются друг от друга лишь знаком в показателе комплексной экспоненты и множителем перед интегралом. Отсюда следует, что если нетной функции времени /(Г) соответствует спектральная функция g(w) (она будет также четной), то функции времени g(t) будет соответствовать спектральная функция 2л/(о). Проверим это па конкретном примере. В начале этого раздела мы выяснили, что прямоугольному импульсу соответствует спектральная функция вида sin(a>)/«>. Теперь же рассмотрим временной сигнал вида sin(t)/t и проверим, будет ли его спектральная функция прямоугольной.
Итак, задаем временной сигнал (используем параметр Т для обозначения полупериода функции sin) (рис. 1.24):
,(г)_л™мт)
nt/T
Рассчитываем спектр и строим график (рис. 1.25):
5(ю) = J Л5(ю) = J Л_ ЛГ г" 2л 2_ ЛГ г" 2л 2sin(nf/T) g_N dt=A"r sm (nt/T)cos wt dt = ^t[T2 ^t/T. ( nV . ( nY sin «>+— i + sin a>— tsin(nf/T) g_N dt=A"r sm (nt/T)cos wt dt = ^t[T2 ^t/T. ( nV . ( nY sin «>+— i + sin a>— tТ)tТ)tТТdt =dt =
5(ю) = J Л
5(ю) = J Л
_ ЛГ г
" 2л 2
_ ЛГ г
" 2л 2
sin(nf/T) g_N dt=A"r sm (nt/T)cos wt dt = ^t[T2 ^t/T
. ( nV . ( nY sin «>+— i + sin a>— t
sin(nf/T) g_N dt=A"r sm (nt/T)cos wt dt = ^t[T2 ^t/T
. ( nV . ( nY sin «>+— i + sin a>— t
Т)t
Т)t
Т
Т
dt =
dt =
. л L• я V
SIH (0+ — tsin to— г
ЛТ? IAT r \ T) .
= —- dt + — dt.
2л £ t2л t
-л/Г
О
л/Г
со
Рис. 1.25. Сигнал вида sin(at)/(at) имеет прямоугольный спектр
Значение каждого из двух получившихся интегралов равно ±л в зависимости от знака множителей (со ± л/Г). Поэтому результат суммирования интегралов зависит от частоты следующим образом:
5(Г) =5(Г) =АТ, Ы^,О, Ы>^-АТ, Ы^,О, Ы>^-
5(Г) =
5(Г) =
АТ, Ы^,О, Ы>^-
АТ, Ы^,О, Ы>^-
Как видите, дуальность (симметрия) преобразования Фурье получила наглядное подтверждение.
Сигнал данного вида имеет идеальный низкочастотный спектр — спектральная функция постоянна в некоторое! полосе частот, начинающейся от нулевой частоты, и равна пулю за пределами этой полосы. Мы вновь встретимся с этим сигналом в главе 3 при обсуждении разложения сигналов в ряд Котельникова.
Свойства преобразования Фурье
Под свойствами преобразования Фурье подразумевается взаимное соответствие трансформаций сигналов и их спектров. Хорошее звание свойств преобразования Фурье позволяет предсказывать примерный (а иногда и точный) вид спек-
тра анализируемого сигнала и таким образом контролировать правдоподобность результата, выдаваемого компьютером.
В этом разделе мы будем рассматривать два абстрактных сигнала, /(Г) и §(/), и считать, что их спектральные функции равны ^(со) и G(ro).
Линейность
Преобразование Фурье является линейным интегральным преобразованием. Смысл свойства линейности можно сформулировать так: спектр суммы равен сумме спектров. Говоря математическим языком, линейная комбинация сигналов имеет спектр в виде такой же (с теми же коэффициентами) линейной комбинации их спектральных функций:
если s(t) = a/(r) + Pg(O, то 5(и) = аЕ((о) + pG(w).
Задержка
А теперь посмотрим, как сказывается на спектральной функции задержка сигнала во времени. Итак, пусть т — время задержки:
s(0 = Kt - т),
тогда спектральная функция изменится следующим образом:
5(ю) = J/G -1)6^' dt = J/(Г - x^e"H'"x^Kt - с)е",ыт = ЦюК^.
Результат показывает, что спектр исходного сигнала оказался умноженным па комплексную экспоненту вида е -'ют. Таким образом, амплитудный спектр сигнала не меняется (ведь модуль такой комплексной экспоненты равен 1; к тому же здравый смысл подсказывает, что соотношение между амплитудами спектральных составляющих из-за сдвига сигнала во времени измениться не должно). Фазовый спектр приобретает дополнительное слагаемое -ют, линейно зависящее от частоты.
ЗАМЕЧАНИЕ
Если в результате какого-либо преобразования сигнала его спектр умножается на некоторую функцию, не зависящую от преобразуемого сигнала, это означает, что данное преобразование может быть выполнено линейной системой с постоянными параметрами. Речь о системах данного класса пойдет в главе 2.
Изменение масштаба оси времени
Рассматривая конкретные примеры, мы уже познали на практике общее правило: чем короче сигнал, тем шире его спектр. Теперь взглянем па это правило со строгих теоретических позиций. Если изменить длительность сигнала J^, сохраняя его форму, то новый сигнал s(t) следует записать как
s(0 = ДаГ).
При |а| > 1 сигнал сжимается, при |о[ < 1 — растягивается. Если а < 0, дополнительно происходит зеркальное отражение сигнала относительно вертикальной оси. Посмотрим, как такое преобразование сказывается на спектре:
5(со) = [/(аОе'^'Д = - [/(с?г)е “ d(at) = -F — .
-ха-га \« J
Итак, изменение длительности сигнала приводит к изменению ширины спектра в противоположную сторону (аргумент t на а умножается, а со делится) в сочетании с увеличением (при растяжении, а < 1) или уменьшением (при сжатии, а > 1) уровня спектральных составляющих.
Полученная формула справедлива для с? > 0. При а < 0 использованная замена переменной t —> аГ вызовет перестановку пределов интегрирования и, как следствие, изменение знака у результата:
5(и) = --Е|-\ а < 0. а \а)
Объединяя оба случая, можно записать
5(ю) = АЯ™\ а*0.
В частном случае а = -1 полученная формула дает следующее:
5( и) = F (-со) = F* (со).
Итак, зеркальное отражение сигнала относительно начала отсчета времени приводит к зеркальному отражению спектра относительно нулевой частоты. Для вещественного сигнала это соответствует комплексному сопряжению спектра.
ЗАМЕЧАНИЕ
В данном случае результат не сводится к умножению исходного спектра йа некоторую функцию. В соответствии с предыдущим замечанием это означает, что изменение длительности сигнала не может быть осуществлено линейной системой с постоянными параметрами.
Дифференцирование сигнала
Посмотрим, как влияет на спектр дифференцирование сигнала во временной области. Для этого нам придется воспользоваться определением понятия производной:
. . df .. f^t + е)- s(t) = — = lim—.
dt£
Применим к этому выражению преобразование Фурье:
5(ш) =
£и-и>£
= F(co)lim= jmF(to).
£
Спектр производной получается путем умножения исходного сигнала на /со. Таким образом, при дифференцировании низкие частоты ослабляются, а высокие усиливаются. Фазовый спектр сигнала сдвигается на 90° для положительных частот и на - 90° для отрицательных.
Множитель j® называют оператором дифференцирования сигнала в частотной области.
Интегрирование сигнала
Интегрирование, как известно, является операцией, обратной дифференцированию. Поэтому, исходя из результатов, полученных в предыдущем разделе, казалось бы, можно ожидать следующий результат:
5(Ю) = ^.
Однако все не так просто. Детальный анализ, выполненный, например, в [1], показывает, что эта формула справедлива лишь для сигналов, не содержащих постоянной составляющей, у которых
f(0) = j/W=o.
В общем же случае результат должен содержать дополнительное слагаемое в виде дельта-функции на пулевой частоте. Множитель перед дельта-функцией пропорционален постоянной составляющей сигнала:
5(Ю) =+ KF(0)8(wY(1.15)
Итак, при интегрировании исходного сигнала высокие частоты ослабляются, а низкие усиливаются. Фазовый спектр сигнала смешается на -90° для положительных частот и на 90° для отрицательных. Множитель l/(jw) называют оператором интегрирования в частотной области.
Спектр свертки сигналов
Свертка сигналов является очень часто используемой в радиотехнике интегральной операцией, поскольку опа описывает, в частности, прохождение сигнала через линейную систему с постоянными параметрами (подробнее это будет обсуждаться в главе 2):
s(O = J/(t')g(t-t' Ж
Подвергнем такую конструкцию преобразованию Фурье:
5(со) = J ^/(t')g(t-f'ydt'е",ю‘dt =
(1.16)
= J/(С )e->r {g(t -t' )e"jMU-,-1d(t -t' )dt' = F(m)G( co).
Полученный результат очень важен, он часто используется на практике: спектр свертки равен произведению спектров.
Спектр произведения сигналов
Дуальность преобразования Фурье и соотношение (1.16), полученное в предыдущем разделе, позволяют легко предугадать результат. Однако все-таки получим его:
s(0 = /(О 8(0-
тогда
5(®)= ”\/(t)g(f)e-Ndt = j J^to^'rAA^ =
)(М7)
= ^- J F(m)^g(t)e"jU'"“>rdt dto' = ~ JFCto'^G^to-rondel.
Как и следовало ожидать, спектр произведения представляет собой свертку спектров. Единственной дополнительной тонкостью является множитель 1/(2тс) перед интегралом свертки.
ЗАМЕЧАНИЕ
При выводе соотношения (1.17) мы представили сигнал/(() с помощью обратного преобразования Фурье (1.12) от его спектральной функции.
Умножение сигнала на гармоническую функцию
Умножим исходный сигнал, спектр которого нам известен, на гармоническую функцию:
•ДО =/(0 cos(®0t + фо).
Посмотрим, что произошло со спектром сигнала:
S(a) = J /(t)cos(®0t + ф0= J/(t)e"1”' dt =
= - ^ f (.t')ejvo e"jt“"“l,)t dt + A ^f^e'^e^'^dt =(1.18)
2 —oc2
■1
Как видите, спектр «раздвоился» — распался на два слагаемых вдвое меньшего уровня (множитель 1/2), смещенных на со0 вправо (го - т0) и влево (и + ш0) по осп частот. Кроме того, при каждом слагаемом имеется множитель, учитывающий начальную фазу гармонического колебания. С практическим применением этого свойства мы столкнемся в главе 8 при обсуждении свойств сигналов с амплитудной модуляцией.
Связь преобразования Фурье и коэффициентов ряда Фурье
Пусть s(0 — сигнал конечной длительности, а 5(ю) — его спектральная функция. Получим на основе х(Г) периодический сигнал, взяв период повторения Т не меньше длительности сигнала:
$А0 = ^s(t-kT).
Сравнивая формулы (1.11) для расчета преобразования Фурье сигнала s(t) и (1.9) для расчета коэффициентов ряда Фурье сигнала sT(t), можно заметить, что эти формулы предполагают вычисление одного и того же интеграла. Различие состоит в том, что для расчета коэффициентов ряда Фурье в подынтегральное выражение подставляются не произвольные, а дискретные значения частоты (О/, = 2як/Т и, кроме того, результат интегрирования делится на период сигнала Т.
Таким образом, между спектральной функцией 5(и) одиночного импульса и коэффициентами Ск ряда Фурье для периодической последовательности таких импульсов существует простая связь:
с - 1 ур71^
ЗАМ ЕЧАНИЕ
Данная формула справедлива и в том случае, если период повторения импульсов меньше их длительности (то есть если соседние импульсы периодической последовательности перекрываются).
Фурье-анализ неинтегрируемых сигналов
При введении понятия преобразования Фурье были указаны условия его применимости: выполнение условий Дирихле и абсолютная интегрируемость сигнала. Однако в ряде случаев можно применить преобразование Фурье и к сигналам, этим условиям не удовлетворяющим, и получить при этом вполне осмысленный и практически полезный результат.
Итак, в данном разделе мы воспользуемся преобразованием Фурье для спектрального анализа таких сигналов, к которым оно формально неприменимо.
Дельта-функция
Прежде всего вычислим преобразование Фурье для сигнала в виде дельта-функции (о ее свойствах шла речь в разделе «Классификация сигналов», и фильтрующее свойство (1.1) нам сейчас как раз понадобится):
S(co) = J Hty^dt = 1.
Спектр дельта-функции представляет собой константу, то есть является равномерным в бесконечной полосе частот. Это вполне согласуется с общим соотно-
шепнем между длительностью сигнала и miipnnoii его спектра: дельта-импульс имеет бесконечно малую длительность, а его спектр бесконечно широк.
Из полученного результата следует, что дельта-функцию можно записать в виде обратного преобразования Фурье следующим образом:
6(0 = А Гe>^da.(1.19)
2л Д
Это полезное соотношение мы используем при анализе следующего сигнала.
Постоянный во времени сигнал (константа)
Поскольку мы уже знаем, что спектром дельта-функции является константа, благодаря дуальности преобразования Фурье можно сразу же сказать, что спектром константы (s(0 = Л) будет дельта-функция частоты. Проверим это, воспользовавшись только что полученным соотношением (1.19):
5(со) = jЛе"'1"1 dt = 2 л Л б(со).
Наши предположения полностью подтвердились. Здесь опять хорошо прослеживается обратная пропорциональность между длительностью сигнала и шириной его спектра: бесконечно протяженный сигнал имеет бесконечно узкий спектр.
Функция единичного скачка
Функция единичного скачка (1.2) (см. раздел «Классификация сигналов») представляет собой интеграл от дельта-функции, поэтому, в соответствии со свойствами преобразования Фурье (см. предыдущий раздел), мы получаем
5(и) = f □ (0e-'™'t/l = л 8(со)——.
Поскольку дельта-функция имеет ненулевую (равную 1) постоянную составляющую, то в полном соответствии с формулой (1.15), приведенной для данного случая в разделе «Свойства преобразования Фурье», в спектре появляется дополнительное слагаемое в виде дельта-функции на пулевой частоте.
Гармонический сигнал
Рассчитаем спектр гармонического сигнала общего вида:
s(0 = Л COS(toot + <р).
Для расчета спектральной функции представим косинус в виде полусуммы комплексных экспонент и воспользуемся формулой (1.19):
”„.№«!♦.№« , „-<™(|<->Ф(|
5(ю) = |Лcos(ro0f + ф0)е->ЭД = Jле^'dt-
л2
= j ^ем>е-л-»-<-« )'д + j=(! 20)
,2
= Aneiv{' 8(ю- го0) + Лле'^08(го+ со0).
Результат, как видим, представляет собой пару дельта-функций, расположенных па частотах ±соп. Множители при них отражают амплитуду и начальную фазу (то есть комплексную амплитуду ) гармонического сигнала.
ЗАМЕЧАНИЕ
Тот же результат можно было бы получить, применив к спектру постоянного во времени сигнала свойство преобразования Фурье (1.18), касающееся умножения сигнала па гармоническую функцию.
Комплексная экспонента
Впервые в этой книге мы рассматриваем сигнал, не являющийся вещественным:
s(t) = A exp(jtoHt).
Результат вычисления его спектра легко предугадать: только что рассмотренный гармонический сигнал дал спектральную функцию в виде двух дельта-функций, а косинус с помощью формулы Эйлера можно представить в виде полусуммы двух комплексных экспонент. Значит, спектром комплексной экспоненты должна являться одиночная дельта-функция:
5(со) = ple'™1’'^'^(1.21)
Результат, как видите, не обманул наших ожиданий. Обратите внимание на то, что поскольку сигнал не является вещественным, его спектр теряет свойство симметрии.
На первый взгляд, польза от рассмотрения комплексных сигналов невелика. Однако они оказываются очень удобным средством для анализа модулированных сигналов, особенно когда у них одновременно меняются и амплитуда, и начальная фаза. С такими сигналами нам предстоит встретиться в разделе «Комплексная огибающая» далее в этой главе.
Произвольный периодический сигнал
Как мы уже знаем, периодический сигнал с периодом Т может быть представлен в виде ряда Фурье (1.8):
у .2 як
^(0 = Ес^"'.
После вычисления спектров гармонического сигнала (1.20) и комплексной экспоненты (1.21) читателю уже должно быть ясно, что спектральная функция такого сигнала представляет собой набор дельта-функций, расположенных на частотах гармоник ряда Фурье:
5(ш) = £ 2лС*8 со- — .
У Т )
Множители при дельта-функциях равны соответствующим коэффициентам ряда Фурье Ск, умноженным на 2л.
Корреляционный анализ
Корреляционный анализ наряду со спектральным играет большую роль в теории сигналов. Говоря кратко, его смысл состоит в количественном измерении степени сходства различных сигналов. Для этого служат корреляционные функции, с рассмотрения которых мы и начнем этот раздел.
Корреляционная функция
Корреляционная функция (КФ; английский термин — correlation function, CF) детерминированного сигнала с конечной энергией представляет собой интеграл (в бесконечных пределах) от произведения двух копий сигнала, сдвинутых друг относительно друга на время т:
В,(т) = Js(t)s(t -x^dt.
Корреляционная функция показывает степень сходства между сигналом и его сдвинутой копией — чем больше значение корреляционной функции, тем это сходство сильнее. Кроме того, корреляционная функция обладает следующими свойствами:
Значение КФ при т = 0 равно энергии сигнала, то есть интегралу от его квадрата:
8^ = ^s40dt = E.
КФ является четной функцией своего аргумента т:
в^ - вл-tY
Значение КФ при т = 0 является максимально возможным значением:
В.^) < В.,(0).
С ростом абсолютного значения т КФ сигнала с конечной энергией затухает: lim В,(т) = 0.
Если сигнал s(t) не содержит особенностей в виде дельта-функций, его КФ не может иметь разрывов (то есть обязана быть непрерывной функцией).
Если сигнал — напряжение, то размерность его КФ равна В2 • с.
В качестве примера вычислим КФ прямоугольного импульса (1.13), показанного ранее на рис. 1.12:
при 0 < т < Г т
В,(т) = {Л2Д = Л2(Г-т);
при -Г < т < О
ВДТ)= A2 dt = А2 (Т + ту,
О
при |т| > Т
Вх(т) - 0.
Объединяя результаты, можно записать
[о,|т|>г.
График КФ прямоугольного импульса показан на рис. 1.26.
Рис. 1.26. Корреляционная функция прямоугольного импульса
В случае периодического сигнала (и вообще любого сигнала с бесконечной энергией) воспользоваться приведенным определением не удастся. Поэтому КФ периодического сигнала с периодом Т вычисляют, усредняя произведение сдвинутых копий в пределах одного периода:
1 Г/2
В,^^- \s(t)s(t-x)dt.
' -Г/2
Набор свойств такой КФ несколько меняется.
Значение при т = 0 равно не энергии, а средней люирюсти анализируемого сигнала:
1 Г/2
В,(0) = ^ Js2(0^=Prp:
J -Т/2
Свойство четности сохраняется: В^-т) - В,(т).
Значение КФ при т ■ 0 по-прежнему является максимально возможным: BsW < В.Ж
КФ периодического сигнала является периодической функцией с тем же периодом, что и сам сигнал: Вх(т + Т) = В^т).
Если сигнал не содержит дельта-функций, его КФ будет непрерывной функцией.
Размерность КФ периодического сигнала — квадрат размерности сигнала (В2, если сигнал — напряжение).
В качестве примера вычислим КФ гармонического сигнала с частотой со():
s(t) = A cos(toot + Фо)-
Вычисляем корреляционный интеграл, учитывая, что период такого сигнала равен 2л/соо:
со ^°’“А2
В^ (т) = — [ Л cos (to()f + ф0 )Л со$(со0(Г -т) + ф0 ук = — cos(co0t). 2тг2
Как видите, КФ гармонического сигнала тоже является гармонической функцией. Еще очень важен тот факт, что полученный результат не зависит от начальной фазы гармонического сигнала (параметр ф в полученное выражение не вошел). Это проявление общего свойства всех КФ, о котором пойдет речь далее в разделе «Связь между корреляционными функциями и спектрами сигналов».
Взаимная корреляционная функция
Если КФ показывает степень сходства между сдвинутыми копиями одного и того же сигнала, то взаимная корреляционная функция (ВКФ; английский термин — cross-correlation function, CCF) позволяет измерить аналогичную величину для сдвинутых экземпляров двух разных сигналов.
Общий вид формулы КФ сохраняется, по под интегралом стоит произведение двух разных сигналов, один из которых задержан на время т:
SI2(t)= Jsl(r)s2(t - т)г7с.
ЗАМЕЧАНИЕ
Очевидно, что КФ является частным случаем ВКФ, когда оба сигнала одинаковы: л'1(0 - -^(О = АУ
В качестве примера вычислим ВКФ прямоугольного и треугольного импульсов (см. рис. 1.12 и 1.14):
при 0 < т < Т B.A^A^dt^lT-xf;
при -Т < т < О t _ тА2
B^z)= \A2^dt=^(T2 -т2>
при ]т| > Т Bi2(r) = 0.
Объединяя результаты, можно записать
Д12(т) =Д12(т) =— (Т'-т)2, 2Т
Д12(т) =
Д12(т) =
— (Т2 -т2), 2Г
О,
О < т < Т,-Т < т < О,М>гО < т < Т,-Т < т < О,М>гРис. 1.27. ВКФ прямоугольного и треугольного импульсовРис. 1.27. ВКФ прямоугольного и треугольного импульсовГрафик полученной ВКФ представлен на рис. 1.27.
О < т < Т,
-Т < т < О,
М>г
О < т < Т,
-Т < т < О,
М>г
Рис. 1.27. ВКФ прямоугольного и треугольного импульсов
Рис. 1.27. ВКФ прямоугольного и треугольного импульсов
Свойства ВКФ несколько отличаются от свойств КФ:
|В12(т)| < 7^1 ^2 - r^e Е\ и /Г — энергии сигналов s^Z) и x2(t).
В12(-т) = Д2)(т), то есть изменение знака т равносильно взаимной перестановке сигналов.
Значение ВКФ при т = 0 ничем не выделяется; максимум может быть расположен в любом месте оси т.
С ростом абсолютного значения т ВКФ сигналов с конечной энергией затухает:
lim В|2(т) = 0.
Если сигналы st(t) и s^^t) не содержат особенностей в виде дельта-функций, их ВКФ не может иметь разрывов (то есть обязана быть непрерывной функцией).
Если сигналы — напряжение, то размерность их ВКФ равна В2 • с.
Для периодических сигналов понятие ВКФ обычно не применяется, хотя оно может быть введено в случае, если сигналы s^t) и s2(0 имеют одинаковый период.
Связь между корреляционными функциями и спектрами сигналов
Поскольку как корреляционные функции, так и спектры являются интегральными преобразованиями анализируемых сигналов, логично предположить, что эти характеристики как-то связаны друг с другом. Для выявления этой связи под-
вергнем взаимную корреляционную функцию преобразованию Фурье, считая, что сигналы st(t) и s2(0 имеют спектральные функции ^(го) и 52(со):
J В12 (т)е--'“1 А = J s1(t)s2(t -x)e"j,“' dtdx = — go—go —go
= Js/r)6 ;шг ^s2(t - т)е№<,-пd(t - t)dt = S1(to')S2(to').
Полученный результат очень прост: ВКФ связана преобразованием Фурье с так называемым взаимным спектром сигналов. Взаимный спектр 512(ю)для сигналов sx(f) и s2(f) представляет собой произведение их спектральных функций, одна из которых подвергнута комплексному сопряжению:
5|2(со) = ^(со^^ю).(1.22)
Отсюда можно сделать очень важный вывод: если спектры сигналов не перекрываются, то их взаимный спектр равен нулю на всех частотах, а значит, равна нулю и их ВКФ при любых временных сдвигах т. Таким образом, сигналы с пепе- рекрывающимися спектрами являются некоррелированными.
Приняв sx(0 = 5-2(0 = s(0> получаем аналогичный результат для КФ:
ВДОе”^' dx = J 5(0з(1 - T)e"il"'dtdx =
= ^(Oe^’^sO-x^e^'^dO-x^dt =(1.23)
= 5(ю)5’(ю) = |5(ю)|2.
Итак, КФ сигнала связана преобразованием Фурье с квадратом модуля спектральной функции, или с энергетическим спектром сигнала.
Отсюда следует еще один важный факт: КФ сигнала не зависит от его фазового спектра. Следовательно, сигналы, амплитудные спектры которых одинаковы, а фазовые различаются, будут иметь одинаковую КФ. Еще одно следствие заключается в том, что по КФ нельзя восстановить исходный сигнал (опять же из- за утраты информации о фазе).
Энергетические расчеты в спектральной области
В разделе «Связь между корреляционными функциями и спектрами сигналов» мы показали, что ВКФ двух сигналов связана преобразованием Фурье с их взаимным спектром. Запишем эту связь в виде формулы обратного преобразования Фурье:
В12(О = — f5l2(co)eJunJco.
2 л
Теперь подставим в эту формулу значение т = 0 и раскроем выражения для ВКФ и взаимного спектра. Получится соотношение, именуемое теоремой Рэлея:
Г s^Osn^dt = — f 51(to)5,2(to)</to.
2л Л
Если теперь принять сигналы одинаковыми (s^t) = x2(t) = s(f)), получится соотношение, позволяющее вычислять энергию сигнала как во временной, так и в частотной области и называемое равенством Парсеваля:
Е = fs2(t)</t = — Г|5(w)|2 d&.(1.24)
2л Л
Последнее, на чем следует остановиться в этом разделе, — это вычисление средней мощности периодического сигнала по коэффициентам его ряда Фурье. Запишем периодический сигнал s(t) в виде ряда Фурье в комплексной форме (1.8):
5(0= ТДе Т 1.
А теперь применим к этому выражению формулу для расчета средней мощности за период:
^,' dt.
* 0* к =-х т = -«о
Промежуток 0...Т соответствует целому числу периодов стоящей под интегралом комплексной экспоненты, поэтому интеграл будет равен нулю при всех к * -т. При к = -т экспонента становится константой, и интеграл будет равен Т;
Результат оказывается очень простым: средняя мощность периодического сигнала равна сумме квадратов модулей коэффициентов его ряда Фурье.
Комплексная огибающая
В различных системах передачи информации часто применяются узкополосные сигналы, спектр которых сосредоточен в окрестности некоторой частоты и0. При анализе таких сигналов удобно пользоваться понятиями комплексной огибающей, амплитудной огибающей и фазовой функции сигнала. Эти понятия и будут рассмотрены в данном разделе.
Рассмотрим сигнал, представленный в виде колебаний с частотой го0, у которых меняются во времени как амплитуда, так и начальная фаза:
s(t) = A(t) cos(oV + ф(г)).(1.25)
Множитель А^ называется амплитудной огибающей, а начальная фаза <р(Г) — фазовой функцией сигнала s(t). Весь аргумент функции cos называют полной фазой сигнала:
V^) = toot + <p(t).
Сигнал (1.25) можно представить как вещественную часть комплексной функции, заменив косинус комплексной экспонентой:
5(0 = Не(Л(Г) exp(j(toOt + <р(г)))).
В комплексном выражении, стоящем под функцией Re, можно выделить два множителя: cxp(jco0t) представляет немодулироваппое несущее колебание и является быстро меняющимся, а Л(0 exp(y<p(Z)) меняется, как правило, значительно медленнее и содержит информацию об амплитудной огибающей и начальной фазе одновременно. Этот медленно меняющийся множитель и называется комплексной огибающей сигнала:
Л,„(О = Л(Оехр(;<р(О).
ЗАМЕЧАНИЕ
Комплексная огибающая, объединяя в себе информацию об амплитуде и фазе сигнала, является обобщением понятия комплексной амплитуды, широко используемого в тсорстнчс- ской элсктротехпике.
Рассмотрим теперь другую задачу — представим произвольный сигнал s(t) в форме (1.25), то есть выделим его амплитудную огибающую и фазовую функцию. Ясно, что способов сделать эго бесконечно много, поскольку мы хотим одной функции s(f) поставить в соответствие набор из двух функций Л(() и <p(t). Однако искомое представление должно удовлетворять нескольким очевидным ограничениям. В частности, для гармонического сигнала искомая процедура должна давать в результате постоянные амплитуду и начальную фазу. Кроме того, разумно потребовать, что фазовая функция не должна меняться при умножении сигнала па произвольный постоянный множитель. С учетом этих требований способ выделения амплитудной огибающей и фазовой функции из произвольного сигнала оказывается единственным: такое выделение производится с помощью преобразования Гильберта, речь о котором пойдет в следующем разделе.
ЗАМЕЧАНИЕ
Подробное и интересное обсуждение данной проблемы можно найти в [6]. Вообще, с этой замечательной книгой, рассказывающей о различных парадоксах и заблуждениях, связанных с теорией связи, должен познакомиться каждый, кто занимается обработкой сигналов, радиотехникой или телекоммуникациями.
Преобразование Гильберта
Для выделения амплитуды и фазы произвольный сигнал s(f) представляется как вещественная часть комплексного сигнала s„(f) (он называется аналитическим сигналом}:
5(t) = Re(sa(0).
Вещественная часть аналитического сигнала, естественно, должна совпадать с исходным сигналом s(t). Мнимая же часть s^t) называется сопряженным сигналом или квадратурным дополнением-.
sn(t) = s(Z) + js1(t).
(1.26)(1.26)Сопряженный сигнал получается из исходного с помощью -преобразования Гильберта. Вычисляется преобразование Гильберта следующим образом:
(1.26)
(1.26)
irJ - t'
Данный интеграл представляет собой свертку сигнала х(Г) и функции l/(nZ). Это означает, что преобразование Гильберта может быть выполнено линейной системой с постоянными параметрами (такие системы будут описаны в главе 2; забегая вперед, скажем, что система, осуществляющая преобразование Гильберта, является физически нереализуемой, поскольку ее импульсная характеристика имеет бесконечную протяженность в обоих направлениях временной оси). Из этого, в свою очередь, следует, что мы можем определить частотную характеристику преобразования Гильберта:
LLK^w) = [ — в*'1"'dt = О,Л KtK^w) = [ — в*'1"'dt = О,Л Ktсо = О,со = О,(1.27)(1.27)[-Л[-Л
L
L
K^w) = [ — в*'1"'dt = О,Л Kt
K^w) = [ — в*'1"'dt = О,Л Kt
со = О,
со = О,
(1.27)
(1.27)
[-Л
[-Л
Итак, АЧХ преобразования Гильберта равна единице всюду, кроме пулевой частоты, то есть преобразование Гильберта не меняет амплитудных соотношений в спектре сигнала, лишь удаляя из пего постоянную составляющую. Фазы всех спектральных составляющих в области положительных частот уменьшаются на 90°, в области отрицательных частот — увеличиваются на 90°.
Таким образом, устройство, осуществляющее преобразование Гильберта, должно представлять собой идеальный фазовращатель, вносящий на всех частотах фазовый сдвиг, равный 90°.
Очевидно, что обратное преобразование Гильберта должно вносить такой же фазовый сдвиг, но с обратным знаком, опять же при сохранении амплитудных соотношений в спектре преобразуемого сигнала. Математически это будет выглядеть так:
/С(ю) = ^—К±(со)/С(ю) = ^—К±(со)0,,Ь0,,Ьсо < о, re = о, со > 0.со < о, re = о, со > 0.
/С(ю) = ^—
К±(со)
/С(ю) = ^—
К±(со)
0,,Ь
0,,Ь
со < о, re = о, со > 0.
со < о, re = о, со > 0.
Сравнение этой формулы с коэффициентом передачи прямого преобразования Гильберта (1.27) показывает, что
KI (со) =-К1(со),
Следовательно, формулы обратного и прямого преобразований Гильберта различаются лишь знаком:
K^t-t*
Спектр аналитического сигнала
Ранее уже было сказано, что аналитический сигнал получается путем добавления к вещественному сигналу 5(0 мнимой части в виде его преобразования Гильберта:
sa(O = s(t) + js^t).
Теперь вычислим спектр аналитического сигнала, учитывая, что преобразование Гильберта является линейным и его коэффициент передачи определяется формулой (1.27):
w<0, re = 0, re > 0.w<0, re = 0, re > 0.О,
w<0, re = 0, re > 0.
w<0, re = 0, re > 0.
25(ro),25(ro),5а (го) = 5(со) + jSL(to) = 5(со)(1 + jk^w)) = 1 5(0),
25(ro),
25(ro),
Полученный результат довольно любопытен. В области положительных частот спектры вещественного сигнала и добавленной мнимой части (с учетом дополнительного 90-градуспого фазового сдвига, вносимого множителем у) складываются, давая удвоенный результат. В области же отрицательных частот эти спектры оказываются противофазными и взаимно уничтожаются. В результате спектр аналитического сигнала оказывается односторонним (рис. 1.28, а, б1).
Итак, чтобы для произвольного сигнала определить амплитудную огибающую и фазовую функцию, необходимо прежде всего сформировать аналитический сигнал, получив его мнимую часть с помощью преобразования Гильберта. Далее амплитудная огибающая находится как модуль аналитического сигнала:
А(О = | sa (0| = Vs2 (О + si(e).
Полная фаза представляет собой аргумент комплексного аналитического сигнала:
W^argiJO.
Чтобы получить начальную фазу сигнала, нужно выделить из полной фазы линейное слагаемое и,/. Для этого, в свою очередь, нужно знать значение центральной частоты соо. После этого можно будет получить начальную фазу и комплексную огибающую:
ф(О = Т(0-ю(Д,
А,„(О = А(Оем,).
Спектр комплексной огибающей представляет собой сдвинутый на соп спектр аналитического сигнала:
С„(ю) = ^(ш+®о)-
В общем случае спектр комплексной огибающей не является симметричным относительно нулевой частоты (рис. 1.28, в).
Выбор центральной частоты ю0, вообще говоря, является произвольным. Для узкополосных сигналов существует «разумное» значение го0, при использовании которого оказывается наиболее простой аналитическая запись комплексной огибающей. Например, для гармонического сигнала
s(0 = A cos(Qf + <р)
аналитический сигнал имеет вид
sa(f) = A exp(;Qt + 7ф).
Амплитудная огибающая равна А, полная фаза — Qt + ф. В общем случае, выбрав произвольное значение «средней» частоты со0, мы получаем начальную фазу
ф(0 - (Q - со0) Г + ф
и комплексную огибающую
Am(t) = А ехрО(П - го0)^ +/ф).
Рис. 1.28. Амплитудные спектры вещественного сигнала (а), соответствующего ему аналитического сигнала (б) и его комплексной огибающей (е)
Если выбранная «средняя» частота to0 будет совпадать с частотой гармонического сигнала (со0 = Q), комплексная огибающая станет константой:
Am(t) - А ехр (;’ф).
Метод замены исходных функций их комплексными огибающими для анализа прохождения сигналов через различные цепи называется методом низкочастотного эквивалента. При этом принципиально то, что все комплексные огибающие должны вычисляться относительно одной и той же центральной частоты со0, даже если ее значение для некоторых сигналов будет выглядеть «неестественным».
В целом же следует помнить, что понятие комплексной огибающей имеет смысл только при указании частоты со0, относительно которой эта комплексная огибающая вычислена.
Случайные сигналы
В отличие от детерминированных сигналов, форму которых мы знаем точно, мгновенные значения случайных сигналов заранее не известны и могут быть предсказаны лишь с некоторой вероятностью, меньшей единицы. Характеристики таких сигналов являются статистическими, то есть имеют вероятностный вид.
В радиотехнике существует два основных класса сигналов, нуждающихся в вероятностном описании. Во-первых, это шумы — хаотически изменяющиеся во времени электромагнитные колебания, возникающие в разнообразных физических системах из-за беспорядочного движения носителей заряда. Во-вторых, случайными являются все сигналы, несущие информацию, поэтому для описания закономерностей, присущих осмысленным сообщениям, также прибегают к вероятностным моделям.
Ансамбль реализаций
Математическая модель изменяющегося во времени случайного сигнала называется случайным процессом. По определению, случайный процесс X(t) — это функция особого вида, характеризующаяся тем, что значения, принимаемые ею в любой момент времени t, являются случайными величинами.
ЗАМЕЧАНИЕ
В технической литературе термины «случайный сигнал» и «случайный процесс» часто используются как синонимы.
До регистрации (до приема) случайный сигнал следует рассматривать именно как случайный процесс, представляющий собой совокупность (ансамбль) функций времени х,(1), подчиняющихся некоторой общей для них статистической закономерности. Одна из этих функций, ставшая полностью известной после приема сообщения, называется реализацией случайного процесса. Эта реализация является уже не случайной, а детерминированной функцией времени. На рис. 1.29 приведен пример нескольких реализаций случайного процесса.
Модели случайных процессов
Для анализа свойств и характеристик случайного процесса, а также различных его преобразований необходимо задать математическую модель случайного процесса. Такая модель может представлять собой описание возможных реализаций случайного процесса в сочетании с указанием относительной частоты их появления. Приведем несколько примеров моделей случайных процессов, задаваемых таким образом.
Рис. 1.29. Реализации случайного процессаРис. 1.29. Реализации случайного процесса
Рис. 1.29. Реализации случайного процесса
Рис. 1.29. Реализации случайного процесса
Гармонический сигнал со случайной начальной фазой
Во многих практических задачах используется модель случайного процесса, реализации которого представляют собой гармонические колебания с известными (детерминированными) амплитудой и частотой, но случайной начальной фазой. Таким образом, реализация рассматриваемого случайного процесса может быть записана как
.с(0 = A cos(to0t + ф),
где А — амплитуда (детерминированная), со0 — частота (детерминированная) и Ф — случайная начальная фаза, которая в большинстве практически интересных случаев может считаться равномерно распределенной на интервале О...2л, то есть имеющей следующую плотность вероятности:
11РФ(<Р) = ) 2л’РФ(<Р) = ) 2л’О < ф < 2л,О < ф < 2л,О,О,в остальных случаях.в остальных случаях.
1
1
РФ(<Р) = ) 2л’
РФ(<Р) = ) 2л’
О < ф < 2л,
О < ф < 2л,
О,
О,
в остальных случаях.
в остальных случаях.
Графики нескольких реализаций данного случайного процесса, представляющие собой синусоиды, смещенные друг относительно друга по временной осн, показаны на рис. 1.30.
Как видите, конкретный вид реализации процесса в данном случае определяется значением всего лишь одной случайной величины — начальной фазы.
ЗАМЕЧАНИЕ
Случайные процессы, конкретный вид реализации которых определяется значениями конечного числа параметров (случайных величии), иногда называют квазидетерминироваи- иыми случайными процессами.
Рис. 1.30. Реализации гармонического сигнала со случайной начальной фазой
Случайный телеграфный сигнал
Таким сигналом в [5] назван случайный процесс, реализации которого принимают значения +1 и -1, причем перепады уровня происходят в случайные моменты времени и число N перепадов уровня, происходящих за время т, является случайной величиной с дискретным распределением вероятности, описываемым законом Пуассона:
Р№г) = У^1ех\(1.28)
Здесь X — неотрицательный параметр, определяющий среднюю частоту возникновения перепадов уровня.
ЗАМЕЧАНИЕ
Напомним, что прописной буквой Р обозначается вероятность некоторого события, указываемого в скобках. В формуле (1.28) P(N, т) — это вероятность того, что за время т произойдет N перепадов уровня сигнала.
Скачки уровня происходят в случайные моменты времени tk, поэтому аналитически записать формулу для отдельной реализации данного случайного процесса оказывается весьма затруднительно, а изобразить ее график можно лишь условно (рис. 1.31).
Рис. 1.31. Реализация случайного телеграфного сигнала
В данном случае конкретная реализация задается бесконечным множеством случайных величин — моментов перепадов уровня Ц, а характеристики случайного процесса определяются статистическими свойствами этих случайных величин.
Итак, полное описание случайного процесса дает его ансамбль реализаций. Однако для решения практических задач часто достаточно более простых характери-
стик, выражающихся в виде числовых параметров и детерминированных функций. Об этом пойдет речь далее.
Вероятностные характеристики случайных процессов
Пусть X(t) — случайный процесс, заданный ансамблем реализаций (Xjft), x2(t),..., xk(t), ...}. Выбрав произвольный момент времени tY, зафиксируем значения, принимаемые всеми реализациями: {хД^), х2(^), ..., xk(tY), ...} (см. рис. 1.29). Совокупность этих значений образует одномерное сечение случайного процесса и представляет собой случайную величину X(ti). Напомним кратко основные характеристики случайных величин, отметив при этом, что для одномерных сечений случайных процессов они в общем случае зависят от выбранного момента времени tY.
Функциональные характеристики
Функция распределения вероятности (cumulative distribution function, CDF), обозначаемая как Р(х, И), равна вероятности того, что в момент времени Ц значение случайного процесса не превосходит х:
F(x, t,) = P(X(tY) <х\
F(x, tY) является неубывающей функцией, значения которой лежат в диапазоне О < F(x, И) < 1. Для предельных значений х выполняются следующие соотношения: F(-oo, ^) = 0 и F(cc, tY) = 1.
Вероятность попадания значения случайного процесса в интервал (а, 6] равна разности значений функции распределения на концах этого интервала:
Р(а < X(tY) < b) = F(b, t^ - F^a, ti).
Одномерная плотность вероятности (probability density function, PDF) обозначается p(x, tY) и представляет собой производную от функции распределения:
.. dF(x, t.)
р(М) = V ' •
dx
Произведение р(х, tY) dx равно вероятности попадания значения случайного процесса Х(Ч) в бесконечно малый интервал шириной dx в окрестности х;
p(x,tY )dx = PI х - — < X(tt) < x + — I,
откуда следует, что плотность вероятности является неотрицательной функцией: р(х, tY) > 0. Чтобы рассчитать вероятность попадания значения Х(П) в произвольный интервал [а, Ц, необходимо вычислить следующий интеграл:
h
Р(а < X(tY) < b) = ^ p(x,tt )dx.
Так как случайная величина обязательно принимает какое-нибудь значение, должно выполняться условие нормировки:
(1.29)(1.29)J р(х, t, )dx = Р(-оо < Х^Ц ) < со) = 1.
(1.29)
(1.29)
Зная плотность вероятности, можно рассчитать и функцию распределения:
(1.30)(1.30)ЛМ) = j p^x.t^dx.
(1.30)
(1.30)
Числовые характеристики
Знание одномерной плотности вероятности р(х, t^ позволяет произвести статистическое усреднение как самой величины X(tx\ так и любой функции от нее. Под статистическим усреднением (ensemble averaging) подразумевается усреднение по множеству (по ансамблю реализаций) в каком-либо сечении процесса, то есть в фиксированный момент времени.
Для практических приложений наибольшее значение имеют следующие параметры случайного процесса:
математическое ожидание (mean value), которое служит теоретической оценкой среднего взвешенного значения случайного процесса в момент времени t: m^t) = M^X(t^ =^xp(x,t')dx‘(1-31)
ЗАМЕЧАНИ E
Во многих практических задачах приходится вычислять математическое ожидание некоторой функции f от случайной величины х, имеющей плотность вероятности рХх). Такое вычисление выполняется ио следующей несложной формуле:
M{/(.v)}= j/CT^.Cr)^-.(1.32)
Формула для математического ожидания (1.31) является частным случаем (1.32) при /(.г) = .г.
дисперсия (variance), характеризующая среднюю мощность отклонений случайного процесса от его среднего значения mx^t\ называемых флуктуациями (fluctuation):
>, (О = М^Х^-тх (Г)]2} = М|х2(г)| - тхХ0 = jх2 p(x,t)dx -m-Xt); (1.33)
среднее квадратическое отклонение (standard deviation), представляющее собой квадратный корень из дисперсии и служащее амплитудной мерой разброса значений случайного процесса в момент времени t относительно математического ожидания:
о. (О = Ж(О = ^М^ХО^Л^ = V^W3^ '<1 34>
ЗАМЕЧАНИЕ
Дисперсия случайной величины X часто обозначается как с2.
Равномерное распределение
Одним из часто используемых на практике законов распределения случайных величин является равномерное распределение (uniform distribution). При этом плотность вероятности является константой на некотором интервале [а, 6] (рис. 1.32, слева). Величина этой константы, согласно условию нормировки (1.29), должна быть равна i/(b - а):
11PW = -PW = -Ь-а’Ь-а’а<х<Ь,а<х<Ь,О,О,х < а, х > Ь.х < а, х > Ь.Рис. 1.32. Плотность вероятности (слева) и функция распределения (справа) случайной величины с равномерным распределениемРис. 1.32. Плотность вероятности (слева) и функция распределения (справа) случайной величины с равномерным распределением
1
1
PW = -
PW = -
Ь-а’
Ь-а’
а<х<Ь,
а<х<Ь,
О,
О,
х < а, х > Ь.
х < а, х > Ь.
Рис. 1.32. Плотность вероятности (слева) и функция распределения (справа) случайной величины с равномерным распределением
Рис. 1.32. Плотность вероятности (слева) и функция распределения (справа) случайной величины с равномерным распределением
Fix') = -Fix') = -0, х - а Ь-а'1,0, х - а Ь-а'1,Функция распределения, согласно (1.30), на интервале [а, 6] линейно возрастает от 0 до 1 (см. рис. 1.32, справа):
Fix') = -
Fix') = -
0, х - а Ь-а'
1,
0, х - а Ь-а'
1,
х <а, а<х <Ь, х > Ь.
Математическое ожидание, как и предсказывает интуиция, равно середине интервала возможных значений случайной величины:
f 1 , а+Ь хах =.
Ь-а 2
3АМ ЕЧАНИЕ
Если функция плотности вероятности имеет симметричный вид, то значение математического ожидания всегда совпадает с центром симметрии.
Для расчета дисперсии необходимо сначала определить средний квадрат:
А3 -а3З(Ь-а)А3 -а3З(Ь-а)a2 + ab + Ь23a2 + ab + Ь23
А3 -а3
З(Ь-а)
А3 -а3
З(Ь-а)
a2 + ab + Ь2
3
a2 + ab + Ь2
3
Теперь можно рассчитать дисперсию согласно (1.33):
У _ а2 + ab + Ь2f а + bV _ (Ь- а)2
х 3 I 2 J 12 '
Итак, дисперсия равна одной двенадцатой квадрата ширины интервала. Среднее квадратическое значение, естественно, оказывается пропорциональным этой ширине:
Нормальное распределение
Нормальный (гауссов) закон распределения случайных величин (normal distribution, Gaussian distribution) очень удобен для анализа и часто встречается на практике, особенно он характерен для помех канала связи. Одномерная плотность вероятности нормальной случайной величины определяется выражением
pw=—(Г35)
ахл]2,к 2ох )
2
где тх и сх — соответственно математическое ожидание и дисперсия процесса. На рис. 1.33 приведен график плотности вероятности нормальной случайной величины, построенный согласно (1.35) при тх - 0 и ох - 1.
Рис. 1.33. Плотность вероятности случайной величины с нормальным распределениемРис. 1.33. Плотность вероятности случайной величины с нормальным распределением
Рис. 1.33. Плотность вероятности случайной величины с нормальным распределением
Рис. 1.33. Плотность вероятности случайной величины с нормальным распределением
Функция распределения для закона Гаусса, к сожалению, не выражается через элементарные функции. В отечественной литературе принято выражать ее через так называемый интеграл вероятности-.
Ф(х) = [-—ехр --»v2n IФ(х) = [-—ехр --»v2n I(■г')2(■г')2dx'.dx'.(1.36)(1.36)
Ф(х) = [-—ехр -
-»v2n I
Ф(х) = [-—ехр -
-»v2n I
(■г')2
(■г')2
dx'.
dx'.
(1.36)
(1.36)
Для нормального закона с математическим ожиданием тх и дисперсией ох функция распределения выражается через интеграл вероятности следующим об
разом:
J х -т, F(x) = Ф
В зарубежной литературе большее распространение получила так называемая функция ошибок (error function) erf:
(1.37)(1.37)erf(x) = -^ je ^dt.
(1.37)
(1.37)
Связь между функцией ошибок (1.37) и интегралом вероятности (1.36) выражается с помощью линейных преобразований аргументов функций и их результатов:
erf(x) = 2Ф(хТ2)-1,
1 Y
Ф(х) = - + -ег£ -= .
2
Функция распределения для нормального закона с математическим ожиданием тх и дисперсией ох выражается через функцию ошибок (1.37) следующим образом:
ЗАМЕЧАНИЕ
В MATLAB имеется функция erf, реализующая формулу (1.37). Есть также функция erfc, возвращающая значение 1 - erf(x), и обратная функция erfinv.
Непосредственно вычислять функциональные характеристики нормального закона распределения можно с помощью функций normpdf (плотность вероятности), normcdf (функция распределения) и norminv (обратная функция распределения), входящих в пакет Statistics:
у = normpdf(x. m. sigma): у = normcdf(x. m. sigma): x = norminv(y. m. sigma):
Здесь m — математическое ожидание, sigma — среднее квадратическое отклонение.
Широкое распространение нормального закона распределения в природе объясняется тем, что при суммировании достаточно большого числа равномощных статистически независимых случайных величин, имеющих произвольные плотности распределения вероятности, плотность распределения суммы стремится к нормальной. Это положение носит название центральной предельной теоремы. Весьма полезным для математического анализа свойством нормального распределения является то, что из некоррелированности гауссовых случайных величин следует их статистическая независимость (о разнице между этими понятиями см. далее в разделе «Корреляционные функции случайных процессов»). Одномерная плотность вероятности и связанные с ней числовые характеристики позволяют получить важную информацию о свойствах случайного процесса. Однако для решения многих задач таких сведений недостаточно, так как они дают вероятностное представление о случайном процессе X(t) только в отдельные моменты и ничего не говорят о том, как он изменяется во времени. Для описания его временных характеристик необходимо использовать корреляционную функцию или привлечь для этого спектральные характеристики случайного процесса. Упомянутые способы описания случайных процессов будут рассмотрены далее.
Корреляционные функции случайных процессов
Как отмечалось в разделе «Вероятностные характеристики случайных процессов», одномерной плотности вероятности недостаточно для описания поведения случайного процесса во времени. Гораздо больше сведений можно получить, располагая двумя сечениями случайного процесса в произвольные моменты времени tx и t2 (см. рис. 1.29). Совокупность этих двух сечений образует двумерную случайную величину (Х(Ч), Х(Г2)}, которая описывается двумерной плотностью вероятности р(хх, х2, tx, t2y Произведение р(хх, х2, tx, t2)dxxdx2 представляет собой вероятность того, что реализация случайного процесса X(t) в момент времени tx попадает в бесконечно малый интервал шириной dxx в окрестности Хр а в момент времени t2 — в бесконечно малый интервал шириной dx2 в окрестности х2:
p(xvx2,tx,t2)dxx dx2 = Р||Х(Г1)-х1| <-^, |X(G)-x2|
Естественным обобщением является и-мерное сечение случайного процесса, приводящее к и-мерной плотности вероятности р(хх, х2х,„ tx, t2t^. При и -» оо такая функция является исчерпывающей вероятностной характеристикой случайного процесса.
Описание свойств случайных процессов с помощью многомерных плотностей вероятности высокой размерности может быть весьма подробным, однако на этом пути часто встречаются серьезные математические трудности. К счастью, многие задачи, связанные с описанием случайных сигналов, удается решить на основе двумерной плотности вероятности.
В частности, задание двумерной плотности вероятности р(хх, х2, tx, t2) позволяет определить важную характеристику случайного процесса — его ковариационную функцию
Kx(tx,t2) = M^x(tx)x(t2%
Согласно этому определению, ковариационная функция случайного процесса X(t) представляет собой статистически усредненное произведение значений случайной функции X(t) в моменты времени tx и t2.
Для каждой реализации случайного процесса произведение х(Ч)х(Г2) является некоторым числом. Совокупность реализаций образует множество случайных чисел, распределение которых характеризуется двумерной плотностью вероятности р(хх, х2, tx, t2y Если эта плотность вероятности известна, операция усреднения по множеству осуществляется по формуле
Kr(t,,t2) = j ^xxx2p(xx,x2,tx,t2 )dxxdx2.
Часто при анализе случайных процессов основной интерес представляет их флуктуационная составляющая. В таких случаях применяется корреляционная функция, представляющая собой статистически усредненное произведение значений центрированной случайной функции X(t) - mv(t) в моменты времени tx и t2:
Rx<A Л) = M{[x(tx) - тл(tf)][x(t2) - тх(t2)]} =
= J J[^(tl)-mr(^)][x(t2)-mr(t2)]p(^1,x2,tl,t2)<Zx1</x2 =
= KxVMiVmA^m^t.^.
Корреляционная функция характеризует степень статистической связи тех значений случайного процесса, которые наблюдаются при t - tx и t = t2. При tx = t2 = t последнее выражение соответствует определению дисперсии случайного процесса X(t) (см. формулу (1.33)). Следовательно, при совмещении сечений функция корреляции равна дисперсии:
Rx(t,O = Kx(t,t)-mx(O = Dv(t).(1.38)
ЗАМЕЧАНИЕ
Так сложилось, что в иностранной литературе используется обратная терминология — Kx(tx, t>i) называется корреляционной (correlation), a RxUi, t^ ковариационной функцией (covariance). Во избежание недоразумений об этом следует помнить при работе с зарубежными источниками. Впрочем, при анализе центрированных (имеющих пулевое математическое ожидание) случайных процессов корреляционная и ковариационная функции совпадают.
В качестве примера рассчитаем корреляционную функцию гармонического сигнала со случайной равномерно распределенной начальной фазой (см. раздел «Модели случайных процессов» ранее в этой главе).
Можно легко убедиться, что данный случайный процесс является центрированным, то есть его математическое ожидание не зависит от времени и равно нулю:
тх<х) = /•г(ОРФ(ф)^Ф = J^cos(co0t + V)—</ф = 0.(1.39)
Поэтому ковариационная и корреляционная функции данного процесса совпадают и могут быть найдены следующим образом (поскольку реализации данного случайного процесса представляют собой функции, зависящие от одной случайной величины, для усреднения произведения нет необходимости прибегать к двумерной плотности вероятности — достаточно воспользоваться формулой (1.32), позволяющей произвести усреднение произвольной функции от случайной величины):
/?T(tl,t2)= Кг(^,^)= j^Gl )-^2)Р.р(ф)^Ф =
2л|
= [Xcos(co0tl + ф)Лсо$(со0Г2 +ф)—</ф =
о2л
2л । /:2) + 2ф)б/ф+ J-О2л । /:2) + 2ф)б/ф+ J-Оcos(co0(t1 -t2 ))</фcos(co0(t1 -t2 ))</ф
2л । /:2) + 2ф)б/ф+ J-
О
2л । /:2) + 2ф)б/ф+ J-
О
cos(co0(t1 -t2 ))</ф
cos(co0(t1 -t2 ))</ф
Здесь в первом слагаемом интегрирование производится по двум периодам функции cos, поэтому данный интеграл равен нулю. Во втором слагаемом подынте-
гральная функция не зависит от переменной интегрирования ф, так что результат интегрирования равен произведению подынтегрального выражения и длины промежутка интегрирования, равной 2л. Окончательно получаем
Д2
^(?1^2)=^(?1'Г2) = ^-С08(Юо(?1 "О))'(1-40)
Как видите, корреляционная функция данного случайного процесса гармонически зависит от расстояния между анализируемыми моментами времени. При совпадении моментов времени tx и t2 мы получаем величину дисперсии случайного процесса:
А2
(1.41)(1.41)Dx(t) = Rx(t,t) = ^-
(1.41)
(1.41)
Некоррелированность и статистическая независимость
Если совместно рассматривать две случайные величины ^ и Х2, между ними может существовать либо не существовать статистическая связь. Отсутствие такой связи означает, что плотность вероятности одной случайной величины не зависит от того, какое значение принимает другая случайная величина. Двумерная плотность вероятности при этом представляет собой произведение одномерных плотностей:
р (хь х2) - Pi(x0 р2(х2).
Это условие называется условием статистической независимости.
При наличии статистической связи между случайными величинами статистические свойства каждой из них зависят от значения, принимаемого другой случайной величиной. Эта связь может быть сильной или слабой, линейной или нелинейной. Мерой линейной статистической связи между случайными величинами является коэффициент корреляции-.
(1.42)(1.42)_ М^Х^-М^Х^М^Х^
(1.42)
(1.42)
Г12 ТЖЖЖУ
Можно показать, что |r12| < 1. Предельные значения ±1 достигаются, если реализации случайных величин жестко связаны линейным соотношением х2 - ахх + b, где а и b — некоторые константы. Знак коэффициента корреляции при этом совпадает со знаком множителя а.
Равенство коэффициента корреляции нулю свидетельствует об отсутствии линейной статистической связи между случайными величинами (при этом говорят об их некоррелированности). Как видно из (1.42), при этом математическое ожидание произведения случайных величин равно произведению их математических ожиданий:
М^ХхХ2) - М{Хх} М^.
Легко показать, что из статистической независимости следует некоррелированность случайных величин. Обратное утверждение в общем случае неверно — некоррелированные случайные величины могут быть зависимыми.
ЗАМЕЧАНИЕ
Классическим примером этого является пара случайных величин Х\ = cos ф и х2 = sin ф, где Ф — случайная величина, равномерно распределенная на интервале О...2л. Очевидно, чтох, и хг зависят друг от друга; однако их коэффициент корреляции оказывается равным нулю.
Стационарные и эргодические случайные процессы
В общем случае, как уже говорилось, вероятностные и корреляционные характеристики случайных процессов зависят от одного или нескольких моментов времени, в которые эти характеристики определяются. Однако существует класс случайных процессов, у которых зависимость характеристик от времени отсутствует. Кроме того, для некоторых случайных процессов не обязательно производить усреднение по ансамблю реализаций — можно ограничиться рассмотрением одной реализации и ее усреднением во времени.
Такие случайные процессы и будут рассматриваться в данном разделе.
Стационарные случайные процессы
Так принято называть случайные процессы, статистические характеристики которых одинаковы во всех временных сечениях.
Говорят, что случайный процесс строго стационарен (или стационарен в узком смысле), если его многомерная плотность вероятности р^Хх, х2, .... хп, tx, t2, .... tn) произвольной размерности и не изменяется при одновременном сдвиге всех временных сечений tx, t2, ..., tn вдоль оси времени на одинаковую величину т:
р^хх, х2,.... хп, tx, t2,..., tn) = р(хх, х2,..., хп, ti+т, t2+T,.... tn + т) при любом т.
Если же ограничить требования тем, чтобы от временного сдвига не зависели лишь одномерная и двумерная плотности вероятности, то такой случайный процесс будет стационарен в широком смысле. Понятно, что из стационарности в узком смысле следует стационарность в широком смысле, но не наоборот.
Для стационарного случайного процесса математическое ожидание и дисперсия не зависят от времени, а корреляционная функция зависит не от самих моментов времени, а только от интервала между ними т = t2 - tx:
Rx(tx, t2) = Rx(t2 - tx) = ДДт).
По этой причине при записи статистических параметров стационарного случайного процесса можно опускать обозначения фиксированных моментов времени: тх, Dx, Кх(т), Rx(t).
Легко убедиться, что корреляционная функция стационарного случайного процесса является четной:
Rx(-T) - Rxb).
Кроме того, абсолютные значения этой функции при любых т не превышают ее значения при т = 0 (напомним, что это значение равно дисперсии случайного процесса):
\RAt)\<Rx(0) = Dx.
Часто удобно использовать коэффициент корреляции (его также называют нормированной корреляционной функцией)
Для коэффициента корреляции выполняются соотношения rx(0) = 1, |гг(т)| < 1 И гх.(-т) = гДт).
Функции Дх(т) и гх(т) характеризуют связь (корреляцию) между значениями Х(Г), разделенными промежутком т. Чем медленнее убывают эти функции с ростом абсолютного значения т, тем больше промежуток, в течение которого наблюдается статистическая связь между мгновенными значениями случайного процесса, и тем медленнее, плавнее изменяются во времени его реализации.
Легко видеть, что гармонический случайный процесс со случайной начальной фазой (см. раздел «Модели случайных процессов» и вычисление характеристик этого процесса в разделе «Корреляционные функции случайных процессов») является стационарным в широком смысле. Действительно, зависящие от одномерной плотности вероятности математическое ожидание (1.39) и дисперсия (1.41) не зависят от времени, а корреляционная функция (1.40), зависящая от двумерной плотности вероятности, зависит лишь от интервала между рассматриваемыми моментами времени:
л2
Ях(т) = Кх(т) = —cos((o0t).(1.43)
Коэффициент корреляции такого случайного процесса равен
гЛ.(т) = -^— =cos(co0t).
ЗАМЕЧАНИЕ
Здесь следует отметить, что стационарным будет любой случайный процесс, реализации которого являются периодическими функциями, идентичными по форме и различающимися лишь «начальной фазой», то есть положением начала отсчета времени в пределах периода. При этом принципиальной является равномерность распределения начальной фразы в пределах периода. Действительно, пусть у гармонического процесса начальная фаза равномерно распределена в пределах половины окружности — па интервале 0...л. Математическое ожидание процесса в этом случае будет равно
тх^ = f x(t) р ф(ф)Др = f A cos(co0t + ф)-</ф = ..^^(^оО о
Результат вычислений показывает, что математическое ожидание процесса зависит от времени, следовательно, он не является стационарным.
Эргодические случайные процессы
Дальнейшее упрощение анализа случайных процессов достигается при использовании условия эргодичности процесса. Стационарный случайный процесс называется эргодическим (ergodic), если при определении любых его статиста-
ческих характеристик усреднение по множеству (ансамблю) реализаций эквивалентно усреднению по времени (time averaging) одной, теоретически бесконечно длинной, реализации.
Обозначив усреднение по времени угловыми скобками, можно записать следующие выражения, позволяющие вычислить важнейшие статистические характеристики эргодического случайного процесса по его единственной реализации х(_ф (еще раз обращаем внимание на то, что эргодический случайный процесс обязательно является и стационарным, но не наоборот):
1 7/2
Я = \[^О ~ тх ]2) = lim— jх1 (t)dt - m2
Дг(т) = ( [^(0 ~ mx K^- T) - mx ]) = (x(f)x(J; - t)} - m2 =
j r/2
= lim— jx(t)x(t-t) A-m2.
7->”-Г/2
Математическое ожидание эргодического случайного процесса равно постоянной составляющей любой его реализации, а дисперсия имеет наглядный физический смысл мощности флуктуационной составляющей.
Достаточным условием эргодичности случайного процесса, стационарного в широком смысле, является стремление к нулю его корреляционной функции с ростом временного сдвига т:
НтДЛ(т) = 0.(1.44)
При экспериментальном исследовании случайных процессов доступно, как правило, наблюдение одной реализации сигнала, а не всего ансамбля. Если изучаемый процесс является эргодическим, то его реализация достаточной длины является «типичным» представителем статистического ансамбля. Согласно приведенным выше формулам по этой единственной реализации можно определить математическое ожидание, дисперсию и корреляционную функцию эргодического случайного процесса. На практике интегрирование выполняется, естественно, не в бесконечных пределах, а на конечном интервале, длина которого должна быть тем больше, чем выше требования к точности результатов измерения.
В качестве примера проверим эргодичность гармонического процесса со случайной начальной фазой (стационарность такого процесса была проверена ранее). Его корреляционная функция (1.43) с ростом т не стремится к пулю, так что условие (1.44) не выполняется. Однако это лишь достаточное, но не необходимое условие, поэтому его невыполнение еще не означает неэргодичности процесса. Проверим эргодичность согласно определению, вычислив усредненные по времени параметры:
со л/ы°
lx^t^= — j Hcos(co0t + cp)c/t =0 = mr,
2л
/[x(0-mx]2) = — fA2 cos2(to0t + ф) Д = — = Dx,
х ' 2л
([х(0 -пгх][х(£ - т)-тх]^ = — J A2 cos(co0f + ф)соз(а>0(Г - т)+ ф)А = 2л
А2
= — С05(Ю0Т) = ЯЛ(Т).
ЗАМЕЧАНИЕ
Тот факт, что реализации рассматриваемого процесса являются периодическими функциями, позволяет упростить вычисления, заменив усреднение по бесконечному (в пределе) промежутку времени усреднением по одному периоду, равному в данном случае 2л/о>о.
Итак, параметры, вычисленные усреднением по времени, совпали с параметрами, полученными ранее путем статистического усреднения. Следовательно, гармонический случайный процесс со случайной начальной фазой является эргодическим.
ЗАМЕЧАНИЕ
Здесь также следует отметить, что любой случайный процесс, реализации которого являются периодическими функциями, идентичными по форме и различающимися лишь равномерно распределенной в пределах периода «начальной фазой», будет не только стационарным, но и эргодическим.
Спектральные характеристики случайных процессов
Каждая отдельно взятая реализация случайного процесса представляет собой детерминированную функцию, и к ней можно применить преобразование Фурье. При этом различные реализации будут, естественно, иметь различные спектры. Нас же интересуют статистически усредненные характеристики случайных процессов. Попытаемся найти среднее значение спектральной плотности случайного процесса (горизонтальной чертой здесь и далее обозначается операция статистического усреднения по ансамблю реализаций):
5х(со) = ^х^)е")ш[ dt = ^x(t)e imtdt = j"mx(t)e iMdt.
Как видите, усредненная спектральная плотность случайного процесса представляет собой спектр его детерминированной составляющей (математического ожидания). Для центрированных процессов туУ) = 0 и 5,.(со) = 0. Таким образом, усредненное значение спектральной плотности не несет никакой информации о флуктуационной, то есть собственно случайной, составляющей случайного процесса. Это говорит о том, что фазы спектральных составляющих в различных реализациях процесса случайны и независимы.
Можно, однако, рассмотреть спектральную плотность мощности случайного процесса, поскольку мощность не зависит от соотношения фаз спектральных составляющих.
Рассмотрим центрированный случайный процесс и выделим из его ансамбля какую-либо реализацию x(t\ ограничив ее длительность конечным интервалом времени [-7/2; 7/2]. Применив затем к этой реализации прямое преобразование Фурье, найдем ее спектральную плотность Хг(со). Энергию ЕГ рассматриваемого отрезка реализации согласно равенству Парсеваля (1.24) можно вычислить как
Г/2 1 . ,2
ЕТ = j x2^dt =—JXT(to) do.
Разделив эту энергию на Т, получим среднюю мощность Рт реализации на данном временном интервале:
При увеличении длительности промежутка времени Т энергия отрезка реализации неограниченно возрастает, а средняя мощность стремится к некоторому пределу. Совершив предельный переход Г -> оо, получим
Ло = ^- J\V(cd)cZcd,Ло = ^- J\V(cd)cZcd,
Ло = ^- J\V(cd)cZcd,
Ло = ^- J\V(cd)cZcd,
где функция
i • I2
(1.45)(1.45)ХДщ)
(1.45)
(1.45)
W(co) = lim-—
представляет собой спектральную плотность средней мощности рассматриваемой реализации.
ЗАМЕЧАНИЕ
Часто говорят «спектральная плотность мощности» или «спектр мощности». Английский термин — power spectral density, PSD.
В общем случае спектральную плотность мощности W(co) необходимо усреднить по множеству реализаций. Однако, если ограничиться рассмотрением эргодических процессов, можно считать, что найденная по одной реализации (то есть путем усреднения по времени) функция W(co) характеризует весь процесс в целом.
Так как мы рассматриваем центрированный эргодический случайный процесс, средняя мощность любой его реализации равна дисперсии процесса. Таким образом,
(1.46)(1.46)Dx = 1 ]w(m)d(o.
(1.46)
(1.46)
W(co) — вещественная функция, она не содержит информации о фазах спектральных составляющих и не позволяет восстановить отдельные реализации случайного процесса. Кроме того, из определения спектральной плотности (1.45) очевидно, что W(co) является неотрицательной и четной функцией частоты.
3АМЕЧАНИЕ
Здесь не приводится примеров расчета спектра случайного процесса согласно приведенному определению, поскольку такого рода расчет редко необходим на практике. Как правило, вычисление спектра случайного процесса производится на основе его корреляционной функции с помощью теоремы Винера—Хинчина, речь о которой пойдет в следующем разделе.
Теорема Винера—Хинчина
Как распределение спектральной плотности мощности, так и вид корреляционной функции связаны со скоростью изменения случайного процесса во времени. Найдем связь между этими двумя характеристиками.
Как известно, корреляционная функция детерминированного сигнала связана преобразованием Фурье с его энергетическим спектром. Применим это свойство к отрезку реализации случайного процесса длительностью Т:
J х(Г)х(Г-т)А = —||Л’г(со)| e^'t/co.
-Г/2^Л.^
Разделим обе части этого равенства на Г и устремим Т к бесконечности:
। ■ I2
7/21 ”Ит(“)
lim — f x(t')x(t - i)dt = —f lim-e]Wda.(1-47)
лT
Если считать рассматриваемый процесс эргодическим, то в левой части последнего равенства стоит корреляционная функция процесса, полученная путем усреднения по времени. В правой части под интегралом содержится выражение (1.45) для спектральной плотности мощности случайного процесса. С учетом этого
R^ = y ]w{a)e^da.(1.48)
ЗАМЕЧАНИЕ
В случае неэргодического процесса к обеим частям равенства (1.47) необходимо дополнительно применить усреднение по ансамблю реализаций, что приведет к тому же самому результату.
Таким образом, корреляционная функция случайного процесса и его спектральная плотность мощности связаны друг с другом преобразованием Фурье. Это соотношение носит название теоремы Винера—Хинчина.
Так как и Д(т), и W(w) являются четными вещественными функциями, можно отказаться от комплексной формы записи преобразования Фурье и перейти к полубесконечным пределам интегрирования:
Д(т) = — JW(co)cos(cot)</co,
1У(со) = 2р(т)cos(cot)</t. о
Очень часто используемая модель случайного процесса оказывается такова, что воспользоваться непосредственно определением (1.45) для расчета спектральной плотности мощности не представляется возможным. Если при этом удается вычислить корреляционную функцию, получить спектральную информацию позволяет теорема Винера—Хинчина.
В качестве примера рассмотрим случайный телеграфный сигнал (см. раздел «Модели случайных процессов»). Поскольку скачки уровня происходят в случайные моменты времени, для данного случайного процесса затруднительно даже изобразить график отдельной реализации, не говоря уже о расчете спектра ее ограниченного во времени фрагмента.
Однако рассчитать корреляционную функцию для данного процесса оказывается совсем несложно. Действительно, произведение значений случайного процесса, разнесенных во времени на т, может быть равно +1 (если эти значения имеют одинаковый знак) или -1 (если знаки противоположны). Но совпадение знаков означает, что за интервал т произошло четное количество перепадов уровня, а несовпадение знаков соответствует нечетному количеству перепадов. Итак, чтобы найти вероятности для двух возможных значений произведения х^ x(t - т), нужно просуммировать значения, даваемые формулой (1.28) отдельно для четных и нечетных N;
PWW -Т) = 1) = £ Р(2£,| тI ) = £е-^ = 4=04=0 \^У-
22 2
PWW - т) = -1) = £ Р(2£ + 1,1 т|) = £= t=ot-o + 1)!
Полученные результаты позволяют рассчитать среднее значение произведения x(t) x(t - т):
Итак, корреляционная функция данного случайного процесса экспоненциально затухает с ростом абсолютного значения т. Теперь с помощью теоремы Винера—Хинчина можно найти спектральную плотность мощности:
^(со) = JRA^dx = Jе’2^1 e^dx = -^Ц + to
Интервал корреляции
Случайные процессы, встречающиеся в задачах обработки сигналов и изучаемые в радиотехнике, часто обладают следующим свойством: их функция корреляции стремится к нулю с увеличением временного сдвига т (напомним, что это является достаточным условием эргодичности процесса). Чем быстрее убывает функция RA), тем слабее оказывается статистическая связь между мгновенными значениями случайного сигнала в два несовпадающих момента времени.
Числовой характеристикой, служащей для оценки «скорости изменения» реализаций случайного процесса, является интервал корреляции тк, определяемый как
о
Если известна информация о поведении какой-либо реализации случайного процесса «в прошлом», то возможен вероятностный прогноз случайного процесса на время порядка тк.
Эффективная ширина спектра
Пусть исследуемый случайный процесс характеризуется спектром плотности мощности W(co), имеющим максимальное значение Wmax. Заменим мысленно данный случайный процесс другим, у которого спектральная плотность мощности постоянна и равна Wmax в пределах некоторой полосы частот, выбираемой из условия равенства дисперсий (то есть средних мощностей) обоих процессов. Ширина этой полосы частот называется эффективной шириной спектра случайного процесса:
WmaxA^I, = fM^M
Д®эф fW(“)^-
"max
Эффективную ширину спектра случайного процесса можно определить и другими способами, например исходя из условия уменьшения значений спектра мощности на границе этого частотного интервала до уровня 0,1 Wmax. В любом случае величины тк и Дсоэф связаны известным из свойств преобразования Фурье соотношением неопределенности
Де)Э(|, тк — 2 л.
Для иллюстрации этого соотношения на рис. 1.34 в центре приведены примеры реализаций двух случайных процессов, слева — корреляционные функции этих процессов, а справа — их спектры плотности средней мощности.
Рис. 1.34. Взаимосвязь между видом реализаций случайных процессов (слева), их корреляционными функции (в центре) и спектрами (справа)
Белый шум
В радиотехнике белым шумом (white noise) называют стационарный случайный процесс, спектральная плотность мощности которого постоянна на всех частотах:
W(co) - Wo - const.
Согласно теореме Винера—Хинчина, корреляционная функция белого шума представляет собой дельта-функцию:
щ 00
fi(r) = -^Je^co = W08(T),
то есть равна нулю всюду, кроме точки т - 0. Дисперсия белого шума бесконечно велика.
В несовпадающие моменты времени значения белого шума некоррелированы — как бы ни был мал интервал т, сигнал за это время может измениться на любую величину.
Белый шум является абстрактной математической моделью и физически существовать не может. Это объясняется прежде всего бесконечностью его дисперсии (то есть средней мощности). Однако в тех случаях, когда полоса пропускания исследуемой системы существенно уже эффективной ширины спектра шума, который на нее воздействует, можно для упрощения анализа приближенно заменить реальный случайный процесс белым шумом.
ЗАМЕЧАНИЕ
Отметим еще раз, что вероятностные и корреляционные (или спектральные) характеристики случайного процесса — это совершенно разные и не связанные между собой функции. Так, например, нормальный случайный процесс может иметь разнообразную спектральную плотность мощности, а белый шум — произвольную функцию распределения. Единственная «точка соприкосновения» вероятностных и корреляционных характеристик — это возможность расчета дисперсии случайного процесса как на основе одномерной плотности вероятности (формула (1.33)), так и исходя из корреляционной функции (формула (1.38)).
Узкополосный случайный процесс
Важную роль в радиотехнике играет особый класс случайных процессов, спектр которых сосредоточен в относительно узкой полосе вблизи некоторой частоты и0. Рассмотрим статистические свойства таких процессов.
Итак, пусть х^ — случайный процесс, спектр плотности мощности которого ^(со) имеет узкополосный характер (рис. 1.35). Будем также считать этот случайный процесс стационарным, нормальным и центрированным.
Рис. 1.35. Спектральная плотность мощности узкополосного случайного процесса
Согласно теореме Винера—Хинчина (см. формулу (1.48)), корреляционная функция и спектральная плотность мощности случайного процесса связаны друг с другом преобразованием Фурье. Узкополосный характер спектра Wr(co) говорит о том, что корреляционная функция RAT) имеет вид узкополосного радиосигнала:
Д.(т) - 7?о(т) cos [со0т + Фо(т)],
где Я0(т) и ф0(т) — медленно (по сравнению с cos (со0т)) меняющиеся функции. Узкополосный спектр и осциллирующий характер корреляционной функции означают, что отдельные реализации узкополосного случайного процесса представляют собой квазигармонические колебания;
x(t) - A(t) cos [ио^ + ф(0],
у которых как огибающая А(С), так и начальная фаза ф(Г) являются случайными функциями, медленно (по сравнению с cos (wot)) изменяющимися во времени.
Для того чтобы определить статистические параметры огибающей и начальной фазы, рассмотрим комплексный аналитический сигнал Z(t), соответствующий вещественному случайному процессу х(0 (см. раздел «Комплексная огибающая» ранее в этой главе):
Z^ = x(t) + jxAO,
где xAt') — сопряженный случайный процесс, реализации которого связаны с реализациями процесса х(Г) преобразованием Гильберта (см. ранее раздел «Преобразование Гильберта»):
хАО = -(1.49)
В том же разделе было показано, что с помощью сопряженного сигнала можно определить мгновенные значения огибающей и полной фазы узкополосного сигнала:
A(t) = |Z(t)| = Т^Чо+^То-
„(O-arg^oJ^*8^0^01'т>-°'
[arctg [x(t)/x(t)]+л, x(£)<0.
Рассмотрим статистические свойства сопряженного процесса. Во-первых, определим его математическое ожидание, применив усреднение к формуле (1.49) и затем поменяв усреднение и интегрирование местами:
Л-t' Л A t-t'
Результат равен нулю, так как процесс x(t) является центрированным.
Далее, поскольку процесс х^ нормальный, а преобразование Гильберта является линейным интегральным преобразованием, то нормальным будет и сопряженный процесс х±(0.
Из свойств преобразования Гильберта (см. ранее раздел «Преобразование Гильберта», формула (1.27)) следует, что спектры конкретных реализаций процессов x(t) и x^t) связаны следующим образом:
\1(ю) =\1(ю) =-;5т(со), и>0, О, со = О, jSx (со), со < О,
\1(ю) =
\1(ю) =
откуда видно, что энергетические спектры реализаций процессов х(0 и x^t) совпадают, а следовательно, совпадают и спектральные плотности мощности этих процессов: W^(co) = U^.(co). Корреляционные функции связаны со спектрами плотности мощности обратным преобразованием Фурье, поэтому они тоже равны: Rx (т) = Дд (т).
Нам осталось выяснить, имеется ли статистическая связь между процессами x(t) и x^t). Ограничимся при этом расчетом корреляции между ними в совпадающие моменты времени, то есть вычислим R (РУ
RXX1 (0) = M^tyx^ =х(О- J Ц1J ^W^ А
Далее, как и ранее, внесем операцию статистического усреднения под знак интеграла, а затем используем замену переменной т - t - t':
R„ <0). 1 г. 1 j «луп » _ .1 j w dT . а
*t-t*t-t'лД, т
Результат интегрирования равен нулю, так как Дд(т) является четной функцией, а все подынтегральное выражение, следовательно, — нечетной. Таким образом, процессы x(t) и хДУ) в совпадающие моменты времени некоррелированы. Поскольку они, кроме того, являются нормальными, то из некоррелированности следует статистическая независимость.
Огибающая и полная фаза узкополосного случайного процесса
Мгновенное значение комплексного случайного процесса Z(t) можно графически изобразить в виде вектора на комплексной плоскости (рис. 1.36). Проекции этого вектора на оси Re и Im равны мгновенным значениям процессов х(г) и х±(Г) соответственно. Эти мгновенные значения статистически независимы и
имеют нормальные распределения с нулевым средним и одинаковыми дисперсиями (равенство дисперсий следует из равенства корреляционных функций). Поэтому совместная плотность вероятности процессов x(t) и x±(t) равна произведению их одномерных плотностей вероятности, каждая из которых имеет вид (1.35):
PxxL (^Ч ) = Рх WPxx (^1) =PxxL (^Ч ) = Рх WPxx (^1) =(1.50)(1.50)Рис. 1.36. Комплексный случайный процесс в виде вектора на комплексной плоскостиРис. 1.36. Комплексный случайный процесс в виде вектора на комплексной плоскости
PxxL (^Ч ) = Рх WPxx (^1) =
PxxL (^Ч ) = Рх WPxx (^1) =
(1.50)
(1.50)
Рис. 1.36. Комплексный случайный процесс в виде вектора на комплексной плоскости
Рис. 1.36. Комплексный случайный процесс в виде вектора на комплексной плоскости
Для определения статистических свойств огибающей и фазы необходимо перейти в выражении (1.50) от декартовой (х, х±) к полярной системе координат (А, <р) (см. рис. 1.36) и определить совместную плотность вероятности Ра^А, ф). Связь между этими двумя системами координат выражается следующими формулами:
х = Л cos ф,
Хх = Л5Шф.
Кроме того, вероятность попадания в бесконечно малую область в окрестности каждой точки комплексной плоскости при смене системы координат должна, очевидно, остаться неизменной. Площадь такой бесконечно малой области в декартовых координатах выражается как dxdxL, а в полярных — как A dA dtp (рис. 1.37). Таким образом, получаем
рхДх, x^dx dxL = pxri(Xcos ф, Лзтф)Л dAdtp = /?Лф(А tp^dAdtp.
Отсюда видно, что искомая плотность вероятности выражается как
РдМ Ф) = Ар^ (A cos ф, Лзтф) = -—-РдМ Ф) = Ар^ (A cos ф, Лзтф) = -—-( А2 ) ехР -т-у •( А2 ) ехР -т-у •(1.51)(1.51)
РдМ Ф) = Ар^ (A cos ф, Лзтф) = -—-
РдМ Ф) = Ар^ (A cos ф, Лзтф) = -—-
( А2 ) ехР -т-у •
( А2 ) ехР -т-у •
(1.51)
(1.51)
Чтобы найти одномерные плотности вероятности для огибающей и фазы, нужно проинтегрировать двумерную плотность (1.51) по «лишним» координатам:
Рис. 1.37. Переход от декартовой системы координат к полярной
Ра(а) = ^Ра^А^)^, ■ о
рЛ^ЦраМ^^А- о
Так как двумерная плотность (1.51) не зависит от фазы ф, плотность вероятности амплитуды рассчитывается совершенно элементарно:
,.х 2? А ( А2 V 2кА ( А2 А А ( А2 А ..
Ра{А)= J—уехр -— ^ = —ехр -— = —ехр -— .(1.52)
о 2лог 2ov ) 2ках ( 2од. J ах 2од. )
Целесообразно перейти к безразмерной переменной с = А/ах, относительно которой
p(z) = zexp(-£72).(1.53)
Плотность вероятности, описывающаяся законом (1.52) или (1.53), носит название закона Рэлея (Rayleigh). График этого распределения, соответствующий формуле (1.53), приведен на рис. 1.38. Из графика видно, что наиболее вероятны некоторые средние (порядка ах) значения огибающей. В то же время маловероятно, чтобы огибающая принимала значения как близкие к нулю, так и значительно превосходящие среднеквадратический уровень оЛ узкополосного процесса.
Рис. 1.38. Плотность вероятности огибающей узкополосного случайного процесса (закон Рэлея)
ЗАМЕЧАНИЕ
Для работы с законом распределения Рэлея в статистическом пакете расширения MATLAB (Statistics Toolbox) имеются следующие функции: raylrnd (генерация случайных чисел, распределенных по закону Рэлея), raylpdf (расчет плотности вероятности), raylcdf (расчет функции распределения), raylinv (расчет обратной функции распределения) и raylstat (расчет математического ожидания и дисперсии).
Формула (1.52) позволяет известным способом (см. раздел «Вероятностные характеристики случайных процессов») вычислить среднее значение и дисперсию огибающей:
tM=j —ехр -—
О х \ ~ v
Чтобы найти плотность вероятности фазы, необходимо проинтегрировать выражение (1.51) по Л:
(1.54)
то есть фаза имеет равномерное распределение на интервале [0, 2л]. Физически это означает отсутствие какого-либо преимущественного значения полной фазы у отдельных реализаций узкополосного случайного процесса.
Из (1.51), (1.52) и (1.54) видно, что
РлФ(Аф) = Ра^р^,
следовательно, амплитуда и полная фаза узкополосного случайного процесса в один и тот же момент времени являются статистически независимыми.
Узкополосный случайный процесс при наличии детерминированной составляющей
Рассмотрим теперь ситуацию, когда к узкополосному шуму добавлен узкополосный детерминированный сигнал. Комплексный случайный процесс в данном случае будет иметь следующий вид:
Z(t) = s(t) + js^t) + x(t) + jx^t).
Изображение мгновенного значения Z(0 на комплексной плоскости будет отличаться от рис. 1.36 наличием детерминированного вектора s(t) (рис. 1.39).
Совместная плотность вероятности вещественной и мнимой частей этого комплексного процесса будет отличаться от (1.50) наличием смещений для х и х±, равных s(t) и sv(t) соответственно:
Рхх1 (X>XJ = Px WPx^ ^ ) =
12лп^12лп^expexp2g^2g^Рис. 1.39. Комплексный случайный процесс в виде вектора на комплексной плоскости при наличии детерминированной составляющейРис. 1.39. Комплексный случайный процесс в виде вектора на комплексной плоскости при наличии детерминированной составляющейПереход от декартовой системы координат к полярной, аналогичный рассмотренному ранее (см. (1.51) и рис. 1.37), дает следующее:
1
2лп^
1
2лп^
exp
exp
2g^
2g^
Рис. 1.39. Комплексный случайный процесс в виде вектора на комплексной плоскости при наличии детерминированной составляющей
Рис. 1.39. Комплексный случайный процесс в виде вектора на комплексной плоскости при наличии детерминированной составляющей
РЛ1р(Д ср) = Apxi (Л cos ср, Л sin ср) =
(Лcos ф —s(t))2 + (Hsin ср-.^(0)(Лcos ф —s(t))2 + (Hsin ср-.^(0)А
(Лcos ф —s(t))2 + (Hsin ср-.^(0)
(Лcos ф —s(t))2 + (Hsin ср-.^(0)
^-уехР " 2лаг
2ст22ст2Рис. 1.40. Плотность вероятности огибающей узкополосного случайного процесса при наличии детерминированной составляющей (закон Рэлея—Райса)Рис. 1.40. Плотность вероятности огибающей узкополосного случайного процесса при наличии детерминированной составляющей (закон Рэлея—Райса)Интегрирование этой двумерной плотности по фазе ср дает одномерную плотность вероятности для амплитуды данного случайного процесса (промежуточные выкладки опущены):
2ст2
2ст2
Рис. 1.40. Плотность вероятности огибающей узкополосного случайного процесса при наличии детерминированной составляющей (закон Рэлея—Райса)
Рис. 1.40. Плотность вероятности огибающей узкополосного случайного процесса при наличии детерминированной составляющей (закон Рэлея—Райса)
2лА ( Л2 + S'2(A S I
Ра И) = J РаМ ср)^ср = 4 ехр -—^ N(L55)
О^х \х /\ ^х /
гДе Sm =7$2(0+5±(О — амплитудная огибающая детерминированного сигнала в данный момент времени, /0 — модифицированная функция Бесселя первого
рода нулевого порядка. Плотность вероятности (1.55) носит название закона распределения Рэлея—Райса. На рис. 1.40 показаны графики данной плотности вероятности, соответствующие разным отношениям сигнал/шум, то есть разным значениям Sm/ax. При 5т = 0 из (1.55) получается плотность вероятности, соответствующая закону Рэлея (1.53). При 5т/сх » 1, как видно из графиков, распределение огибающей приближается к нормальному закону.
ЗАМЕЧАНИЕ
Для расчета плотности вероятности закона Рэлея—Райса с помощью MATLAB придется непосредственно воспользоваться формулой (1.55), поскольку пакет расширения Statistics не содержит специальных средств для этого. Функция распределения закона Рэлея- Райса выражается через так называемую Q-функцию Маркума. Для ее расчета в пакете расширения Communications имеется функция marcumq.
ГЛАВА 2 Аналоговые системы
Данная глава, так же как и предыдущая, посвящена не цифровой, а аналоговой обработке сигналов. Ее цель — дать читателю представление о характеристиках и способах описания аналоговых систем. Понимание этих вопросов необходимо для более глубокого восприятия теории дискретных систем, поскольку многие методы анализа аналоговых и дискретных систем находятся в тесном родстве. Кроме того, в основе ряда методов проектирования дискретных фильтров лежит использование аналоговых прототипов, поэтому квалифицированное применение этих методов также требует знакомства с теорией аналоговых систем.
Итак, данная глава носит обзорный характер, чем и объясняются сжатое изложение и отсутствие конкретных примеров анализа прохождения сигналов через аналоговые системы.
ЗАМЕЧАНИЕ
Положения, приводимые в данной главе, в литературе часто называют теорией линейных цепей с постоянными параметрами (см., например, [1, 2]). В данной книге используется термин «система», чтобы подчеркнуть высокоуровневый характер рассмотрения — система описывается только своими числовыми и функциональными характеристиками, без привлечения конкретных принципиальных схем.
Классификация систем
Системы, используемые для преобразования сигналов, имеют самые разнообразные физические характеристики и могут классифицироваться по различным признакам.
Важнейшим классификационным признаком является линейность или нелинейность системы. Линейными называются системы, для которых выполняется принцип суперпозиции: реакция на сумму сигналов равна сумме реакций на эти сигналы, поданные на вход по отдельности. Системы, для которых принцип суперпозиции не выполняется, называются нелинейными.
Следующим критерием классификации систем является постоянство или непостоянство их характеристик во времени. Если произвольная задержка подаваемого на вход сигнала приводит лишь к такой же задержке выходного сигнала, не меняя его формы, система называется стационарной, или системой с постоянными параметрами. В противном случае система называется нестационарной, параметрической или системой с переменными параметрами.
Два указанных способа классификации делят системы на четыре класса. В данной книге речь пойдет только о линейных стационарных системах.
Характеристики линейных систем
Для рассматриваемых в этой главе линейных систем с постоянными параметрами справедливы принципы суперпозиции и стационарности. Это сильно упрощает анализ прохождения сигналов через такие системы, позволяя использовать для этого различные характеристики, речь о которых пойдет в данном разделе.
Импульсная характеристика
Линейность и стационарность позволяют легко найти реакцию системы на любой входной сигнал, зная всего одну функцию — реакцию системы на поданную на вход дельта-функцию. Эта реакция называется импульсной характеристикой системы и обозначается /г(1).
Любой сигнал может быть представлен в виде свертки самого себя с дельтафункцией (см. фильтрующее свойство дельта-функции (1.1) в разделе «Классификация сигналов» главы 1):
5„х(0 = P,«(^')3(t-t')^'-
Линейная система преобразует относительно переменной t все функции, входящие в это выражение. Входной сигнал sBX(i) при этом превращается в выходной сигнал х,1ЫХ(1), а дельта-функция 8(t - С ) — в импульсную характеристику h (1 -1'). Функция 51М (1') от 1 не зависит и поэтому остается без изменений. В результате получается формула, показывающая, что выходной сигнал линейной системы с постоянными параметрами равен свертке выходного сигнала и импульсной характеристики системы:
s^VV^'^'t^dt'.(2.1)
ЗАМЕЧАНИЕ
Если входной и выходной сигналы системы имеют одинаковую размерность, то импульсная характеристика, как и дельта-функция времени, имеет размерность частоты.
Формирование выходного сигнала можно пояснить следующим образом. Бесконечно малый «кусочек» входного сигнала s„x (1') шириной dt' порождает на выхо-
де отклик, представляющий собой импульсную характеристику, умноженную на s^t'^dt' и задержанную по времени на t', то есть silx(t')hU-t')dt' (рис. 2.1). Чтобы получить значение выходного сигнала в момент времени t, нужно сложить вклады от всех этих бесконечно малых «кусочков», то есть выполнить интегрирование по t\ что и дает приведенную выше формулу свертки (2.1)
Sbx^OH (t - f
t t'
Рис. 2.1. Формирование выходной реакции цепи
Переходная характеристика
Переходной характеристикой называют реакцию системы на поданную на вход функцию единичного скачка. Обозначается переходная характеристика как g(t\ Поскольку дельта-функция — это производная от единичного скачка, импульсная и переходная характеристики связаны друг с другом операциями дифференцирования и интегрирования:
dt
5(0 = \h(t')dt'.
Условие физической реализуемости
Любая физически реализуемая система обладает свойством причинности — выходная реакция не может возникнуть раньше входного сигала. Отсюда следует, что для физически реализуемой системы импульсная и переходная характеристики должны быть равны нулю при t < 0.
ЗАМЕЧАНИЕ
Под физической реализуемостью здесь понимается только выполнение свойства причинности, а не возможность создать систему в каком-нибудь конкретном виде. Дополнительные требования, которым должны удовлетворять характеристики систем, реализуемых в виде цепей с сосредоточенными параметрами, будут рассмотрены в этой главе далее, в разделе «Способы описания линейных систем».
Комплексный коэффициент передачи
Выходной сигнал линейной системы, как было показано выше, представляет собой свертку входного сигнала и импульсной характеристики. Преобразование Фурье от свертки дает произведение спектров сворачиваемых сигналов, так что
в частотной области прохождение сигнала через линейную систему описывается очень просто:
Здесь К(м) — преобразование Фурье импульсной характеристики системы:
Эта функция называется комплексным коэффициентом передачи системы, а ее модуль и фаза — соответственно амплитудно-частотной (АЧХ) и фазочастотной (ФЧХ) характеристиками системы.
Значение К(ы) показывает, как изменяется при прохождении через систему комплексная амплитуда синусоиды с частотой со. АЧХ показывает, во сколько раз изменится амплитуда синусоиды, а ФЧХ — каков будет полученный ею фазовый сдвиг.
Коэффициент передачи по мощности
Мощность гармонического сигнала пропорциональна квадрату его амплитуды и не зависит от его фазы. Поэтому коэффициент передачи по мощности равен квадрату модуля комплексного коэффициента передачи, то есть квадрату АЧХ:
Хм„,Дсо) = Х(со)ХЧсо)=|^
Фазовая и групповая задержка
При преобразовании сигнала линейной системой различают два вида задержки. Фазовая задержка (phase delay) на частоте со — это задержка гармонического колебания с частотой со, проходящего через систему. Значение фазовой задержки равно фазовому сдвигу, вносимому системой, деленному на частоту гармонического колебания, с обратным знаком:
Тф(со) = -фК(0))/С0.
Групповая задержка (group delay) на частоте со — это задержка огибающей узкополосного сигнала со средней частотой со. Групповая задержка равна производной от ФЧХ системы с обратным знаком:
тгр = -dcpK(co)/dco.(2.2)
Пример, поясняющий разницу между фазовой и групповой задержкой, будет приведен применительно к дискретным системам (см. далее раздел «Расчет групповой задержки дискретной системы» главы 4).
Взаимный спектр выходного и входного сигналов
Взаимный спектр выходного и входного сигналов линейной системы легко найти, исходя из определения взаимного спектра (1.22) (см. раздел «Связь между корреляционными функциями и спектрами сигналов» главы 1):
5вых_„х (ю) = 5„ь.х (®) ^(®) = 5ВХ (Ю)К(Ю)5;Х (со) = 15ВХ (со) |2 К(со).(2.3)
Отсюда следует, что комплексный коэффициент передачи системы равен отношению взаимного спектра выходного и входного сигналов к энергетическому спектру входного сигнала:
. ^вых вх
Р=х(ю)|
ЗАМЕЧАНИЕ
Аналогичная формула, связывающая коэффициент передачи со спектрами случайных сигналов, имеет большое значение для идентификации систем, то есть оценки комплексного коэффициента передачи по результатам совместного наблюдения входного и выходного сигналов.
Взаимная корреляция между входом и выходом
Применив обратное преобразование Фурье к формуле (2.3), получим выражение для ВКФ выходного и входного сигналов (используем при этом формулу (1.23) из раздела «Связь между корреляционными функциями и спектрами сигналов» главы 1):
5ВЬ|Х_ВХ (т) = j Ввх (т* W - т' W-
Итак, ВКФ выходного и входного сигналов линейной системы представляет собой свертку КФ входного сигнала с импульсной характеристикой системы.
Преобразование случайного процесса в линейной системе
Как говорилось в главе 1, случайный процесс представляет собой ансамбль реализаций. Каждая отдельная реализация является детерминированным сигналом, и ее преобразование линейной системой анализируется с помощью формул, приведенных в этой главе ранее. В данном же разделе будет рассмотрено именно преобразование статистических характеристик случайного процесса. При этом подразумевается стационарный случайный процесс с нулевым математическим ожиданием.
Спектральная плотность мощности
Поскольку спектром случайного процесса считается спектр его могцности, он преобразуется в линейной системе пропорционально коэффициенту передачи по мощности:
WBMX(со) = W„x(со)КМО|ц(со) = WHX(со) | К(со)| .(2.4)
Корреляционная функция
Согласно теореме Винера—Хинчина, корреляционная функция случайного процесса связана с его спектром преобразованием Фурье (см. раздел «Теорема Винера—Хинчина» главы 1). Применение преобразования Фурье к формуле (2.4) дает свертку.
/WT)=K(r')SA(r-r-)r/r'.(2.5)
Здесь Вк(т) — результат обратного преобразования Фурье от коэффициента передачи по мощности | К(со)|2. Согласно разделу «Связь между корреляционными функциями и спектрами сигналов» главы 1, это преобразование дает корреляционную функцию импульсной характеристики системы:
Sa(t) = j/z(t)/2(t-T)t/t.
Дисперсия
Дисперсия случайного процесса равна значению его корреляционной функции при т = 0. Подстановка этой величины в формулу (2.5) для выходной корреляционной функции дает
D_ = R_W = {/?вх(т')ВА(т')Л'.(2.6)
Можно рассчитать дисперсию и в частотной области (см. формулу (1.46) в разделе «Спектральные характеристики случайных процессов» главы 1). Воспользовавшись приведенной выше формулой (2.4) для выходного спектра, получаем:
Рвых =-/и;х(*((о)(2.7)
Плотность вероятности
В общем случае плотность вероятности случайного процесса на выходе линейной системы не поддается расчету простыми средствами. Исключение составляет частный случай нормального случайного процесса, поскольку нормальное распределение остается нормальным при любых линейных преобразованиях. Поэтому нормальный случайный процесс с нулевым средним значением после прохождения через линейную систему сохранит свою нормальность и нулевое математическое ожидание, а его дисперсия может быть рассчитана по одной из формул (2.6), (2.7) предыдущего раздела.
Частный случай белого шума
Если входной случайный процесс является белым шумом (см. раздел «Теорема Винера—Хинчина» главы 1), все приведенные ранее формулы существенно упрощаются:
Wmx(OD) = W0|K(0))|2,
Я»» (т) = W0Bh (т) = Wo J КП Kt - т)^,
D_ = W0Bh^ = W0 jhKOdt = ^ J |K(<d)|2<Z<o.
Способы описания линейных систем
В данном разделе рассматриваются различные эквивалентные способы представления характеристик линейных систем, реализуемых в виде цепей с сосредоточенными параметрами. Понимание сущности этих вариантов представления и способов перехода от одного представления к другому важно для правильного использования соответствующих функций MATLAB.
Дифференциальное уравнение
Связь между входным и выходным сигналами линейной цепи с сосредоточенными параметрами может быть выражена в виде дифференциального уравнения (ДУ) вида
Здесь x(t) — входной сигнал, y(t) — выходной сигнал, а, и Ь, — постоянные коэффициенты. Таким образом, цепь описывается наборами коэффициентов {а,} и UK-
Должно выполняться неравенство т < п, то есть максимальный порядок производной входного сигнала не может превышать максимального порядка производной выходного сигнала. Это связано с невозможностью реализации операции «чистого» дифференцирования аналоговой цепью. Значение п называется порядком цепи.
Если задать конкретный вид входного сигнала x(t), получится линейное неоднородное дифференциальное уравнение с постоянными коэффициентами. Решение этого ДУ дает выходной сигнал y(t").
Функция передачи
Если применить к обеим частям приведенного в предыдущем разделе ДУ (2.8) преобразование Лапласа, получится выражение для операторного коэффициента передачи, или функции передачи цепи (transfer function):
н^ =(2 9)
ansn + ап_х5пЛ + a„_2s"'2 +...+ axs + a0
Здесь а, и bx — те же постоянные коэффициенты, что и в приведенном ранее ДУ.
ЗАМЕЧАНИЕ
Преобразование Лапласа [1-3] можно рассматривать как обобщение преобразования Фурье, при котором частота может принимать комплексные значения. Рассчитывается прямое преобразование Лапласа как F(s) = G^f(t)e^dt (сравните эту формулу с формулой прямого преобразования Фурье (1.11)). В этой главе для нас важно только то, что преобразование Лапласа является линейным и при дифференцировании сигнала во времени его преобразование Лапласа умножается па комплексную частоту s.
Комплексный коэффициент передачи получается из функции передачи (2.9) путем подстановки 5 = усо:
^^ = Mv^Ll^ViC^
a„W + a^GtoY'1 + ап_2О<йУ"2 +...+ ахЦт) + а0
Нули и полюсы
Разложив числитель и знаменатель функции передачи (2.9) на множители, мы получим функцию передачи в следующем виде:
(s-P„ yS-p^ys-Pn-2 y.-G-Pi ) ’
Здесь h = bm/an — коэффициент усиления (gain), гх — нули функции передачи (zero), р, — полюсы функции передачи (pole). В точках нулей Щг^ = 0, а в точках полюсов H(pi) —> оо.
В данном случае цепь описывается набором параметров {z,}, {р,}, h.
Нули функции передачи могут быть вещественными либо составлять комплексно-сопряженные пары. То же относится и к полюсам. Коэффициент усиления всегда вещественный.
Полюсы и вычеты
Еще одним способом преобразования дробно-рациональной функции передачи (2.9) является ее представление в виде суммы простых дробей. При отсутствии кратных корней у знаменателя такое представление имеет следующий вид:
/7(s) = —++(2.10)
S-Pn s-Pn-v s-Pn-2 s-Py
Здесь p, — полюсы функции передачи, а числа г, называются вычетами. Со — целая часть функции передачи, отличная от нуля только в случае равенства степеней полиномов числителя и знаменателя.
В данном случае цепь описывается набором параметров {г,}, ^рф Со.
Полюсы функции передачи могут быть вещественными либо составлять комплексно-сопряженные пары. Вычеты, соответствующие комплексно-сопряженным полюсам, также являются комплексно-сопряженными.
При наличии кратных полюсов функции передачи разложение на простые дроби становится сложнее. Каждый m-кратный полюс р, дает т слагаемых следующего
вида:Г;,вида:Г;,ГИГИs-Pi (s-Pi)2 (s-Pj)3s-Pi (s-Pi)2 (s-Pj)3Г-+.,.+-—(s-PiTГ-+.,.+-—(s-PiT(2.11)(2.11)
вида:
Г;,
вида:
Г;,
ГИ
ГИ
s-Pi (s-Pi)2 (s-Pj)3
s-Pi (s-Pi)2 (s-Pj)3
Г-+.,.+-—
(s-PiT
Г-+.,.+-—
(s-PiT
(2.11)
(2.11)
Расчет импульсной характеристики
Представление функции передачи в виде суммы простых дробей позволяет вычислить импульсную характеристику системы, поскольку каждое слагаемое функции передачи вида г, /(s - р,,) соответствует слагаемому импульсной характеристики вида
г^*’11, t > 0.
Пара комплексно-сопряженных полюсов дает пару слагаемых импульсной характеристики в виде комплексно-сопряженных экспонент. Сумма таких слагаемых представляет собой синусоиду с экспоненциально меняющейся амплитудой:
г, ехр(р, 0+ г* ехр(р* Г) = 2 Re [г, exp(р; t)] =
= 2Re[| rj exp(yarg(ri ))exp(Re(pf )£)exp(;Im(p; )t)] = = 2| rj exp(Re(p, )г)со5(1т(р, )t + arg(r,)).
Здесь arg(r,) — фаза комплексного числа г,.
Что касается кратных полюсов, то m-кратный полюс р, даст в выражении для импульсной характеристики m слагаемых следующего вида:
r1.ep,t +—ер,‘ +...+ г ep,t.
"'2'3 2””(772-1)!
Устойчивость линейных систем
Система называется устойчивой, если при нулевом входном сигнале выходной сигнал затухает при любых начальных условиях:
limsBblx(t) = 0 при sBX(O = 0.
Это требование равносильно требованию затухания импульсной характеристики: lim A (t) = 0.
В предыдущем разделе было показано, что импульсная характеристика системы в общем случае содержит слагаемые вида
к\
где р, — полюсы функции передачи системы, ^ — соответствующие им вычеты, к — целые числа в диапазоне от нуля до значения, на единицу меньшего кратности полюса р;.
Такие слагаемые при t -* оо затухают, если вещественная часть полюса^ является отрицательной:
Re(pi) < 0.
Отсюда получаем общее условие: линейная система является устойчивой тогда и только тогда, когда полюсы ее функции передачи лежат елевой комплексной полуплоскости.
Пространство состояний
Еще одним способом описания линейной цепи является ее представление в пространстве состояний (state space). При этом состояние цепи описывается вектором состояния s(t), а собственные колебания цепи и ее реакция на входной сигнал x(t) характеризуются следующим образом:
s'(О = As(t) + Bx(t),(2 12)
y(t) = Cs(t) + Dx(t\
Если размерность вектора состояния s(t) равна N (s(t) — вектор-столбец), а входной x(f) и выходной y(t) сигналы являются скалярными, то размерность параметров в этих формулах будет следующей: А — матрица N х N, В — столбец ^ х 1, С — строка 1 х N, D — скаляр. Если входной и/или выходной сигналы являются векторными, размерность параметров соответствующим образом изменяется.
Описанием цепи в данном случае является набор параметров А, В, С, D.
От представления цепи в пространстве состояний можно легко перейти к функции передачи цепи. Если применить преобразование Лапласа к уравнениям состояния (2.12), а затем выразить из них операторный коэффициент передачи, получится следующее:
Я(х) = D - С(А - si) *В.(2.13)
Здесь I — единичная матрица N х N.
Обратное преобразование выполняется следующим образом. Прежде всего, если степени числителя и знаменателя функции передачи совпадают, из дроби выделяется целая часть, которая становится значением параметра D (если степень числителя меньше степени знаменателя, то D = 0).
Далее оставшаяся после выделения целой части дробь, степень числителя кото
рой (и) гарантированно меньше степени знаменателя (и), преобразуется в пара-
метры
А =
А, В и
1 0
С следующим образом: «н -«п^К ••■ ~aJan 0•••0
1...0
«0 К 0
0
, в =
"1"
0
0
С =
0
[0 ...
0
о ьт ьт_х .
1
0
0
(2.14)
Функции MATLAB для расчета линейных цепей
MATLAB и его пакеты расширения ориентированы прежде всего на цифровую обработку сигналов, поэтому функции, связанные с расчетом аналоговых цепей, рассматриваются как вспомогательные. В основном они предназначены для вызова из других функций, использующих аналоговые прототипы при синтезе цифровых фильтров. Однако и сами по себе эти функции могут быть весьма полезны.
Большая часть рассматриваемых в данном разделе функций относится к пакету Signal Processing.
Расчет частотных характеристик
Как уже говорилось, для расчета комплексного коэффициента передачи необходимо подставить в функцию передачи мнимый аргумент: s = jor. Соответствующие расчеты выполняются с помощью функции freqs. В простейшем виде она имеет следующий синтаксис:
freqs(b. а):
Здесь b и а — векторы коэффициентов полиномов, соответственно числителя и знаменателя функции передачи. Коэффициенты следуют в порядке убывания степеней, заканчивая постоянным слагаемым.
Для расчета характеристики по умолчанию выбирается 200 частот, логарифмически равномерно распределенных в диапазоне от 0,1 до 10.
При отсутствии выходных параметров функция freqs строит графики АЧХ и ФЧХ. АЧХ выводится в логарифмическом масштабе (но без пересчета в децибелы), ФЧХ — в градусах.
Пусть анализируемая цепь имеет функцию передачи
. s3 + 3s2 + 3s + 1
H(s) = —.
s4 -3s3 + 4s2 -2s+ 1
Строим ее АЧХ и ФЧХ (рис. 2.2):
» b = [1 3 3 1]:
» а = [1 -3 4 -2 1];
» freqsib. а)
Чтобы вместо построения графика получить вектор рассчитанных значений комплексного коэффициента передачи, нужно присвоить результат, возвращаемый функцией freqs, какой-либо переменной:
h = freqs(b. а):
При этом не стоит забывать про точку с запятой в конце строки, которая позволит подавить вывод рассчитанного вектора на экран.
Если использовать второй выходной параметр, то в нем функция возвратит вектор частот, для которых рассчитаны значения импульсной характеристики:
[h. w] = freqs(b. а):
Frequency (rad/s)
Рис. 2.2. Частотные характеристики, построенные функцией freqs
Рассчитаем вектор значений частотной характеристики цепи из нашего примера и построим график ее АЧХ в линейном, а не логарифмическом масштабе (рис. 2.3):
» [h. w] = freqs(b. a);
» plot(w, abs(h))
» grid on
Рис. 2.3. АЧХ цепи в линейном масштабе
Можно принудительно задать количество частотных точек для анализа, используя третий входной параметр п (при этом частоты по-прежнему логарифмически распределены от 0,1 до 10):
[h, w] = freqs(b. a. n):
Наконец, можно принудительно задать частоты для анализа — также с помощью третьего входного параметра, которым в данном случае является вектор круговых частот w. Признаком, отличающим данную ситуацию от предыдущей, является векторный характер третьего выходного параметра. Возвращать значения частот в данном случае не имеет смысла:
h = freqs(b. a. w);
ЗАМЕЧАНИЕ
Для дискретных линейных систем, функция передачи которых задана в виде отношения полиномов в z-области, аналогичные расчеты и построения выполняются функцией freqz (см. главу 4).
Построение графиков фазочастотных характеристик
Как видно из рис. 2.2, ФЧХ цепи содержит большое количество разрывов (скачков). Те из них, величины которых равны 180°, действительно являются скачками ФЧХ, а остальные, величина которых составляет 360°, являются «фиктивными». Они возникают только из-за того, что результаты вычисления фазы комплексного числа всегда лежат в диапазоне ±180°. Наличие этих многочисленных скачков затрудняет восприятие истинной формы ФЧХ и маскирует скачки «настоящие».
Избавиться от лишних разрывов позволяет функция unwrap, которая ищет в переданном ей векторе скачки между соседними элементами, превышающие заданную пороговую величину (по умолчанию равную л), и сдвигает соответствующие фрагменты вектора на ±2л нужное число раз.
Продемонстрируем действие функции unwrap, построив график ФЧХ для цепи из примера предыдущего раздела (рис. 2.4):
» [h. w] = freqs(b. а):
» % ФЧХ
» phi = angle(h):
» % устранение скачков
» phi = unwrap(phi):
» X отображаем в градусах
» plot(w. phi*180/pi)
» grid on
Сравнение графиков ФЧХ на рис. 2.2 и 2.4 наглядно демонстрирует сущность функции unwrap.
При необходимости можно задать порог обнаружения скачков, указав его в качестве второго аргумента функции unwrap:
у = unwrap(x, threshold):
Преобразование способов описания линейных цепей
В теоретической части данной главы было рассмотрено несколько эквивалентных способов описания линейных цепей. В пакете Signal Processing имеется ряд функций, предназначенных для преобразования описаний из одной формы в другую. Имена этих функций имеют вид хх2уу, где хх — обозначение исходной формы описания, а уу — обозначение целевой формы описания цепи.
ЗАМЕНАН ИЕ
По-английски цифра «2» (two) произносится сходно с частицей «to», служащей, средн прочего, для указания на конечную цель или результат какого-либо процесса. Поэтому цифра «2» традиционно используется в середине идентификаторов функций, осуществляющих различные преобразования.
Формы описания цепей в именах функций обозначаются следующим образом:
tf — коэффициенты полиномов числителя и знаменателя функции передачи (transfer function);
zp — нули и полюсы (zeros and poles);
ss — описание в пространстве состояний (state-space).
Необходимость в преобразовании описаний часто возникает из-за того, что функции расчета цепей (такие как рассматриваемые далее функции расчета фильтров-прототипов) дают результат в одной форме, а функция, например, построения частотной характеристики требует задания входных параметров в другой форме. Далее кратко рассматриваются конкретные функции преобразования описаний цепей. Для входных и выходных параметров используются следующие обозначения:
функция передачи:
О Ь — вектор-строка коэффициентов (в порядке убывания степеней) числителя функции передачи;
О а — вектор-строка коэффициентов (в порядке убывания степеней) знаменателя функции передачи;
нули и полюсы:
О z — вектор нулей (столбец);
Ор — вектор полюсов (столбец);
Ок — коэффициент усиления (скаляр);
□ пространство состояний:
О А — квадратная матрица связи вектора состояния и его производной;
О В — вектор-столбец связи входного сигнала и производной вектора состояния;
ОС — вектор-строка связи выходного сигнала и вектора состояния;
О D — скалярный коэффициент связи выходного и входного сигналов.
ЗАМ ЕЧ АН И Е
Размерности параметров указаны для случая цени с одним входом и одним выходом. Функции преобразования могут обрабатывать описания ценен с несколькими выходными сигналами (с векторным выходом). В этом случае размерности параметров соответствующим образом изменяются.
Функция tf2zp
Функция tf2zp преобразует наборы коэффициентов полиномов числителя и знаменателя функции передачи в векторы нулей и полюсов, рассчитывая также значение общего коэффициента усиления:
[z. р. k] = tf2zp(b. а):
Преобразование производится путем вычисления корней полиномов числителя и знаменателя функции передачи с помощью функции roots. Коэффициент усиления к рассчитывается как отношение Ь(1)/а(1).
Функция zp2tf
Функция zp2tf является обратной по отношению к функции tf2zp: она осуществляет преобразование коэффициента усиления, а также векторов нулей и полюсов функции передачи в коэффициенты полиномов ее числителя и знаменателя:
[b. а] = zp2tf(z. р. к):
Преобразование производится с помощью функции poly, предназначенной для вычисления коэффициентов полинома по заданным его корням. В завершение вектор коэффициентов числителя умножается на к.
Функция tf2ss
Функция tf2ss преобразует наборы коэффициентов полиномов числителя и знаменателя функции передачи в параметры представления цепи в пространстве состояний:
[А. В. С. D] = tf2ss(b. а);
Преобразование производится согласно формулам (2.14), приведенным в этой главе ранее, в разделе «Пространство состояний».
Функция ss2tf
Функция ss2tf является обратной по отношению к функции tf2ss: она преобразует параметры пространства состояний в коэффициенты полиномов функции передачи цепи:
[b. а] = SS2tf(A. В. С. D);
Преобразование производится согласно формуле (2.13), приведенной в этой главе ранее, в разделе «Пространство состояний».
Функция zp2ss
Функция zp2ss преобразует нули, полюсы и коэффициент усиления цепи в ее параметры пространства состояний:
[А. В. С. D] = zp2ss(z. р, к):
Преобразование производится путем последовательного вызова функций zp2tf и tf2ss.
Функция ss2zp
Функция ss2zp является обратной по отношению к функции zp2ss, преобразуя параметры пространства состояний в нули, полюсы и коэффициент усиления цепи:
[z, р, k] = ss2zp(A. В. С. 0);
Полюсы системы являются собственными числами матрицы А и вычисляются с помощью функции eig. Нули являются конечными решениями обобщенной задачи нахождения собственных чисел и рассчитываются следующим образом:
z = eig([A В;С 0], diag([ones(l,n) 0])):
Функция residue
Идентификатор последней функции, позволяющей преобразовывать описания линейных цепей, выпадает из общего ряда. Это связано с тем, что данное преобразование не является специфическим для обработки сигналов — оно сводится к разложению дробно-рациональной функции на простейшие дроби и часто применяется в математике. По этой же причине данная функция относится не к пакету Signal Processing, а к базовой библиотеке MATLAB.
Преобразование функции передачи, заданной в виде коэффициентов полиномов числителя и знаменателя, в сумму простых дробей производится с помощью функции residue. Она же осуществляет и обратное преобразование; нужное направление преобразования выбирается в зависимости от числа входных параметров.
При двух входных параметрах производится разложение функции передачи на простые дроби:
[г. р. k] = residueib. а)
Здесь b и а — коэффициенты полиномов числителя и знаменателя функции передачи соответственно. Выходные параметры — векторы-столбцы полюсов (р) и соответствующих им вычетов (г), а также строка коэффициентов целой части к.
Разложение производится согласно формулам (2.10) и (2.11), приведенным ранее в разделе «Полюсы и вычеты», включая случай наличия кратных полюсов.
При использовании трех входных параметров функция residue производит преобразование вычетов, полюсов и коэффициентов целой части в коэффициенты числителя и знаменателя функции передачи, то есть осуществляет суммирование простых дробей:
[b, а] = residue(r. р. к)
В качестве примера разложим на простые дроби функцию передачи вида
s4 + 4s3 + 7s2 + 6s + 2
» b = [1 -2 2]:
» a = [1 4 7 6 2]:
» [r. p. k] = residue(b, a) r =
2.0000 + 2.00001
2.0000 - 2.00001
-4.0000
5.0000
P =
1.0000 + 1.00001
1.0000 - 1.00001
-1.0000
-1.0000
k =
Результаты преобразования показывают, что данная система имеет двукратный полюс, равный -1, и пару комплексно-сопряженных полюсов, равных -1 ± j. Поскольку степень полинома числителя меньше, чем степень полинома знаменателя, целая часть их отношения равна нулю, и в параметре к функция возвращает пустую матрицу. Рассчитанные значения вычетов позволяют записать представление функции передачи в виде суммы простых дробей (с учетом наличия кратного полюса):
ч 2 + ;22 - ;245
H(s) =— +-+-
s + i-j s + l + j s + 1 (s + 1)
Произведем с помощью функции residue обратное преобразование вычетов и полюсов в коэффициенты полиномов числителя и знаменателя функции передачи:
[М. al] = residue(r, р, к) bl =
0.00001.0000 -2.00002.0000
al =
1.00004.00007.00006.00002.0000
Полученные значения совпадают с исходными. Знак «минус» при нулевом значении Ы(1) обусловлен вычислительными погрешностями — после обратного
преобразования получается не ровно нуль, а малое отрицательное число (примерно -4 • 10“15).
ВНИМАНИЕ
Вычислительная задача разложения дробно-рациональной функции на простые дроби плохо обусловлена. Это означает, что если функция передачи имеет полюсы, близкие к кратным, то малые вариации исходных данных могут приводить к большим погрешностям вычисления полюсов и вычетов. В таких случаях документация MATLAB рекомендует использовать описание системы в виде нулей и полюсов либо в пространстве состояний.
Расчет аналоговых фильтров-прототипов
Одной из часто возникающих на практике задач является создание фильтров, пропускающих сигналы в определенной полосе частот и задерживающих остальные частоты. При этом различают:
фильтры нижних частот (ФНЧ; английский термин — low-pass filter), пропускающие частоты, меньшие некоторой частоты среза соц;
фильтры верхних частот (ФВЧ; английский термин — high-pass filter), пропускающие частоты, большие некоторой частоты среза соо!
полосовые фильтры (ПФ; английский термин — band-pass filter), пропускающие частоты в некотором диапазоне (Oi...(o2 (они могут также характеризоваться средней частотой coo = (coi + со2)/2 и шириной полосы пропускания Део = юг - coi);
режекторные фильтры (другие возможные названия — заграждающий фильтр, фильтр-пробка, полосно-задерживающий фильтр; английский термин — bandstop filter), пропускающие на выход все частоты, кроме лежащих в некотором диапазоне (О|...(о2 (они тоже могут характеризоваться средней частотой (Оо = = (о)! + (о2)/2 и шириной полосы задерживания Дш = (о2 - (Oi).
Идеальная форма АЧХ фильтров этих четырех типов показана на рис. 2.5.
Однако такая идеальная (прямоугольная) форма АЧХ не может быть физически реализована. Поэтому в теории аналоговых фильтров разработан ряд методов аппроксимации прямоугольных АЧХ. Функции, реализующие эти методы,'будут рассмотрены ниже.
Кроме того, рассчитав ФНЧ, можно несложными преобразованиями изменить его частоту среза, превратить его в ФВЧ, полосовой либо режекторный фильтр с заданными параметрами. Поэтому расчет аналогового фильтра начинается с расчета так называемого фильтра-прототипа, представляющего собой ФНЧ с частотой среза, равной 1 рад/с. Далее применяются функции преобразования частоты среза и преобразования типов фильтров, которые также будут рассмотрены ниже.
Все функции MATLAB для расчета аналоговых прототипов возвращают векторы-столбцы нулей и полюсов функции передачи, а также значение коэффициента усиления.
оооосососо0со0ииФВЧФВЧti>0ti>0ФНЧФНЧПолосовой фильтрПолосовой фильтрРежекторный фильтрРежекторный фильтрРис. 2.5. АЧХ фильтров различного типаРис. 2.5. АЧХ фильтров различного типа
о
о
о
о
со
со
со0
со0
и
и
ФВЧ
ФВЧ
ti>0
ti>0
ФНЧ
ФНЧ
Полосовой фильтр
Полосовой фильтр
Режекторный фильтр
Режекторный фильтр
Рис. 2.5. АЧХ фильтров различного типа
Рис. 2.5. АЧХ фильтров различного типа
ВНИМАНИЕ
При сравнении результатов использования фильтров различного типа в какой-либо системе обработки сигналов следует помнить о том, что частота среза для разных фильтров определяется по-разному. Подробная информация об этом приводится в следующих разделах, посвященных конкретным фильтрам. Немного забегая вперед, скажем, что для фильтра Баттерворта частота среза определяется по уровню 1/V2, для фильтра Чебышева первого рода и эллиптического фильтра — но уровню пульсаций в полосе пропускания, для фильтра Чебышева второго рода — по уровню пульсаций в полосе задерживания. Наконец, для фильтра Бесселя само понятие частоты среза является весьма условным.
Фильтр Баттерворта
Функция передачи фильтра-прототипа Баттерворта (Butterworth filter) не имеет нулей, а ее полюсы равномерно расположены на s-плоскости в левой половине окружности единичного радиуса (см. далее рис. 2.6, а).
Благодаря такому размещению полюсов формула для АЧХ фильтра Баттерворта оказывается очень простой:
ВД =ВД =11
ВД =
ВД =
1
1
где со0 — частота среза (для фильтра-прототипа она равна 1 рад/с), п — порядок фильтра.
1.5 1
0.5 О
-0.5
-1
-1.5
-1.5 -1-0.500.511.5
в
Коэффициент передачи на нулевой частоте равен 1, а на частоте среза независимо от порядка фильтра составляет 1/V2 » 0,707 ® -3 дБ. При со -> со АЧХ стремится к нулю.
АЧХ фильтра Баттерворта (см. рис. 2.6, б) является максимально плоской при со = 0 и со —> со. Это означает, что в данных точках равны нулю 2и - 1 производных АЧХ по частоте.
В целом АЧХ монотонно спадает от единицы до нуля при изменении частоты от нуля до бесконечности.
В MATLAB расчет аналогового фильтра-прототипа Баттерворта производится с помощью функции buttap:
[z. р. k] = buttap(n):
Входной целочисленный параметр п — это порядок фильтра.
На рис. 2.6 показано расположение полюсов фильтра Баттерворта 5-го порядка на комплексной плоскости, а также его АЧХ и ФЧХ:
» [z, р. k] = buttap(5): & нули и полюсы прототипа
» plot(p, 'х')& график расположения полюсов
» axis equal
» axis([-1.5 1.5 -1.5 1.5])
» w = 0:0.01:5:
» [b. a] = zp2tf(z, p. k): & коэффициенты функции передачи
» h = freqs(b. a. w):& комплексный коэффициент передачи
» figure
» plot(w, abs(h)). grid £ график АЧХ
» figure
» plot(w. unwrap(angle(h))), grid % график ФЧХ
ВНИМАНИЕ
Прописная буква «Я» в одном из комментариев только что приведенного листинга — не опечатка. К сожалению, шестая версия MATLAB не позволяет использовать строчную русскую букву «я» в комментариях и строковых константах (см. также раздел «MATLAB и русский язык» приложения А).
Фильтр Чебышева первого рода
Функция передачи фильтра Чебышева первого рода (Chebyshev type I filter) также не имеет нулей, а ее полюсы расположены в левой половине эллипса на s-плоскости (см. далее рис. 2.7, а\
АЧХ фильтра Чебышева первого рода описывается следующим образом:
ВД =ВД =1V1 + 82T„2(co/(o0)1V1 + 82T„2(co/(o0)
ВД =
ВД =
1
V1 + 82T„2(co/(o0)
1
V1 + 82T„2(co/(o0)
Здесь (о0 — частота среза, Т„(х) — полином Чебышева и-го порядка, п — порядок фильтра, с — параметр, определяющий величину пульсаций АЧХ в полосе пропускания.
Полином Чебышева Тп^ при |х| < 1 колеблется в диапазоне -1... +1, а при |х| > 1 неограниченно возрастает по абсолютной величине. Поэтому АЧХ фильтра Чебышева первого рода в полосе пропускания (при |со| < со0) колеблется между значениями 1/71+ е2 и 1, а вне полосы пропускания (при |со| > со0) монотонно затухает до нуля (см. далее рис. 2.7, б).
Коэффициент передачи на нулевой частоте равен 1 при нечетном порядке фильтра и 1/71 + е2 — при четном. На частоте среза коэффициент передачи фильтра равен 1/71 + е2 , то есть уровню пульсаций АЧХ в полосе пропускания. При со —> со АЧХ стремится к нулю.
По сравнению с фильтром Баттерворта того же порядка фильтр Чебышева обеспечивает более крутой спад АЧХ в области перехода от полосы пропускания к полосе задерживания.
Значение параметра с и уровень пульсаций Rp (в децибелах) связаны следующим образом:
Rp = 20 lg(71 + E2) = 10 lg(l + е2) дБ,
e=7i?^.
При со -> да АЧХ фильтра Чебышева первого рода является максимально плоской.
В MATLAB фильтр-прототип Чебышева первого рода рассчитывается с помощью функции cheblap:
[z. р. k] = cheblap(n, Rp)
Здесь п — порядок фильтра, Rp — уровень пульсаций в полосе пропускания (в децибелах).
На рис. 2.7 показано расположение на комплексной плоскости полюсов фильтра Чебышева первого рода 5-го порядка с уровнем пульсаций 0,5 дБ, а также его АЧХ и ФЧХ:
» [z. р. k] = cheblap(5. 0.5): £ нули и полюсы прототипа
» plot(p. 'х')£ график расположения полюсов
» axis equal
» axis([-1.5 1.5 -1.5 1.5])
» W - 0:0.01:5;
» [b. a] = zp2tf(z. p. k): X коэффициенты функции передачи
» h = freqs(b, a. w):% комплексный коэффициент передачи
» figure
» % график АЧХ
» plot(w. abs(h)), grid
» figure
» % график ФЧХ
» plot(w, unwrap(angle(h))). grid
1.5
1
0.5
0
-0.5
-1
-1.5
-1.5 -1-0.500.511.5
в
Фильтр Чебышева второго рода
Функция передачи фильтра Чебышева второго рода (Chebyshev type II filter), в отличие от предыдущих случаев, имеет и нули, и полюсы (рис. 2.8, а). Она связана с функцией передачи фильтра Чебышева первого рода следующим образом:
Я2(5)= 1 - ^(l/s).
Здесь H,(s) и H2(s) — функции передачи фильтров-прототипов Чебышева первого и второго рода соответственно.
Полюсы функции передачи фильтров-прототипов Чебышева первого и второго рода (р1( и р2, соответственно) связаны друг с другом соотношением
1 Рг, = — • Рь-
По этой причине фильтры Чебышева второго рода называют еще инверсными фильтрами Чебышева (inverse Chebyshev filter).
АЧХ фильтра Чебышева второго рода описывается следующим образом:
К(со) =
V ^(со0/Ю)
Здесь и0 — частота среза, Тп^ — полином Чебышева n-го порядка, п — порядок фильтра, с — параметр, определяющий величину пульсаций АЧХ в полосе задерживания.
В результате указанного выше преобразования функции передачи АЧХ фильтра Чебышева второго рода ведет себя следующим образом: в полосе пропускания она монотонно затухает, а в полосе задерживания колеблется между нулем и значением 1 /71 + е2 (рис. 2.8, бY
ВНИМАНИЕ
Частотой среза фильтра Чебышева второго рода считается не конец полосы пропускания, а начало полосы задерживания.
Коэффициент передачи фильтра на нулевой частоте равен 1, на частоте среза — заданному уровню пульсаций в полосе задерживания. При со —> оо коэффициент передачи равен нулю при нечетном порядке фильтра и уровню пульсаций — при четном.
Значение параметра с и уровень пульсаций R, (в децибелах) связаны следующим образом:
Rs - 20 lg(Vl + £2) = 10 lg( 1 + £2) дБ,
£=710^^1.
При со = О АЧХ фильтра Чебышева второго рода является максимально плоской.
2
1.5
1
0.5 0
-0.5
-1
-1.5
-2
-2-1012
Рис. 2.8. Характеристики фильтра Чебышева второго рода 5-го порядка с уровнем пульсаций в полосе задерживания 20 дБ: а — расположение нулей и полюсов на комплексной плоскости, б — АЧХ, в — ФЧХ
В MATLAB фильтр-прототип Чебышева второго рода рассчитывается с помощью функции cheb2ap:
[z, р, k] = cheb2ap(n, Rs)
Здесь п — порядок фильтра, Rs — уровень пульсаций в полосе задерживания (в децибелах).
На рис. 2.8 показано расположение на комплексной плоскости полюсов фильтра Чебышева второго рода 5-го порядка с уровнем пульсаций 20 дБ, а также его АЧХ и ФЧХ:
» [z. р. k] = cheb2ap(5, 20): % нули и полюсы прототипа
» plot(p. 'х')% график расположения полюсов
» hold on
» plot(z, 'о')Ж график расположения нулей
» hold off
» axis equal
» axis([-2 2 -2 2])
» w = 0:0.01:5;
» [b. a] = zp2tf(z, p. k):% коэффициенты функции передачи
» h = freqs(b, a. w);X комплексный коэффициент передачи
» figure
» plot(w, abs(h)). grid % график АЧХ
» figure
» plot(w, unwrap(anglelh))). grid % график ФЧХ
Эллиптический фильтр
Эллиптические фильтры (фильтры Кауэра; английские термины — elliptic filter, Cauer filter) в некотором смысле объединяют в себе свойства фильтров Чебышева первого и второго рода, поскольку АЧХ эллиптического фильтра имеет пульсации заданной величины как в полосе пропускания, так и в полосе задерживания (рис. 2.9, б\ За счет этого удается обеспечить максимально возможную (при фиксированном порядке фильтра) крутизну ската АЧХ, то есть переходной зоны между полосами пропускания и задерживания.
Функция передачи эллиптического фильтра имеет как полюсы, так и нули. Нули, как и в случае фильтра Чебышева второго рода, являются чисто мнимыми и образуют комплексно-сопряженные пары (рис. 2.9, а). Количество нулей функции передачи равно максимальному четному числу, не превосходящему порядка фильтра.
АЧХ эллиптического фильтра описывается следующей формулой:
Х(со) = —=А==.
+ е2Я2(ыМ,Л)
Здесь ш0 — частота среза, п — порядок фильтра, R,,(...) — рациональная функция Чебышева и-го порядка, е и L — параметры, определяющие величину пульсаций в полосах пропускания и задерживания.
Рис. 2.9. Характеристики эллиптического фильтра 5-го порядка с уровнем пульсаций в полосе пропускания 0,5 дБ и в полосе задерживания 20 дБ: а — расположение нулей и полюсов на комплексной плоскости, б — АЧХ, в — ФЧХ
В MATLAB эллиптический фильтр-прототип рассчитывается с помощью функции ellipap:
[z. р, k] - el11pap(n. Rp. Rs)
Здесь n — порядок фильтра, Rp — уровень пульсаций в полосе пропускания, Rs — уровень пульсаций в полосе задерживания. Уровни пульсаций указываются в децибелах.
На рис. 2.9 показано расположение на комплексной плоскости нулей и полюсов эллиптического фильтра 5-го порядка с уровнем пульсаций 0,5 дБ в полосе пропускания и 20 дБ в полосе задерживания, а также его АЧХ и ФЧХ:
нули и полюсы прототипа график расположения полюсовграфик расположения нулейкоэффициенты функции передачи комплексный коэффициент передачиграфик АЧХграфик ФЧХнули и полюсы прототипа график расположения полюсовграфик расположения нулейкоэффициенты функции передачи комплексный коэффициент передачиграфик АЧХграфик ФЧХ» [2, р, к] = е111рар(5. 0.5, 20): X
нули и полюсы прототипа график расположения полюсов
график расположения нулей
коэффициенты функции передачи комплексный коэффициент передачи
график АЧХ
график ФЧХ
нули и полюсы прототипа график расположения полюсов
график расположения нулей
коэффициенты функции передачи комплексный коэффициент передачи
график АЧХ
график ФЧХ
» plot(p, ’X')%
» hold on
» plot(z, 'o')X
» hold off
» axis equal
» ax1s([-l.5 1.5 -1.5 1.51)
» w = 0:0.01:5:
» [b, a] = zp2tf(z, p, к):X
» h = freqs(b, a. w):X
» figure
» plot(w. abs(h)). gridX
» figure
» plot(w, unwrap(angle(h))). grid X
Фильтр Бесселя
В отличие от фильтров предыдущих типов, фильтры Бесселя (Bessel filter) не аппроксимируют прямоугольную АЧХ — их АЧХ (рис. 2.10, 5) по форме близка к гауссовой кривой (точнее, стремится к ней с ростом порядка фильтра). Практическая ценность фильтров Бесселя определяется тем, что для них зависимость группового времени задержки от частоты является максимально гладкой в точке со “ 0 и групповая задержка очень мало меняется в полосе пропускания.
Функция передачи фильтра Бесселя имеет только полюсы, лежащие на окружности с центром в положительной области вещественной оси (рис. 2.10, а). Сама функция передачи имеет следующий вид:
H(s) = ^A—
к-0
Коэффициенты полинома знаменателя рассчитываются по следующей формуле:
(2п-к)\2"'*&!(п-&)!
1 0.8 0.6 0.4 0.2
0 -0.2 -0.4 -0.6 -0.8
-1
-1 -0.5 0 0.5 1
Рис. 2.10. Характеристики фильтра Бесселя 5-го порядка: а — расположение полюсов на комплексной плоскости, б — АЧХ, в — ФЧХ
В MATLAB фильтр-прототип Бесселя рассчитывается с помощью функции besselap:
[z. р. k] = besselap(n)
Здесь п — порядок фильтра.
На рис. 2.10 показано расположение на комплексной плоскости нулей и полюсов фильтра Бесселя 5-го порядка, а также его АЧХ и ФЧХ:
» [z. р. k] = besselap(5); % нули и полюсы прототипа
» plot(p, 'х')% график расположения нулей
» axis equal
» axis([-l 1 -1 1])
» w - 0:0.01:5:
» [b. a] = zp2tf(z. p, k): % коэффициенты функции передачи
» h = freqs(b. a. w);% комплексный коэффициент передачи
» figure
» plot(w, abs(h)), grid % график АЧХ
» figure
» plot(w, unwrap(angle(h))). grid % график ФЧХ
Преобразования фильтров-прототипов
Следующий этап после расчета фильтра-прототипа — его преобразование с целью получения фильтра заданного вида с требуемыми частотами среза. Для этого используются приведенные ниже четыре функции MATLAB. Принцип составления их имен следующий: сначала идет сокращение 1 р, означающее, что исходным фильтром является ФНЧ (low-pass), потом следует символ преобразования 2 и в конце стоит обозначение типа результирующего фильтра:
1 р21р — изменение частоты среза ФНЧ (low-pass);
lp2hp — преобразование ФНЧ в ФВЧ (high-pass);
1р2Ьр — преобразование ФНЧ в полосовой фильтр (band-pass);
lp2bs — преобразование ФНЧ в режекторный фильтр (band-stop).
Все эти функции могут преобразовывать фильтры, заданные двумя способами — в виде коэффициентов полиномов числителя и знаменателя функции передачи либо в пространстве состояний. Различаются эти два варианта по числу входных и выходных параметров.
Изменение частоты среза ФНЧ
Изменение частоты среза ФНЧ-прототипа сводится к простому масштабированию частотной оси и выполняется путем следующей замены переменной s в выражении для функции передачи:
s
s -> —,
где со0 — требуемая частота среза ФНЧ. Такое преобразование производится функцией 1р21р:
[bl. al] = lp21p(b. a, wO)
[Al. Bl, Cl. DI] = 1р21р(А, В. C. D. wO)
Входными параметрами функции являются описание фильтра (в виде коэффициентов полиномов числителя и знаменателя функции передачи — Ь, а, или в пространстве состояний — А, В, С, D) и требуемая частота среза wO.
Возвращаемый результат — пересчитанные параметры фильтра.
Преобразование ФНЧ в ФВЧ
Преобразование ФНЧ-прототипа в ФВЧ требует инверсии частотной оси и выполняется путем следующей замены переменной s в выражении для функции передачи:
где со0 — требуемая частота среза ФВЧ. Такое преобразование производится функцией lp2hp:
[Ы. al] = 1 p2hp(b. a. wO)
[Al. Bl. Cl. DI] = lp2hp(A. В. C. D. wO)
Входными параметрами функции являются описание фильтра (в виде коэффициентов полиномов числителя и знаменателя функции передачи — Ь, а или в пространстве состояний — А, В, С, D) и требуемая частота среза wO.
Возвращаемый результат — пересчитанные параметры фильтра.
Преобразование ФНЧ в полосовой фильтр
Преобразование ФНЧ-прототипа в полосовой фильтр требует более сложной трансформации частотной оси, чем в предыдущих случаях. Так, нулевая и бесконечная частоты должны преобразовываться в бесконечное значение на частотной оси ФНЧ-прототипа (там, где его коэффициент передачи стремится к нулю). Частоты, соответствующие краям требуемой полосы пропускания, должны после преобразования давать значения ±1, равные частоте среза ФНЧ-прототипа. Наконец, преобразование должно выполняться с помощью дробно-рациональной функции, чтобы сохранить дробно-рациональную структуру функции передачи.
Перечисленным требованиям удовлетворяет следующая замена переменной s:
s/co0
где со0 = со, <о2, Q = со0/(со2 - «ц), со, и со2 — соответственно нижняя и верхняя границы полосы пропускания фильтра.
Такое преобразование выполняется функцией 1р2Ьр:
[bl, al] = lp2bp(b. a. wO. Bw)
[Al, Bl. Cl. 01] = lp2bp(A, В, C. 0. wO. Bw)
Входными параметрами функции являются описание фильтра (в виде коэффициентов полиномов числителя и знаменателя функции передачи — Ь, а или в пространстве состояний — А, В, С, D), средняя частота wO и ширина Bw полосы пропускания фильтра (в радианах в секунду).
ВНИМАНИЕ
Обратите внимание на то, что средняя частота полосы пропускания — это среднее геометрическое, а не среднее арифметическое частот среза: w0=sqrt(wl*w2). Полоса пропускания рассчитывается без особенностей: Bw=w2-wl.
Возвращаемый результат — пересчитанные параметры фильтра.
Рассчитаем в качестве примера полосовой фильтр Чебышева первого рода 5-го порядка с полосой пропускания от 1 кГц до 9 кГц и уровнем пульсаций в полосе пропускания 3 дБ:
2 ФНЧ-прототип% функция передачи% нижнЯЯ частота среза% верхняя частота среза% средняя частотаX полоса пропускания% полосовой фильтр% вектор частот длЯ расчета£ частотная характеристика% график АЧХ2 ФНЧ-прототип% функция передачи% нижнЯЯ частота среза% верхняя частота среза% средняя частотаX полоса пропускания% полосовой фильтр% вектор частот длЯ расчета£ частотная характеристика% график АЧХ» [z. р. k] - cheblap(5, 3):
2 ФНЧ-прототип
% функция передачи
% нижнЯЯ частота среза
% верхняя частота среза
% средняя частота
X полоса пропускания
% полосовой фильтр
% вектор частот длЯ расчета
£ частотная характеристика
% график АЧХ
2 ФНЧ-прототип
% функция передачи
% нижнЯЯ частота среза
% верхняя частота среза
% средняя частота
X полоса пропускания
% полосовой фильтр
% вектор частот длЯ расчета
£ частотная характеристика
% график АЧХ
» [b, а] = zp2tf(z. р. к):
» fl = 1еЗ:
» f2 = 9еЗ;
» wO = 2 * pi * sqrttfl * f2);
» Bw = 2 * pi * (f2 - fl):
» f = 0:1:20еЗ:» f = 0:1:20еЗ:» [b, a] = lp2bp(b. a, wO, Bw):
» f = 0:1:20еЗ:
» f = 0:1:20еЗ:
» h = freqs(b. a. 2*pi*f);
» plot(f/1000, abs(h)). grid
» axis tight
» figure
» plot(f/1000. unwrap(angle(h))). grid % график ФЧХ
Построенные графики АЧХ и ФЧХ приведены на рис. 2.11. Обратите внимание на то, что характеристики фильтра несимметричны — они сжаты слева и растянуты справа. Если проанализировать формулу замены переменной, использованную для преобразования ФНЧ в полосовой фильтр, окажется, что частоты, на которых коэффициент передачи имеет одинаковые значения, связаны соотношением СО] со2 = tog. Поэтому графики станут симметричными, если использовать логарифмический масштаб по оси частот.
Асимметрия частотных характеристик проявляется тем сильнее, чем больше отношение граничных частот полосы пропускания фильтра. Именно по этой причине в рассмотренном примере специально использованы столь сильно (в 9 раз) различающиеся частоты среза.
Рис. 2.11. При большом отношении граничных частот полосы пропускания полосового фильтра отчетливо наблюдается асимметрия частотных характеристик (сверху — АЧХ, снизу — ФЧХ)
Преобразование ФНЧ в режекторный фильтр
Для преобразования ФНЧ-прототипа в режекторный фильтр трансформация частотной оси должна быть обратной по отношению к предыдущему случаю. Нулевая и бесконечная частоты должны преобразовываться в нулевое значение на частотной оси ФНЧ-прототипа (там, где коэффициент передачи велик). Частоты, соответствующие краям требуемой полосы задерживания, должны после преобразования давать значения ±1, равные частоте среза ФНЧ-прототипа. Кроме того, некоторое значение частоты в полосе задерживания должно преобразовываться в бесконечность (там, где коэффициент передачи ФНЧ-прототипа стремится к нулю). Наконец, преобразование должно выполняться с помощью дробно-рациональной функции, чтобы сохранить дробно-рациональную структуру функции передачи.
Такое преобразование выполняется функцией 1р2Ьр:
[bl, al] = lp2bp(b. a, wO. Bw)
[Al. Bl. Cl. DI] = lp2bp(A, В. C. D. wO. Bw)
Входными параметрами функции являются описание фильтра (в виде коэффициентов полиномов числителя и знаменателя функции передачи — Ь, а или в пространстве состояний — А, В, С, D), средняя частота wO и ширина Bw полосы пропускания фильтра (в радианах в секунду).
ВНИМАНИЕ
Обратите внимание на то, что средняя частота полосы пропускания — это среднее геометрическое, а не среднее арифметическое частот среза: wO=sqrt(wl *w2). Полоса пропускания рассчитывается без особенностей: Bw=w2-wl.
Возвращаемый результат — пересчитанные параметры фильтра.
Рассчитаем в качестве примера полосовой фильтр Чебышева первого рода 5-го порядка с полосой пропускания от 1 кГц до 9 кГц и уровнем пульсаций в полосе пропускания 3 дБ:
X ФНЧ-прототип% функция передачи% нижнЯЯ частота срезаX верхнЯЯ частота среза£ средняя частотаX полоса пропускания% полосовой фильтр% вектор частот длЯ расчета X частотная характеристика X график АЧХX ФНЧ-прототип% функция передачи% нижнЯЯ частота срезаX верхнЯЯ частота среза£ средняя частотаX полоса пропускания% полосовой фильтр% вектор частот длЯ расчета X частотная характеристика X график АЧХ» [z. р. k] = cheblap(5, 3):
X ФНЧ-прототип
% функция передачи
% нижнЯЯ частота среза
X верхнЯЯ частота среза
£ средняя частота
X полоса пропускания
% полосовой фильтр
% вектор частот длЯ расчета X частотная характеристика X график АЧХ
X ФНЧ-прототип
% функция передачи
% нижнЯЯ частота среза
X верхнЯЯ частота среза
£ средняя частота
X полоса пропускания
% полосовой фильтр
% вектор частот длЯ расчета X частотная характеристика X график АЧХ
» [b, а] = zp2tf(z. р, к):
» fl = 1еЗ:
» f2 = 9еЗ:
» wO = 2 * pi * sqrt(fl * f2);
» Bw = 2 * pi * (f2 - fl):
» [b. a] = lp2bp(b, a. wO, Bw):
» f = 0:l:20e3:
» h = freqs(b. a, 2*pi*f):
» plot(f/1000. abs(h)). grid
» axis tight
» figure
» plot(f/1000, unwrap(anglе(h))). grid % график ФЧХ
Построенные графики АЧХ и ФЧХ приведены на рис. 2.11. Обратите внимание на то, что характеристики фильтра несимметричны — они сжаты слева и растянуты справа. Если проанализировать формулу замены переменной, использованную для преобразования ФНЧ в полосовой фильтр, окажется, что частоты, на которых коэффициент передачи имеет одинаковые значения, связаны соотношением со, ш2 = tog ■ Поэтому графики станут симметричными, если использовать логарифмический масштаб по оси частот.
Асимметрия частотных характеристик проявляется тем сильнее, чем больше отношение граничных частот полосы пропускания фильтра. Именно по этой причине в рассмотренном примере специально использованы столь сильно (в 9 раз) различающиеся частоты среза.
Рис. 2.11. При большом отношении граничных частот полосы пропускания полосового фильтра отчетливо наблюдается асимметрия частотных характеристик (сверху — АЧХ, снизу — ФЧХ)
Преобразование ФНЧ в режекторный фильтр
Для преобразования ФНЧ-прототипа в режекторный фильтр трансформация частотной оси должна быть обратной по отношению к предыдущему случаю. Нулевая и бесконечная частоты должны преобразовываться в нулевое значение на частотной оси ФНЧ-прототипа (там, где коэффициент передачи велик). Частоты, соответствующие краям требуемой полосы задерживания, должны после преобразования давать значения ±1, равные частоте среза ФНЧ-прототипа. Кроме того, некоторое значение частоты в полосе задерживания должно преобразовываться в бесконечность (там, где коэффициент передачи ФНЧ-прототипа стремится к нулю). Наконец, преобразование должно выполняться с помощью дробно-рациональной функции, чтобы сохранить дробно-рациональную структуру функции передачи.
Перечисленным требованиям удовлетворяет следующая замена переменной s:
Q((s/to0 )2 + 1) ’
где со0 = ^со,со2, Q = соо/(ю2 _ ю1), coi и со2 — соответственно нижняя и верхняя границы полосы задерживания фильтра.
Такое преобразование выполняется функцией lp2bs:
[bl. al] = lp2bs(b, a. wO. Bw)
[Al. Bl, Cl. DI] = lp2bS(A, В. C. D, wO. Bw)
Входными параметрами функции являются описание фильтра (в виде коэффициентов полиномов числителя и знаменателя функции передачи — Ь, а или в пространстве состояний — А, В, С, D), средняя частота wO и ширина Bw полосы задерживания фильтра (в радианах в секунду).
Возвращаемый результат — пересчитанные параметры фильтра.
Все сказанное выше применительно к полосовым фильтрам о связи средней частоты с частотами среза и об асимметрии характеристик справедливо и для ре- жекторных фильтров.
Расчет аналоговых фильтров
Как уже говорилось, для расчета аналогового фильтра необходимо выполнить две основные операции: рассчитать ФНЧ-прототип и преобразовать его к нужному типу фильтра с заданными частотами среза. Требуемая последовательность действий оформлена в виде следующих функций MATLAB:
butter(n, wO, type, ' s') —расчет фильтров Баттерворта;
chebyKn, Rp, wO, type, 's’) — расчет фильтров Чебышева первого рода;
cheby2(n, Rs, wO, type, 's') — расчет фильтров Чебышева второго рода;
ellip(n, Rp, Rs, wO, type, ’s') — расчет эллиптических фильтров;
besself(n, wO, type) — расчет фильтров Бесселя.
Параметры всех функций задаются одинаково, поэтому обсуждать функции по отдельности не будем.
Перечисленные функции, за исключением функции besself, позволяют рассчитывать как аналоговые, так и дискретные фильтры. Признаком аналогового расчета служит строка 's', использованная в качестве последнего входного параметра. Об использовании этих функций для расчета дискретных фильтров речь пойдет в главе 6.
Параметры n, Rp, Rs (их состав зависит от типа фильтра) — это параметры фильтра-прототипа: п — порядок фильтра, Rp — уровень пульсаций в полосе пропускания (в децибелах), Rs — уровень пульсаций в полосе задерживания (в децибелах). Более подробное описание этих параметров было приведено ранее, в разделах, посвященных фильтрам-прототипам.
Параметры wO и type используются совместно для задания типа фильтра и значений его частот среза (в радианах в секунду):
ФНЧ: wO — скаляр, параметр type отсутствует;
ФВЧ: wO — скаляр, type="high';
полосовой фильтр: wO — двухэлементный вектор частот среза [wl w2], параметр type отсутствует;
режекторный фильтр: wO — двухэлементный вектор частот среза [wl w2], type=’stop'.
ВНИМАНИЕ
Следует подчеркнуть, что в данных функциях при разработке полосовых и режекторных фильтров в качестве параметров задаются именно частоты среза, а нс средняя частота и полоса пропускания, как в функциях преобразования фильтров-прототипов.
В зависимости от того, сколько выходных параметров указано при вызове, функции могут возвращать результаты расчета в виде коэффициентов полиномов числителя и знаменателя функции передачи (два выходных параметра), нулей и полюсов (три выходных параметра) либо параметров пространства состояний (четыре выходных параметра):
[Ь, а] -
[z. р. к] = ...
[А. В. С, D] = ...
С учетом всего сказанного перечислим действия, выполняемые функциями расчета аналоговых фильтров:
Производится расчет фильтра-прототипа с заданными параметрами АЧХ.
Полученные нули и полюсы преобразуются в параметры пространства состояний.
Производится преобразование фильтра-прототипа к требуемому типу с заданными частотами среза.
Выполняется преобразование описания фильтра к заданному при вызове виду.
Выбор порядка фильтра
Рассмотренные выше функции расчета фильтров требуют задания в качестве входных параметров порядка фильтра и его частоты среза. При этом понятие частоты среза для фильтров разных типов определяется по-разному. Однако исходными данными при разработке фильтров, как правило, являются другие параметры: частотные границы полос пропускания (ир) и задерживания (иЛ), а также допустимая неравномерность АЧХ в полосе пропускания (/?р) и минимально необходимое затухание в полосе задерживания (/?5) (рис. 2.12). Серые области на рисунке демонстрируют допуски, в которые должна укладываться АЧХ фильтра в полосах пропускания и задерживания.
K(/)fку*
Полосовой фильтрРежекторный фильтр
Рис. 2.12. Задание исходных параметров для расчета ФНЧ, ФВЧ, полосовых и режекторных фильтров
Выбрать минимально необходимый порядок фильтра позволяют следующие однотипные функции пакета Signal Processing:
[n.Wn]=buttord(Wp/Ws,Rp,Rs.'s')
En.Wn]=cheblord(Wp,Ws.Rp.Rs.'s')
[n.Wn]=cheb2ord(Wp.Ws.Rp,Rs.'s')
Ln.Wn]=ellipord(Wp,Ws.Rp,Rs,'s')
ЗАМЕЧАНИЕ
Данные функции позволяют выбирать порядок как для аналоговых, так и для дискретных фильтров. Последний параметр 's’ является признаком аналогового расчета. Использование этих функций для определения требуемого порядка дискретных фильтров обсуждается в разделе «Функции выбора порядка фильтров» главы 6.
Входной параметр Rp — допустимый уровень пульсаций в полосе пропускания (в децибелах), Rs — минимально необходимое затухание в полосе задерживания (в децибелах). Параметры Wp и Ws задают границы полос пропускания и задерживания, способ задания этих параметров зависит от типа проектируемого фильтра:
ФНЧ: Wp и Ws — числа, при этом должно выполняться неравенство Wp < Ws;
ФВЧ: Wp и Ws — числа, при этом должно выполняться неравенство Wp > Ws;
полосовой фильтр: Wp и Ws — двухэлементные векторы, при этом должны выполняться неравенства Ws(l) < Wp(l) < Wp(2) < Ws(2);
режекторный фильтр: Wp и Ws — двухэлементные векторы, при этом должны выполняться неравенства Wp(l) < Ws(l) < Ws(2) < Wp(2).
Значения параметров Wp и Ws были обозначены на рис. 2.12 как сор и cos соответственно.
Выходными параметрами являются минимально необходимый для выполнения заданных требований порядок фильтра п и частота среза фильтра Wn. Эти параметры должны затем использоваться при вызове функции расчета фильтра. Возврат значения Wn избавляет пользователя от забот, связанных с тем, что при расчете разных фильтров понятие частоты среза имеет разный смысл. Для эллиптических фильтров и фильтров Чебышева первого рода Wn = Wp, для фильтров Чебышева второго рода Wn = Ws, а для фильтров Баттерворта значение Wn (напомним, что оно определяет частоту среза по уровню 3 дБ) зависит от заданного уровня пульсаций Rp следующим образом:
Поскольку порядок фильтра — величина целочисленная, то обычно оказывается, что фильтр минимально необходимого порядка обеспечивает некоторый запас по исходным параметрам. Этот запас можно использовать по-разному — либо сделать пульсации в полосе пропускания точно равными заданным, но увеличить затухание в полосе задерживания, либо точно выдержать заданное затухание в полосе задерживания, уменьшив при этом пульсации в полосе пропускания. Для эллиптических фильтров возможен еще один вариант — сужение переходной зоны за счет расширения полосы задерживания. Поведение функций выбора порядка фильтра в этом аспекте определяется тем, что при расчете фильтра должны будут использоваться те же параметры пульсаций Rp и Rs, что и при выборе порядка фильтра. Поэтому для фильтров Баттерворта и Чебышева первого рода будет увеличиваться затухание в полосе задерживания, для фильтров Чебышева второго рода — уменьшаться пульсации в полосе пропускания, а для эллиптических фильтров — расширяться полоса задерживания.
Расчет групповой задержки
В MATLAB нет функции, позволяющей вычислять групповую задержку для аналоговых систем (функция grpdelay предназначена только для дискретных систем; речь о ней пойдет в разделе «Расчет групповой задержки дискретной системы» главы 4). Поэтому в качестве небольшого примера рассмотрим возможную реализацию такой функции. Назовем ее, скажем, grp_del.
Прежде всего следует определиться с входными и выходными параметрами. Пусть функция получает векторы коэффициентов b и а полиномов числителя и знаменателя функции передачи, а также вектор значений круговой частоты w для расчета групповой задержки. Возвращаемый результат tau — вектор рассчитанных значений групповой задержки. Итак, функция будет использоваться следующим образом:
tau = grp_del(b, a. w)
Теперь нужно разобраться с алгоритмом работы функции, то есть получить формулы, по которым будут выполняться вычисления. Для этого вспомним, что функция передачи выражается в виде отношения двух полиномов и что при
делении комплексных чисел их фазы вычитаются. Если все это учесть в определении групповой задержки (см. формулу (2.2) в разделе «Фазовая и групповая задержка»), получим следующее:
, . d Л(уи) d . . d . .
тф (и) = — arg= — arg Л(усо) - —- arg SQm).
dco ZJ(jm) dcodco
Фаза комплексного числа равна арктангенсу отношения мнимой и вещественной частей (добавление константы ±л не имеет значения, так как оно не повлияет на результат дифференцирования по и):
. . d1тЛ(/со)dImS(?(o)
т (to) = — arctg- —- arctg
dcoКеЛ(уы) dcoReB(jco)
Наконец, дифференцирование арктангенса дроби дает следующее:
Ч(ю) =Ч(ю) =Re Л()со) -- Im Л( jco) - Im Л( уы) — Re Л( уи)dcodco
Ч(ю) =
Ч(ю) =
(2.15)(2.15)\A(j<
(2.15)
(2.15)
Re B(jto) -^- Im B(jm) - Im B(jto) — Re B^jm)dcodco
lsO'm)|2
Поскольку числитель и знаменатель функции передачи являются полиномами относительно переменной s = уш, выделение вещественной и мнимой частей, так же как и дифференцирование, сводится к простым манипуляциям с векторами коэффициентов полиномов. Комментарии на этот счет приводятся непосредственно в листинге функции:
function tau = grp_del(b, a. w)
I % размещаем коэффициенты в порЯдке возрастания степеней b = fl 1 pl г(Ь):
а = f 11 pl г(а);
% выравниваем длины векторов
^[b. а] = eqtflength(b, а):
% выделяем вещественную часть числителя
Вг = Ь:
Br(2:2:end) = 0;% только четные степени
Br(3:4:end) = -Br(3:4:end): % через раз - знак "минус" Ж выделяем мнимую часть числителя
В1 = Ь:
Bi(l:2:end) = 0:% только нечетные степени
Bi(4:4:end) = -В1(4;4:end); % через раз - знак "минус" £ выделяем вещественную часть знаменателя Аг = а;
Ar(2:2:end) = 0:% только четные степени
Ar(3:4:end) = -Ar(3:4:end): % через раз - знак "минус" £ выделяем мнимую часть знаменателя
Ai = а:
Ai(1:2:end) = 0:% только нечетные степени
Ат(4:4:end) = - А1 (4:4: end); % через раз - знак "минус"
Я размещаем коэффициенты в порЯдке убывания степеней
Ar=fl 1 pl г(Аг):
A1=fl 1 pl г(А1): Br=fliplr(Br): Вт=f11 plr(B1): % вычисляем знаменатели слагаемых den_B = conv(Br. Br) + conv(B1. Bi): den_A = convCAr. Ar) + conv(A1. Ai); % вычисляем числители слагаемых Lnum_B. tmp] = polyder(Bi . Br);
Lnum_A, tmp] = polyder(A1. Ar);
Я вычисляем групповую задержку
tau = -polyval(num_B, w)./polyval(den_B, w) + ...
polyval(num_A, w)./polyval(den_A, w):
Этот программный код в точности реализует формулу (2.15). Приведем ряд дополнительных комментариев. Переворачивание векторов-строк «задом наперед» с помощью функции flip!г производится исключительно для удобства выделения вещественных и мнимых частей — отсчитывать коэффициенты при этом проще от начала вектора, чем от конца. Функция eqtflength выравнивает длины переданных ей векторов, дополняя более короткий из них нулями в конце. Функция polyder, вызванная с двумя входными и выходными параметрами, вычисляет производную отношения двух полиномов, возвращая коэффициенты числителя и знаменателя результата. Нас в данном случае интересует только первый выходной параметр, поскольку числители слагаемых в (2.15) совпадают с числителями производных от дробей Im B(yco)/Re SQ'co) и Im 4(yco)/Re Л(усо). Умножение полиномов эквивалентно свертке векторов их коэффициентов, выполняемой с помощью функции conv (см. раздел «Дискретная свертка» главы 4). Для вычисления значений полиномов в заданных точках используется функция polyval.
Мы реализовали лишь простейший вариант — вычисление групповой задержки в заданных частотных точках. В принципе функцию можно расширить, реализовав возможности, аналогичные тем, которыми обладает функция freqs; вывод графика при отсутствии выходных параметров, задание вектора частот по умолчанию и т. д. Заинтересованный читатель может сделать это, изучив исходный код функции freqs (файл MATLABR12\Toolbox\Signal\Signal\freqs.m).
В качестве примера применения разработанной функции (не забудьте сохранить ее в виде файла с именем grp_del.m) построим с ее помощью графики зависимости групповой задержки от частоты для двух рассмотренных ранее фильтров- прототипов — Чебышева первого рода и Бесселя (рис. 2.13):
» % фильтр Чебышева первого рода
» Lz. р. k] = cheblap(5, 0.5): % нули и полюсы прототипа
» Lb, а] = zp2tf(z, р, к);Я коэффициенты функции передачи
» w = 0:0.01:5:
» tau = grp_del(b, a. w); Я групповая задержка
» plot(w. tau), grid X график групповой задержки
» % фильтр Бесселя
» [z. р, k] = besselap(5); X нули и полюсы прототипа
» [b, а] = zp2tf(z, р. к): X коэффициенты функции передачи » w = 0:0.01:5;
» tau = grp_del(b. a. w); X групповая задержка
» figure
Рис. 2.13. Частотная зависимость групповой задержки для фильтров Чебышева первого рода (сверху) и Бесселя (снизу)
Результаты расчетов показывают, что частотная зависимость групповой задержки для фильтра Чебышева первого рода имеет весьма изрезанный вид, а аналогичный параметр для фильтра Бесселя, как и было отмечено при рассмотрении соответствующего фильтра-прототипа, в полосе пропускания практически не меняется.
ГЛАВА 3 Дискретные сигналы
После двух вводных глав, посвященных основам теории сигналов и линейных систем, мы наконец приступаем к рассмотрению вопросов, непосредственно связанных с предметом данной книги — цифровой обработкой сигналов.
Сущность цифровой обработки состоит в том, что физический сигнал (напряжение, ток и т. д.) преобразуется в последовательность чисел, которая затем подвергается математическим преобразованиям в вычислительном устройстве. Трансформированный цифровой сигнал (последовательность чисел) при необходимости может быть преобразован обратно в напряжение или ток.
В данной главе будут рассмотрены принципы математического описания и анализа дискретных сигналов. Но прежде всего следует пояснить некоторые терминологические тонкости, которые, возможно, уже были замечены внимательным читателем: в названии книги упоминается цифровая обработка сигналов, а данная глава посвящена дискретным сигналам. С обсуждения разницы между этими понятиями мы и начнем.
Аналоговые, дискретные и цифровые сигналы
Исходный физический сигнал является непрерывной функцией времени. Такие сигналы, определенные во все моменты времени, называют аналоговыми (analog). Последовательность чисел, представляющая сигнал при цифровой обработке, является дискретным рядом (discrete series) и не может полностью соответствовать аналоговому сигналу. Числа, составляющие последовательность, являются значениями сигнала в отдельные (дискретные) моменты времени и называются отсчетами сигнала (samples). Как правило, отсчеты берутся через равные промежутки времени Т, называемые периодом дискретизации (или интервалом, шагом дискретизации — sample time). Величина, обратная периоду дискретизации,
называется частотой дискретизации (sampling frequency): /д = 1/Г. Соответствующая ей круговая частота определяется следующим образом: сод = 2л/Г.
Ясно, что в общем случае представление сигнала набором дискретных отсчетов приводит к потере информации, так как мы ничего не знаем о поведении сигнала в промежутках между отсчетами. Однако, как будет показано далее в разделе «Теорема Котельникова», существует класс аналоговых сигналов, для которых такой потери информации не происходит и которые могут быть точно восстановлены по значениям своих дискретных отсчетов.
Процесс преобразования аналогового сигнала в последовательность от счетов называется дискретизацией (sampling), а результат такого преобразования — дискретным сигналом.
При обработке сигнала в вычислительных устройствах его отсчеты представляются в виде двоичных чисел, имеющих ограниченное число разрядов. Вследствие этого отсчеты могут принимать лишь конечное множество значений и, следовательно, при представлении сигнала неизбежно происходит его округление. Процесс преобразования отсчетов сигнала в числа называется квантованием по уровню (quantization), а возникающие при этом ошибки округления — ошибками (или шумами) квантования (quantization error, quantization noise).
Сигнал, дискретный во времени, но не квантованный по уровню, называется дискретным (discrete-time) сигналом. Сигнал, дискретный во времени и квантованный по уровню, называют цифровым (digital) сигналом. Сигналы, квантованные по уровню, но непрерывные во времени, на практике встречаются редко. Разницу между аналоговыми, дискретными и цифровыми сигналами иллюстрирует рис. 3.1.
Рис. 3.1. Аналоговый (слева), дискретный (в центре) и цифровой (справа) сигналы
Вычислительные устройства, предназначенные для обработки сигналов, могут оперировать только цифровыми сигналами. Существуют также устройства, построенные в основном на базе аналоговой схемотехники, которые работают с дискретными сигналами, представленными в виде импульсов различной амплитуды или длительности. Чтобы подчеркнуть отсутствие квантования по уровню, такие устройства иногда называют дискретно-аналоговыми (ДАУ).
В большей части книги речь пойдет о дискретных сигналах и методах их обработки, поскольку эффекты, связанные с квантованием по уровню, в большинстве случаев не будут приниматься во внимание. Однако этим эффектам, а также другим проблемам, связанным с конечной точностью представления чисел в вычислительных устройствах, специально посвящена глава 7.
Аналого-цифровое и цифро- аналоговое преобразование
Обобщенная структура системы цифровой обработки сигналов приведена на рис. 3.2. На вход поступает аналоговый сигнал sBX(t). Его временная дискретизация и квантование по уровню производятся в аналого-цифровом преобразователе (АЦП; английский термин — Analog-to-Digital Converter, ADC). Вообще эти два процесса — дискретизация и квантование — являются независимыми друг от друга, но они, как правило, выполняются внутри одной микросхемы. Выходным сигналом АЦП является последовательность чисел, поступающая в цифровой процессор ЦП, выполняющий требуемую обработку. Процессор осуществляет различные математические операции над входными отсчетами; ранее полученные отсчеты и промежуточные результаты могут сохраняться в памяти процессора для использования в последующих вычислениях. Результатом работы процессора является новая последовательность чисел, представляющих собой отсчеты выходного сигнала. Аналоговый выходной сигнал sBbIX(t) восстанавливается по этой последовательности чисел с помощью цифро-аналогового преобразователя (ЦАП; английский термин — Digital-to-Analog Converter, DAC). Напряжение на выходе ЦАП имеет ступенчатую форму (это также показано на рис. 3.2); при необходимости оно может быть преобразовано в плавно меняющийся выходной сигнал с помощью сглаживающего фильтра Ф.
Рис. 3.2. Структурная схема системы цифровой обработки сигналов
Устройства, реализуемые с помощью структуры типа рис. 3.2, могут иметь самый разнообразный характер. В цифровой форме можно создавать фильтры, анализаторы спектра, нелинейные преобразователи сигналов и многое другое.
ЗАМЕЧАНИЕ
Использование входных и выходных сигналов в аналоговой форме (и, следовательно, наличие АЦП и ЦАП) не всегда является необходимым. Так, при реализации цифрового генератора сигналов не нужен входной аналоговый сигнал, а ЦАП может отсутствовать, если конечный результат необходим только в цифровой форме.
Частота Найквиста
Гармонический сигнал может быть адекватно представлен дискретными отсчетами, если его частота не превышает половины частоты дискретизации (эта часто-
та называется частотой Найквиста (Nyquist frequency) — fN = /д/2 = 1/(27); toN = «д/2 = к/Т). Происхождение этого ограничения поясняет рис. 3.3. В зависимости от соотношения между частотой дискретизируемого гармонического сигнала и частотой Найквиста возможны три случая.
Если частота гармонического сигнала меньше частоты Найквиста, дискретные отсчеты позволяют правильно восстановить аналоговый сигнал (рис. 3.3, а).
Если частота гармонического сигнала равна частоте Найквиста, то дискретные отсчеты позволяют восстановить аналоговый гармонический сигнал с той же частотой, но амплитуда и фаза восстановленного сигнала (он показан пунктирной линией) могут быть искажены (рис. 3.3, б). В худшем случае все дискретные отсчеты синусоиды могут оказаться равными нулю.
Если частота гармонического сигнала больше частоты Найквиста, восстановленный по дискретным отсчетам аналоговый сигнал (как и в предыдущем случае, он показан пунктирной линией) будет также гармоническим, но с иной частотой (рис. 3.3, в). Данный эффект носит название появления ложных частот (aliasing), мы продолжим его рассмотрение в следующем разделе «Спектр дискретного сигнала».
[WvW
в
Рис. 3.3. Дискретизация гармонических сигналов с разной частотой
ЗАМЕЧАНИЕ
Эффекты, связанные с дискретизацией периодических процессов, наглядно проявляются при кино- и видеосъемке вращающихся объектов (таких, например, как колеса автомобилей). Из-за недостаточно высокой частоты дискретизации (частоты смены кадров) быстро вращающееся колесо может выглядеть неподвижным либо медленно поворачивающимся (причем в любую сторону).
Спектр дискретного сигнала
Преобразование Фурье позволяет вычислить спектральную плотность сигнала, представляющего собой функцию (как правило, времени либо пространственных координат). Дискретный же сигнал является последовательностью чисел, поэтому для анализа его спектра обычными (аналоговыми) средствами необходимо сопоставить этой последовательности некоторую функцию.
Традиционным способом такого сопоставления является представление отсчетов в виде дельта-функций с соответствующими множителями и задержками. Для последовательности отсчетов (х(£)} получится следующий сигнал:
s(t) = £х(£)8(С-&).(3.1)
Преобразование Фурье линейно, спектр дельта-функции равен единице, а задержка сигнала во времени приводит к умножению спектра на комплексную экспоненту. Все это (см. раздел «Свойства преобразования Фурье» главы 1) позволяет сразу же записать спектр дискретного сигнала:
5(®) = ^х^е'^.(3.2)
£ = -00
Из этой формулы видно главное свойство спектра любого дискретного сигнала: спектр является периодическим, и его период в данном случае равен 2л (то есть круговой частоте дискретизации, поскольку, составляя сигнал из дельта-функций, мы выбрали единичный интервал между ними, что дает ®д = 2л):
5(®±2л) = 5(®).
Следует также обратить внимание на размерность спектральной функции дискретного сигнала: она совпадает с размерностью отсчетов. Это связано с тем, что дельта-функции времени, из которых был составлен сигнал (3.1), имеют размерность частоты (см. раздел «Классификация сигналов» главы 1).
Формула (3.2) позволяет вычислить спектральную функцию по известным отсчетам х^. При конечном числе ненулевых отсчетов этот расчет несложен; он может быть выполнен с помощью функции MATLAB freqz (подробнее об этой функции см. раздел «Расчет частотной характеристики» главы 4).
Теперь рассмотрим несколько иную задачу. Пусть значения х^Ь) являются отсчетами аналогового сигнала s (t), взятыми с периодом Т:
x(k) = s(kT).
Выясним, как в этом случае спектр дискретного сигнала (3.2) связан со спектром аналогового сигнала 5(®).
Итак, мы рассматриваем дискретизированный сигнал в виде последовательности дельта-функций, «взвешенной» значениями отсчетов s(^T) аналогового сигнала s(t) (рис. 3.4):
saW= fXW-И).(3.3)
4=-оо
Рис. 3.4. Дискретизированный сигнал в виде последовательности дельта-функций
ЗАМЕЧАЙИЕ
Термин «дискретизированный» в данном контексте подчеркивает, что последовательность отсчетов получена именно в результате дискретизации аналогового сигнала.
Так как функция 8(t - ^Г) равна нулю всюду, кроме момента t = кТ, можно заменить в выражении (3.3) константы s (^Т) на исходный непрерывный сигнал s(t):
s^t^s^^t-kT).(3.4)
Далее заметим, что сумма, входящая в выражение (3.4), является периодическим сигналом, а потому может быть представлена в виде ряда Фурье. Коэффициенты этого ряда, согласно (1.9), равны
1 7/21
Сп=1 \W)e-^dt=±.(3.5)
В формуле (3.5) было учтено, что в интервал интегрирования (-Т/2, Т/2) попадает только одна дельта-функция, соответствующая к = 0.
Таким образом, периодическая последовательность дельта-функций может быть представлена в виде комплексного ряда Фурье (1.8):
tW-kT) = ± ^е^,(3.6)
£ = -00^ П = -«
где со„ = 2лп/Т. Подставив (3.6) в (3.4), получим
п = -оо1 п=-®
Умножение сигнала на exp(jtont) соответствует сдвигу спектральной функции на со„, поэтому спектр дискретизированного сигнала можно записать следующим образом:
=(37)
Таким образом, спектр дискретизированного сигнала представляет собой бесконечный ряд сдвинутых копий спектра исходного непрерывного сигнала s(t) (рис. 3.5). Расстояние по частоте между соседними копиями спектра равно частоте дискретизации сод = 2л/Т.
Следует также отметить, что из-за наличия в формуле (3.7) множителя 1/Т спектр дискретизированного сигнала имеет размерность, совпадающую с размер-
ностью сигнала (как уже говорилось, это связано с тем, что функция 8(f) имеет размерность частоты).
I л/\\,I л/\\,-<од-Шд/20Шд/2<1>дшРис. 3.5. Спектр дискретизированного сигнала-<од-Шд/20Шд/2<1>дшРис. 3.5. Спектр дискретизированного сигнала
I л/\\,
I л/\\,
-<од-Шд/20Шд/2<1>дш
Рис. 3.5. Спектр дискретизированного сигнала
-<од-Шд/20Шд/2<1>дш
Рис. 3.5. Спектр дискретизированного сигнала
Характер спектра дискретизированного сигнала еще раз демонстрирует частотно-временную дуальность преобразования Фурье:
периодический сигнал —> дискретный спектр;
периодический спектр -> дискретный сигнал.
В начале данного раздела мы получили формулу (3.2), позволяющую рассчитать спектр последовательности отсчетов {х(^)}, никак не связывая эти отсчеты с аналоговым сигналом. Только что полученная формула (3.7) предполагает, что отсчеты {Х^)} получены путем дискретизации аналогового сигнала s(t), и показывает связь между спектрами дискретизированного и аналогового сигналов. Следует подчеркнуть, что эти две формулы дают одинаковый результат.
Отсюда следует еще один важный факт. Соединить отсчеты {*(£)} для получения аналогового сигнала можно произвольным образом. В каждом случае аналоговый сигнал будет, разумеется, иметь свой спектр. Однако результат суммирования сдвинутых копий спектров по формуле (3.7) всегда будет одним и тем же, поскольку определяется только значениями дискретных отсчетов {х(^)} = {s(^T)} и формулой (3.2).
Рисунок 3.5 наглядно демонстрирует и способ восстановления непрерывного сигнала по дискретным отсчетам. Для этого необходимо пропустить дискретный сигнал через идеальный фильтр нижних частот (ФНЧ) с частотой среза, равной половине частоты дискретизации. АЧХ такого фильтра показана на рис. 3.5 пунктиром.
Очевидно, что точное восстановление сигнала возможно, если сдвинутые копии спектра не перекрываются. Из рис. 3.5 видно, что для этого необходимо, чтобы частота дискретизации как минимум в два раза превышала верхнюю граничную частоту в спектре сигнала:
®д > 2®в. (3.8)
Спектральное представление дискретного сигнала позволяет объяснить появление ложных частот (aliasing), речь о которых шла в разделе «Частота Найквиста» этой главы. Пусть дискретизации подвергается гармонический сигнал с час-
тотой ®0, превышающей частоту Найквиста, но меньшей частоты дискретизации. Спектр такого сигнала показан на рис. 3.6 сверху. Сдвинутые копии спектра, возникающие при дискретизации, создают попадающие в полосу восстановления (от нуля до частоты Найквиста) спектральные составляющие с частотой ®д - ®0 (рис. 3.6, снизу). Спектры, получающиеся после дискретизации гармонических сигналов с частотами ®0 и ®д - ®0, оказываются идентичными. Данный рисунок иллюстрирует в частотной области процесс дискретизации гармонического сигнала, показанный ранее на рис. 3.3.
Рис. 3.6. Спектры аналоговой (сверху) и дискретизированной (снизу) синусоиды с частотой, превышающей частоту Найквиста
В случае произвольного сигнала, если условие (3.8) не выполняется, сдвинутые копии спектра будут накладываться друг на друга, что приведет к неизбежным искажениям при восстановлении непрерывного сигнала (рис. 3.7).
Рис. 3.7. Перекрытие сдвинутых копий спектра при недостаточно высокой частоте дискретизации
Эти искажения вызваны тем, что спектральные составляющие сигнала с частотами, превышающими частоту Найквиста, равную ®д/2, не могут быть восстановлены правильно — вместо этого они вызывают наложение «хвостов» соседних сдвинутых копий спектра и появление ложных частот.
Если подлежащий дискретизации сигнал может содержать спектральные составляющие с частотами, превышающими частоту Найквиста, полезно предварительно пропустить его через ФНЧ с частотой среза, равной частоте Найквиста
(рис. 3.8). При этом все равно будут потеряны высокочастотные составляющие — сохранить их можно лишь путем повышения частоты дискретизации. Однако в этом случае благодаря отсутствию наложения «хвостов» не произойдет появления ложных частот и диапазон частот 0...сод/2 будет представлен в дискретном сигнале без искажений.
W«)l *
-Шд -<Вц/20ш,/2 Шдш
№)| ▲
-<од -0)д/20 Щд/2 Годto
в
Рис. 3.8. При дискретизации сигнала, содержащего высокочастотные составляющие (а), полезно пропустить его через ФНЧ (6), чтобы избежать появления ложных частот (а)
Влияние формы дискретизирующих импульсов
Запишем выражение (3.3) в более общей форме, используя вместо дельта-функций импульсы s0(t) произвольной формы:
saW = ts(kT)s0(t-kT). (3.9)
Получить выражение для спектральной функции сигнала (3.9) будет проще всего, если рассмотреть этот сигнал как результат прохождения последовательности дельта-функций (3.3) через линейную стационарную систему с импульсной характеристикой s0(t). Действительно, при этом каждая из дельта-функций в (3.3) будет порождать на выходе цепи сигнал s0(O с соответствующими временной задержкой и амплитудным множителем, так что в результате получится именно выражение (3.9).
Поскольку при прохождении сигнала через линейную систему с постоянными параметрами его спектр умножается на комплексный коэффициент передачи этой системы (см. главу 2), спектр сигнала (3.9) будет отличаться от выражения (3.7) лишь дополнительным множителем — спектром импульса s0(ty
s»=^ts^-2^. (3.10)
Итак, отличие формы дискретизирующих импульсов от дельта-функций вызывает мультипликативные искажения спектра дискретного сигнала. Спектральная функция импульса, имеющего конечную энергию, затухает с ростом частоты, поэтому возникающие при дискретизации сдвинутые копии спектра сигнала s^ оказываются ослабленными.
Рассмотрим важный с практической точки зрения случай, когда s^t) представляет собой прямоугольный импульс с единичной амплитудой и длительностью, равной периоду дискретизации (рис. 3.9, слева). В данном случае дискретный сигнал приобретает ступенчатую форму, что характерно для сигнала на выходе ЦАП перед сглаживающим фильтром (см. рис. 3.2). Искажения спектра при этом описываются множителем 50( со) следующего вида:
50(со) = Js^e^dt = Т е^2.
График модуля функции 50( со) приведен на рис. 3.9 справа. Спад амплитудного спектра на частоте Найквиста, равной л/Г, составляет
!A^ZIM = ^ZEZ?) = 2 ~ 0,637 ® -3,9 дБ.
|5о(О)| л/2 л
В качестве примера на рис. 3.10 приведены результаты дискретизации треугольного импульса дельта-функциями и рассмотренными прямоугольными импульсами.
Из графиков видно, что ЦАП сам по себе является фильтром нижних частот, однако с весьма невысокой степенью подавления сдвинутых копий спектра. Кроме того, поскольку АЧХ такого фильтра весьма далека от прямоугольной, он обладает сильной неравномерностью в полосе пропускания и заметно ослабляет высокочастотные составляющие сигнала (на частоте Найквиста ослабление составляет почти 4 дБ).
Рис. 3.9. Прямоугольный дискретизирующий импульс (слева) и его амплитудный спектр (справа)
Рис. 3.10. Дискретизация треугольного импульса (слева — сигналы, справа — спектры): а — исходный аналоговый сигнал, б — дискретный сигнал в виде последовательности дельта-функций, а — ступенчатый сигнал (пунктирной линией показана форма амплитудного спектра дискретизирующих импульсов)
Теорема Котельникова
В начале данной главы уже было сформулировано утверждение о том, что некоторые сигналы могут быть без потерь информации представлены своими дискретными отсчетами. Полученное в предыдущем разделе выражение для спектра
дискретизированного сигнала позволяет выделить тот класс сигналов, для которых это возможно, и описать способ такого восстановления.
Согласно (3.7), спектр дискретизированного сигнала представляет собой сумму сдвинутых копий спектра исходного сигнала, при этом шаг сдвига равен частоте дискретизации ®д. Из рис. 3.5 видно, что если в спектре аналогового сигнала не содержится составляющих с частотами, превышающими частоту Найквиста (®д/2), то сдвинутые копии спектра не будут перекрываться. В этом случае использование идеального ФНЧ с прямоугольной АЧХ позволит выделить исходную (несдвинутую) копию спектра, сосредоточенную в окрестностях нулевой частоты, и, таким образом, в точности восстановить исходный аналоговый сигнал.
АЧХ идеального ФНЧ, восстанавливающего аналоговый сигнал, приведена на рис. 3.11 слева. Коэффициент передачи в полосе пропускания равен Т, а не единице, чтобы компенсировать множитель 1/Тв формуле (3.7). С помощью обратного преобразования Фурье найдем импульсную характеристику фильтра (рис. 3.11 справа):
h(0 =h(0 =(3.11)(3.11)Рис. 3.11. Амплитудно-частотная (слева) и импульсная (справа) характеристики идеального восстанавливающего фильтраРис. 3.11. Амплитудно-частотная (слева) и импульсная (справа) характеристики идеального восстанавливающего фильтра
h(0 =
h(0 =
(3.11)
(3.11)
Рис. 3.11. Амплитудно-частотная (слева) и импульсная (справа) характеристики идеального восстанавливающего фильтра
Рис. 3.11. Амплитудно-частотная (слева) и импульсная (справа) характеристики идеального восстанавливающего фильтра
Дискретизированный сигнал (3.3) представляет собой сумму дельта-функций. При прохождении такого сигнала через восстанавливающий ФНЧ каждая дельта-функция породит на выходе соответствующим образом сдвинутую и масштабированную копию импульсной характеристики фильтра. Выходной сигнал (в точности соответствующий исходному аналоговому сигналу), таким образом, будет представлять собой сумму сдвинутых и умноженных на отсчеты сигнала копий импульсных характеристик идеального ФНЧ (3.11):
(3.12)(3.12). ( t-kT sm л s(O= £ s№ \ ь
(3.12)
(3.12)
Т
Подводя итог всему сказанному, сформулируем теорему Котельникова: любой сигнал s(t), спектр которого не содержит составляющих с частотами выше некоторого значения ®в = 2л/в, может быть без потерь информации представлен свои-
ми дискретными отсчетами {s^F)}, взятыми с интервалом Т, удовлетворяющим следующему неравенству:
1^^=—.(3.13)
2/, ®в
Восстановление исходного непрерывного сигнала s(t) по набору его дискретных отсчетов ^s(kT)^ производится по формуле (3.12).
ЗАМЕЧАНИЕ
В зарубежных источниках данная теорема называется теоремой Найквиста (Nyquist theorem) или теоремой дискретизации (sampling theorem).
t-kT кГ .t-kTt-kT кГ .t-kTФормула (3.12) представляет собой разложение сигнала s(t) в ряд по системе функций {q>k(t)}> называемой базисом Котельникова-.
t-kT к
Г .
t-kT
t-kT к
Г .
t-kT
sin
Ф*(0 =—
Формирование непрерывного сигнала по его дискретным отсчетам поясняет рис. 3.12. Пунктиром показаны графики отдельных слагаемых формулы (3.12), сплошной линией — восстановленный сигнал. Ниже приводится код MATLAB, использованный при построении рисунка:
» t - -2:0.01:6:% время длЯ восстановленного сигнала
» td = -2:6:Ж номера отсчетов
» s - [004321000]:Ж дискретный сигнал
» d = [td' s']:Ж данные длЯ функции pulstran
» у = pulstran(t. d, 'sine'): Ж восстановленный сигнал
» plot(td. s. 'o', t. у) Ж график восстановленного сигнала
» hold onЖ выводим графики отдельных sinc-импульсов
» for k=l:length(s). plot(t. s(k)*sinc(t-td(k)). ':’), end
» hold off
ЗАМЕЧАНИЕ
При построении рис. 3.12 была использована функция pulstran. Она позволяет сформировать сигнал в виде суммы конечного числа импульсов произвольной формы с заданными задержками и множителями, что делает ее очень удобной при построении графиков сигналов, восстановленных по дискретным отсчетам согласно теореме Котельникова. Эта функция будет подробно рассмотрена далее, в разделе «Генерация последовательности импульсов» этой главы.
Рисунок 3.12 наглядно демонстрирует главное свойство сигнала с ограниченным спектром — его бесконечность во времени. Хотя отличны от нуля лишь несколько отсчетов показанного сигнала, аналоговый сигнал оказывается бесконечно колеблющимся — между нулевыми отсчетами (на рисунке это отсчеты с номерами -2, -1, 4, 5, 6) его значения отличны от нуля. Эти колебания нигде не заканчиваются, хотя их амплитуда стремится к нулю.
Рис. 3.12. Восстановление непрерывного сигнала по его дискретным отсчетам
Иногда можно встретить примерно следующее «объяснение» сущности теоремы Котельникова: «если брать отсчеты достаточно часто, в промежутках между ними сигнал с ограниченными спектром не успеет сильно измениться, и мы сможем точно восстановить его». Такая трактовка является принципиально неправильной. Замечательное обсуждение этого вопроса содержится в [6], здесь же ограничимся краткими пояснениями и одним примером.
Когда мы говорим об ограниченной полосе частот сигнала, имеется в виду спектральная функция всего сигнала, имеюгцего бесконечную длительность. При этом мгновенные спектры отдельных фрагментов сигнала могут содержать сколь угодно высокие частоты.
ЗАМЕЧАН ИЕ
Под мгновенным спектром подразумевается спектральная функция «вырезанного» из сигнала фрагмента конечной длительности.
В частности, в отдельном промежутке между соседними отсчетами сигнал с ограниченным спектром может иметь сколь угодно сложную форму, например произвольное число раз менять знак.
В качестве примера восстановим по формуле (3.12) непрерывный сигнал на основе последовательности, содержащей четыре ненулевых отсчета: ..., О, 0, 30, 1, -1, -30, 0, 0, ... (рис. 3.13):
» t = 0:0.01:8:% времЯ длЯ восстановленного сигнала
» td = 2:5:% номера ненулевых отсчетов
» s = [30 1 -1 -30]: % дискретный сигнал
» d = [td' s']:% данные длЯ функции pulstran
» у = pulstran(t. d. 'sine'): % восстановленный сигнал
» plot(td, s. 'o', t, y)
» grid
Результат, показанный на рис. 3.13, свидетельствует о том, что фрагмент восстановленного сигнала между 3-м и 4-м отсчетами представляет собой колебание с периодом, равным интервалу дискретизации (то есть с частотой, вдвое превышающей частоту Найквиста!). Однако весь сигнал, составленный из сдвинутых функций базиса Котельникова, не содержит спектральных составляющих с частотами, большими частоты Найквиста.
Рис. 3.13. Сигнал с ограниченным спектром, содержащий фрагмент с колебаниями высокой частотыРис. 3.13. Сигнал с ограниченным спектром, содержащий фрагмент с колебаниями высокой частоты
Рис. 3.13. Сигнал с ограниченным спектром, содержащий фрагмент с колебаниями высокой частоты
Рис. 3.13. Сигнал с ограниченным спектром, содержащий фрагмент с колебаниями высокой частоты
Восстановление радиосигнала по отсчетам видеосигнала
Если для восстановления сигнала воспользоваться не ФНЧ, а идеальным полосовым. фильтром со средней частотой исод и шириной полосы пропускания, равной о)д, будет выделена пара сдвинутых копий спектра 5((о±2лп/Г). Из свойств преобразования Фурье (см. формулу (1.18) в разделе «Умножение сигнала на гармоническую функцию» главы 1) следует, что такой спектр соответствует радиосигналу следующего вида (предполагается, что условие теоремы Котельникова выполнено и сдвинутые копии спектра не перекрываются):
(3.14)(3.14)Sp(t) = 2з(£)со5(исод£)
(3.14)
(3.14)
Таким образом, с помощью полосового фильтра можно из дискретных отсчетов видеосигнала получить аналоговый радиосигнал.
Импульсная характеристика идеального полосового фильтра с указанными па
раметрами имеет вид sin л—
n(t) = —-—-cos 2л— . t V Г)
л — Т
Поэтому во временной области формирование радиосигнала по отсчетам видеосигнала описывается следующим образом:
ЛО = X s<hT)ЛО = X s<hT). ( t-hT sin лl тt-hTл T. ( t-hT sin лl тt-hTл Tnt I cos 2л— . I T)nt I cos 2л— . I T)(3.15)(3.15)
ЛО = X s<hT)
ЛО = X s<hT)
. ( t-hT sin л
l т
t-hT
л T
. ( t-hT sin л
l т
t-hT
л T
nt I cos 2л— . I T)
nt I cos 2л— . I T)
(3.15)
(3.15)
ЗАМЕЧ АНИE
В формулах (3.14) и (3.15) имеется множитель cos(«coat), что свидетельствует о чисто амплитудной модуляции получаемого радиосигнала. Подробнее о модуляции речь пойдет в главе 8.
Квадратурная дискретизация узкополосных сигналов
Пусть дискретизации необходимо подвергнуть узкополосный сигнал, который в общем случае может иметь как амплитудную, так и угловую модуляцию:
s(t) = A(t) cos (coot + cp(t)),
где со0 — несущая частота, A(f) и cp(t) — законы амплитудной и фазовой модуляции соответственно, представляющие собой медленно (по сравнению с cos(co0t)) меняющиеся функции.
Частоту дискретизации для такого сигнала можно выбрать исходя непосредственно из теоремы Котельникова, при этом она должна быть не меньше, чем 2 (со0 + Дсо/2) = 2 со0 + Део, где Део — ширина спектра сигнала s(t\ Однако возможен другой вариант (правда, требующий предварительной обработки сигнала) — квадратурная дискретизация.
Запишем аналитический сигнал для s(t) (аналитический сигнал был рассмотрен в разделе «Комплексная огибающая» главы 1):
s(t) = A(t)eMt)eiM()t.
Информация, переносимая сигналом, заключена в его комплексной огибающей
A(t) = A<t)eM‘\
Спектр этого комплексного сигнала занимает полосу частот -Дсо/2 ...Дсо/2. Поэтому, согласно теореме Котельникова, минимально допустимая частота дискретизации для этого сигнала равна Део, что значительно меньше, чем в случае прямой дискретизации. Однако отсчеты такого сигнала, естественно, будут комплексными. Рассмотрим способ реализации квадратурной дискретизации (рис. 3.14). Входной сигнал умножается на колебания двух генераторов (гетеродинов, heterodyne) с частотой ©о, сдвинутые по фазе друг относительно друга на 90° — cos co0t и sin co0t. Результат каждого из умножений содержит две составляющие — низкочастотную и высокочастотную (на частоте 2ш0):
s(t)cos toot = A(t)COs(a>0t + (p(t))cos d)ot =
11
= -A(t)cos cp(t) + -A(£)cos(2co0t + <p(t)) =
11
= -ReA(t) + - A(t) cos(2co01 + <p(t)), s(t)sincoot = A(t)cos(co0t + (p(t))sincoot =
11
= --A(t)sin<p(t) + - A(t)cos(2co0t -ф(0) =
= -|lmA(O + ^A(Ocos(2to0t-(p(t)).
Рис. 3.14. Квадратурная дискретизация
Таким образом, для получения вещественной и мнимой частей комплексной огибающей сигнала нужно после перемножения пропустить результаты через фильтры нижних частот, чтобы устранить вторую гармонику несущей. Полученные в результате сигналы, пропорциональные ReA(t) и ImA(t), подвергаются дискретизации с частотой не ниже, чем
Део о
2 = Део.
ЗАМЕЧАЙ и е
Данная процедура сдвига спектра сигнала путем умножения его на опорное гармоническое колебание с последующим выделением нужных спектральных составляющих с помощью фильтра называется гетеродинированием (heterodyning).
Рассмотренная схема получила широкое распространение при обработке радиосигналов. Квадратурное гетеродинирование просто и дешево реализуется аналоговыми средствами, цифровая часть благодаря низкой частоте дискретизации также оказывается сравнительно несложной.
Z-преобразование
Удобным способом анализа дискретных последовательностей является z-преобразование (z-transform). Смысл его заключается в том, что последовательности
чисел ^х (6)} ставится в соответствие функция комплексной переменной г, определяемая следующим образом:
(3.16)(3.16)ВД = ^xO^.
(3.16)
(3.16)
к = -ао
Разумеется, функция X(z) определена только для тех значений z, при которых ряд (3.16) сходится.
/-преобразование играет для дискретных сигналов и систем такую же роль, как преобразование Лапласа — для аналоговых. Определяющим при этом является тот факт, что, как мы увидим в главе 4, z-преобразование импульсной характеристики дискретной системы является дробно-рациональной функцией переменной 2.
Примеры вычисления z-преобразования
Вычислим z-преобразование для некоторых часто встречающихся на практике дискретных сигналов.
Единичная импульсная функция
Единичная импульсная функция является дискретным аналогом дельта-функции (см. раздел «Классификация сигналов» главы 1) и представляет собой одиночный отсчет с единичным значением:
Г1 k = О
^oW = L , „(3.17)
[О, к * 0.
Расчет его z-преобразования не представляет сложности:
Хй^= lxQ(hKfe =Vz-° =1. к = -®
Функция Хо(2) сходится на всей комплексной плоскости.
Единичный скачок
Дискретный единичный скачок по смыслу полностью соответствует своему аналоговому прообразу (см. раздел «Классификация сигналов» главы 1):
х(к) = ( [0, ^>0.
Используя определение z-преобразования (3.16), получаем
Х<2)= ^Х<кК' =^.2-\(3.18)
6 = -ОС6=0
Ряд (3.18) является суммой бесконечной геометрической прогрессии с первым членом l-z”° = 1 и знаменателем z"1. Как известно, такой ряд сходится при |z"*| < 1, то есть при | z | > 1, и его сумма равна
Х^ = ^А_.(3.19)
ЗАМЕНАМ ИЕ
Можно записать результат и в виде X(z) = z/(z - 1), но в теории z-преобразования принято использовать отрицательные степени z.
Дискретная экспоненциальная функция
Дискретная экспоненциальная функция определяется следующим образом:
I °- ^<0’ [Л ^>0.
Для вычисления z-преобразования нужно вычислить сумму следующего ряда:
000000
Х^ = ^x^z^ = YA-h = ^axzyk. h=-co6=06=0
Как и в предыдущем случае, этот ряд представляет собой сумму геометрической прогрессии. Первый член равен 1, знаменатель равен az~v. Таким образом, ряд сходится при |az-1| < 1, то есть при |z| > \а\, а его сумма равна
Х^ = -1_(3.20)
1-az
Дискретная затухающая синусоида
Последняя из рассматриваемых здесь дискретных последовательностей представляет собой отсчеты синусоиды с произвольными частотой и начальной фазой и экспоненциально меняющейся амплитудой:
x(h) = afe cos(co^ + ср).
Для вычисления z-преобразования можно представить косинус по формуле Эйлера в виде полусуммы двух комплексных экспонент, а потом воспользоваться уже готовым результатом (3.20):
cosy-scos(o)-(p)z"‘
Л (Z)г- .
1 -2acos(co)z 1 + z
Так же как и в случае дискретной экспоненты, ряд сходится при |z| > |а|.
Связь z-преобразования с преобразованиями Лапласа и Фурье
Дискретное z-преобразование очень просто связано с преобразованиями Лапласа и Фурье. Рассмотрим последовательность, определенную при k > 0, и сопоставим ей временной сигнал в виде набора дельта-функций:
s(t) = £x(6)8(t-6T),(3.21)
где Т — интервал дискретизации. Преобразование Лапласа для сигнала (3.21) равно:
5(р) = J s(t)e"pt dt = J ^x(k)8(t -kT)ept dt = ^x(£)j 8(t -kT)e^ptdt.
00 к*°к=° ■0
Воспользовавшись фильтрующим свойством дельта-функции (см. формулу (1.1) в разделе «Классификация сигналов» главы 1), получим
S(P) = t,x<k)e"pkT.
Эта формула переходит в формулу (3.16), определяющую г-преобразование, если выполнить подстановку г = ерТ.
Таким образом, взаимное соответствие между z-преобразованием X(z) и преобразованием Лапласа 5(р) описывается следующим образом:
X(z) = 5^ Inz^,
S<p^ = X(epTy
Похожими формулами описывается и связь z-преобразования X(z) с преобразованием Фурье 5(со) (заметим, что при рассмотрении этой связи нет необходимости считать последовательность односторонней):
X(z) = 5|— Inz |, UT ■ J
5(co) = X(e>r).(3.22)
Свойства z-преобразования
Тесная связь z-преобразования с преобразованиями Фурье и Лапласа обусловливает и подобие свойств этих преобразований. Однако имеется и некоторая специфика, возникающая из-за дискретного характера рассматриваемых сигналов.
Линейность
/-преобразование, согласно определению (3.16), является линейной комбинацией отсчетов последовательности, поэтому оно подчиняется принципу суперпозиции:
если {х^)} «^ Xt(z) и {х2(&)} «^ X2(z),
то ^axt(h) + Ьх20^ о aXt(z) + bX2(z).
Задержка
Если z-преобразование последовательности {х(&)} равно X(z), то z-преобразо- вание последовательности, задержанной на к0 тактов {y{k) = x(k - &0)), будет иметь вид
Y^ = ^y(k)z"k = ^хЦг-кйКк
Ж» Yx(.k-ka)z-(k-ko'1 ^z^ УХпК" = X^z"”».
Таким образом, при задержке последовательности на к0 тактов необходимо умножить ее z-преобразование на z~4°. Множитель z“*° является оператором задержки дискретной последовательности на кй тактов.
Свертка
Свертка двух бесконечных дискретных последовательностей {х^)} и Ус2(к^ определяется следующим образом:
У<к) = ^х^гОх^к-п).
Вычислим z-преобразование для последовательности ^у(к)У Y(z) = "^(Ж” = £ 'Е,х1(п)х2<к-п)г-к =
t^(n)x2(^-n)z-”z-(t-">t^(n)x2(^-n)z-”z-(t-">
t^(n)x2(^-n)z-”z-(t-">
t^(n)x2(^-n)z-”z-(t-">
(3.23)
xt<n)z"nxt<n)z"ntx2(k-n)z^tx2(k-n)z^
xt<n)z"n
xt<n)z"n
tx2(k-n)z^
tx2(k-n)z^
Ж^х^пК" -X^X^z).
Итак, свертке дискретных последовательностей соответствует произведение их z-преобразований.
3АМ ЕЧАН И Е
Рассматриваемая здесь свертка бесконечных дискретных последовательностей называется линейной сверткой; ее не следует путать с круговой сверткой периодических последовательностей, речь о которой пойдет при описании свойств дискретного преобразования Фурье в главе 5.
Обратное z-преобразование
(3.24)(3.24)Соответствие между дискретной последовательностью чисел и ее z-преобразова- нием является взаимно-однозначным. Формула перехода от z-преобразования к последовательности чисел называется обратным z-преобразованием и формально записывается следующим образом:
(3.24)
(3.24)
Интеграл в (3.24) берется по произвольному замкнутому контуру, расположенному в области сходимости функции X(z) и охватывающему все ее полюсы.
Практическое вычисление обратного 2-преобразования чаще производится путем разложения функции X(z) на простые дроби. Поясним это на несложном примере. Пусть
_ ~"2 2"_ ~"2 2"
_ ~"2 2"
_ ~"2 2"
Представим Х(г) в виде суммы простых дробей:
(l-Z-1) 1--2-*Д 2 J2(l-Z-1) 1--2-*Д 2 J2(3.25)(3.25)
(l-Z-1) 1--2-*
Д 2 J2
(l-Z-1) 1--2-*
Д 2 J2
(3.25)
(3.25)
Из сравнения слагаемых (3.25) с примерами 2-преобразований (3.19) и (3.20) видно, что первое слагаемое соответствует скачку с амплитудой, равной 2, а второе — дискретной показательной функции -2”*, k > 0. Итак, искомая последовательность имеет вид
х(к^) =х(к^) =2Т2\ ^>0,0,^<0.2Т2\ ^>0,0,^<0.
х(к^) =
х(к^) =
2Т2\ ^>0,
0,^<0.
2Т2\ ^>0,
0,^<0.
Дискретные случайные сигналы
Когда дискретизации подвергается случайный процесс, получаемая последовательность отсчетов будет зависеть от конкретной реализации дискретизируемого процесса, и, следовательно, она должна анализироваться статистическими методами.
Что касается одномерной плотности вероятности и связанных с ней статистических характеристик, здесь нет никаких отличий от случая аналогового сигнала — просто возможные одномерные сечения случайного процесса соответствуют моментам дискретизации: ?! = kT, и поэтому для привязки статистических параметров ко времени можно использовать номер отсчета: рх(х, k), mxQ^ и т. д.
Двумерные сечения дискретного случайного процесса также могут браться только в моменты дискретизации: tx = kT, t2 = пТ Поэтому двумерная плотность вероятности и связанные с ней характеристики случайного процесса зависят от двух номеров отсчетов к и п: рДхх, х2, к, п), Rx(k, п) и т. д.
В случае стационарного в широком смысле случайного процесса одномерные характеристики не зависят от момента времени (номера отсчета), а двумерные зависят лишь от промежутка между моментами времени (в дискретном случае — от разности номеров отсчетов Xk = к - и):
РЛ*. к) = рДх),
mxQT) = тх,
DAk) = Dx,
РхАлз ^2, k, tl) = Px(Xt, X2, &k),
Rx(k, n) - Rx(Ahy
Таким образом, для стационарного дискретного случайного процесса корреляционная функция является дискретной, то есть представляет собой последовательность чисел ^Rx(kk)).
Для вещественного случайного процесса Rx(k, и) = Rx(n, к), а если процесс еще и стационарный, то Rx(-k) = Rx(k).
Корреляционная матрица
Во многих задачах необходимо рассматривать конечный во времени фрагмент случайного процесса длиной N отсчетов. В этом случае корреляционная функция Rx(k, и) может быть представлена в виде матрицы, называемой корреляционной матрицей случайного процесса (для простоты будем считать, что случайный процесс имеет нулевое математическое ожидание):
Rx = [7?г(£,и)] =Rx = [7?г(£,и)] =х(0)х(0) х(1)х(0)х(0)х(0) х(1)х(0)х(0)х(1) х(1)х(1)х(0)х(1) х(1)х(1)x(N)x(0)x(N)x(0)х(У)х(1)х(У)х(1)х(0)х(ЛГ-1)х(Тм^Т)x(N - l)x(N -1)х(0)х(ЛГ-1)х(Тм^Т)x(N - l)x(N -1)
Rx = [7?г(£,и)] =
Rx = [7?г(£,и)] =
х(0)х(0) х(1)х(0)
х(0)х(0) х(1)х(0)
х(0)х(1) х(1)х(1)
х(0)х(1) х(1)х(1)
x(N)x(0)
x(N)x(0)
х(У)х(1)
х(У)х(1)
х(0)х(ЛГ-1)
х(Тм^Т)
x(N - l)x(N -1)
х(0)х(ЛГ-1)
х(Тм^Т)
x(N - l)x(N -1)
Чертой сверху здесь обозначено усреднение по ансамблю реализаций.
Если процесс нестационарный, все элементы матрицы могут быть различными. В случае стационарного процесса корреляционная матрица полностью определяется своими первыми строкой и столбцом, поскольку вдоль всех диагоналей, параллельных главной, стоят одинаковые элементы:
RAO)RXW...RAN-I)RX(N-1)
RxRxRA-1)Rx(0)...RAN-3)RAN-2)
Rx
Rx
RA-N + 2)RA-N + 3)...RAO)RXA)
RA-N + 1)RA-N + 2)...RA-1)ДД0)
ЗАМЕЧАНИЕ :
Матрицы, обладающие таким свойством, называются матрицами Теплица (Toeplitz matrix). В MATLAB сгенерировать матрицу Теплица по первым строке и столбцу позволяет функция toeplitz.
В случае вещественного случайного процесса, как уже отмечалось, Rx(-k) = Rx(k), и корреляционная матрица становится симметричной:
^(0)ВДRx(N-2)RAN-V)
(3.26)(3.26)RxwRx№...RAN-3)RAN-2)
(3.26)
(3.26)
RAN-2)Rx(N-3)...Rx(0)Rx(l)
RAN-1)RAN-2)...л,(1)RAO)
Важным свойством матриц вида (3.26) является то, что они всегда являются неотрицательно определенными, то есть все их собственные числа вещественны и неотрицательны.
Дискретный белый шум
Так называется стационарный дискретный случайный процесс, отсчеты которого некоррелированы друг с другом:
_ „,,. Д£ = 0,
Rx(^h) = <
И 7 [0,Д£*0.
В отличие от случая аналогового белого шума, дисперсия дискретного белого шума не является бесконечной, а потому такой шум является физически реализуемым.
Корреляционная матрица дискретного белого шума будет, очевидно, иметь диагональную структуру:
Rx = Dx I,
где I — единичная матрица.
Дискретные сигналы в MATLAB
Дискретный сигнал представляет собой последовательность чисел, а потому в MATLAB он представляется в виде вектора. Если необходимо реализовать многоканальную обработку сигналов, для этого удобно использовать второе измерение, представив набор сигналов в виде матрицы. Многоканальная обработка поддерживается многими функциями MATLAB.
Если сигнал одномерный, то в большинстве случаев функции MATLAB правильно обработают его при любой ориентации вектора — как в виде строки, так и в виде столбца. Однако в многоканальном случае, когда входной сигнал представлен в виде матрицы, обработка производится по столбцам.
Таким образом, столбцы матрицы трактуются как сигналы разных каналов, а строки — как отдельные векторные отсчеты многоканального сигнала. Для избежания путаницы рекомендуется и в одноканальном случае задавать сигналы в виде столбцов.
Отсчеты дискретного сигнала могут быть получены двумя путями. Первый вариант — расчет значений сигнала (моделирование сигнала), второй — получение
сигнала извне путем считывания его записи. Работу с записями сигналов в виде wav-файлов мы рассмотрим ближе к концу главы, а сейчас обсудим моделирование сигналов.
Расчет временных функций
Аналоговый сигнал, как уже говорилось, с математической точки зрения представляет собой функцию (как правило — функцию времени), и при его дискретизации мы получаем отсчеты, являющиеся значениями этой функции, вычисленными в дискретные моменты времени. Поэтому для расчета дискретизированного сигнала необходимо прежде всего сформировать вектор дискретных значений времени. Для этого удобно задать значение частоты дискретизации Fs (sampling frequency) и использовать обратную величину в качестве шага временного ряда:
» Fs = 8еЗ; X частота дискретизации 8 кГц
» t = 0:1/Fs:l; X одна секунда дискретных значений времени
» t = t':X преобразуем строку в столбец
Сформировав вектор опорных значений времени, можно вычислять значения сигнала, используя этот вектор в соответствующих формулах. Большинство математических функций MATLAB обрабатывают векторный аргумент поэлементно, так что с этим проблем не возникает. Однако следует помнить о том, что операции умножения, деления и возведения в степень в MATLAB имеют матричный смысл, поэтому при расчете одномерных функций времени следует использовать поэлементные версии этих операций (. *, . / и .А). Приведем несколько примеров:
» А = 2:% амплитуда - два вольта
» fO = 1еЗ;X частота - 1 кГц
» phi = pi/4:Я начальная фаза - 45°
» si = А * cos(2*pi*f0*t + phi); X гармонический сигнал
» alpha = 1еЗ:% скорость затухания
» s2 = exp(-alpha*t) .* si; % затухающая синусоида
Для визуализации дискретных сигналов могут использоваться различные графические средства MATLAB в зависимости от конкретной ситуации. Часто вполне допустимым является соединение дискретных отсчетов линиями, то есть построение графика с помощью функции plot (рис. 3.15, а). При этом хорошо видна общая форма сигнала (фактически в этом случае мы получаем график аналогового сигнала, полученного путем линейной интерполяции), но незаметны отсчетные точки. Если необходимо отобразить именно их, можно отказаться от соединения точек линиями (рис. 3.15, бу
Помимо функции plot существуют другие графические функции, специально предназначенные для отображения дискретных последовательностей. Функция stem изображает сигнал в виде «стебельков» (рис. 3.15, в), а функция stairs — в ступенчатом виде (рис. 3.15, г). В последнем случае изображается аналоговый сигнал с кусочно-постоянной интерполяцией (интерполяцией нулевого порядка). Такой сигнал получается на выходе ЦАП при отсутствии сглаживающего фильтра. Вот последовательность команд MATLAB, при помощи которой был получен рис. 3.15:
» subplot(2, 2. 1): plot(s2(1:100))
» subplot(2. 2, 2); plot(s2(1:100). V)
» subplot(2, 2. 3): stem(s2(l:100))
» subplot(2. 2, 4): stairs(s2(1:100))
66Рис. 3.15. Различные формы представления графиков дискретного сигналаРис. 3.15. Различные формы представления графиков дискретного сигнала
6
6
Рис. 3.15. Различные формы представления графиков дискретного сигнала
Рис. 3.15. Различные формы представления графиков дискретного сигнала
ЗАМЕЧАНИЕ
Еще один способ визуализации сигналов обеспечивает функция strips. Она будет рассмотрена далее, в разделе «Чтение wav-файлов» этой главы.
Горизонтальная ось на приведенных графиках проградуирована в номерах отсчетов. Чтобы показать на этой оси значения времени, при вызове графических функций следует использовать два параметра, передав в первом из них соответствующий временной вектор, например так:
plot(t(1:100). s2(l;100))
Если необходимо сгенерировать многоканальный сигнал, каналы которого описываются одной и той же формулой, но с разными числовыми значениями параметров, для этого можно эффективно использовать средства матричных операций MATLAB. Простейший пример — генерация набора синусоид с заданными частотами (в приводимом ниже коде используется вектор t, сформированный ранее):
» f = [600 800 1000 1200 1400]: Я вектор частот (строка!)
» s3 = cos(2*pi*t*f);% пятиканальный сигнал
Здесь столбец значений времени t умножается на строку частот f. В результате получается матрица, содержащая все необходимые значения произведения времени и частоты. Далее эта матрица подвергается поэлементным преобразованиям (умножение на 2л и вычисление косинуса). Результат вычислений показан на рис. 3.16:
» plot(t(l:100). s3(l:100.:))
х 10’3
Рис. 3.16. Многоканальный сигнал
ЗАМЕЧАНИЕ
Напомним, что при визуализации матрицы функция plot строит графики именно по столбцам.
Если вычисление значений сигнала производится однократно, необходимые вычисления можно выполнить в ходе интерактивного сеанса работы либо описать в тексте MATLAB-программы. Если же в ходе решения задачи необходимо повторно обращаться к вычислениям, целесообразно оформить их в виде функции (см. раздел «Программирование» приложения А). При этом следует иметь в виду, что для использования многочисленных эффективных численных алгоритмов, реализованных в MATLAB, функция для расчета значений сигнала должна быть способна принимать векторный аргумент, содержащий набор значений времени.
Кусочные зависимости
Довольно часто возникает необходимость моделирования отсчетов сигнала, который для разных интервалов времени описывается разными формулами. Простейший случай такого рода — моделирование импульсов конечной длительности, значения которых описываются одной или несколькими формулами в пределах заданного интервала, а в остальное время равны нулю.
В MATLAB возможно несколько способов задания кусочных функций. Первый вариант — воспользоваться тем, что операции сравнения возвращают 1 при выполнении неравенства и 0 в противном случае, причем в случае векторного аргумента возвращается вектор результатов сравнения. Зададим таким образом односторонний экспоненциальный импульс (см. рис. 1.18):
s = А * exp(-alpha * t) .* (t >= 0):
Прямоугольный импульс, центрированный относительно начала отсчета времени (см. рис. 1.10):
s = А * (abs(t) <= Т/2);
Несимметричный треугольный импульс (см. рис. 1.14):
S = А * t / Т .* (t >= 0) .* (t <= Т);
В приведенных примерах следует обратить внимание на использование оператора . * для поэлементного перемножения векторов.
Недостаток данного способа состоит в том, что значения сигнала сначала вычисляются по заданной формуле для всех значений аргумента и лишь затем «вырезается» нужная область. Помимо возрастания времени вычислений это может привести к выдаче сообщения об ошибке, например, если при вычислении экспоненты в первом из приведенных примеров для большого отрицательного значения аргумента t произойдет переполнение.
Второй способ — выполнять вычисления только для тех моментов времени, для которых это действительно необходимо. Выделение набора элементов вектора t, для которых выполняется заданное условие, производится с помощью функции find. В этом случае следует принять во внимание два аспекта:
необходимо заранее, до вычислений, создать вектор сигнала такого же размера, как вектор моментов времени t (обычно этот вектор заполняют нулями);
поскольку набор номеров элементов вектора t, для которых выполняются нужные условия, придется использовать два раза, целесообразно сохранить этот набор в переменной.
Покажем, как данным способом генерируются те же три кусочно-заданных сигнала.
Односторонний экспоненциальный импульс:
X заполняем вектор сигнала нулями
s = zeros(s1ze(t)):
X находим номера неотрицательных элементов вектора ti
inds - find(t >= 0):
рассчитываем сигнал только в нужных точках
s(inds) = А * exp(-alpha * t(inds)):
Прямоугольный видеоимпульс (поскольку для расчета значений такого импульса не требуется вычислений с вектором t, переменную i nds можно не создавать — она понадобилась бы лишь один раз):
s = zeros(s1ze(t));
s(find(abs(t) <= Т/2)) = А;
Несимметричный треугольный импульс:
s = zeros(size(t)):
inds = find((t >= 0) & (t <= T)):
s(1 nds) = A * t(inds) / T:
Как видите, команд в данном случае нужно больше, но зато при этом не будет выполняться лишних вычислений и не появятся упомянутые выше сообщения об ошибках.
Функции генерации одиночных импульсов
В пакете Signal Processing имеется ряд функций, генерирующих часто встречающиеся на практике непериодические сигналы:
rectpul s — прямоугольный импульс;
tripuls — треугольный импульс;
sine — импульс вида $1п(л0/(л0;
gauspul s — радиоимпульс с гауссовой огибающей;
pulstran — последовательность из конечного числа импульсов произвольной формы.
Далее эти функции рассматриваются более подробно.
Прямоугольный импульс
Для формирования одиночного прямоугольного импульса с единичной амплитудой служит функция rectpul s:
у = rectpuls(t. width)
Здесь t — вектор значений времени, width — ширина (длительность) импульса.
Возвращаемый результат у — вектор рассчитанных значений сигнала, определяемых по следующей формуле:
. width , width
,<t<,
I 22
Кwidth . width
О, t<, t>.
I22
Параметр width можно опустить, при этом его значение по умолчанию равно 1 и функция rectpul s производит результат, соответствующий математической функции rect.
В качестве примера сформируем пару разнополярных прямоугольных импульсов с амплитудой 5 В и длительностью 20 мс каждый, расположенных справа и слева от начала отсчета времени. Частоту дискретизации выберем равной 1 кГц. Результат показан на рис. 3.17:
» Fs = 1еЗ:% частота дискретизации
» t - -40е-3:1/Fs:40е-3: % дискретное время
» Т = 20е-3;X длительность импульсов
» А = 5:Я амплитуда
» s = -А * rectpuls(t+T/2, Т) + А * rectpuls(t-T/2, Т):
» plot(t. s)
» ylim([-6 6])
Рис. 3.17. Сигнал, сформированный с использованием функции rectpulsРис. 3.17. Сигнал, сформированный с использованием функции rectpuls
Рис. 3.17. Сигнал, сформированный с использованием функции rectpuls
Рис. 3.17. Сигнал, сформированный с использованием функции rectpuls
Треугольный импульс
Для формирования одиночного треугольного импульса с единичной амплитудой служит функция tri puls:
у = tripuls(t, width, skew)
Здесь t — вектор значений времени, width — ширина (длительность) импульса, skew — коэффициент асимметрии импульса, определяющий положение его вершины. Пик импульса расположен при t = width*skew/2. Параметр skew должен лежать в диапазоне от -1 до 1.
Возвращаемый результат у — вектор рассчитанных значений сигнала, определяемых по следующей формуле:
2t + width width (skew + 1) ’2t - widthwidth (skew -1)2t + width width (skew + 1) ’2t - widthwidth (skew -1)width2width2width • skew2width • skew2width ■ skewwidth~2~ < 2width ■ skewwidth~2~ < 2
2t + width width (skew + 1) ’
2t - widthwidth (skew -1)
2t + width width (skew + 1) ’
2t - widthwidth (skew -1)
width2
width2
width • skew2
width • skew2
width ■ skewwidth
~2~ < 2
width ■ skewwidth
~2~ < 2
width
2
Параметры skew или skew и width можно опустить, при этом используются их значения по умолчанию: skew = 0 (симметричный импульс) и width = 1.
В качестве примера сформируем симметричный трапециевидный импульс с амплитудой 10 В и размерами верхнего и нижнего оснований 20 и 60 мс соот-
ветственно. Частоту дискретизации выберем равной 1 кГц. Результат показан на рис. 3.18:
» Fs = 1еЗ;% частота дискретизации
» t = -50е-3:1/Fs:50е-3: % дискретное время
» А = 10:% амплитуда
» Т1 = 20е-3:% верхнее основание
» Т2 = 60е-3:% нижнее основание
» s = A*(T2*trlpuls(t. Т2) - Tl*tripuls(t, Т1)ШТ2-Т1);
» plot(t, s)
Рис. 3.18. Сигнал, сформированный с использованием функции tripuls
Импульс с ограниченной полосой частот
Для формирования сигнала, имеющего прямоугольный, то есть ограниченный по частоте спектр, служит функция sine:
у = sinc(t)
Единственным входным параметром является вектор значений времени t.
Возвращаемый результат у — вектор рассчитанных значений сигнала, определяемых по следующей формуле:
_ sin(nx)
лх
ВНИМАНИЕ
В отечественной литературе под функцией sine чаще всего понимается выражение sin(x)/x — без умножения аргумента на л. Средствами MATLAB такая функция может быть рассчитана как sinc(x/pi).
Спектральная функция сигнала, генерируемого функцией sine, имеет прямоугольный вид:
1,о,1,о,I to | < 7Г, | со | > л.I to | < 7Г, | со | > л.
1,
о,
1,
о,
I to | < 7Г, | со | > л.
I to | < 7Г, | со | > л.
В качестве примера построим с помощью функции sine график амплитудного спектра очень короткого радиоимпульса, на длительности которого укладывается лишь один период синусоидального заполнения. Согласно свойствам преобразования Фурье (см. главу 1) спектр такого сигнала должен представлять собой сумму двух спектров прямоугольного импульса, сдвинутых на величину частоты заполнения в сторону положительных и отрицательных частот. Спектр прямоугольного импульса, в свою очередь, описывается именно функцией sine (см. формулу (1.14) в разделе «Примеры расчета преобразования Фурье» главы 1). Результат показан на рис. 3.19.
Рис. 3.19. Короткий радиоимпульс (сверху) и его амплитудный спектр (снизу), построенный с помощью функции sineРис. 3.19. Короткий радиоимпульс (сверху) и его амплитудный спектр (снизу), построенный с помощью функции sine
Рис. 3.19. Короткий радиоимпульс (сверху) и его амплитудный спектр (снизу), построенный с помощью функции sine
Рис. 3.19. Короткий радиоимпульс (сверху) и его амплитудный спектр (снизу), построенный с помощью функции sine
» Fs = 1еЗ;Я частота дискретизации
» t = -0.1:l/Fs:0.1; X дискретное время
» fO = 10:% частота заполнения
» Т = 1/fO:Я длительность радиоимпульса
» s = rectpuls(t, Т) .* cos(2*p1*f0*t); Я радиоимпульс
» f = -50:50;Я вектор частот длЯ расчета спектра
» sp = Т/2 * (sinc((f-fO)*T) + s1nc((f+fO)*T)):
» plot(t. s)% график сигнала
» ylim([-l.l 1.1])
» figure
» plot(f. abs(sp)) % график амплитудного спектра
Как видите, из-за наложения друг на друга «хвостов» функции sine спектр оказывается существенно несимметричным относительно частоты заполнения радиоимпульса. Более подробно этот эффект будет обсуждаться в главе 8, посвященной модуляции.
Гауссов радиоимпульс
Для формирования одиночного радиоимпульса с гауссовой огибающей и единичной амплитудой служит функция gauspul s:
у = gauspuls(t, fc, bw. bwr)
Здесь t — вектор значений времени, fc — несущая частота в герцах, bw — относительная ширина спектра (ширина спектра, деленная на несущую частоту), bwr — уровень (в децибелах), по которому производится измерение ширины спектра.
Возвращаемый результат у — вектор рассчитанных значений сигнала, определяемых по следующей формуле:
у = exp (-at2) со5(2л/с О-(3.27)
Коэффициент а управляет длительностью импульса и, соответственно, шириной его спектра. Сигнал (3.27) имеет спектральную функцию, равную (см. раздел «Примеры расчета преобразования Фурье» главы 1)
,1( (со+2л/с)2)( (со-2л/с)2 Y
V a (( 4a )4aJJ
Если /с » Va, то можно пренебречь наложением «хвостов» сдвинутых копий спектра. Тогда параметр а связан с относительной шириной спектра и уровнем (в децибелах), по которому она определяется, следующим образом:
5(2л/c•bw)2
bwr - In 10
Параметры bwr, bw и fc можно опустить, при этом используются их значения по умолчанию: bwr = -6 дБ, bw = 0,5 и fc = 1000 Гц.
При вызове функции gauspul s можно использовать от одного до трех выходных параметров:
[у. yq. ye] = gauspuls(...)
Во втором выходном параметре yq функция возвращает квадратурное (quadrature ) дополнение для рассчитанного радиоимпульса у. Вектор yq отличается от вектора у фазовым сдвигом несущего колебания на 90° (подробнее о понятии квадратурного дополнения речь шла в разделе «Преобразование Гильберта» главы 1).
В третьем выходном параметре уе функция возвращает огибающую (envelope) сформированного радиоимпульса. Вектор уе представляет собой первый множитель формулы (3.27) (отсутствует умножение на косинус).
В качестве примера сформируем гауссов радиоимпульс с несущей частотой 4 кГц и относительной шириной спектра 10 %, измеренной по уровню -20 дБ, а затем построим график его спектра, чтобы убедиться в правильности расчетов. Частоту дискретизации примем равной 16 кГц. Результат показан на рис. 3.20.
Рис. 3.20. Гауссов радиоимпульс, сформированный функцией gauspuls (сверху), и его амплитудный спектр (снизу)
» Fs = 16еЗ;% частота дискретизации
» t = -10e-3:l/Fs:10e-3: К дискретное время
» Fc = 4еЗ:% несущая частота
» bw = 0.1:X относительная ширина спектра
» bwr = -20:% уровень измерения ширины спектра
» s - gauspuls(t, Fc, bw. bwr):
» Nfft = 2*nextpow2(length(s)):
» sp = fft(s. Nfft):% спектр
» sp_dB = 20*1ogl0(abs(sp)); % амплитудный спектр в децибелах
» f - (0:Nfft-l)/Nfft*Fs:К вектор частот спектра
» plot(t, s)К график сигнала
» figure
» % график амплитудного спектра
» plOt(f(l:Nfft/2). sp_dB(l:Nfft/2))
» % максимальный уровень спектра в децибелах
» sp_max_db = 20*logl0(max(abs(sp))):
» edges = Fc * [l-bw/2 l+bw/2]; % граничные частоты
» % отображаем заданные при расчете границы спектра
» hold on
» plot(edges. sp_max_db([l l])+bwr, 'o’)
» hold off
Из графика спектра (см. рис. 3.20 снизу) видно, что заданные при вызове функции gauspul s параметры спектра выдержаны точно.
Наконец, у функции gauspul s есть еще один вариант использования — она позволяет рассчитать время, за которое огибающая гауссового импульса упадет до заданного уровня относительно максимума. При этом вместо вектора значений времени в качестве первого входного параметра используется строка 'cutoff:
tc = gauspuls('cutoff'. fc. bw, bwr. tpe)
Входные параметры fc, bw и bwr имеют тот же смысл, что и раньше, a tpe — уровень огибающей (в децибелах относительно максимума), момент достижения которого нужно определить.
Возвращаемый результат tc — момент достижения огибающей уровня tpe (то есть полуширина импульса, измеренная по уровню tpe).
В качестве примера рассчитаем время, за которое огибающая сформированного в предыдущем примере импульса уменьшается на 6 дБ (примерно в два раза):
» gauspuls('cutoff’, Fc. bw. bwr. -6) ans =
0.0020
Полученный результат соответствует графику сигнала, приведенному выше на рис. 3.20.
Генерация последовательности импульсов
Функция pul stran служит для генерации конечной последовательности импульсов (pulse train) одинаковой формы с произвольно задаваемыми задержками
и уровнями. Сами импульсы могут задаваться одним из двух способов: именем функции, генерирующей импульс, либо уже рассчитанным вектором отсчетов.
Если импульсы задаются именем генерирующей функции, функция pul stran вызывается следующим образом:
у = pulstran(t. d, 'func’, pl. p2, ...)
Здесь t — вектор значений времени, d — вектор задержек, ' func' — имя функции, генерирующей одиночный импульс. В качестве этой функции могут использоваться, например, rectpul s, tri puls, gauspuls, а также любые другие функции (в том числе и «самодельные»), принимающие в качестве первого входного параметра вектор моментов времени и возвращающие вектор рассчитанных отсчетов сигнала. Оставшиеся параметры pl, р2, ... — дополнительные, они передаются функции func при ее вызове.
Таким образом, функция pul stran в данном варианте использования генерирует выходной сигнал следующим образом:
у - func(t-d(l). pl. р2, ...) + ...
func(t-d(2), pl. p2, ...) + ... func(t-d(3). pl. p2. ...) + ...
Если d — двухстолбцовая матрица, то первый столбец трактуется как задержки импульсов, а второй — как их уровни. При этом выходной сигнал формируется так:
у =d(l.l)*func(t-d(1.2).pl.р2,...)+...
d(2.1)*func(t-d(2.2).pl.p2,...)+...
d(3.1)*func(t-d(3.2).pl.p2....)+...
В качестве примера сформируем последовательность из пяти симметричных треугольных импульсов, интервалы между которыми линейно увеличиваются, а амплитуды экспоненциально уменьшаются. Частоту дискретизации выберем равной 1 кГц. Длительность импульса — 20 мс. Результат показан на рис. 3.21:
» Fs = 1еЗ:%частота дискретизации
» t = 0:l/Fs:0.5:Xдискретное времЯ
» tau = 20е-3:%длительность импульса
» d = [20 80 160 260380]’ * 1е-3: %задержки импульсов
» d(:.2) = 0.8.А(0:4)':Xамплитуды импульсов
» у = pulstran(t. d, 'tripuls', tau):
» plot(t. у)
Если для генерации одиночного импульса нет готовой функции, можно рассчитать вектор отсчетов импульса, а затем использовать второй вариант вызова функции pul stran:
у = pulstran(t, d, р. fs. ’method')
Смысл входных параметров t и d тот же, что и раньше. Вектор р должен содержать отсчеты одиночного импульса, а параметр fs указывает частоту дискретиза-
ции, использованную при расчете этого вектора. Считается, что первый отсчет из вектора р соответствует нулевому моменту времени.
Рис. 3.21. Последовательность треугольных импульсов, сформированная с помощью функции pulstran
Поскольку частота fs может не совпадать с шагом значений вектора t (в принципе они даже не обязаны представлять собой равномерную последовательность) и задержки из вектора d тоже не обязательно кратны этому шагу, для пересчета задержанных импульсов к сетке моментов времени t в общем случае необходимо использование интерполяции. Метод интерполяции может быть явно задан с помощью строкового параметра ’method'. Возможны все методы, поддерживаемые функцией Interpl: 'nearest', 'linear', 'spline', 'pchip', 'cubic' и 'v5cub1C.
Параметры fs и 'method' при вызове могут опускаться, в этом случае используются их значения по умолчанию: fs = 1 и 'method' = 'linear'.
В качестве примера сформируем последовательность из шести импульсов, имеющих форму одного периода функции sin2. Пусть длительность импульса равна 60 мс, а частота его дискретизации — 400 Гц. Расстояние между центрами импульсов будет одинаковым и равным 64 мс, а частота дискретизации выходного сигнала — 1 кГц. Импульсы будут экспоненциально затухать с ростом номера. Результат показан на рис. 3.22.
» X генерируем вектор отсчетов одиночного импульса
» FsO = 400:%частота дискретизации импульса
» tau = 60е-3;%длительность импульса
» tO = O:l/FsO:tau:%дискретное время для импульса
» sO = sin(p1*tO/tau)<2: %вектор отсчетов импульса
» % генерируем последовательность импульсов
» Fs = 1еЗ:% частота дискретизации последовательности
» t - 0:l/Fs:0.5:% дискретное время для последовательности
» d = (Г.6)' * 64е-3;% задержки импульсов
» d(:,2) = 0.6.*(0:5)’:X амплитуды импульсов
» % последовательность импульсов
» у - pulstran(t. d. s0, FsO);
» plot(t, у)
Рис. 3.22. Последовательность импульсов, сформированная функцией pulstran из вектора отсчетов одиночного импульса
Функции генерации периодических сигналов
Эти функции, входящие в пакет Signal Processing, позволяют формировать отсчеты периодических сигналов различной формы:
square — последовательность прямоугольных импульсов;
sawtooth — последовательность треугольных импульсов;
□ di ri с — функция Дирихле (периодическая sinc-функция).
Последняя рассматриваемая в данном разделе функция chi гр генерирует не периодический сигнал, а колебания с меняющейся частотой.
Далее эти функции рассматриваются более подробно.
Последовательность прямоугольных импульсов
Для формирования последовательности прямоугольных импульсов служит функция square. В простейшем случае эта функция принимает один входной параметр — вектор значений времени t;
у = square(t)
Генерируемая при этом последовательность импульсов имеет период 2л и скважность 2 (то есть длительность импульса равна половине периода). Последовательность является двуполярной — сигнал принимает значения -1 и 1.
Сформировать последовательность с периодом Т можно следующим образом:
у = square(2*pi*t/T)
С помощью второго входного параметра duty можно регулировать скважность получаемой последовательности. Однако этот параметр задает не саму скважность, а обратную ей величину — коэффициент заполнения (в процентах), то есть отношение длительности импульса к периоду:
у = squareCt. duty)
По умолчанию значение параметра duty равно 50, то есть генерируется меандр.
ВНИМАНИЕ
Обратите внимание на то, что значение параметра duty задается именно в процентах, а не в дробных единицах.
В качестве примера сформируем последовательность однополярных прямоугольных импульсов с амплитудой 3 В, частотой следования 50 Гц и длительностью 5 мс. Будем использовать частоту дискретизации 1 кГц и временной интервал -10 ... 50 мс (рис. 3.23):
» Fs = 1еЗ;» t = -10e-3:l/Fs:50e-3:» А = 3:» fO = 50:» tau = 5е-3:» Fs = 1еЗ;» t = -10e-3:l/Fs:50e-3:» А = 3:» fO = 50:» tau = 5е-3:X частота дискретизации
» Fs = 1еЗ;
» t = -10e-3:l/Fs:50e-3:
» А = 3:
» fO = 50:
» tau = 5е-3:
» Fs = 1еЗ;
» t = -10e-3:l/Fs:50e-3:
» А = 3:
» fO = 50:
» tau = 5е-3:
К дискретное время
К амплитуда
X частота следования импульсов
% длительность импульсов
» s = (square(2*pi*t*f0. f0*tau*100) + 1) * а/2:
» plot(t. s)
» ylim([0 5])
Рис. 3.23. Последовательность прямоугольных импульсов, полученная с помощью функции squareРис. 3.23. Последовательность прямоугольных импульсов, полученная с помощью функции square
Рис. 3.23. Последовательность прямоугольных импульсов, полученная с помощью функции square
Рис. 3.23. Последовательность прямоугольных импульсов, полученная с помощью функции square
ЗАМЕЧАН ИЕ
На рис. 3.23 видно, что импульсы имеют неодинаковую ширину. Поскольку длительность импульса в данном случае равна ровно пяти интервалам дискретизации (5 мс х 1 кГц - 5), из-за погрешностей представления значений времени в компьютере каждый импульс может быть представлен либо пятью, либо шестью ненулевыми отсчетами.
Последовательность треугольных импульсов
Для формирования последовательности треугольных импульсов служит функция sawtooth. В простейшем случае эта функция принимает один входной параметр — вектор значений времени t:
у = sawtooth(t)
Генерируемая при этом последовательность импульсов имеет период 2л. На протяжении периода сигнал линейно нарастает от -1 до 1.
Сформировать последовательность с периодом Т можно следующим образом:
у = sawtooth(2*pi*t/T)
С помощью второго входного параметра width можно регулировать длительность «обратного хода» — промежутка, на котором уровень сигнала линейно падает от 1 до -1. При указании параметра width сигнал линейно возрастает от -1 до 1 за время 2л width, а затем за время 2л(1 - width) линейно убывает от 1 до -1:
у = sawtooth(t. width)
По умолчанию значение параметра width равно 1. При width = 0,5 получится последовательность симметричных треугольных импульсов.
В качестве примера сформируем последовательность треугольных импульсов отрицательной полярности с амплитудой 5 В, периодом 50 мс и длительностью падающего участка 5 мс. Будем использовать частоту дискретизации 1 кГц и временной интервал -25 ... 125 мс (рис. 3.24).
Рис. 3.24. Последовательность треугольных импульсов, полученная с помощью функции sawtooth
» Fs - 1еЗ;
» t - -25e-3:l/Fs:125e-3: %
» А = 5:%
» Т - 50е-3:К
» tl = 5е-3:X
частота дискретизации
дискретное время
амплитуда
период
длительность падающего участка
» s = (sawtooth(2*pi*t/T, 1-tl/T) - 1) * А/2: » plot(t. s)
Функция Дирихле
Функция Дирихле описывается формулой
аМс,<.г)=2а<^.
л sin(x/2)
где л — целое положительное число.
Функция имеет пульсирующий вид: пульсации максимального уровня расположены при х = 2л&, значение функции в этих точках равно (-l)t(n“ 1). Между этими главными пульсациями расположены пульсации меньшего уровня. При нечетном л все главные пульсации имеют положительную полярность, и период функции равен 2л. При четном л полярность главных пульсаций чередуется, и период функции оказывается вдвое больше — 4л.
Для расчета функции Дирихле в MATLAB служит функция diric. Синтаксис ее вызова следующий:
у = diric(x. п)
Назначение входных параметров х и п соответствует приведенной выше формуле.
Функцию Дирихле называют еще периодической sine-функцией (о функции sine речь шла в этой главе ранее, в разделе «Импульс с ограниченной полосой частот»), При нечетном л это действительно так, и функцию Дирихле можно представить следующим образом:
diric„ (х) = £ sincl л I — - k 11. t—®у у2л ))
При четном л функция Дирихле является суммой сдвинутых во времени sinc- функций с чередующимися знаками'.
diric„(x) = £ (-1)6sincl л | — -к ] б—®у у2л ))
Поскольку функция sine имеет равномерный спектр в полосе частот от нуля до л, представление функции Дирихле в виде ряда Фурье (такое представление легко получить с помощью формулы, приведенной в разделе «Связь преобразования Фурье и коэффициентов ряда Фурье» главы 1) имеет очень простой вид — количество гармонических слагаемых конечно, а их амплитуды одинаковы:
□ при нечетном л
2 (л-1 )... н— cos х ;л ( 2)2 (л-1 )... н— cos х ;л ( 2)2 Гл-1 ) + - COS X .2 Гл-1 ) + - COS X .лл1 22
2 (л-1 )
... н— cos х ;
л ( 2)
2 (л-1 )
... н— cos х ;
л ( 2)
2 Гл-1 ) + - COS X .
2 Гл-1 ) + - COS X .
л
л
diric„(x) = —+ -cos(x) + -cos(2x) +
ллл л
л
л
□ при четном п
,. . , . 2(хЛ Ч( Зх
атс„(х) = - cos — + -cos — л\2) л12
В качестве примера построим графики функции Дирихле при нечетном и четном значениях и (и = 7 и и = 8, рис. 3.25):
» х = 0:0.01:15;
» plot(x, dlrlctx. 7))
» grid on
» title('n = 7 ’)
» figure
» plot(x, diric(x, 8))
» grid on
» title( 'n = 8')
Рис. 3.25. Функция Дирихле нечетного (сверху) и четного (снизу) порядка
Генерация сигнала с меняющейся частотой
Функция chi гр предназначена для генерации колебаний с единичной амплитудой, мгновенная частота которых меняется по заданному закону:
у = chirp(t. f0. tl. fl, ’method’, phi)
Здесь t — вектор значений времени, phi — начальная фаза колебания. Остальные параметры определяют закон изменения частоты.
ЗАМЕЧАНИЕ
Подробнее понятие мгновенной частоты будет обсуждаться в разделе «Угловая модуляция» главы 8.
Строковый параметр 'method' определяет тип зависимости мгновенной частоты от времени — 'linear', 'quadratic' или 'logarithmic'. Числовые параметры fO, tl и fl создают опорные точки для расчетов: в нулевой момент времени мгновенная частота равна fO, а в момент времени tl она равна fl.
Математически закон изменения мгновенной частоты выглядит следующим образом:
'linear':
/(О = fo + ₽б где Р = Л_А ;
'quadratic':
/(О ” /о + pt2, где р = ^ /° ;
ti
□ ' logarithmic' на деле противоречит своему названию — зависимость мгновенной частоты от времени при этом не логарифмическая, а экспоненциальная: /(t)-/o + ept, где р = Ы(^ "^Л
t;
ЗАМЕЧАНИЕ
Диапазон значений времени в векторе t может не включать в себя значений 0 и tl.
Параметры phi и 'method' при вызове функции можно опускать, тогда будут использованы их значения по умолчанию: phi = 0 и 'method' = 'linear'.
Ограничение сигнала по длительности не производится, колебания генерируются для всех значений времени, переданных функции в векторе t.
В качестве примера сформируем три сигнала, определенных на промежутке О ... 1 с и имеющих разные законы изменения мгновенной частоты. В нулевой момент времени все сигналы имеют мгновенную частоту 1 кГц, а в момент времени 1 с — 2 кГц. Частоту дискретизации выберем равной 8 кГц:
» Fs = 8еЗ:% частота дискретизации
» t = 0:1/Fs:l: X дискретное время
» fO = 1еЗ:
» tl = 1;
» fl = 2еЗ:
» si = chirp(t, fO. tl, fl. 'linear');
» s2 = chirp(t. f0, tl. fl. 'quadratic');
» s3 = chirp(t, f0. tl. fl. 'logarithmic'):
» specgram(sl, [], Fs)
» title!'linear')
» colormap gray
» figure
» specgram(s2. []. Fs)
» title!'quadratic')
» colormap gray
» figure
» specgram(s3, [J, Fs)
» title!'logarithmic')
» colormap gray
На рис. 3.26-3.28 показаны спектрограммы сформированных сигналов, наглядно демонстрирующие характер изменения мгновенной частоты при различных значениях параметра 'method'. Обратите внимание на то, что значения мгновенной частоты при t = 0 и t = 1 для всех трех сигналов совпадают.
ЗАМЕЧАНИЕ
Функция specgram строит спектрограмму, то есть зависимость мгновенного амплитудного спектра сигнала от времени. Величина модуля спектральной функции отображается цветом в координатах «время — частота». Подробнее о функции specgram будет рассказано в главе 5. Команда colormap gray устанавливает для графиков палитру оттенков серого цвета; в противном случае при черно-белом воспроизведении цветных спектрограмм зависимость оттенка от уровня амплитудного спектра оказалась бы немонотонной.
Рис. 3.26. Спектрограмма сигнала, сформированного функцией chirp при линейном законе изменения мгновенной частоты
Рис. 3.27. Спектрограмма сигнала, сформированного функцией chirp при квадратичном законе изменения мгновенной частоты
Рис. 3.28. Спектрограмма сигнала, сформированного функцией chirp при экспоненциальном законе изменения мгновенной частоты
Формирование случайных сигналов
Для генерации случайных чисел в MATLAB служат функции rand (равномерное распределение) и randn (нормальное распределение), а также средства пакета расширения Statistics, которые поддерживают множество разных законов распределения вероятности. В данном разделе мы кратко рассмотрим формирование дискретных случайных сигналов с заданным распределением вероятности и корреляционными свойствами.
Реализация заданного закона распределения вероятности
Как уже говорилось, средства генерации случайных чисел с различными законами распределения вероятности имеются в пакете Statistics. Справочная информация об этом пакете имеется, например, в книге [13], здесь же мы рассмотрим лишь общий способ получения случайных чисел с заданной функцией распределения на основе равномерно распределенных случайных чисел.
Пусть X — случайная величина, равномерно распределенная на интервале 0...1 (см. раздел «Равномерное распределение» главы 1). Для получения случайной величины У, имеющей функцию распределения Еу(г/), случайную величину X необходимо подвергнуть следующему нелинейному преобразованию:
Y=Fyv'(XY(3.28)
где F^ — функция, обратная по отношению к Еу(г/).
Действительно, при таком расчете вероятность того, что Y не превышает значения у, равна
P^Y^y^-P^X^F^Y
Но X имеет равномерное распределение, поэтому
P(X^FM(y))-FM(y).
Таким образом,
P^Y^-FAyY
то есть Y действительно имеет требуемую функцию распределения.
ВНИМАНИЕ
С теоретической точки зрения рассмотренный подход является универсальным, однако на практике он может оказаться неудобным, поскольку обратные функции распределения для многих законов (например, для нормального) не выражаются через элементарные функции. В таких случаях приходится использовать более изощренные методики.
Формулу (3.28) можно обобщить на случай произвольного преобразования функции распределения. Если случайная величина X имеет функцию распределения Fx(xY а нужно получить случайную величину Y с функцией распределения F^yY искомое преобразование следует записать следующим образом:
Y=F<-v\Fx<XY).
Преобразование F^X) делает распределение случайной величины равномерным, а преобразование Fy("1)(...)формирует случайную величину с заданным распределением вероятности.
В качестве примера сгенерируем по формуле (3.28) случайные числа с рэлеевским законом распределения (1.52). Функция распределения для закона Рэлея получается интегрированием его плотности вероятности:
у/2 Л/2 \
f/^J-^exp-^^i-exp-^M, у^°- о о( До )( До )
Обратная функция будет иметь вид
(3.29)(3.29)F^(г) = а^/-21п(1 -х), О < х < 1.
(3.29)
(3.29)
Генерируем равномерно распределенные случайные числа с помощью функции rand, производим их преобразование по формуле (3.29) и строим гистограмму с помощью функции hist (рис. 3.29):
» N - 10000:% количество чисел
» sigma - 1;% параметр рэлеевского закона
» X - rand(l, N);% равномерное распределение
» Y - sigma * sqrt(-2 * log(l - X)); X закон РэлеЯ » hist(Y. 25)% гистограмма по 25 интервалам
Полученная гистограмма показывает хорошее соответствие с графиком рэлеевской плотности вероятности, показанным ранее на рис. 1.38.
Реализация заданной корреляционной функции
Поскольку корреляционная функция случайного сигнала взаимно-однозначно связана с его спектром (см. раздел «Теорема Винера—Хинчина» главы 1), для формирования сигнала с заданной КФ можно взять отсчеты белого шума и пропустить их через фильтр с соответствующей АЧХ (ФЧХ фильтра не имеет зна-
чения, поскольку к случайным процессам неприменимо понятие фазового спектра). О теории работы дискретных фильтров речь пойдет в главе 4, а о методах их расчета — в главе 6. Здесь же мы, несколько забегая вперед и используя материал последующих глав, рассмотрим лишь один пример, сформировав сигнал с экспоненциальной функцией корреляции:
R^bk^c1^, |а|<1._(3.30)
Для формирования сигнала с такой КФ необходимо пропустить белый шум через дискретный фильтр, корреляционная функция импульсной характеристики которого имеет вид (3.30). Этому требованию удовлетворяет импульсная характеристика вида
h(k) = от jl-a2 ак, к > 0.
Такая характеристика соответствует рекурсивному фильтру первого порядка с коэффициентом обратной связи, равным а. Требуемую фильтрацию осуществим с помощью функции filter (она также будет рассмотрена в главе 4):
» ХО - randnd. 1000):Ж независимые нормальные отсчеты
» а = 0.9:X параметр экспоненциальной корреляции
» sigma = 2;% среднеквадратическое значение результата
» X = f 11 ter(sigma*sqrtd-a*2). [1 -а], ХО): % фильтрация
» subplot(2. 1. 1)
» plot(Х0(1:200))% график белого шума
» title('White noise')
» subplot(2, 1, 2)
» plot(X(1:200))Ж график коррелированного шума
» title('Correlated noise')
Графики белого шума и экспоненциально коррелированного сигнала показаны на рис. 3.30. Хорошо видно, что коррелированный шум сильно сглажен по сравнению с белым шумом.
White noise 4 I■■—
4 050100150200
Correlated noise
6 050W0150200
Рис. 3.30. Белый (сверху) и коррелированный (снизу) шум
Расчет корреляционной матрицы
Для оценки корреляционной матрицы случайного сигнала по вектору его отсчетов с использованием временного усреднения служит функция corrmtx, имеющая следующий синтаксис:
[X, R] - corrmtx(x. m. 'method')
Здесь х — вектор отсчетов сигнала, m — размерность рассчитываемой корреляционной матрицы. Необязательный строковый параметр 'method' управляет тем, как обрабатываются крайние отсчеты сигнала. С его возможными значениями можно познакомиться по документации пакета Signal Processing.
Результатами работы функции являются матрица промежуточных данных X и собственно корреляционная матрица R, которая рассчитывается как X' *Х (апостроф в MATLAB обозначает эрмитово сопряжение).
ВНИМАНИЕ
Понятие «корреляционная» в MATLAB используется, разумеется, в зарубежной трактовке (см. замечание в разделе «Корреляционные функции случайных процессов» главы 1). Это означает, что функция corrmtx не вычитает из сигнала постоянную составляющую перед вычислением корреляционной матрицы.
В качестве примера вычислим корреляционные матрицы и построим графики их первых строк (то есть корреляционных функций) для сформированных в предыдущем разделе белого шума ХО и экспоненциально коррелированного шума X (рис. 3.31).
Рис. 3.31. Оценка корреляционной функции белого (сверху) и экспоненциально коррелированного (снизу) шумаРис. 3.31. Оценка корреляционной функции белого (сверху) и экспоненциально коррелированного (снизу) шума
Рис. 3.31. Оценка корреляционной функции белого (сверху) и экспоненциально коррелированного (снизу) шума
Рис. 3.31. Оценка корреляционной функции белого (сверху) и экспоненциально коррелированного (снизу) шума
» N = 20;» N = 20;% размер корреляционной матрицы% размер корреляционной матрицы
» N = 20;
» N = 20;
% размер корреляционной матрицы
% размер корреляционной матрицы
» [tmp, RO] = corrmtx(X0, N);
» [tmp. R] = corrmtx(X, N);
» k = 0:N:% индексы КФ
» subplot(2, 1. 1)
» % график КФ белого шума
» stem(k. R0(1,:))
» title( 'White noise')
» subplot(2. 1. 2)
» Ж график КФ коррелированного шума
» stem(k. Rd,:))
» title('Correlated noise')
Из графиков видно, что отсчеты белого шума действительно некоррелированы, а отсчеты фильтрованного шума действительно дают требуемую экспоненциальную функцию корреляции.
Генерация дискретного нормального белого шума
Дискретный белый шум с нормальным распределением можно сгенерировать с помощью функции randn, имеющей следующий синтаксис:
X = randn(m, п)
В результате вызова функции генерируется массив X, содержащий m строк и п столбцов псевдослучайных чисел, имеющих нормальное распределение с нулевым математическим ожиданием и единичной дисперсией.
Параметр п при вызове можно опустить, по умолчанию используется значение n = т, то есть генерируется квадратная матрица.
В задачах, связанных с обработкой сигналов, для генерации дискретного нормального белого шума удобнее использовать функцию wgn (white Gaussian noise) пакета Communications, поскольку она позволяет в явном виде задавать уровень генерируемого шума. Синтаксис вызова функции следующий:
у = wgn(m, n. р, imp, state, 'powertype', 'outputtype'):
Здесь тип — как и ранее, размеры генерируемой матрицы, ар — мощность генерируемого шума в единицах, задаваемых параметром 'powertype' (по умолчанию — в децибелах). Остальные параметры являются необязательными и имеют значения по умолчанию.
Параметр imp задает импеданс нагрузки в омах (предполагается, что генерируются отсчеты случайного напряжения на этой нагрузке). По умолчанию используется импеданс нагрузки, равный 1 Ом.
Целочисленный параметр state позволяет принудительно задавать начальное состояние генератора гауссовских случайных чисел MATLAB (функция randn). По умолчанию используется текущее состояние.
Строковый параметр ' powertype' задает единицы измерения мощности, использованные при указании параметра р. Возможны следующие значения:
'dB' — мощность р задается в децибелах, значению 0 дБ соответствует единичная дисперсия (если использован параметр imp, дисперсия равна 1тр*2);
'dBm' — мощность р задается в децибелах, значению 0 дБ соответствует дисперсия, равная 10-3 (если использован параметр imp, дисперсия равна imp^2/1000);
'linear' — мощность р задается в ваттах, дисперсия генерируемого шума равна p*imp.
Строковый параметр 'outputtype' позволяет задавать генерацию вещественного или комплексного шума. Возможны значения ' real' (вещественный шум; генерируется по умолчанию) и 'complex' (комплексный шум). Если генерируется комплексный шум, его вещественная и мнимая части имеют мощности р/2.
Добавление белого шума к сигналу
В том же пакете Communications имеется еще одна полезная функция, работающая с нормальным белым шумом. Это функция awgn, реализующая канал связи с аддитивным белым гауссовым шумом (additive white Gaussian noise channel, AWGN channel), то есть добавляющая к сигналу белый шум с заданным уровнем. Синтаксис вызова функции следующий:
у = awgn(x, snr, sigpower, state, 'powertype');
Здесь x — вектор отсчетов сигнала. Скаляр snr задает отношение сигнал/шум в единицах, задаваемых параметром 'powertype' (по умолчанию — в децибелах). Остальные параметры являются необязательными и имеют значения по умолчанию.
Параметр sigpower указывает мощность сигнала х в единицах, задаваемых параметром 'powertype' (по умолчанию — в децибелах). По умолчанию предполагается, что мощность сигнала равна 0 дБ. Параметр sigpower может также принимать строковое значение 'measured', при этом мощность сигнала автоматически измеряется.
Целочисленный параметр state позволяет принудительно задавать начальное состояние генератора гауссовских случайных чисел MATLAB (функция randn). По умолчанию используется текущее состояние.
Строковый параметр ' powertype' задает единицы измерения мощности, использованные при указании параметров snr и sigpower. Возможны следующие значения:
’ dB' — мощность сигнала и отношение сигнал/шум задаются в децибелах;
'linear' — мощность сигнала задается в ваттах, отношение сигнал/шум — в разах.
При расчете мощности сигнала предполагается, что значения вектора х представляют собой отсчеты напряжения на нагрузке с импедансом 1 Ом.
Результатом работы является вектор «зашумленных» отсчетов у. Если значения х являются вещественными, функция awgn добавляет вещественный шум, если комплексными — комплексный.
Получение данных из внешних источников
Преобразование аналогового сигнала в цифровой и обратно — это процессы, которые выполняются аппаратными средствами. MATLAB же, будучи программным продуктом, может лишь взаимодействовать с соответствующим оборудованием (такое взаимодействие осуществляется, например, с помощью пакета Data Acquisition). Кроме того, в MATLAB предусмотрены средства для воспроизведения и записи звука, а также для работы со звуковыми файлами формата wav. В данном разделе мы подробно рассмотрим считывание и запись wav-файлов, а также воспроизведение звука. Детально рассматривать вопросы взаимодействия с оборудованием ввода/вывода данных из-за ограниченного объема книги не представляется возможным, поэтому в конце главы будет приведен лишь краткий обзор возможностей и демонстрационных примеров пакета Data Acquisition.
Чтение wav-файлов
Для считывания wav-файлов в MATLAB используется функция wavread. В простейшем случае она может быть использована следующим образом:
у = wavreadC filename');
Здесь filename — имя звукового файла (расширение .wav указывать не обязательно). В имя файла необходимо включить полный путь, за исключением тех случаев, когда файл находится в текущем (для MATLAB) каталоге или в одном из каталогов, входящих в список поиска MATLAB.
В результате вызова функции в переменную у будет помещено все содержимое указанного файла. Строки матрицы у соответствуют отсчетам сигнала, столбцы — каналам, которых в wav-файле может быть несколько.
ВНИМАНИЕ
Прежде чем вызывать функцию wavread в простейшей форме, подумайте, хватит ли вашему компьютеру ресурсов, чтобы считать wav-файл в память целиком. Ведь всего одна минута стереозаписи звука, сделанной с CD-качеством (частота дискретизации 44,1 кГц), содержит 60 с х 44 100 Гц х 2 канала - 5 292 000 отсчетов. MATLAB представит эти отсчеты в формате с плавающей запятой; затратив на каждый отсчет 8 байт (формат double). Таким образом, одна минута звука займет в памяти 42 336 000 байт (примерно 40 Мбайт). А ведь звуковые файлы бывают и длиннее...
ЗАМЕЧАНИЕ
Приведенная строка вызова функции вовсе не случайно оканчивается точкой с запятой. Этот символ подавляет вывод результатов на экран. Если его убрать, вы увидите бегущие по экрану ряды чисел — все содержимое матрицы у. Как правило, вывод этой информации не представляет интереса. Если вы все-таки забыли поставить в конце строки точку с запятой, ничего страшного. Просто прервите вывод, нажав клавиши Ctrl+C. Сама команда в этот момент уже выполнена, матрица у сформирована — вы прерываете только вывод ин- формацци на экран.
В звуковых файлах отсчеты сигнала представлены целыми числами, лежащими в диапазоне -128...+127 (8 бит на отсчет) либо -32 768...+32 767 (16 бит на отсчет). MATLAB нормирует эти значения, приводя их к диапазону -1...+1.
Помимо собственно отсчетов сигнала, в wav-файлах хранится еще и служебная информация о частоте дискретизации, количестве бит на отсчет и т. п. Узнать частоту дискретизации можно, используя при вызове функции второй выходной параметр:
. [у, Fs] - wavreadC'filename');
При этом переменная Fs получает значение, равное частоте дискретизации в герцах.
Чтобы узнать, сколько уровней сигнала содержится в звуковом файле (точнее, число бит на отсчет), необходимо добавить третий выходной параметр:
[у, Fs. bits] = wavreadCfilename');
Еще два параметра, которые часто хочется знать заранее, — это число отсчетов и каналов записи. Для получения данной информации нужно вызвать функцию wavread с двумя входными параметрами. Первый — это по-прежнему имя файла, вторым же должна быть текстовая строка 'size':
wavesize = wavreadC'filename'. 'size'):
В отличие от предыдущих вариантов вызова функции, в данном случае не производится считывания самих звуковых данных. Из wav-файла лишь извлекается служебная информация, которая возвращается в виде двухэлементного вектора- строки (в приведенном примере — wavesize). Первый элемент вектора содержит число отсчетов, второй — число каналов.
Наконец, имеется и важнейшая возможность считывания данных из wav-файла не целиком, а отдельными фрагментами (без этого нельзя было бы работать с большими файлами). Для этого также используется второй входной параметр функции wavread. Если этот параметр является числом, будет считано соответствующее количество отсчетов (начиная с первого):
у = wavreadC'filename'. N):
Если же нужный фрагмент расположен не в начале файла, придется указать его начало и конец. В этом случае второй входной параметр функции wavread должен представлять собой двухэлементный вектор:
у = wavreadC'filename'. [nl n2]):
В результате в переменную у будут считаны отсчеты с номерами от nl до п2 включительно (нумерация отсчетов, как и элементов матриц в MATLAB, начинается с единицы). При этом считываются все каналы звукозаписи. Возможности считывания информации из отдельных каналов не предусмотрено.
СОВЕТ
Как видите, получить информацию о частоте дискретизации и числе бит на отсчет можно только одновременно со считыванием звуковых данных. Если необходимо получить эту информацию заранее, до основной работы со звуком, можно считать всего один отсчет:
[у. Fs. bits] = wavreadC'filename', 1);'
Рассмотрим работу с wav-файлами на конкретном примере. Возьмем для этого бодрый аккорд tada.wav, входящий в стандартный набор звуков Windows.
Прежде всего узнаем число отсчетов и каналов:
» wavesize = wavread('c:\windows\media\tada'. 'size') wavesize =
427522
Как видим, эта стереозапись (2 канала) содержит 42 752 отсчета.
ЗАМЕЧАНИЕ ?
В рассматриваемых примерах используется файл tada.wav, входящий в состав Windows 98. В Windows 95 этот файл был монофоническим (одноканальным) и имел меньшую частоту дискретизации. Только что приведенный вызов функции wavread вернет для пего вектор [27459 1] (27 459 отсчетов и один канал).
Далее извлекаем информацию о частоте дискретизации и числе бит на отсчет:
» [у. Fs. bits] = wavread('c:\windows\media\tada', 1)
У =
О О
Fs =
22050 bits =
16
Полученные результаты очевидны — частота дискретизации 22,05 кГц, используется 16 бит на отсчет (65 536 уровней сигнала). «В нагрузку» мы получили значения первого отсчета из обоих каналов (вектор у).
Теперь мы можем узнать о файле кое-что еще, например определить продолжительность звучания. Для этого нужно разделить число отсчетов (первый элемент полученного ранее вектора wavesize) на частоту дискретизации Fs:
» wavesize(l)/Fs ans =
1.9389
Результат — длительность звука в секундах.
Чтобы узнать, сколько памяти потребуется MATLAB для хранения всей записи, нужно перемножить число отсчетов и число каналов, а затем увеличить результат еще в 8 раз. Можно сразу же поделить полученное значение на 1024, чтобы получить ответ в килобайтах, или на 10242, если ожидаемое число лучше измерять мегабайтами:
» prod(wavesize)*8/1024 ans =
668
Расход памяти оказывается вполне умеренным (668 Кбайт), так что мы можем позволить себе считать файл в память целиком (не забудьте про точку с запятой в конце строки):
» у - wavread('c:\windows\media\tada'):
Теперь все содержимое файла считано в матрицу у. Проверим ее размеры:
» size(y) ans =
427522
Как видите, размеры совпадают с полученной ранее информацией о файле: 42 752 отсчета (строк), два канала (столбца).
Чтобы «окинуть взглядом» звуковой сигнал, выведем его в виде графика — отдельно для правого и левого каналов стереозаписи, используя для этого функцию subplot (подробнее об использовании этой функции речь пойдет в разделе «Одновременный вывод нескольких графиков» приложения А):
» subplot(2, 1. 1)
» plot(y(:. D)
» subplot(2, 1. 2)
» plot(y(:. 2))
Результат показан на рис. 3.32. Имейте в виду, что из-за большого числа отсчетов для построения графика на медленном компьютере может потребоваться ощутимое время.
0.4
-0,4 11111111
00.511.522.533.544.5
х 104
0.4 11111111
-0.4 11111>11
00.511.522.533.544.5
х 104
Рис. 3.32. График звукового сигнала
Если при выводе графика разрешение по горизонтали имеет большее значение, чем по вертикали, можно воспользоваться функцией strips, специально предназначенной для отображения длинных сигналов в «нарезанном» на фрагменты виде (фрагменты выводятся друг под другом). Синтаксис вызова функции strips следующий:
strips(x, N)
Здесь х — вектор отсчетов сигнала (двумерные массивы не допускаются), N — число отсчетов в каждом фрагменте (этот параметр можно опустить, по умолчанию размер фрагмента составляет 200 отсчетов).
В качестве примера выведем с помощью функции strips график первого (левого) канала сигнала tada.wav (рис. 3.33):
» strips(y(:,1). 10000)
Рис. 3.33. График сигнала, выведенный с помощью функции strips
Над помещенным в переменную MATLAB звуковым сигналом можно выполнять любые преобразования, а затем воспроизвести полученный звук или сохранить его в виде нового wav-файла. Обо всем этом пойдет речь в нескольких следующих разделах. Можно также сохранить сигнал на диске как переменную MATLAB (в виде МАТ-файла) — см. раздел «Ввод и вывод данных» приложения А.
Функция wavread не является встроенной — она целиком написана на языке MATLAB с использованием средств работы с двоичными файлами. Если вас интересует структура wav-файлов и организация их считывания, попробуйте разобраться в тексте функции wavread — файл wavread.m расположен в каталоге MATLABR12\TOOLBOX\MATLAB\AUDIO.
MATLAB умеет работать только с несжатыми wav-файлами (формат РСМ). При попытке считать файл, в котором использован какой-либо из методов сжатия информации, будет выдано сообщение «Data compression format (...) is not supported».
ЗАМЕЧАНИЕ
В MATLAB имеется также функция auread, которая позволяет считывать звуковые файлы формата AU, используемого в основном на UNIX-платформах NeXT и SUN.
Запись wav-файлов
Чтобы записать вектор (или матрицу) на диск в виде wav-файла, используется функция wavwrite:
wavwrite(y, Fs. N, 'filename')
Здесь у — записываемые данные (вектор для монофонической записи, двухстолбцовая матрица — для создания стереофайла), Fs — частота дискретизации в герцах, N — число бит на отсчет (8 или 16), ' filename’ — имя создаваемого файла. Выходных параметров у данной функции нет.
Параметры N и Fs можно опускать, при этом используются значения по умолчанию — N = 16 и Fs = 8000:
wavwrite(y. Fs. 'filename')
wavwrite(y. 'filename')
Записываемые данные должны быть вещественными и лежать в диапазоне -1...1. Значения, выходящие из этого диапазона, будут «обрезаны» и сделаны равными ±1.
ЗАМЕЧАНИЕ
В MATLAB имеется также функция auwrite, которая позволяет записывать звуковые файлы в формате AU, используемом в основном на UNIX-платформах NeXT и SUN.
Воспроизведение звука
Если ваш компьютер оборудован звуковой картой, то, помимо работы с wav- файлами, вы имеете и возможность воспроизведения векторов и матриц в звуковом виде. Для этого имеются целых три функции — sound, soundsc и wavplay. В простейшем случае все три функции вызываются одинаково и обеспечивают воспроизведение вектора у (или двухстолбцовой матрицы — для стереозвука), содержащего отсчеты сигнала, с заданной частотой дискретизации Fs (в герцах):
soundiy, Fs)
soundsc(y. Fs)
wavplay(y. Fs)
Различие между этими функциями заключается в предоставляемых ими дополнительных возможностях.
Функция sound
Функция sound обеспечивает воспроизведение сигнала с заданными частотой дискретизации и числом уровней (бит на отсчет):
soundly, Fs. bits)
Здесь у — вектор или двухстолбцовая матрица отсчетов сигнала, Fs — частота дискретизации в герцах, bits — число бит на отсчет (8 или 16).
Параметры bits и Fs можно опускать, при этом будут использоваться их значения по умолчанию: Fs - 8192 и bits - 16.
Воспроизводимые данные у должны быть вещественными и лежать в диапазоне -1...1. Значения, выходящие из этого диапазона, «обрезаются» и делаются равными ±1.
Выходных параметров у функции нет. После вызова она передает вектор у звуковой карте для воспроизведения и сразу же, не дожидаясь окончания звука, возвращает управление командной строке MATLAB.
Если следующая команда sound будет использована до окончания предыдущего звука, будет выдано сообщение об ошибке «Unable to open sound device» (Невозможно открыть звуковое устройство).'
Функция soundsc
Функция soundsc (sound scaled) отличается от функции sound лишь тем, что производит предварительное масштабирование отсчетов сигнала. Для управления масштабированием добавляется четвертый входной параметр s lim:
soundsc(y, Fs. bits, s_11m)
Здесь входные параметры у, Fs, bits имеют то же назначение, что и для функции sound. Параметр s lim должен быть двухэлементным вектором [s low s high], он задает диапазон значений, который будет линейно преобразован к интервалу -1...1. Преобразование, таким образом, производится по формуле
2г/"(Siow + Shigh)
У =•
S high S ]ow
При s_lim = [-1 1] функция soundsc эквивалентна функции sound.
Параметры s lim, bits и Fs при вызове можно опускать, при этом используются их значения по умолчанию: Fs = 8192, bits = 16 и s lim = [min(y) max(y)]. Значение по умолчанию для s lim обеспечивает точное приведение полного диапазона значений сигнала к интервалу -1...1.
Функция wavplay
Наконец, третья функция, предназначенная для воспроизведения звука, имеет имя wavplay:
wavplay(у, Fs. ‘mode’)
Входные параметры у и Fs имеют тот же смысл, что и у предыдущих функций, а параметр ’mode’ управляет режимом воспроизведения. Этот параметр может принимать два значения:
’sync’ — синхронный режим, означающий, что функция вернет управление интерпретатору MATLAB только после окончания звука;
‘async’ — асинхронный режим, при котором функция передает данные для воспроизведения звуковым драйверам Windows и сразу же возвращает управление системе MATLAB, не дожидаясь окончания звука.
Параметры ’mode’ и Fs при вызове можно опускать, при этом используются их значения по умолчанию: Fs = 11025 и ’mode’ = ’async’.
Синхронный режим позволяет организовать в MATLAB-программе выдачу нескольких звуков подряд, не заботясь о расчете и соблюдении временных интервалов между соответствующими командами. В асинхронном же режиме можно одновременно с воспроизведением звука продолжать выполнение программы. К сожалению, при этом нет возможности программным путем проверить, закончилось ли воспроизведение звука.
ЗАМЕЧАНИЕ
Такая программная проверка будет возможна, если для воспроизведения звука воспользоваться средствами пакета Data Acquisition (краткая информация о его возможностях приводится далее).
Запись звука
Функция wavrecord позволяет записать звук в переменную MATLAB с помощью звуковой карты компьютера:
у = wavrecord(n, Fs. ch, 'dtype')
Здесь n — число записываемых отсчетов, Fs — частота дискретизации в герцах, ch — число каналов записи, ' dtype ’ — тип записываемых данных.
Возвращаемый результат у — матрица, каждый столбец которой соответствует одному каналу записи. При стереозаписи первый столбец — левый канал, второй — правый.
Для параметра ’ dtype ’ возможны следующие значения:
'double' — 16-битовая запись, данные масштабируются к диапазону -1...1 и представляются в 8-байтовом формате с плавающей запятой;
'single' — 16-битовая запись, данные масштабируются к диапазону -1...1 и представляются в 4-байтовом формате с плавающей запятой;
'intl6' — 16-битовая запись, данные представляются в двухбайтовом целочисленном формате (диапазон -32 768...32 767);
' uintS' — 8-битовая запись, данные представляются в однобайтовом беззнаковом целочисленном формате (диапазон 0...255, нулевому напряжению на входе соответствует значение 128);
Входные параметры 'dtype', ch и Fs можно опускать, при этом будут использоваться их значения по умолчанию: Fs - 11025, ch - 1, 'dtype' - 'double'.
Готовые записи сигналов
В разделе Audio базовой библиотеки MATLAB и в пакете расширения Signal Processing имеется несколько готовых записей сигналов, сохраненных в виде МАТ-файлов. Эти сигналы используются в качестве исходных данных в примерах, приводимых в документации, и демонстрационных программах. Возможно, вам они пригодятся для тестирования собственных программ и алгоритмов. Сведения об имеющихся сигналах приведены в табл. 3.1.
Таблица 3.1. Записи сигналов, имеющиеся в MATLAB
Имя файла
Пакет
Имя переменной
Размер
Частота дискретизации, Гц
Характер звука
chirp.mat
MATLAB
У
13129(1,6 с)
8192
Импульсы с меняющейся частотой
Продолжение ^
Таблица 3.1 (продолжение)
Имя файла
Пакет
Имя переменной
Размер
Частота дискретизации, Гц
Характер звука
gong.mat
MATLAB
У
42 028 (5,1 с)
8192
Удар гонга
handel.mat
MATLAB
У
73 113(8,9 с)
8192
Хор
laughter, mat
MATLAB
У
52 634 (6,4 с)
8192
Смех
splat.mat
MATLAB
У
10 001 (1,2 с)
8192
Тон с меняющейся частотой,затем звук удара
train, mat
MATLAB
У
12 880 (1,5 с)
8192
Гудок поезда
mtlb.mat
SP
mtlb
4001 (0,54 с)
7418
Произнесенное слово «MATLAB»
vcosig.mat
SP
vcosig
19 661 (2,4 с)
8192
Данный сигнал имеет очень забавную спектрограмму
Пакет расширения Data Acquisition
Пакет расширения Data Acquisition позволяет непосредственно из MATLAB работать с оборудованием аналогового и цифрового ввода/вывода данных. В комплект поставки входят драйверы для следующих устройств:
звуковых карт, поддерживаемых операционной системой Windows;
плат фирмы National Instruments серий Е и 1200;
плат фирмы ComputerBoards;
VXI-модулей E1432A/33A/34A фирмы Agilent Technologies.
Разработать драйверы для других устройств можно с помощью Data Acquisition Toolbox Adaptor Kit; дополнительную информацию можно получить на сайте фирмы The MathWorks, Inc. по адресу http://www.mathworks.com/products/daq/.
Пакет Data Acquisition (разумеется, в сочетании с перечисленным оборудованием) предоставляет следующие возможности:
аналоговый ввод и вывод информации в реальном масштабе времени, включая возможность одновременного выполнения аналого-цифрового и цифро- аналогового преобразований;
цифровой ввод и вывод информации в реальном масштабе времени;
запись вводимых данных на диск либо их загрузка непосредственно в переменную MATLAB;
буферизацию данных для осуществления ввода в фоновом режиме;
триггеры, управляемые программно или аппаратно генерируемыми событиями (это дает возможность осуществлять синхронизацию — например, запус-
кать процесс аналогового ввода при достижении входным сигналом некоторого уровня).
Подробно рассматривать пакет Data Acquisition в рамках данной книги не представляется возможным, поэтому покажем лишь пример его использования в двух демонстрационных программах, поставляемых в составе пакета.
Первая программа реализует осциллограф, позволяя просматривать графики сигналов, получаемых от имеющихся в системе устройств ввода данных. Данная программа может быть вызвана из командной строки (ее имя — daqscope ) либо из окна демонстрационных программ MATLAB (команда меню Help ► Demos, раздел Toolboxes/Data Acquisition, программа Example Oscilloscope).
Вид окна осциллографа приведен на рис. 3.34. Подходящего источника сигнала под рукой не оказалось, поэтому наблюдаются шумы и наводки, поступающие на линейный вход левого канала звуковой карты компьютера. Из графика видно, что основной период наводок равен 20 мс — это означает, что их главным источником является питающая сеть, напряжение которой имеет частоту 50 Гц. Уровень наводок составляет примерно 11 мВ, поэтому для того, чтобы их увидеть на графике, понадобилось перевести переключатель вертикального масштаба в положение Autoset (при этом у выводимой слева оцифровки вертикальной оси оказались «за кадром» знак «минус», ноль и десятичная точка).
Рис. 3.34. Осциллограф — демонстрационный пример пакета Data Acquisition
Второй пример — генератор сигналов различной формы. Имя программы для вызова из командной строки — daqfcngen. При использовании окна демонстрационных программ MATLAB после вызова команды меню Help ► Demos необхо-
димо выбрать раздел Toolboxes/Data Acquisition и программу Example Function Generator).
Вид окна генератора приведен на рис. 3.35. В списке, расположенном в левой части окна над полем графика, выбирается тип генерируемого сигнала:
Sine — гармонический сигнал;'
Sine — периодическая sinc-функция (функция Дирихле);
Square — последовательность прямоугольных импульсов;
Triangle — последовательность симметричных треугольных импульсов;
Sawtooth — последовательность пилообразных импульсов;
Random — случайный сигнал;
Chirp — колебания с плавно меняющейся частотой..
Рис. 3.35. Функциональный генератор — демонстрационный пример пакета Data Acquisition
Набор параметров, настраиваемых в нижней части окна, зависит от выбранного типа сигнала.
ГЛАВА 4 Дискретные системы
Теоретические сведения, приводимые в данной главе, в литературе довольно часто фигурируют под заголовками «Дискретные фильтры», «Принципы цифровой фильтрации» и т. п. (см., например, [1, 2, 4]). В принципе «дискретная система» и «дискретный фильтр» — это одно и то же, однако понятие «фильтр», сознательно или подсознательно, довольно тесно связывается с системами, которые одни частоты пропускают, а другие задерживают (см. рис. 2.5 в главе 2, где были показаны идеализированные АЧХ фильтров такого рода). Такой подход может создать ложное, ограниченное представление о назначении и возможностях дискретных линейных систем, которые способны выполнять и иные задачи, нежели выделение из сигнала определенной полосы частот. По этой причине в названии данной главы использован термин «дискретные системы». Однако в тексте главы слова «фильтр» и «система» будут использоваться как синонимы.
ЗАМЕЧАНИЕ
Далее, в главе 6, где пойдет речь о расчете (синтезе) систем, реализующих заданные (во многих случаях действительно полосовые) частотные характеристики, будет употребляться исключительно слово «фильтр».
Сущность линейной дискретной обработки
Вообще, дискретный фильтр — это произвольная система обработки дискретного сигнала, обладающая свойствами линейности и стационарности. Под этими свойствами понимается то же, что и в аналоговом случае (см. раздел «Классификация систем» главы 2): линейность означает, что выходная реакция на сумму сигналов равна сумме реакций на эти сигналы, поданные на вход по отдельности, а стационарность — что задержка входного сигнала приводит лишь к такой же задержке выходного сигнала, не меняя его формы.
ЗАМЕЧАНИЕ
Существуют и фильтры с переменными параметрами, не обладающие свойством стационарности. Это, например, адаптивные фильтры, меняющие свои параметры в зависимости от статистических свойств входного сигнала. Рассмотрение таких систем выходит за рамки данной книги. Дополнительную информацию можно найти в [18, 19]. Кроме того, несколько функций, реализующих алгоритмы адаптивной фильтрации, добавлено в последнюю (2.1) версию пакета Filter Design.
Любой фильтр обладает определенной частотной характеристикой. Чтобы она была нетривиальной, то есть чтобы коэффициент передачи фильтра на разных частотах был разным, выходной сигнал фильтра у(ф) должен зависеть от нескольких отсчетов входного сигнала х(&). Таким образом, дискретный фильтр должен обладать памятью.
Чтобы обеспечить линейность и стационарность, производимые фильтром математические операции должны ограничиваться сложением и умножением на константы.
Рассмотрим простейший пример. Пусть выходной сигнал фильтра равен сумме двух последних отсчетов входного сигнала:
z/(&) = x(k) + x(k - 1).
Убедимся в том, что эта система по-разному пропускает на выход сигналы разных частот. Для начала подадим на вход фильтра серию одинаковых отсчетов (то есть сигнал нулевой частоты):
Вход
Выход
1
1
1 + 1 = 2
1
1 + 1=2
1
1 + 1=2
Как видите, уровень постоянного сигнала фильтр увеличил в два раза. Теперь подадим на вход отсчеты, одинаковые по модулю, но с чередующимися знаками (то есть отсчеты гармонического сигнала с частотой Найквиста):
Вход
Выход
1
-1
-1 + 1 = 0
Вход
Выход
1
1 +(-!)- о
-1
-1 + 1=0
В отличие от постоянного сигнала, сигнал с частотой Найквиста на выход просто не прошел. Далее попробуем что-нибудь промежуточное, например сигнал с частотой, равной половине частоты Найквиста:
Вход
Выход
1
0
0+1 = 1
-1
-1 + 0- -1
0
0 + (-1) - -1
1
1+0=1
0
0 + 1 = 1
-1
-1 +0= -1
На выходе в данном случае получаются отсчеты синусоиды, имеющей в 72 раз большую амплитуду и некоторый фазовый сдвиг по сравнению со входным сигналом. Рассмотренный пример представляет собой простейший случай нерекурсивного фильтра. Такие фильтры суммируют некоторое число входных отсчетов, умножая их при этом на постоянные весовые коэффициенты.
Теперь заметим, что помимо выходных отсчетов мы можем использовать для вычислений и ранее рассчитанные значения выходного сигнала. Попробуем просто суммировать входной отсчет и предыдущий выходной отсчет:
у^ = x(k) + уО - 1).
Подаем на вход постоянный сигнал (начальное состояние фильтра считаем нулевым):
Вход
Выход
1
1 + 0=1
1
1 + 1=2
Вход
Выход
1
1+2 = 3
1
1+3 = 4
Так, очевидно, будет продолжаться и далее — выходной сигнал будет линейно нарастать, что рано или поздно приведет к переполнению разрядной сетки вычислительного устройства. Это сразу же демонстрирует нам главную отличительную черту фильтров, использующих при вычислениях предыдущие отсчеты выходного сигнала (их называют рекурсивными фильтрами) — из-за наличия обратных связей они могут быть неустойчивыми.
Попробуем уменьшить влияние обратной связи, разделив предыдущий отсчет выходного сигнала на 2:
У(£) = х^ + 0,5 y(k - 1).
Снова подаем на вход постоянный сигнал:
Вход
Выход
1
1 + 0,5-0 = 1
1
1 + 0,5-1 = 1,5
1
1 + 0,5-1,5 = 1,75
1
1 + 0,5-1,75 = 1,875
1
1 + 0,5 1,875 = 1,9375
Как видим, ситуация радикально изменилась — теперь выходной сигнал с уменьшающейся скоростью стремится к значению 2. Таким образом, переходный процесс в фильтре является бесконечным. Это еще одна отличительная черта рекурсивных фильтров.
Итак, рекурсивные фильтры суммируют при расчетах не только входные, но и некоторое количество предыдущих выходных отсчетов сигнала, умножая их при этом на постоянные весовые коэффициенты.
В общем случае дискретный фильтр суммирует (с весовыми коэффициентами) некоторое количество входных отсчетов (включая последний) и некоторое количество предыдущих выходных отсчетов:
y(k) = bo x(k) + bi x(k - 1) + ... + bm x(k - m) -
- av y(k - 1) - a2 y(k - 2) - ... - an y(k - n), (4.1) где Uj и bj — вещественные коэффициенты.
Данная формула называется алгоритмом дискретной фильтрации. Если по-иному сгруппировать слагаемые, чтобы с одной стороны от знака равенства были только входные отсчеты, а с другой — только выходные, получим форму записи, называемую разностным уравнением-.
y(k) + Qi y(k - 1) + s2 у(к - 2) + ... + о„ у(к - п) -
= bo x(k) + bi x(k - 1) + ... + bm xQt - m).(4.2)
ВНИМАНИЕ
Между отечественными и зарубежными источниками существуют расхождения в обозначениях коэффициентов при описании дискретных систем. В зарубежных публикациях коэффициенты а, относятся к отсчетам выходного сигнала, а коэффициенты Ь, — к отсчетам входного сигнала. В отечественной литературе (см., например, [1, 2,4]) все наоборот — коэффициенты а, относятся к отсчетам входного сигнала, а h, — выходного. В данной книге, демонстрирующей идеи и алгоритмы обработки сигналов с помощью системы MATLAB, ради уменьшения возможности путаницы принят вариант обозначении, соответствующий документации MATLAB.
Структура разностного уравнения похожа на структуру дифференциального уравнения аналоговой линейной системы (см. формулу (2.10) в разделе «Способы описания линейных систем» главы 2), только вместо операции дифференцирования в формуле фигурируют задержки дискретных последовательностей. Как мы увидим далее, этим определяется и общность подходов к описанию аналоговых и дискретных систем. Однако весьма существенным является то, что в дискретной системе не существует каких-либо принципиальных ограничений на соотношение между тип — количествами входных и выходных отсчетов, используемых при вычислениях.
Способы описания дискретных систем
Дискретные системы, как и аналоговые, могут описываться различными способами. Благодаря сходству свойств ^-преобразования со свойствами преобразований Лапласа и Фурье способы описания аналоговых и дискретных систем в основном похожи друг на друга.
Кроме того, практически каждый способ описания дискретной системы соответствует определенной структурной схеме из числа рассмотренных в разделе «Формы реализации дискретных фильтров».
Импульсная характеристика
В случае линейных систем с постоянными параметрами для анализа прохождения любого сигнала достаточно знать результат прохождения элементарного импульса в виде дельта-функции. Для дискретных систем также можно ввести в рассмотрение единичную импульсную функцию х^к) (см. раздел «Примеры вычисления z-преобразования» и формулу (3.17) в главе 3).
11Исходные сигналыИсходные сигналы131213121 23 41 23 4
1
1
Исходные сигналы
Исходные сигналы
1
312
1
312
1 2
3 4
1 2
3 4
Выходная реакция на единичный импульс х0(£) называется импульсной характеристикой дискретной системы и обозначается h(hy
Результат
-►
к
Рис. 4.1. Вычисление дискретной свертки
Как и в случае линейных систем с постоянными параметрами, знание импульсной характеристики позволяет проанализировать прохождение через дискретную систему любого сигнала. Действительно, прежде всего заметим, что произвольный сигнал {*(&)} можно представить в виде линейной комбинации единичных отсчетов:
x{k) = ^x{m)xa{k -т).
Выходной сигнал, исходя из линейности и стационарности рассматриваемой системы, должен представлять собой линейную комбинацию импульсных характеристик:
у(к) = ^x(m)h(k-m).(4.3)
Выражение (4.3) называется дискретной сверткой (точнее, дискретной линейной сверткой — ее не следует путать с круговой сверткой, которая будет рассматриваться далее, при обсуждении свойств дискретного преобразования Фурье в главе 5). Для физически реализуемой системы й(&) - 0 при k < 0, поэтому верхний предел суммирования в формуле (4.3) можно заменить на к'.
У^^ ^х^Н^-т).
Это означает, что система при вычислении очередного отсчета может оперировать только прошлыми значениями входного сигнала и еще ничего не знает о будущих.
Пример вычисления дискретной свертки, подробно иллюстрирующий выполняемые при этом математические операции, приведен на рис. 4.1.
Функция передачи
Применим рассмотренное в главе 3 г-преобразование к уравнению дискретной фильтрации (4.3). Так как это уравнение представляет собой дискретную свертку, то, согласно свойствам z-преобразования (см. формулу (3.23)), результатом будет являться произведение ^-преобразований:
У(2) - Х(г) H(z).(4.4)
Входящая в (4.4) функция H(z\ равная отношению ^-преобразований выходного и входного сигналов и представляющая собой г-преобразование импульсной характеристики системы, называется функцией передачи (transfer function) или системной функцией дискретной системы:
H^ = ^- = Yh<ky.-k.(4.5)
A(z) 4=0
Применив z-преобразование к обеим частям разностного уравнения (4.2), получим
У(;)(1 + «1 Г1 + а2 г"2 + ... + «п г'п) -
- ХууЬй + b\ z'x + bi z"2 + ... + bm z"™).
Отсюда легко получить вид функции передачи:
Н^ = ^±^±^22^™^(4.6)
Таким образом, функция передачи физически реализуемой дискретной системы может быть представлена в виде отношения полиномов по отрицательным степеням переменной г.
Частотная характеристика
Чтобы получить комплексный коэффициент передачи (частотную характеристику) дискретной системы, воспользуемся формулой (3.22) (см. раздел «/-преобразование» главы 3), описывающей связь ^-преобразования и преобразования Фурье:
К(ш) = Н«т) = ^(кК^1.(4.7)
t=o
Из (4.7) видно, что частотная характеристика дискретной системы, так же как и спектры дискретизированных сигналов (см. формулу (3.2) в главе 3), является периодической функцией частоты с периодом, равным частоте дискретизации Год = 2л/Г.
Нули и полюсы
Так же как и в аналоговом случае, разложив числитель и знаменатель функции передачи на множители, мы получим функцию передачи в следующем виде:
(1 -PjZ’ )(1)... (1)
Здесь к = Ьо — коэффициент усиления (gain), г, — нули функции передачи (zero), pi — полюсы функции передачи (pole). В точках нулей Hfa) = 0, а в точках полюсов H(pi) —> оо. Некоторая специфика формулы разложения связана лишь с тем, что при записи функции передачи дискретной системы используются отрицательные степени переменной z.
В данном случае дискретная система описывается набором параметров {с,}, {р,}, к. Нули функции передачи могут быть вещественными либо составлять комплексно-сопряженные пары. То же относится и к полюсам. Коэффициент усиления всегда вещественный.
Представление дискретной системы в виде наборов нулей и полюсов соответствует последовательной форме ее реализации (см. раздел «Формы реализации дискретных фильтров» далее в этой главе).
Всепропускающие фильтры
Всепропускающими (allpass) называют фильтры, АЧХ которых равна единице на всех частотах. Такие фильтры изменяют только фазы спектральных состав-
ляющих входного сигнала и могут использоваться, например, для линеаризации ФЧХ дискретных систем (то есть для выравнивания групповой задержки, вносимой системой).
Представление функции передачи дискретной системы в виде разложения на множители позволяет легко получить условия, при выполнении которых рекурсивный фильтр будет всепропускающим. Рассмотрим функцию передачи фильтра первого порядка, имеющего один полюс pv и один нуль zp
H(z) = kL^.
Квадрат АЧХ такого фильтра равен
| К(со)|2 = Н(е1юТ )Н\е’юТ ) = £2=
(48)
1 + PiA -Pie"5"11 -р\е^т
Мы хотим, чтобы квадрат АЧХ был равен единице на всех частотах. Для этого необходимо, чтобы коэффициенты при всех степенях е^в числителе и знаменателе (4.8) были одинаковы:
£2(1 + ZiZi*) - 1 +Р1Р1*,
к^х - pV1
кЧх* -рх*.
Из этих уравнений легко получить следующее (тривиальное решение к - 1 и Zt - рх нас не интересует):
=—г, к = ^РХР\ = lptL(4.9)
Pi
Понятно, что если включить последовательно произвольное количество фильтров, удовлетворяющих (4.9), то АЧХ системы в целом будет по-прежнему равна единице на всех частотах. Таким образом мы получаем условия, при которых фильтр является всепропускающим:
число нулей равно числу полюсов;
значения нулей являются обратными и комплексно-сопряженными по отношению к полюсам;
□ коэффициент усиления к равен произведению модулей полюсов фильтра.
Убедимся в справедливости сказанного, рассчитав АЧХ и ФЧХ фильтра, удовлетворяющего указанным условиям (рис. 4.2):
»р =[0.5+0.51:0.5-0.51:-0.7]: Xполюсы фильтра
»z =l./conj(p);Xнули фильтра
»k -prod(abs(p)):Xкоэффициент усиления
»[b.а] = zp2tf(z,р.к);%функция передачи
»freqz(b. а)Xчастотные характеристики
J1111
О 0.20.40.60.61
Рис. 4.2. АЧХ и ФЧХ всепропускающего фильтра
Как видите, фильтр имеет единичную АЧХ (0 дБ) и нелинейную ФЧХ. Регулируя количество и расположение полюсов, можно получить ФЧХ весьма сложной формы.
ЗАМЕЧАНИЕ
В пакете Filter Design имеется функция iirgrpdelay, позволяющая рассчитывать всепро- пускающие фильтры с заданной зависимостью групповой задержки от частоты (см. раздел «Функции пакета Filter Design» главы 6).
Полюсы и вычеты
Идея представления дробно-рациональной функции передачи в виде суммы простых дробей была рассмотрена в главе 2 применительно к аналоговым системам. В дискретном случае такое представление имеет несколько иной вид и при отсутствии кратных корней у знаменателя может быть записано следующим образом:
Я(г) =+ ... —+ *0 + ^"' + ... ^„г'^.(4.10)
1-P1Z 1 l-p2z 1 l-p„z 1
Здесь, как и в аналоговом случае, р, и г, — полюсы функции передачи и соответствующие им вычеты. Поскольку на соотношение степеней полиномов числителя и знаменателя в дискретном случае не накладывается никаких ограничений, целая часть функции передачи, представленная коэффициентами kh может содержать не только константу.
В данном случае цепь описывается набором параметров {г,}, {р,}, {&,}.
Полюсы функции передачи могут быть вещественными либо составлять комплексно-сопряженные пары. Вычеты, соответствующие комплексно-сопряженным полюсам, также являются комплексно-сопряженными.
Если полюс р, имеет кратность т, то в разложении на простые дроби он порождает т слагаемых следующего вида:
(4.11)(4.11)ГП +++ 'bn
(4.11)
(4.11)
1~Р^' (l-p,2"’)2(l-p,.-1)™'
Представление дискретной системы в виде наборов полюсов и вычетов соответствует параллельной форме ее реализации (см. раздел «Формы реализации дискретных фильтров» далее в этой главе).
Расчет импульсной характеристики
Представление функции передачи в виде суммы простых дробей позволяет вычислить импульсную характеристику системы, поскольку каждое слагаемое функции передачи вида г,/(1 - р,2-1), согласно формуле (3.20), соответствует экспоненциальному слагаемому импульсной характеристики вида
г,рЛ к^О.
Пара комплексно-сопряженных полюсов дает пару слагаемых импульсной характеристики в виде комплексно-сопряженных экспонент. Сумма таких слагаемых представляет собой синусоиду с экспоненциально меняющейся амплитудой:
^(Р,)" + гХр’У =2Re[ri(pi)n] = 2Re[|ri|.|p,|" exp(j(argr; + и argр,))] =
= 2| г, | • | р, | ” cos (и arg р, + arg г,).
Здесь arg г, и arg р, — фазы комплексных чисел г, и р,.
Что касается кратных полюсов, то m-кратный полюс р, даст в выражении для импульсной характеристики m слагаемых следующего вида:
Аар; + Atkp- + A2k2p- +...+Am_xkm''p-, k^Q.
Коэффициенты Aj представляют собой рациональные дроби и для каждой конкретной кратности к могут быть рассчитаны индивидуально. Вот несколько конкретных примеров:
--<->Л(1 + ^)р\^>0,
- о лГ1 + -& + -&2)р\ к > 0, (1-pz1)3I 22 Г
о лГ1 + — k + k2 + -&3)р\ к > 0.
(1-Р2-)<66
Устойчивость дискретных систем
При отсутствии входного сигнала в дискретной системе могут существовать свободные колебания. Их вид зависит от начальных условий, то есть значений, хранящихся в элементах памяти системы в момент отключения входного сигнала. Система называется устойчивой, если при любых начальных условиях свободные колебания являются затухающими, то есть если при х(к) - 0
1ппр(&) = 0.
Любой сигнал на выходе линейной стационарной системы представляет собой линейную комбинацию ее задержанных во времени импульсных характеристик. Поэтому для затухания свободных колебаний необходимо, чтобы была затухающей импульсная характеристика системы /z(^):
Пт Zz (^) = 0.
В предыдущем разделе было показано, что импульсная характеристика системы в общем случае содержит слагаемые вида
A Pi К\
где р( — полюсы функции передачи системы, п — неотрицательные целые числа, меньшие кратности полюса ph А — некая константа.
Такие слагаемые при k -» оо затухают, если полюс р, по модулю меньше единицы:
Ы < 1-
Теперь мы можем окончательно сформулировать условие устойчивости: чтобы дискретная система была устойчива, полюсы ее функции передачи должны находиться на комплексной плоскости внутри круга единичного радиуса.
Пространство состояний
Сущность представления дискретной системы в пространстве состояний та же, что и в аналоговом случае, — имеется вектор параметров, описывающих внутреннее состояние системы, и две формулы, согласно которым производится изменение этого состояния и формирование выходного сигнала в зависимости от текущего состояния и входного сигнала:
s(A + 1) - As(&) + Вх(^),
у(к) - Cs(&) + Dx(k).
Здесь s(^) — вектор состояния, х(&) и у(к) — соответственно отсчеты входного и выходного сигналов, А, В, С и D — параметры, описывающие систему. Если х и у — скалярные сигналы и размерность вектора состояния равна N, то размерность параметров будет следующей: А — матрица NxN, В — столбец Nx 1, С — строка 1 х N, D — скаляр. Если входной и/или выходной сигналы являются векторными, размерность матриц соответствующим образом изменяется.
Представление дискретной системы в пространстве состояний соответствует канонической форме ее реализации (см. раздел «Каноническая форма» далее в этой главе).
Преобразование случайного сигнала в дискретной системе
Пусть на вход дискретной системы с импульсной характеристикой h(k) поступает дискретный стационарный центрированный случайный процесс {х (&)} с корреляционной функцией Кх(Дк\ Найдем корреляционную функцию выходного
случайного процесса. Для этого воспользуемся определением корреляционной функции (см. раздел «Дискретные случайные сигналы» главы 3) и формулой (4.3), описывающей преобразование сигнала, осуществляемое системой:
Ч(Д&) = y{k)y{k + Д^) = ^x(n, )h(k - nt) ^x(n2')h(_k + ^к -пгУ
П|=-<ЮП2=~®
Преобразуем произведение сумм в двойную сумму, воспользуемся линейностью операции статистического усреднения и заметим, что х(пх )х(и2) = Д, (и2 - пх):
Ч(Д&) = £ ^х(пх )х(п2 ) к^к - и, )h(k + &k-п2 ) =
= Ё Тл(nt - n2 ) к(к - nt )к(к + Д& -и2). П| =-оо ri2 = -®
Произведем замену второго индекса суммирования: т = и2 - пх. С учетом этого формула (4.12) принимает вид
Rg^k) = £ '^Rx{m)k{k-nx)k(k + &к-т-гц) =
= -оо т = -®/ / л пх
Rx(m) ^^(к ~ ni )^(^ + Д^ -т-пх)
Внутренняя сумма в (4.13) представляет собой корреляционную функцию импульсной характеристики системы:
^/z(^-nt)/z(^ +Д^-т-п,) = ^/z(n)/z(n + A^-m) = B/l(A^-m). П) =-00п*-®
Таким образом, окончательно получаем, что корреляционная функция случайного сигнала на выходе системы представляет собой свертку корреляционной функции входного шума и корреляционной функции импульсной характеристики системы:
Rg(Ak) = ^Rx(m)Bh(Ak -т).(4.14)
ЗАМЕЧАНИЕ
Полученная формула является дискретным аналогом формулы (2.7), описывающей преобразование корреляционной функции аналогового шума в линейной цепи.
Дисперсия выходного случайного процесса может быть рассчитана как
Ч =W = t,Rx(m)Bh(my
В этой формуле учтена четность функции Bh(my
Если входной случайный процесс является дискретным белым шумом, формула (4.14) упрощается:
Ry^k) = Dx Bh(Aky
Дисперсия выходного шума при этом составляет
Dg = DxB^ = Dx^h4^.
Таким образом, при воздействии на вход системы дискретного белого шума дисперсия выходного сигнала пропорциональна сумме квадратов отсчетов импульсной характеристики системы.
Рекурсивные и нерекурсивные дискретные фильтры
В начале главы, рассматривая идею обработки сигнала дискретной линейной системой, мы уже ввели понятия нерекурсивных и рекурсивных фильтров. Настало время вернуться к этому вопросу и обсудить его более обстоятельно. Для этого мы рассмотрим структурные схемы устройств, реализующих уравнение (4.1), в общем виде описывающее процесс обработки сигнала дискретной системой.
Нерекурсивные фильтры
Прежде всего следует отметить, что в общем случае при вычислении очередного выходного отсчета у(^) используется информация двух типов: некоторое количество отсчетов входного сигнала и некоторое количество предыдущих отсчетов выходного сигнала. Ясно, что хотя бы один отсчет входного сигнала должен участвовать в вычислениях; в противном случае выходной сигнал не будет зависеть от входного. В противоположность этому, предыдущие отсчеты выходного сигнала могут и не использоваться. Уравнение фильтрации (4.1) в этом случае приобретает следующий вид:
У^^У-Ь^к-!).(4.15)
>=о
Количество используемых предыдущих отсчетов т называется порядком фильтра. Структурная схема, реализующая алгоритм (4.15), приведена на рис. 4.3. Некоторое количество предыдущих отсчетов входного сигнала хранится в ячейках памяти, которые образуют дискретную линию задержки. Эти отсчеты умножаются на коэффициенты Ь, и суммируются, формируя выходной отсчет уО^).
ЗАМЕЧАНИЕ
Согласно свойствам ^-преобразования (см. раздел «/-преобразование» главы 3), задержка дискретной последовательности на один такт соответствует умножению ее z-преобразова- ния на с"1. Поэтому элементы памяти, осуществляющие такую задержку, обозначены на структурной схеме как «г'1».
Так как при вычислениях не используются предыдущие отсчеты выходного сигнала, в схеме отсутствуют обратные связи. Поэтому такие фильтры называются нерекурсивными (nonrecursive). Применяется также термин «трансверсальный фильтр» (от английского transversal — поперечный).
Рис. 4.3. Нерекурсивный фильтр
Импульсная характеристика нерекурсивного фильтра определяется очень просто. Подставим в уравнение (4.15) единичный импульс х0(^) в качестве входного сигнала:
h(k) = '^biXg(k-i\
i-0
Но отсчет х0(А - i) равен нулю для всех к, кроме к - i, когда этот отсчет равен единице. Поэтому мы получаем очень простой результат:
h(k) - bk,
то есть коэффициенты Ь, являются отсчетами импульсной характеристики фильтра. Это можно наглядно пояснить с помощью рис. 4.3. При подаче на вход единичного импульса он будет перемещаться по линии задержки, умножаться на коэффициенты Ь01 bit b2, ... и проходить на выход устройства (ведь все остальные входные сигналы сумматора при этом равны нулю). Очевидно, что в реальном устройстве линия задержки содержит конечное число элементов, поэтому импульсная характеристика нерекурсивного фильтра также является конечной по длительности. Это обусловило еще одно название таких фильтров — фильтры с конечной импульсной характеристикой (КИХ-фильтры; английский термин — finite impulse response, FIR).
ЗАМЕЧАНИЕ
Вследствие отсутствия обратных связей любой нерекурсивный фильтр является устойчивым — ведь каковы бы ни были начальные условия (то есть отсчеты, хранящиеся в линии задержки), при отсутствии сигнала на входе (х(А) - 0) выходной сигнал (свободные колебания) будет отличен от нуля в течение не более чем т тактов, необходимых для очистки линии задержки.
Простота анализа и реализации, а также наглядная связь коэффициентов фильт- ра с отсчетами его импульсной характеристики и абсолютная устойчивость привели к тому, что нерекурсивное фильтры широко применяются на практике. Однако для получения хороших частотных характеристик (например, полосовых фильтров с высокой прямоугольностью АЧХ) необходимы нерекурсивные фильтры высокого порядка — до нескольких сотен и даже тысяч.
Симметричные фильтры
Очень важное значение имеет тот факт, что нерекурсивные фильтры позволяют легко обеспечить линейную ФЧХ, а значит, постоянные (не зависящие от частоты) групповую и фазовую задержки. Для этого необходима лишь симметрия импульсной характеристики. Эта симметрия может быть двух типов:
четная симметрия (even symmetry): 6* - ^_6 для всех k - 0,1,..., N;
нечетная еимметрия (odd symmetry): 6* - -b^-k для всех k - О, 1,..., N.
ЗАМЕЧАНИЕ ::
Иногда под симметричными подразумевают только характеристики с четной симметрией, а для нечетной симметрии используют термин «антисимметричные».
Групповая задержка для симметричных фильтров не зависит от частоты и равна N/2 отсчетов.
При четном N и нечетной симметрии импульсной характеристики, очевидно, ее средний отсчет должен быть равен нулю: bN/2 - 0. Кроме того, четность или нечетность порядка фильтра и наличие того или иного типа симметрии накладывают определенные ограничения на коэффициенты передачи фильтра на нулевой частоте и на частоте Найквиста. Эти ограничения легко получить из условий симметрии и формулы (4.7) для комплексного коэффициента передачи фильтра. Сочетание четности порядка фильтра и типа симметрии дает четыре типа симметричных фильтров, перечисленных в табл. 4.1 вместе с указанными ограничениями значений АЧХ. Приведенные в таблице номера типов часто используются в зарубежной литературе.
Таблица 4.1. Типы симметричных фильтров
Тип
Порядок фильтра
Тип симметрии
К(0)
<W2)
I
Четный
Четная
Любой
Любой
II
Нечетный
Четная
Любой
0
III
Четный
Нечетная
0
0
IV
Нечетный
Нечетная
0
Любой
Рекурсивные фильтры
Если уравнение фильтрации имеет общий вид (4.1), то есть содержит как входные, так и выходные отсчеты, для реализации такого фильтра в схему, приведенную на рис. 4.3, необходимо добавить вторую линию задержки — для хранения выходных отсчетов у(^ - z). Получающаяся при этом структура показана на рис. 4.4.
Рис. 4.4. Рекурсивный фильтр — прямая реализация
Так как при вычислениях используются предыдущие отсчеты выходного сигнала, в схеме присутствуют обратные связи. Поэтому такие фильтры называют рекурсивными (recursive).
ЗАМЕЧАНИЕ
Количество предыдущих входных и выходных отсчетов, используемых для вычислений, может не совпадать. В таком случае порядком фильтра считается максимальное из чисел тп и п.
Импульсная характеристика рекурсивного фильтра рассчитывается значительно сложнее, чем для нерекурсивного. Рассмотрим формирование лишь нескольких первых ее отсчетов. При поступлении на вход единичного импульса он умножается на 60 и проходит на выход. Таким образом, /z(0) - b0.
Далее входной единичный импульс попадает во входную линию задержки, а выходной отсчет, равный bQ, — в выходную линию задержки. В результате второй отсчет импульсной характеристики будет формироваться как
/z(l) - bi + av /z(0) - bi + bo ay.
Продолжив рассмотрение перемещения входного единичного импульса вдоль входной линии задержки и заполнения выходными отсчетами выходной линии задержки, можно получить
6(2) - Ь2 + а2 6(0) + av 6(1) = b2 + 60 а2 + d\(b\ + Ьй а() - = b2 + 6i ах + bo а2 + Ьо а?.
Видно, что по мере того, как выходная линия задержки заполняется отсчетами импульсной характеристики, сложность аналитических формул быстро возрастает.
Наличие в схеме обратных связей позволяет получить бесконечную импульсную характеристику, поэтому рекурсивные фильтры называют также фильтрами с бесконечной импульсной характеристикой (БИХ-фильтрами; английский термин — infinite impulse response, IIR). По этой же причине рекурсивные фильтры могут быть неустойчивыми.
Формы реализации дискретных фильтров
Структурная схема, показанная ранее на рис. 4.4, называется прямой формой реализации рекурсивного фильтра (direct form I) и не является единственно возможной. Рассмотрим еще несколько вариантов.
Каноническая форма
Разделим общий сумматор в схеме рис. 4.4 на два отдельных — для рекурсивной и нерекурсивной частей фильтра (рис. 4.5, а). В результате получаем два последовательно соединенных фильтра, один из которых является нерекурсивным, а другой, напротив, содержит только рекурсивную часть. Так как результат последовательного прохождения сигнала через ряд линейных стационарных устройств не зависит от последовательности их соединения, мы можем поменять местами две «половинки» нашего фильтра (рис. 4.5, б). Теперь остается заметить, что в обе линии задержки подается один и тот же сигнал, поэтому они будут содержать одинаковые наборы отсчетов. Это позволяет объединить линии задержки. Полученная в результате схема изображена на рис. 4.6, она называется канонической формой реализации рекурсивного фильтра (canonic form или direct form II).
С теоретической точки зрения эти варианты эквивалентны. Однако при практической реализации необходимо обратить внимание на ряд особенностей, присущих этим схемам. С одной стороны, при канонической реализации используется общая линия задержки, что уменьшает число необходимых ячеек памяти. Однако при этом абсолютные величины отсчетов, «бегающих» в линии задержки, могут существенно превосходить амплитуду входного и выходного сигналов. Это приводит к необходимости увеличивать разрядность представления чисел в линии задержки по сравнению с разрядностью входного и выходного сигналов, что усложняет реализацию устройства. При прямой реализации в линиях задержки хранятся непосредственно отсчеты входного и выходного сигналов, то есть по-
вишенная разрядность линий задержки не требуется. Единственным элементом, требующим повышенной разрядности, в данном случае является сумматор, и это учтено в архитектуре микропроцессоров, специально предназначенных для обработки сигналов в реальном времени.
Рис. 4.5. Перестановка рекурсивной и нерекурсивной частей фильтра — путь к получению канонической реализацииРис. 4.5. Перестановка рекурсивной и нерекурсивной частей фильтра — путь к получению канонической реализацииббРис. 4.6. Рекурсивный фильтр — каноническая реализацияРис. 4.6. Рекурсивный фильтр — каноническая реализация
Рис. 4.5. Перестановка рекурсивной и нерекурсивной частей фильтра — путь к получению канонической реализации
Рис. 4.5. Перестановка рекурсивной и нерекурсивной частей фильтра — путь к получению канонической реализации
б
б
Рис. 4.6. Рекурсивный фильтр — каноническая реализация
Рис. 4.6. Рекурсивный фильтр — каноническая реализация
ЗАМ ЕЧ АН И Е
Представление дискретной системы в пространстве состояний соответствует именно канонической форме реализации. Вектор состояния при этом представляет собой набор значений выходов элементов задержки.
Транспонированная форма
Поменяем в схеме рис. 4.3 последовательность выполнения операций умножения и задержки, используя в каждой ветви отдельную линию задержки на нужное количество тактов. Разделим также общий сумматор на несколько двухвходовых сумматоров. Получившаяся структура показана на рис. 4.7. Теперь, рассмотрев любую пару соседних сумматоров, можно заметить, что суммируемые ими сигналы претерпевают некоторую общую задержку. Это дает возможность поменять местами операции суммирования и задержки. Получившаяся схема, показанная на рис. 4.8, называется транспонированной реализацией дискретного фильтра (direct transposed form II).
Рис. 4.7. Изменение последовательности выполнения операций умножения и задержки — путь к получению транспонированной реализации фильтра
ЗАМЕЧАНИЕ
Разумеется, в транспонированной форме может быть реализован и нерекурсивный фильтр. Для этого в структурной схеме рис. 4.8 необходимо удалить все ветви с коэффициентами bi, кроме Ьо.
Транспонированная схема позволяет эффективно распараллелить вычисления и потому применяется при реализации дискретных фильтров в виде специализированных интегральных схем. Действительно, при реализации фильтра в форме рис. 4.3 или рис 4.4 можно одновременно выполнять все операции умножения, но для получения выходного результата необходимо дождаться окончания выполнения всех операций сложения. В транспонированной же схеме, помимо умножения, можно одновременно выполнять и все операции сложения, поскольку они являются независимыми (то есть не используют в качестве суммируемых величин результаты других сложений). Как видно из схемы рис. 4.8, собственно для расчета выходного сигнала необходимо выполнить одно умножение и одно ело-
жение; все остальные операции производят подготовку промежуточных результатов для вычисления последующих выходных отсчетов.
Рис. 4.8. Транспонированная реализация дискретного фильтра
Если применить описанные преобразования к канонической структуре, показанной на рис. 4.6, получится еще один вариант транспонированной реализации фильтра (direct transposed form I) (рис. 4.9). В отличие от предыдущей схемы, данная структура содержит большее число элементов памяти.
Рис. 4.9. Транспонированная реализация, полученная из канонической формы дискретного фильтра
Последовательная (каскадная) форма
В разделе «Нули и полюсы» было показано, что числитель и знаменатель функции передачи физически реализуемого дискретного фильтра можно разложить на линейные (относительно г'1) множители. Перемножение функций передачи соответствует последовательному (каскадному) включению соответствующих фильтров, поэтому такое представление дает реализацию фильтра в виде последовательно включенных фильтров 1-го порядка (при этом некоторые из них могут иметь комплексные коэффициенты) либо фильтров 1-го и 2-го порядка с вещественными коэффициентами.
Рассмотрим конкретный пример, задавшись численными значениями коэффициентов фильтра:
(4.16)(4.16)0,0985 + 0,2956 г'1 + 0,2956 г'2 + 0,0985 г'31-0,5772г'1 +0,4218г'2 -0,0568г'3
(4.16)
(4.16)
0,0985(1 +г'1 )(1 + 2г'* + г'2)
(1-0,1584г'1 )(1-0,4188г'1 + 0,3554г'2)'
ЗАМЕЧАНИЕ
Данный фильтр является фильтром Баттерворта 3-го порядка с частотой среза, равной 1/5 частоты дискретизации, синтезированным методом билинейного г-преобразования (о данном методе синтеза дискретных фильтров речь пойдет в главе 6).
Структурная схема получившейся последовательной реализации фильтра представлена на рис. 4.10.
Рис. 4.10. Последовательная реализация дискретного фильтраРис. 4.10. Последовательная реализация дискретного фильтра
Рис. 4.10. Последовательная реализация дискретного фильтра
Рис. 4.10. Последовательная реализация дискретного фильтра
Последовательная реализация часто используется на практике, поскольку она позволяет ослабить нежелательные эффекты, связанные с ошибками округления [8]. Такие эффекты обсуждаются в главе 7.
Параллельная форма
Еще один способ преобразования функции передачи физически реализуемого фильтра — представление ее в виде суммы простейших дробей. Об этом уже шла
речь в разделе «Полюсы и вычеты» (см. формулу (4.10)). Каждое из слагаемых при таком представлении соответствует функции передачи рекурсивного фильтра 1-го порядка (возможно, с комплексными коэффициентам) либо 1-го или 2-го порядка (если используется представление в виде суммы простейших дробей только с вещественными коэффициентами). Сама операция сложения эквивалентна параллельному соединению этих фильтров с суммированием выходных результатов.
Рассмотрим конкретный пример, используя ту же функцию передачи (4.16), что и раньше:
_ 0,0985+ 0,2956с'1 + 0,2956с'2 + 0,0985 с'3 =
' ”1-0,5772с'1 + 0,4218с'2 -0,0563с'3~
= -17502 +310777+—L229 + 0,3798 с'1
1-0,1584с'1 1-0,4188с'1 +0,3554с'2 ’
Структурная схема получившейся параллельной реализации фильтра представлена на рис. 4.11. Постоянному слагаемому соответствует верхняя ветвь структурной схемы, содержащая только умножитель.
-1,7502
Рис. 4.11. Параллельная реализация дискретного фильтра
Дискретная фильтрация в MATLAB
В данном разделе рассматриваются средства MATLAB, предназначенные для выполнения дискретной фильтрации и анализа параметров дискретных фильтров. Следует отметить, что сфера применения технологий дискретной фильтра-
ции в настоящее время не ограничивается обработкой сигналов — это технологии обработки любых данных. Данный факт нашел свое отражение и в том, что в MATLAB базовые функции дискретной фильтрации не относятся к пакету расширения Signal Processing, а являются встроенными в ядро программы.
Помимо многочисленных функций расчета параметров дискретных фильтров в составе пакета Signal Processing имеется программа fdatool (Filter Design & Analysis Tool) — графическая среда для анализа дискретных фильтров. Эта программа позволяет не только анализировать, но и рассчитывать (синтезировать) фильтры с заданными свойствами, поэтому она будет описана в главе 6, посвященной проектированию дискретных фильтров.
Дискретная свертка
Дискретная свертка, являющаяся основой алгоритма дискретной фильтрации, в MATLAB вычисляется с помощью функции conv:
Z = conv(x, у);
Вычислим с помощью функции conv свертку тех же числовых последовательностей, что рассматривались в качестве примера при пояснении идеи дискретной свертки в разделе «Импульсная характеристика»:
» х = [1 3 2):
» h = [1 2 3 4]:
» у = conv(x, h)
У =
51117188
Результат, разумеется, соответствует тому, что было получено ранее (см. рис. 4.1).
Длина выходного вектора равна 1 ength(x)+length(у)-1.
Обращение свертки
Зная результат свертки и один из сворачиваемых векторов, можно найти второй. Если перейти к ^-преобразованиям векторов, данная операция (она называется обращением свертки — deconvolution) сводится к делению полиномов. В MATLAB эта операция реализуется с помощью функции deconv, имеющей следующий синтаксис:
[q, г] = deconv(b. а)
Здесь b — результат свертки (коэффициенты полинома-числителя), а — один из сворачиваемых векторов (коэффициенты полинома-знаменателя).
Выходные параметры имеют следующий смысл: q — результат деления полиномов (частное; quotient), то есть искомый второй вектор свертки, г — остаток (remainder) от деления полиномов (если вектор b действительно является сверткой вектора а с чем-нибудь, остаток от деления будет нулевым).
В общем случае исходные данные b и а связаны с результатами расчета следующим образом:
b = conv(q, а) + г
Продемонстрируем использование функции deconv, взяв данные из предыдущего примера: » [q. г] = deconv(y. h) q = 1з2
г = 000000
Поскольку вектор у был получен в результате свертки, мы получили исходный сигнал (см. вектор х в предыдущем примере) и нулевой остаток.
Функция дискретной фильтрации
Основная функция, реализующая дискретную фильтрацию в MATLAB, носит имя filter. В простейшем виде она имеет следующий синтаксис:
у = filter(b. а. х);
Здесь Ь — вектор коэффициентов нерекурсивной части фильтра (числителя функции передачи), а — вектор коэффициентов рекурсивной части фильтра (знаменателя функции передачи), х — входной сигнал.
Возвращаемой величиной является вектор отсчетов выходного сигнала фильтра.
Если первый элемент вектора а не равен 1, значения векторов b и а нормируются — делятся на а(1).
Между функциями filter и conv есть два основных различия. Во-первых, функция conv требует задания импульсной характеристики фильтра в виде вектора, поэтому данная импульсная характеристика должна иметь конечную длину. Фактически это означает, что с помощью функции conv можно реализовать только нерекурсивный фильтр. Функция filter позволяет задавать как нерекурсивные, так и рекурсивные фильтры, реализуя в том числе и бесконечные импульсные характеристики. Во-вторых, функция filter возвращает результат, длина которого равна длине входного сигнала: это, как мы увидим чуть ниже, позволяет организовать блочную обработку сигнала.
Повторим пример, рассмотренный выше при описании функции conv, на сей раз реализовав расчеты с помощью функции filter. Поскольку мы используем непосредственно импульсную характеристику фильтра, она должна быть передана функции в качестве вектора Ь коэффициентов нерекурсивной части фильтра. Вектор а рекурсивной части фильтра в этом случае представляет собой скаляр, равный единице:
» у = filtered. 1, х)
У =
1511
Как видите, результат фильтрации совпадает с полученными в предыдущем разделе значениями. Однако теперь вектор z не содержит затухающего «хвоста». Дело в том, что функция conv предполагала завершенность входного сигнала, а функция filter позволяет при необходимости продолжить его обработку, подавая па вход фильтра новые отсчеты (см. далее раздел «Доступ к внутреннему состоянию фильтра»).
Чтобы получить результат, полностью совпадающий с тем, что дает функция conv, можно дополнить вектор х соответствующим количеством нулей:
» у = filterCh. 1, [X 0 0 0])
У =
15 И 17188
Входной сигнал х может быть матрицей. При этом ее столбцы фильтруются независимо.
Доступ к внутреннему состоянию фильтра
Функция f 11 ter позволяет задавать и считывать внутреннее состояние дискретного фильтра. Для этого используются дополнительные входной и выходной параметры:
[у. z2] = filter(b. а, х. zl);
Здесь zl — начальное внутреннее состояние фильтра (входной параметр), z2 — конечное внутреннее состояние фильтра (выходной параметр).
По умолчанию предполагается нулевое внутреннее состояние фильтра.
Чтобы понимать, что именно представляет собой вектор внутреннего состояния фильтра, нужно знать, как организованы вычисления в функции fi 1 ter. Данная функция реализует рекурсивный дискретный фильтр в транспонированной форме (direct transposed form II, см. рис. 4.8).
Возможность доступа к внутреннему состоянию фильтра позволяет при необходимости реализовать обработку сигнала по частям:
£ 1-й блок данных
[y(l:N), z] = filter(b, a. x(l:N)):
% 2-й блок данных
[y(N+l:2*N). z] = filter(b, a. x(N+l:2*N). z):
Если текущее внутреннее состояние фильтра не известно, но известны предыдущие отсчеты входного и выходного сигналов, состояние фильтра можно получить с помощью функции filtic («ic» обозначает начальное состояние — initial conditions):'
z = filtic(b, а. у, x):
Здесь b и a — параметры фильтра, у — предыдущие значения выходного сигнала, х — предыдущие значения входного сигнала.
Предыдущие значения сигналов задаются в обратном порядке: первые элементы векторов х и у — это последние значения входного и выходного сигналов, вторые элементы — предпоследние значения и т. д.
Число элементов векторов х и у, необходимое для расчетов, на единицу меньше длин векторов b и а соответственно. При недостаточной длине векторов х и/или у они дополняются нулями, при чрезмерной длине лишние элементы игнорируются. Вектор х может не задаваться, тогда он считается заполненным нулями.
Возвращаемый функцией результат — вектор-столбец внутреннего состояния фильтра.
Компенсация фазового сдвига
При фильтрации сигналов в ряде случаев возникает требование сохранения фазовых соотношений в исходом сигнале. Для этого требуется фильтр с линейной ФЧХ или, что то же самое, с постоянной (не зависящей от частоты) фазовой задержкой.
Как говорилось в разделе «Симметричные фильтры», для получения линейной ФЧХ фильтр должен иметь симметричную импульсную характеристику. Поэтому линейную ФЧХ несложно реализовать в нерекурсивном фильтре — для этого нужна только симметрия набора коэффициентов фильтра: Ь, = Ьт_; или 6, = -bm _ f. Из симметрии импульсной характеристики фильтра и соображений его физической реализуемости следует конечность импульсной характеристики. Поэтому рекурсивные фильтры, обладающие бесконечной импульсной характеристикой, принципиально не могут иметь линейную ФЧХ.
Однако при обработке сигнала не в реальном масштабе времени можно обойти ограничение физической реализуемости и использовать фильтр, для которого не выполняется условие причинности.
ЗАМЕЧАНИЕ
Еще один, менее шокирующий подход к данной ситуации можно сформулировать так. Нам известен весь входной сигнал, и мы знаем, что он уже закончился, то есть на вход фильтра в дальнейшем будут поступать только нулевые значения. Поэтому можно считать, что условие причинности по-прежнему соблюдается, по фильтр вносит очень большую задержку, превышающую длительность всего входного сигнала.
Для реализации фильтрации с нулевым фазовым сдвигом в MATLAB предназначена функция flltfllt. Ее название символизирует смысл выполняемых ею действий: сначала входной сигнал фильтруется как обычно, а затем производится второй проход фильтрации, при котором сигнал обрабатывается от конца к началу. Если заданный в качестве параметров функции фильтр имеет функцию передачи Н^г), импульсную характеристику h(k) и АЧХ К(со), то фильтр, эквивалентный двум проходам обработки сигнала, будет иметь функцию передачи H(2)H(z’x), АЧХ |Х(со)|2 и нулевую ФЧХ. Импульсная характеристика представляет собой корреляционную функцию исходной импульсной характеристики:
h'^k^ '^h(jri)h(jn-k>),-со<^<со.
Синтаксис вызова функции flltfllt такой же, как для функции filter:
у = filtf1lt(b, а, х)
Приведем пример, демонстрирующий компенсацию фазового сдвига с помощью функции f 111f 111. Создадим сигнал в виде прямоугольного импульса, дополненного с обеих сторон нулями:
» s = [zeros(50. 1): onesdOO. 1): zeros(50. 1)];
В качестве фильтра используем ФНЧ Чебышева первого рода с достаточно сильными пульсациями АЧХ в полосе пропускания (3 дБ) и низкой часто-
той среза (0,05 частоты Найквиста), чтобы выходной импульс был заметно искажен:
» [b. а] = chebyKS. 3, 0.05):
Обрабатываем сигнал с помощью функций filter и filtfilt и строим графики входного и выходных сигналов (рис. 4.12):
» si = filter(b. a, s);
» s2 = filtfilt(b. a. s);
» plot(s)
» hold on
» plot(si, ' -- ' )
» plot(s2, '-.')
» hold off
1.2 '''
'1
0.8 '/\
o.e ■//\\ -
°-4 '\ "
0.2\
о —- *'"
-0 2 11'
050100150200
Рис. 4.12. Входной сигнал (сплошная линия), результат обычной фильтрации(пунктирная линия) и фильтрации с компенсацией фазового сдвига(штрихпунктирная линия)
На рисунке хорошо видно, что при фильтрации обычным ФНЧ сигнал приобретает существенную задержку по времени. После повторной фильтрации в обратном направлении эта задержка компенсируется. Форма сигнала при втором проходе фильтрации также несколько изменяется, поскольку суммарное действие двух ФНЧ эквивалентно двукратному увеличению порядка фильтра.
Расчет импульсной характеристики
Чтобы получить импульсную характеристику, необходимо подать на вход фильтра единичный отсчет, дополненный некоторым количеством нулей:
f1lter(b. а. [1 zerosd. N)])
Для удобства такой расчет реализован в функции 1mpz, которая к тому же обладает рядом дополнительных возможностей.
В простейшем виде синтаксис вызова функции 1mpz следующий:
h = 1mpz(b. а):
Входные параметры b и а — коэффициенты полиномов числителя и знаменателя функции передачи соответственно.
Возвращаемое значение h — вектор отсчетов импульсной характеристики. Число рассчитываемых отсчетов выбирается автоматически и зависит от поведения импульсной характеристики. Более подробную информацию об этом можно найти в документации пакета Signal Processing.
Чтобы явно задать число рассчитываемых отсчетов импульсной характеристики, следует использовать третий входной параметр п:
h = impz(b. a, n);
Теперь обратимся к выходным параметрам функции. В приведенных выше вариантах использовался один выходной параметр — вектор отсчетов импульсной характеристики. Если выходные параметры отсутствуют, функция 1mpz строит график импульсной характеристики с использованием графической функции stem. Построим график импульсной характеристики фильтра Баттерворта 5-го порядка с частотой среза, равной 0,1 частоты дискретизации (рис. 4.13):
» [b. а] - butter(5. 0.2):
» impz(b. а)
Рис. 4.13. График импульсной характеристики, построенный функцией Impz
Расчет частотной характеристики
Частотная характеристика дискретного фильтра рассчитывается с помощью функции freqz, которая очень похожа на функцию freqs, выполняющую аналогичные расчеты для аналоговых цепей.
В простейшем виде функция freqz используется следующим образом:
freqztb. а)
Входные параметры b и а — векторы коэффициентов полиномов числителя и знаменателя функции передачи фильтра.
При расчете используются нормированные значения частот, измеряемые в радианах на отсчет (при такой нормировке частота дискретизации равна 2л, а частота Найквиста — л). По умолчанию выбирается 512 частотных точек, равномерно распределенных в диапазоне О...л.
При отсутствии выходных параметров функция freqz строит графики АЧХ (в децибелах) и ФЧХ (в градусах) фильтра.
Построим графики частотных характеристик фильтра, использованного при демонстрации дискретной свертки, но добавим к этому фильтру рекурсивную ветвь с коэффициентом передачи 0,1. Результат показан на рис. 4.14:
» b = [1 2 3 4]:
» а - [1 -0.1];
» freqz(b. а)
25
г 2о ф 3 15 I Юг 2о ф 3 15 I ЮРис. 4.14. Частотная характеристика дискретного фильтра, построенная функцией freqzРис. 4.14. Частотная характеристика дискретного фильтра, построенная функцией freqz
г 2о ф 3 15 I Ю
г 2о ф 3 15 I Ю
Рис. 4.14. Частотная характеристика дискретного фильтра, построенная функцией freqz
Рис. 4.14. Частотная характеристика дискретного фильтра, построенная функцией freqz
Если при вызове функции указаны выходные параметры, построение графика не производится:
[h, w] = freqz(b, а):
В векторе h возвращаются рассчитанные значения комплексного коэффициента передачи, а в векторе w — использованные при расчете значения нормированных частот.
Чтобы задать количество частотных точек для расчета, используется третий входной параметр п (частоты при этом по-прежнему равномерно распределяются в диапазоне 0...л ):
freqz(b, а. п):
Можно заставить функцию freqz использовать ряд частот, равномерно распределенных на интервале О...2л, то есть вплоть до частоты дискретизации. Это может
быть необходимо при анализе фильтров с комплексными коэффициентами, частотные характеристики которых не являются симметричными. Такое указание дается функции freqz с помощью четвертого входного параметра — строки 'whole':
freqz(b, a. n, 'whole'):
Наконец, можно задать вектор нормированных круговых частот w для расчета частотной характеристики:
h = freqz(b, a. w):
Использование второго выходного параметра в этом случае не имеет смысла, поскольку вектор частот задан на входе.
ЗАМ ЕЧАН И Е
При выводе графиков ФЧХ фильтров функция freqz применяет к вектору рассчитанных фазовых сдвигов функцию unwrap, чтобы устранить «фиктивные» разрывы, о которых шла речь в разделе «Построение графиков фазочастотных характеристик» главы 2.
Задание вектора частот
Для некоторого повышения удобства задания вектора частот при расчете частотных характеристик служит функция freqspace. Эта функция очень проста и имеет следующий синтаксис вызова:
у = freqspace(n)
Возвращаемый вектор f содержит значения, не превосходящие частоту Найквиста и нормированные к этой частоте. При этом подразумевается, что на п равных частей делится частотный диапазон от нуля до частоты дискретизации (после нормировки к частоте Найквиста она равна двум). Значения частот в векторе f рассчитываются как 0:2/n: 1, так что этот вектор содержит floor(n/2+l) элементов. При необходимости сформировать набор значений в диапазоне от нуля до двух (то есть до частоты дискретизации) следует использовать второй входной параметр — строку 'whole':
у = freqspace(n, 'whole')
При этом вектор у содержит п элементов и рассчитывается так: у = (0:п-1)*2/п
Расчет групповой задержки дискретной системы
Для вычисления групповой задержки дискретного фильтра в MATLAB служит функция grpdel ay. В простейшем виде она вызывается так:
grpdelay(b. а)
Здесь b и а — векторы коэффициентов числителя и знаменателя передаточной функции фильтра соответственно.
Дополнительные входные параметры используются точно так же, как и для рассмотренной ранее функции расчета частотной характеристики freqz.
При отсутствии выходных параметров функция grpdel ay строит график зависимости группового времени задержки от частоты. При указании одного выходного параметра функция возвращает вектор рассчитанных значений групповой задержки. При использовании двух выходных параметров во втором из них возвращается вектор использованных при расчете значений частот (второй выходной параметр можно использовать, если частоты для расчета не задаются принудительно среди входных параметров):
tau = grpdelay(b, а, ...):
[tau, w] = grpdelay(b. a. ...):
Как было сказано в разделе «Фазовая и групповая задержка» главы 2, при прохождении узкополосного сигнала через линейную систему его огибающая и несущее колебание приобретают разные задержки. Задержка несущей — это фазовая задержка, а задержка огибающей — групповая задержка. Продемонстрируем это на несложном примере, показав заодно и использование функции grpdel ay.
Сформируем сигнал в виде радиоимпульса с треугольной огибающей. Обратите внимание на фазу несущего колебания — максимум огибающей совпадает с максимумом внутреннего заполнения (рис. 4.15, сверху):
» Fs = 1000:% частота дискретизации
» t = -l:l/Fs:1.5:% вектор значений времени
» Fc = 5:% несущая частота
» А = (1 - abs(t)),*(abs(t)<-l); К огибающая сигнала
» s - A.*cos(2*pi*Fc*t);% входной радиоимпульс
Далее пропускаем этот сигнал через фильтр нижних частот Баттерворта с частотой среза, равной несущей частоте сигнала, синтезированный методом билинейного z-преобразования (подробнее об этом и других методах проектирования дискретных фильтров см. далее главу 6).
» [b, а] - butter(5. Fc*2/Fs): К фильтр нижних частот
» si - filter(b. a, s):% выходной сигнал фильтра
» plot(t. s)
» figure
» plot(t. si)
На рис. 4.15 снизу показан график выходного сигнала фильтра. На рисунке хорошо видно, что максимумы огибающей и несущего колебания больше не совпадают — между ними возникает временной сдвиг.
Посмотрим теперь, как это согласуется с величинами фазовой и групповой задержки:
» f - 0.01:0.01:10;Ж частоты длЯ расчета (в герцах)
» h - freqz(b, a. f, Fs):% частотная характеристика
» tau_phase - -unwrap(angle(h))/2/pi./f: % фазовая задержка
» tau_group - grpdelay(b, a, f, Fs)/Fs: % групповая задержка
» plot(f, tau_phase, ':', f, tau_group, '-')
» ylim([0 0.2])
» xlabel('Frequency, Hz')
» ylabel('Delay, s')
» legend('Phase delay’, 'Group delay')
» grid on
0.8
■о 8 ''''
-1-0.500.511.5
Рис. 4.15. Входной (сверху) и выходной (снизу) сигналы полосового фильтра демонстрируют разницу между групповой и фазовой задержками
Рис. 4.16. Фазовая (пунктирная линия) и групповая (сплошная линия) задержки, вносимые фильтром нижних частот
Построенные графики фазовой (пунктирная линия) и групповой (сплошная линия) задержек показаны на рис. 4.16. Видно, что на частоте 5 Гц, равной несущей частоте нашего сигнала, эти задержки существенно различаются.
Таким образом, мы наглядно продемонстрировали эффект сдвига огибающей относительно несущей, вызванный различием между фазовой и групповой задержками.
Отображение нулей и полюсов фильтра
Для отображения нулей и полюсов функции передачи фильтра на комплексной плоскости предназначена функция zplane:
zplanetz, р)
zplaneCb. а)
Входными параметрами являются векторы-столбцы нулей и полюсов (z, р) либо векторы-строки коэффициентов полиномов числителя и знаменателя функции передачи (Ь, а). Различение этих двух случаев производится именно по ориентации передаваемых функции векторов.
Поскольку функция просто вычисляет (при необходимости) и отображает корни полиномов на комплексной плоскости, она может использоваться как для дискретных (z-плоскость), так и для аналоговых (s-плоскость) фильтров. Единственным неудобством может быть отображение единичной окружности, несущественной для аналоговых фильтров.
В качестве примера покажем расположение на комплексной плоскости нулей и полюсов дискретного эллиптического фильтра нижних частот 5-го порядка с уровнем пульсаций 1 дБ в полосе пропускания и затуханием 40 дБ в полосе задерживания при частоте среза, равной 0,2 частоты Найквиста (рис. 4.17).
» [b. а] - el11р(5. 1. 40, 0.2):
» zplaneCb. а)
10.80.60.40.210.80.60.40.2-1-0.500.51Real Part-1-0.500.51Real PartРис. 4.17. Нули и полюсы эллиптического фильтра, выведенные функцией zplaneРис. 4.17. Нули и полюсы эллиптического фильтра, выведенные функцией zplane
1
0.8
0.6
0.4
0.2
1
0.8
0.6
0.4
0.2
-1-0.500.51
Real Part
-1-0.500.51
Real Part
Рис. 4.17. Нули и полюсы эллиптического фильтра, выведенные функцией zplane
Рис. 4.17. Нули и полюсы эллиптического фильтра, выведенные функцией zplane
Нули функции передачи отображаются кружочками, полюсы — крестиками.
ЗАМЕЧАНИЕ
Аналоговые эллиптические фильтры рассматривались в главе 2. Дискретный фильтр в данном примере рассчитан по аналоговому прототипу методом билинейного г-преобразо- вания, которое будет обсуждаться в главе 6.
При необходимости можно получить дескрипторы созданных функцией графических объектов, используя выходные параметры:
[hz. hp, ht] - zplaneG..)
Здесь hz — вектор дескрипторов нулей, hp — вектор дескрипторов полюсов, ht — вектор дескрипторов осей, единичной окружности и текстовых объектов.
Свертка как матричное умножение
Дискретная свертка (4.3) представляет собой сумму поэлементных произведений, поэтому при конечной длине импульсной характеристики эту операцию можно представить как скалярное произведение двух векторов. Одним вектором при этом служит импульсная характеристика фильтра, а другим — набор отсчетов входного сигнала и(^), определяемый как
u(^) = [х(&), х(к - 1), х(к - 2),..., х(к - У)].
Считая импульсную характеристику вектором-столбцом, выражение для к-го отсчета выходного сигнала можно записать следующим образом:
у(к) = и(к) h.
При расчете разных отсчетов выходного сигнала используются соответствующие векторы и(к\ Для получения всего выходного сигнала отдельные строки и(к) организуются в матрицу
" х(0)
0
0
0
х(1)
х(0)
0
0
х(2)
х(1)
х(0)...
0
x(N")
x(N -1)
x(N-2) ...
х(0)
x(N + \)
x(N')
x(N-V) ...
х(1)
х(М)
x(M-l)
х(М-2) ...
x(M-N')
0
х(М)
х(М-Г) ...
x(M-N + l)
0
0
х(М)
x(M-N + 2-)
0
0
00
х(М)
Эта матрица называется матрицей свертки (convolution matrix), а выходной сигнал фильтра может быть получен путем матрично-векторного умножения:
у = и h.
Вычисление матрицы свертки в MATLAB производится с помощью функции convmtx, имеющей следующий синтаксис:
U = convmtx(x, п)
Здесь х — вектор отсчетов сигнала, п — размерность свертки (длина второго участвующего в свертке вектора).
Результатом работы функции является матрица свертки U. Ее размер зависит от ориентации вектора х:
если х — столбец, то матрица U имеет length(x) + п - 1 строк и п столбцов;
если х — строка, то матрица U имеет п строк и length(x) + п - 1 столбцов.
Нерекурсивный фильтр с импульсной характеристикой h с помощью матричного умножения может быть реализован следующим образом:
у = convmtx(x, length(h)) * h% х. у и h - столбцы
у = h * convmtx(x. length(h))% х, у и h - строки
Однако такой вариант требует значительно большего расхода памяти, чем при использовании функций conv и filter. Поэтому функцию convmtx следует использовать только для реализации каких-либо специфических алгоритмов обработки сигналов.
Приведем пример формирования матрицы свертки:
» h = [1 2 3 4]: » convmtx!h. 4) ans =123О12О01ООО» h = [1 2 3 4]: » convmtx!h. 4) ans =123О12О01ООО400034002'3401234400034002'3401234
» h = [1 2 3 4]: » convmtx!h. 4) ans =
123
О12
О01
ООО
» h = [1 2 3 4]: » convmtx!h. 4) ans =
123
О12
О01
ООО
4000
3400
2'340
1234
4000
3400
2'340
1234
Как видите, по краям, там, где при фильтрации формируются «хвосты» сигнала, недостающие входные данные дополняются нулями.
ЗАМЕЧАНИЕ
Формирование матрицы свертки производится с помощью функции toeplitz.
Преобразование способов описания дискретных фильтров
Преобразование описаний дискретных фильтров между тремя вариантами — коэффициентами полиномов числителя и знаменателя функции передачи, наборами нулей и полюсов и параметрами пространства состояний — выполняется теми же шестью функциями, что и для аналоговых цепей (см. раздел «Преобразование способов описания линейных цепей» главы 2). Единственная особенность их
использования в дискретном случае состоит в том, что векторы b и а, содержащие коэффициенты полиномов числителя и знаменателя функции передачи, должны иметь одинаковую длину. Поэтому для удобства преобразования описаний дискретных фильтров в пакете Signal Processing имеется функция eqtfl ength, дополняющая нулями в конце более короткий из переданных ей двух векторов:
[bl. al] = eqtflengthCb. a);
Что касается разложения на простые дроби, здесь преобразование дискретной системы несколько отличается от аналогового случая, поэтому для этого предусмотрена специальная функция reziduez.
Наконец, для дискретных систем имеет большое практическое значение последовательная, или каскадная, реализация, когда система представляется в виде последовательного соединения секций второго порядка (second order sections). Для преобразования описания дискретной системы в эту форму и из нее служат функции sos2ss, sos2tf, sos2zp, ss2sos, zp2sos и tf2sos.
Кратко напомним имена и синтаксис функций преобразования, общих для аналоговых и дискретных систем:
преобразование коэффициентов полиномов числителя и знаменателя функции передачи в нули, полюсы и коэффициент усиления:
[z, р. k] = tf2zp(b. а);
преобразование нулей, полюсов и коэффициента усиления в коэффициенты полиномов числителя и знаменателя функции передачи:
[b. а] = zp2tf(z, р, к);
преобразование коэффициентов полиномов числителя и знаменателя функции передачи в параметры пространства состояний:
[А. В. С. D] = tf2ss(b. а):
преобразование параметров пространства состояний в коэффициенты полиномов числителя и знаменателя функции передачи:
[b. а] = ss2tf(A. В, С. D):
преобразование параметров пространства состояний в нули, полюсы и коэффициент усиления:
[z, р. k] = ss2zp(A, В. С. D);
преобразование нулей, полюсов и коэффициента усиления в параметры пространства состояний:
[А. В. С, D] = zp2ss(z, р, к):
Далее переходим к описанию функций преобразования, специфических для дискретных систем.
Разложение на простые дроби
Функция reziduez обеспечивает преобразование функции передачи дискретного фильтра в сумму простейших дробей и обратно (см. ранее в этой главе раздел «Полюсы и вычеты»). Ее отличие от функции residue, которая осуществляет
такое преобразование для аналоговых систем, состоит в форме представления простейших дробей. Для уяснения разницы между функциями residue и residuez полезно сравнить используемые ими формулы разложения. Для функции residue это формула (2.12) (см. главу 2), для функции residuez — формула (4.10).
Как уже говорилось, функция residuez может выполнять преобразование в обе стороны. Требуемый тип преобразования определяется количеством выходных параметров:
[г, р, k] = residuez(b, а)
[b, а] = residuezCr. р. к)
Здесь b и а — векторы коэффициентов полиномов числителя и знаменателя функции передачи соответственно, г — вектор вычетов, р — вектор полюсов, к — вектор коэффициентов целой части функции передачи.
Разложение функции передачи фильтра на простые дроби соответствует параллельной реализации фильтра (см. раздел «Параллельная форма»). Каждой простой дроби соответствует рекурсивный фильтр первого порядка; выходные сигналы этих фильтров суммируются.
В качестве примера разложим на простые дроби функцию передачи фильтра Баттерворта 3-го порядка, параллельная реализация которого была показана ранее на рис. 4.11:
» [b, а] = butter(3, 0.4) b =
0.09850.29560.29560.0985
а =
1.0000-0.57720.4218 -0.0563
» [г, р. k] = residuez(b, а) г =
0.6145 - 0.10961
0.6145 + 0.10961
3.0777
Р =
0.2094 + 0.55821
0.2094 - 0.55821
0.1584
к =
-1.7502
Как видите, постоянное слагаемое и вещественный полюс с вычетом соответствуют двум верхним ветвям схемы на рис. 4.11. Для пар комплексно-сопряженных полюсов и вычетов такое сравнение выполнить сложнее, ведь на рисунке они были скомбинированы в секцию второго порядка с вещественными коэффициентами. Чтобы получить коэффициенты этой секции, выполним с помощью функции residuez обратное преобразование, задав в качестве входных параметров только эти пары полюсов и вычетов:'
» [bl. al] = res1duez(r(1:2), р(1:2), []) bl =
1.22900.3798
al =
1.0000-0.41890.3554
Теперь видно, что результат объединения комплексно-сопряженных пар полюсов и вычетов соответствует секции второго порядка, показанной на рис. 4.11.
ЗАМЕЧАНИЕ
Хотя в последнем расчете не нужно было задавать целую часть функции передачи, нам пришлось указать соответствующий параметр в виде пустой матрицы. Без этого функция residuez не поймет, что мы хотим осуществить преобразование полюсов и вычетов в коэффициенты числителя и знаменателя функции передачи, а не наоборот.
Функции, работающие с секциями второго порядка
В разделе «Последовательная (каскадная) форма» мы уже говорили, что разбиение структуры фильтра на последовательно включенные блоки часто используется на практике. В том, что это действительно уменьшает проблемы, связанные с конечной точностью вычислений, нам предстоит убедиться в главе 7, а пока рассмотрим функции MATLAB, работающие с таким представлением дискретных систем.
Казалось бы, для создания последовательной реализации системы достаточно рассчитать ее нули и полюсы, после чего представить систему в виде каскадно включенных звеньев первого порядка. Однако часть этих звеньев (или все) может оказаться с комплексными коэффициентами. По этой причине при каскадной реализации вещественных фильтров их делят на секции второго порядка (second-order sections). При этом пары комплексно-сопряженных нулей и полюсов объединяются и образуют каскады второго порядка. Легко убедиться, что для расчета выходного сигнала вещественного фильтра второго порядка необходимо выполнить меньше операций, чем для расчета выходного сигнала двух последовательно соединенных комплексных фильтров первого порядка.
В пакете Signal Processing имеется шесть функций, осуществляющих преобразование описания дискретной системы между набором секций второго порядка и другими формами описания. Имена этих функций построены так же, как и имена других функций преобразования описаний систем; аббревиатура последовательной формы — sos (second-order sections):
преобразование секций второго порядка в коэффициенты полиномов числителя и знаменателя функции передачи:
[b. а] = sos2tf(sos, д)
преобразование секций второго порядка в нули, полюсы и коэффициент усиления:
[z. р, k] = sos2zp(sos, д)
преобразование секций второго порядка в параметры пространства состояний: [А, В, С. D] = sos2ss(sos, д)
преобразование коэффициентов полиномов числителя и знаменателя функции передачи в секции второго порядка:
[sos. д] = tf2sos(b. a. 'order', 'scale')
преобразование нулей, полюсов и коэффициента усиления в секции второго порядка:
[sos, g] = zp2sos(2, р. k. 'order', 'scale')
преобразование параметров пространства состояний в секции второго порядка:
[sos, g] = ss2sos(A. В. С. D, 'order', 'scale')
Набор секций второго порядка представляется с помощью 6-столбцовой матрицы sos, каждая строка которой соответствует одной секции и устроена следующим образом:
[60 61 62 1 01 о2].
Такой строке соответствует функция передачи вида
1 + 0,2+ О22
Параметр g — дополнительный множитель (gain), добавляемый к функции передачи, составленной из секций второго порядка. Этот параметр при вызове может опускаться, для входного параметра g это означает использование значения по умолчанию g = 1, а для выходного — учет этого коэффициента в первой секции фильтра.
Преобразование описания из набора секций второго порядка в какую-либо другую форму является однозначным, а обратное — нет. Ведь можно разными способами группировать нули и полюсы для формирования секций, менять порядок включения секций и по-разному распределять коэффициент усиления между ними (например, если у одной секции все коэффициенты 6, в одинаковое число раз увеличить, а у другой — во столько же раз уменьшить, общая функция передачи фильтра останется без изменений).
Группировка нулей и полюсов функциями xx2sos выполняется следующим образом. Прежде всего выделяются комплексно-сопряженные пары нулей и полюсов. Эти пары образуют числители и знаменатели секций, причем для каждой секции выбирается пара нулей, расположенных ближе всего к паре полюсов секции. Для вещественных полюсов и нулей применяется аналогичный подход, при этом группируются в пары полюсы, максимально близкие по модулю.
Последовательностью включения секций можно управлять с помощью входного параметра 'order', имеющегося у функций xx2sos. Этот параметр определяет режим сортировки строк матрицы sos и может принимать одно из двух значений:
'up' — строки матрицы sos расположены в порядке приближения полюсов секций к единичной окружности (этот вариант принят по умолчанию);
'down' — строки матрицы sos расположены в порядке удаления полюсов секций от единичной окружности.
Наконец, входной параметр 'scale', имеющийся у функций xx2sos, управляет распределением коэффициента усиления между секциями фильтра и множителе! д. Этот параметр может принимать одно из трех значений:
'none' — никакого дополнительного масштабирования не производится, во всех секциях 6g = 1, а необходимый коэффициент усиления формируется с помощью общего множителя g (этот вариант принят по умолчанию);
'inf — масштабирование коэффициентов bi производится исходя из /.„-нормы АЧХ секций (£„-норма равна максимальному значению функции);
'two' — масштабирование коэффициентов Ь, производится исходя из 12-нормы АЧХ секций (12-норма равна корню квадратному из интеграла от квадрата модуля функции).
ЗАМЕЧАНИЕ
Подробнее о масштабировании последовательно включенных секций можно прочитать в [8].
Естественно, масштабирование и порядок включения секций не влияют на общую функцию передачи фильтра. Однако при практической реализации фильтра с использованием вычислений с фиксированной запятой эти вещи обязательно следует принимать во внимание. Эффектам, связанным с конечной точностью вычислений, посвящена глава 7, здесь же приведем лишь два соображения, упоминаемых в документации MATLAB применительно к функциям xx2sos:
при 'order' = 'up' и 'scale' = 'inf минимизируется вероятность переполнения в процессе промежуточных вычислений;
при 'order' = 'down' и 'scale' = 'two' минимизируется пиковое значение шума округления.
В качестве иллюстрации выполним разложение на секции второго порядка для фильтра, использованного для примера в разделе «Последовательная (каскадная) форма» (напомним, что это был фильтр Баттерворта 3-го порядка с частотой среза, равной 0,4 частоты Найквиста, синтезированный методом билинейного 2-преобразования):
» [b, а] = butterO, 0.4)
b -
0.0985
0.29560.2956
0.0985
a -
1.0000
-0.57720.4218
-0.0563
» [SOS. g]
- tf2sos(b. a)
SOS -
1.0000
1.00000
1.0000
-0.1584
0
1.0000
2.00001.0000
1.0000
-0.4189
0.3554
g -
0.0985
Полученный результат соответствует приведенному ранее на рис. 4.10. Продемонстрируем теперь варианты масштабирования и расположения секций, упомянутые выше:
» [sos, g] = tf2sos(b, a, 'up', 'inf')
SOS =
0.39190.391901.0000-0.15840
0.29870.59750.29871.0000-0.41890.3554
=
0.8416
Как видите, изменились только коэффициенты нерекурсивных частей секций (первые три столбца матрицы sos) и коэффициент усиления д.
А теперь испытаем второй вариант масштабирования и расположения:
» [sos. д] = tf2sos(b, a. 'down', 'two') SOS =
0.31850.63700.31851.D000-0.41890.3554
0.34800.348001.0000-0.15840
=
0.8889
Теперь секции поменялись местами, а их коэффициенты усиления несколько изменились.
ЗАМЕЧАНИЕ
В MATLAB можно непосредственно осуществлять обработку сигнала фильтром, представленным в виде секций второго порядка, не преобразуя описание фильтра к стандартной форме функции передачи. Для этого служит функция sosfilt, вызываемая следующим образом: у = sosfilt(sos, х). Здесь sos — описание фильтра в рассмотренном выше формате, х и у — соответственно входной и выходной сигналы.
Изменение частоты дискретизации
При решении различных задач обработки сигналов приходится увеличивать или уменьшать частоту дискретизации сигналов. Это необходимо, например, для согласования различных стандартов хранения и передачи дискретной информации. Классическим примером является преобразование аудиозаписей между форматами компакт-дисков (частота дискретизации 44,1 кГц) и цифровой магнитной записи R-DAT (частота дискретизации 48 кГц).
Приведенный пример не относится к самым простым, поскольку коэффициент изменения частоты дискретизации не является целым числом. В зависимости от значения этого коэффициента выделяют следующие варианты:
интерполяция (interpolation) — повышение частоты дискретизации в целое число раз;
прореживание (decimation) — понижение частоты дискретизации в целое число раз;
передискретизация (resampling) — изменение частоты дискретизации в про- • извольное (в общем случае дробное) число раз.
Рассмотрим алгоритмы реализации этих вариантов изменения частоты дискретизации более подробно.
Прореживание
Казалось бы, ломать — не строить, и для понижения частоты дискретизации в N раз достаточно взять из исходной последовательности каждый N-й отсчет. В принципе это так и есть, однако для предупреждения возможных побочных эффектов следует принять некоторые меры.
Дело в том, что процесс прореживания по сути сводится к дискретизации дискретного сигнала. При этом имеют место все эффекты, упомянутые в разделе «Спектр дискретного сигнала» главы 3, в том числе и появление ложных частот (aliasing, рис. 4.18):
» к = 0:20:%дискретное время
» t = 0:0.01:20:%аналоговое время
» si = cos(2*pi*t/4):% аналоговый сигнал
» sdl = cos(2*pi*k/4): % дискретный сигнал
» Dec = 3:%коэффициент прореживания
» sd2 = sdl(1:Dec:end): % прореженный сигнал
» s2 = cos(2*pi*t/12): % ложный сигнал
» subplot(1, 2. 1)
» stem(k, sdl): hold on: plot(t, si. '--'); hold off
Рис. 4.18. Появление ложных частот при прореживании дискретного сигнала
Таким образом, если в спектре исходного (прореживаемого) сигнала содержатся частоты, превышающие половину новой частоты дискретизации (то есть новую частоту Найквиста), это приведет к появлению в спектре выходного сигнала ложных частотных составляющих.
Для устранения этого нежелательного эффекта следует, как и при дискретизации аналогового сигнала, предварительно пропустить сигнал через ФНЧ с частотой среза, равной новой частоте Найквиста.
Чтобы сохранить фазовые соотношения во входном сигнале, следует использовать нерекурсивный фильтр с линейной ФЧХ. Использование нерекурсивного
фильтра позволяет весьма эффективно организовать вычисления — поскольку нас интересует только каждый N-й отсчет выходного сигнала, остальные отсчеты можно и не вычислять. При этом можно считать, что сигнал «заталкивается» в линию задержки фильтра порциями по N отсчетов. Если использовать рекурсивный фильтр, такой экономии добиться не удастся — из-за наличия обратных связей придется вычислять весь выходной сигнал фильтра и только потом отбрасывать лишние отсчеты.
В MATLAB прореживание выполняется с помощью функции decimate. Синтаксис ее вызова следующий:
у = decimate(x. г)
Здесь х — входной сигнал, г — целочисленный коэффициент понижения частоты дискретизации. Выходной параметр у — прореженный сигнал.
В качестве предварительного фильтра по умолчанию используется ФНЧ Чебышева первого рода 8-го порядка с уровнем пульсаций в полосе пропускания 0,05 дБ и частотой среза, равной 0,8 новой (после прореживания) частоты Найквиста. Для устранения фазовых искажений применяется двунаправленная обработка входного сигнала с помощью функции filtfilt (см. раздел «Компенсация фазового сдвига»). Поэтому в конечном счете порядок фильтра удваивается.
Можно задать порядок фильтра Чебышева, используя для этого третий числовой входной параметр:
у = decimatetx. г, п)
При этом не рекомендуется использовать п > 13.
Если в качестве третьего входного параметра использовать строку 'fir', будет использован нерекурсивный фильтр 30-го порядка, рассчитанный с помощью функции f 1 г1 (см. раздел «Функции синтеза с использованием окон» главы 6):
у = decimate(x. г. 'fir')
Данный нерекурсивный фильтр имеет линейную ФЧХ, поэтому производить двунаправленную фильтрацию нет необходимости. Это позволяет уменьшить расход памяти при выполнении Операции прореживания.
Наконец, при использовании четырех входных параметров можно задать порядок нерекурсивного фильтра:
у = decimate(x. г. n, 'fir')
Для демонстрации прореживания сформируем сигнал, мгновенная частота которого меняется по гармоническому закону от нуля до частоты Найквиста и обратно в течение одной секунды (рис. 4.19):
» Fs = ЮОеЗ;
» t = 0:1/Fs:l:
» s = cos(2*pi*t*Fs/4-Fs/4*sin(2*pi*t)):
» specgram(s, []. Fs)
» colormap gray
ЗАМЕЧАНИЕ
О понятии мгновенной частоты речь пойдет в разделе «Угловая модуляция» главы 8. Функция specgram, которая показывает цветом зависимость мгновенного амплитудного спектра от времени, будет рассмотрена в главе 5.
Рис. 4.19. Спектрограмма прореживаемого сигнала
На спектрограмме сигнала видно, что в его спектре содержатся частоты, которые после прореживания с любым коэффициентом будут превышать новую частоту Найквиста, что неминуемо должно вызвать появление ложных частот.
Убедимся в этом, понизив частоту дискретизации в два раза путем выборки каждого второго отсчета (рис. 4.20):
» si = s(l:2:end): % прореженный сигнал
» specgram(sl, []. Fs/2)
» colormap gray
Теперь выполним прореживание с предварительной фильтрацией, воспользовавшись для этого функцией decimate (рис. 4.21):
» s2 = dec1mate(s. 2): I прореженный сигнал
» specgram(s2, []. Fs/2)
» colormap gray
Графики показывают, что при прореживании с предварительной фильтрацией оказалась удалена середина сигнала, содержащая высокие частоты. Однако в данном случае не произошло появления ложных частот.
FrequencyFrequency
Time
Рис. 4.20. Прореживание без предварительной фильтрации
создает ложные частоты
Рис. 4.21. Предварительная фильтрация позволяет устранить ложные частоты при прореживании сигнала
Интерполяция
При интерполяции нам необходимо повысить частоту дискретизации в N раз, то есть «растянуть» входной сигнал, а образовавшиеся промежутки между отсчетами чем-то заполнить.
Подобно тому как прореживание сводится к дискретизации дискретного сигнала, процесс интерполяции оказывается подобным процессу восстановления непрерывного сигнала, только происходящему в дискретной области.
Исходный сигнал имеет периодический спектр, повторяющийся с частотой дискретизации /д (рис. 4.22, а). Прежде всего мы «растягиваем» этот сигнал, добавляя между его отсчетами по N - 1 нулей. При этом частота дискретизации сигнала станет равна Nf„ но период повторения спектра останется прежним — Д (рис. 4.22, б). Теперь необходимо пропустить полученный сигнал через ФНЧ с частотой среза Д/2 (его идеализированная АЧХ показана на рис. 4.22, б). В результате фильтрации получится интерполированный сигнал, у которого частота дискретизации равна ЛД, а спектр в полосе частот от нуля до Д/2 остался прежним (рис. 4.22, в).
Рис. 4.22. Спектры сигналов в процессе интерполяции
Для сохранения фазовых соотношений во входном сигнале следует использовать нерекурсивный фильтр с линейной ФЧХ. Поскольку в линии задержки фильтра в каждый момент содержится большое количество нулевых отсчетов и положения этих отсчетов на каждом шаге заранее известны, при реализации алгоритма
можно сэкономить время вычислений, игнорируя арифметические операции с этими отсчетами.
В MATLAB интерполяция выполняется с помощью функции interp. Синтаксис ее вызова следующий:
у = interpCx, г)
Здесь х — входной сигнал, г — целочисленный коэффициент повышения частоты дискретизации. Выходной параметр у — интерполированный сигнал.
Для интерполяции используется нерекурсивный фильтр с линейной ФЧХ, перекрывающий целое число межотсчетных интервалов. По умолчанию порядок фильтра равен 8*г, то есть фильтр в каждый момент использует 8 отсчетов входного сигнала. Частота среза фильтра по умолчанию равна половине исходной частоты Найквиста.
ВНИМАНИЕ
Обратите внимание на то, что по умолчанию функция interp считает полосу частот входного сигнала ограниченной подоенной частоты Найквиста.
Используя третий и четвертый входной параметры, можно управлять длиной фильтра и его частотой среза:
у = 1nterp(х. г. 1. alpha) .
Здесь 1 — половина количества отсчетов, используемых для интерполяции (длина фильтра равна 2*г*1 + 1), alpha — нормированная частота среза фильтра (значение 1 соответствует частоте Найквиста). По умолчанию 1 = 4 и alpha = 0.5.
При указании двух выходных параметров во втором из них функция возвращает коэффициенты фильтра, использованного для интерполяции:
[у. b] = interpL.)
Рассмотрим пример интерполяции, сформировав для этого 13 отсчетов, принимающих значения ±1, и дополнив их с каждой стороны пятью нулями (рис. 4.23):
» х=[0 000011111-1-111-11-1100000]:
» % повышаем частоту дискретизации в пЯть раз
» у = interp(x. 5):
» % график интерполированного сигнала - сплошная линиЯ
» plot((0:length(y)-l), у)
» % график исходного сигнала - кружочки
» hold on
» plot((0:length(x)-l)*5. х. 'о')
» hold off
Обратите внимание на большие выбросы, сформированные между отсчетами с одинаковыми значениями в процессе интерполяции. Эти выбросы обусловлены именно ограничением полосы частот выходного сигнала. Если соединить исходные отсчеты «более плавно выглядяшей» кривой, спектр полученного сигнала окажется шире. Таким образом, мы получили еще одно подтверждение факта, упоминавшегося при обсуждении теоремы Котельникова в главе 3: ограничен-
ность полосы частот, занимаемой сигналом, вовсе не означает малости изменения значений сигнала между отсчетами.
Рис. 4.23. Исходный (кружочки) и интерполированный (сплошная линия) сигналы при пятикратном повышении частоты дискретизации
ЗАМЕЧАНИЕ
Данный сигнал называется 13-элементным кодом Баркера. Главным свойством кодов Баркера является вид их корреляционной функции, представляющей собой узкий высокий пик, окруженный треугольными лепестками малого уровня. Коды Баркера имеют максимально возможное для бинарных (то есть принимающих два значения) сигналов отношение высоты центрального пика корреляционной функции к уровню ее боковых лепестков. Это отношение равно числу отсчетов сигнала и в данном примере составляет 13.
Передискретизация
Если частоту дискретизации необходимо изменить в нецелое число раз, но это число раз является рациональной дробью, используется процедура передискретизации (resampling).
Передискретизация является сочетанием интерполяции и прореживания. Если исходную частоту дискретизации необходимо умножить на p/q, сначала выполняется интерполяция с коэффициентом р, а затем прореживание с коэффициентом q. Поэтому в принципе данную операцию можно осуществить средствами MATLAB следующим образом:
у = decimatednterp(x, р), q)
Однако в этом случае будет выполняться много лишних операций, которые могут быть устранены при оптимальной организации вычислений.
Рассмотрим последовательность действий, выполняемых при последовательном осуществлении интерполяции и прореживания.
Между отсчетами входного сигнала вставляется по (р - 1) нулей.
Полученный сигнал пропускается через ФНЧ с частотой среза/,/2.
Полученный сигнал пропускается через ФНЧ с частотой среза (/чр/9)/2.
Из полученного сигнала выбирается каждый ^-й отсчет.
Шаги 1 и 2 относятся к процессу интерполяции, 3 и 4 — к процессу прореживания.
Первое, что можно заметить, — это последовательное пропускание сигнала через два ФНЧ с разными частотами среза. Очевидно, что фильтр с большей частотой среза является избыточным. Поэтому можно оставить только один фильтр с меньшей частотой среза. При повышении частоты дискретизации эта частота среза равна частоте Найквиста входного сигнала, при понижении — частоте Найквиста выходного сигнала.
Вторая модификация та же, что рассматривалась ранее при обсуждении процесса прореживания. Поскольку нас интересует лишь каждый ^-й отсчет фильтрованного сигнала, нет смысла выполнять фильтрующие вычисления для всех отсчетов. Наконец, как и в случае интерполяции, в линии задержки фильтра в каждый момент содержится большое количество нулевых отсчетов, которые можно игнорировать при вычислениях.
С учетом сказанного последовательность действий передискретизации будет выглядеть следующим образом.
Между отсчетами входного сигнала вставляется по (р - 1) нулей.
Полученный сигнал порциями по q отсчетов «заталкивается» в ФНЧ с частотой среза, равной/д/2 • min(l, p/q). Результаты фильтрации для этих порций являются отсчетами сигнала с частотой дискретизации f;vp/q. При фильтрации игнорируются арифметические операции с отсчетами, имеющими нулевые значения.
Данный алгоритм (он называется полифазным — polyphase), минимизирует число вычислительных операций и широко используется на практике [9].
В MATLAB для выполнения передискретизации используется функция resample. Синтаксис ее вызова следующий:
у = resample(x. р. q)
Здесь х — входной сигнал, р и q — числитель и знаменатель дробного коэффициента изменения частоты дискретизации. Выходной параметр у — передискрети- зированный сигнал.
В качестве фильтра используется нерекурсивный ФНЧ, рассчитанный с помощью функции firls с использованием окна Кайзера.
ЗАМЕЧАНИЕ
Подробнее об использовании функции firls для синтеза фильтров с линейной ФЧХ речь пойдет в главе 6; окно Кайзера, наряду с другими весовыми функциями, будет рассмотрено в главе 5.
Ядром функции resample является функция upfirdn (upsampling, FIR filtering and downsampling), которая и выполняет приведенную выше последовательность дей-
ствий. Эта функция реализована в машинных кодах (в виде DLL-файла) для достижения максимальной производительности. Функцию upfirdn можно использовать в тех случаях, когда необходимо задать конкретный ФНЧ. Синтаксис вызова функции upfirdn следующий:
у = upfirdn(x, h, р. q)
Здесь х — входной сигнал, p/q — коэффициент изменения частоты дискретизации, h — импульсная характеристика нерекурсивного ФНЧ. Выходной параметр у — передискретизированный сигнал.
Для осуществления блочной обработки сигнала имеется вариант синтаксиса с доступом к внутреннему состоянию фильтра:
[у. z2] = upfirdn(x. h, р, q, zl)
Здесь zl — начальное состояние фильтра, z2 — его конечное состояние. Длина вектора zl должна быть на единицу меньше длины импульсной характеристики фильтра h. Использование начального и конечного состояний фильтра для организации блочной фильтрации обсуждалось в разделе «Доступ к внутреннему состоянию фильтра».
Если один из параметров х и h является матрицей, эта матрица рассматривается как многоканальный сигнал или фильтр (каждый столбец матрицы соответствует одному каналу). Если оба параметра х и h являются матрицами с одинаковым числом столбцов, при обработке каждого сигнала используется свой фильтр. Выходной сигнал у во всех этих случаях является матрицей с тем же числом столбцов.
В качестве примера увеличим в 5/4 раз частоту кусочно-линейного сигнала, представляющего собой набор отсчетов со значениями
{4, 5, 6, 7, 8, 9, 10, 6, 5, 4, 3, 2}.
Результат показан на рис. 4.24.
11
10
9
8
7
6
5
4
3
2
Рис. 4.24. Исходный (крестики) и передискретизированный (кружочки) сигналыпри повышении частоты дискретизации в 5/4 раз
» х - [4:10 б:-1:2]:
» у - resamplе(х. 5.4):
» % график исходного сигнала - крестики
» plot(0:length(x)-l, х. 'х')
» % график передискретизированного сигнала - кружочки
» hold on
» plot((0:length(y)-l)*4/5. у. ’o')
» hold off
На рис. 4.24 видно, что новые отсчеты действительно интерполируют исходный сигнал, однако наблюдается и эффект Гиббса (см. раздел «Примеры разложения сигналов в ряд Фурье» главы 1), хотя в данном случае он выражен слабо, поскольку частота дискретизации меняется незначительно.
Некоторые идеализированные фильтры
В данном разделе мы рассмотрим частотные и импульсные характеристики идеальных фильтров, осуществляющих над дискретным сигналом преобразование Гильберта и дифференцирование. Эти фильтры являются нереализуемыми, поскольку их функции передачи не выражаются в виде рациональных дробей, а импульсная характеристика является бесконечной в обоих направлениях. Однако знание того, как выглядят идеализированные характеристики, полезно для понимания принципов синтеза фильтров, аппроксимирующих данные преобразования (этот вопрос будет рассмотрен в главе 6).
Дискретное преобразование Гильберта
Все сказанное в разделе «Комплексная огибающая» главы 1 о преобразовании Гильберта относилось к аналоговым сигналам. В дискретном случае указанные спектральные соотношения должны выполняться в рабочей полосе частот (то есть от нуля до частоты Найквиста). Таким образом, частотная характеристика дискретного преобразования Гильберта имеет следующий вид:
К(со) = Ь,К(со) = Ь,< со < &сод,(,Г + 2 )Юд< со < &сод,(,Г + 2 )Юд
К(со) = Ь,
К(со) = Ь,
< со < &сод,
(,
Г + 2 )Юд
< со < &сод,
(,
Г + 2 )Юд
для всех целочисленных к. Графики АЧХ и ФЧХ дискретного преобразования Гильберта показаны на рис. 4.25.
Для нахождения импульсной характеристики можно, например, выделить средний участок спектра (для |со| <. л/Т), вычислить обратное преобразование Фурье
и взять дискретные отсчеты результата. Обратное преобразование Фурье будет
равно
Л(г) = —f 1 - cosf——)
V 2 )
№)|
-шд -аь/20 Шд/2 шдш
Рис. 4.25. АЧХ (сверху) и ФЧХ (снизу) дискретного преобразования Гильберта
Дискретизируем это выражение с шагом Т = 2л/сод (можно легко показать, что предел при t —> О равен 0). Кроме того, значения h^ необходимо умножить на Т, поскольку в формуле (3.7), дающей связь между спектрами аналогового и дискретизированного сигналов, имеется множитель h/T. В конечном счете получаем следующее:
0, к четно,
Н^Ц 2 ,
—, к нечетно.
.ик
Как и для аналогового случая, импульсная характеристика получилась физически нереализуемой — она является бесконечно протяженной в обоих направлениях. Ее график показан на рис. 4.26.
» к = -20:20:
» h = 2 / pi ./ к .* mod(k, 2):
» h(find(~k)) = 0: Ж убираем Inf из-за деления на ноль
» stemCk. h)
Поскольку фильтр оказывается физически нереализуемым, осуществить дискретное преобразование Гильберта можно лишь приближенно. Простое усечение импульсной характеристики во времени приводит к нежелательным эффектам, связанным с явлением Гиббса. Поэтому фильтры, приближенно реализующие преобразование Гильберта, приходится аппроксимировать с применением более сложных алгоритмов. Речь о них пойдет в разделе «Реализация метода Ремеза» главы 6.
О.а .,,,,..0.6 ■°0.4 "0.2 "?qo^®^®^©^® 000 ©^©^о^о^о^о^о^оФо0.2 "<!>0.4 "0.6 ■10.8 1'111'1-20-15-10-505101520О.а .,,,,..0.6 ■°0.4 "0.2 "?qo^®^®^©^® 000 ©^©^о^о^о^о^о^оФо0.2 "<!>0.4 "0.6 ■10.8 1'111'1-20-15-10-505101520<**®*®Ж®Л®1®1®1®1®<**®*®Ж®Л®1®1®1®1®00©©ооФФ0000о1 ©'о101 ©'©'©"©о1 ©'о101 ©'©'©"©ооРис. 4.26. Импульсная характеристика дискретного преобразования Гильберта
О.а .,,,,..
0.6 ■°
0.4 "
0.2 "?
qo^®^®^©^® 000 ©^©^о^о^о^о^о^оФо
0.2 "<!>
0.4 "
0.6 ■1
0.8 1'111'1
-20-15-10-505101520
О.а .,,,,..
0.6 ■°
0.4 "
0.2 "?
qo^®^®^©^® 000 ©^©^о^о^о^о^о^оФо
0.2 "<!>
0.4 "
0.6 ■1
0.8 1'111'1
-20-15-10-505101520
<**®*®Ж®Л®1®1®1®1®
<**®*®Ж®Л®1®1®1®1®
0
0
©
©
о
о
Ф
Ф
0
0
0
0
о1 ©'о101 ©'©'©"©
о1 ©'о101 ©'©'©"©
о
о
Для иллюстрации искажений частотных характеристик, возникающих при усечении импульсной характеристики во времени, построим график АЧХ фрагмента импульсной характеристики, приведенного выше па рис. 4.26 (симметрия используемого фрагмента импульсной характеристики является принципиальной для сохранения линейной ФЧХ фильтра). Результаты показаны на рис. 4.27 (на горизонтальной оси графика отложены нормированные значения частоты, такие, что частота Найквиста равна единице).
» [hh, f] = freqzCh, 1, 'whole');
» plot(f/pi. abs(hh)). grid
» xlabel('Normalized Frequency')
» ylabeK'Magnitude')
1.4
1.2
1
3 0.8 c ” 0.6
0.4
0.2
Normalized FrequencyNormalized FrequencyРис. 4.27. Искажения, возникающие при усечении импульсной характеристикипреобразования Гильберта
Normalized Frequency
Normalized Frequency
На рис. 4.27 хорошо заметны выбросы АЧХ вблизи частот, кратных частоте Найквиста. Величина максимального выброса составляет примерно 18 % от номинального коэффициента передачи (это согласуется с тем, что говорилось в главе 1 применительно к разложению меандра в ряд Фурье — в данном случае коэффициент передачи меняется скачком от -j до), так что величина скачка равна двум, и выброс составляет 9 % от величины этого скачка).
Для уменьшения пульсаций АЧХ при синтезе фильтров, выполняющих преобразование Гильберта, задают переходные полосы вблизи нулевой частоты и частоты Найквиста. Коэффициент передачи фильтра в этих полосах считается неопределенным, и оптимизация производится только в оставшейся (рабочей) полосе частот.
Функция Hilbert
В MATLAB для формирования аналитического сигнала служит функция hi 1 beet. Синтаксис ее вызова более чем прост:
у = hilbert(x)
Здесь х — входной вещественный сигнал (если х — матрица, отдельные столбцы обрабатываются независимо), у — сформированный комплексный аналитический сигнал.
ВНИМАНИЕ
Вопреки своему названию, функция hilbert осуществляет не преобразование Гильберта, а именно формирование аналитического сигнала. Преобразование Гильберта с помощью этой функции можно реализовать, взяв мнимую часть результата: imag(hilbert(x)).
Формирование аналитического сигнала функцией hilbert производится в частотной области. Вычисляется дискретное преобразование Фурье (оно будет рассмотрено в главе 5) входного сигнала, далее обнуляется половина спектра (то есть создается односторонний спектр аналитического сигнала) и, наконец, производится обратное преобразование Фурье.
В качестве второго аргумента можно указать желаемую размерность дискретного преобразования Фурье:
у = hi 1 bent(х, п)
При этом входные данные х усекаются или дополняются нулями до заданного размера.
ЗАМЕНАНИЕ
Как указывалось ранее, преобразование Гильберта физически нереализуемо. Однако это ограничение можно обойти, если известны (точнее, считаются известными) будущие значения сигнала. Например, мы можем считать, что сигнал закончился (то есть все его будущие значения равны нулю). Именно это и предполагается в функции hilbert.
В качестве примера вычислим аналитический сигнал для функции Дирихле 9-го порядка (рис. 4.28):
» t - 0:0.01:4*р1: % рассматриваем два периода функции
» х - diric(t. 9):
» у - hi 1 bent(х):
» plot(t, reaKy). t, imag(y), '--')
10.80.60.40.20-0.2-0.4-0.610.80.60.40.20-0.2-0.4-0.6Рис. 4.28. Функция Дирихле (сплошная линия) и ее преобразование Гильберта (пунктирная линия)Рис. 4.28. Функция Дирихле (сплошная линия) и ее преобразование Гильберта (пунктирная линия)
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
Рис. 4.28. Функция Дирихле (сплошная линия) и ее преобразование Гильберта (пунктирная линия)
Рис. 4.28. Функция Дирихле (сплошная линия) и ее преобразование Гильберта (пунктирная линия)
На графике видно, что вблизи тех мест, где исходный сигнал имеет экстремумы, его преобразование Гильберта пересекает ось абсцисс, и наоборот.
Идеальный дифференцирующий фильтр
В разделе «Свойства преобразования Фурье» главы 1 было показано, что при дифференцировании сигнала по времени его спектральная функция умножается на ую. В дискретной дифференцирующей системе это соотношение должно выполняться в полосе частот от нуля до частоты Найквиста. Таким образом, частотная характеристика идеального дискретного дифференцирующего фильтра имеет вид
для всех целочисленных к. Графики АЧХ и ФЧХ идеального дискретного дифференцирующего фильтра показаны на рис. 4.29.
Для нахождения импульсной характеристики поступим так же, как ранее при обсуждении дискретного преобразования Гильберта. Обратное преобразование Фурье от среднего участка спектра (для ]со| S Юд/2 = л/Т) будет равно
Рис. 4.29. АЧХ (сверху) и ФЧХ (снизу) идеального дискретного дифференцирующего фильтраРис. 4.29. АЧХ (сверху) и ФЧХ (снизу) идеального дискретного дифференцирующего фильтра
Рис. 4.29. АЧХ (сверху) и ФЧХ (снизу) идеального дискретного дифференцирующего фильтра
Рис. 4.29. АЧХ (сверху) и ФЧХ (снизу) идеального дискретного дифференцирующего фильтра
После дискретизации и умножения на Т получаем следующее:
О,О,HkV1HkV1(-1)6(-1)6I кТ ’I кТ ’^=0,к * 0.^=0,к * 0.
О,
О,
HkV1
HkV1
(-1)6
(-1)6
I кТ ’
I кТ ’
^=0,
к * 0.
^=0,
к * 0.
Разумеется, импульсная характеристика получилась физически нереализуемой — она является бесконечно протяженной в обоих направлениях. Кроме того, импульсная характеристика не является безразмерной — из-за деления на Т она имеет размерность частоты. Причиной является тот факт, что дифференцирование аналоговой функции меняет ее размерность. Построим график импульсной характеристики идеального дискретного дифференцирующего фильтра, считая период дискретизации равным единице (рис. 4.30):
» к = -20:20;
» h = С-1),Лк ./ к;
» % убираем Inf из-за деления на ноль
» h(find(~k)) = 0:
» stem(k. h)
Поскольку фильтр оказывается физически нереализуемым, осуществить дифференцирование дискретного сигнала можно лишь приближенно. Простое усечение импульсной характеристики во времени приводит к нежелательным эффектам, связанным с явлением Гиббса. Поэтому фильтры, приближенно реализующие дифференцирование, приходится аппроксимировать с применением более сложных алгоритмов. Они будут обсуждаться в разделе «Реализация метода Ремеза» главы 6.
Рис. 4.30. Импульсная характеристика идеального дискретного дифференцирующего фильтра
Для иллюстрации искажений частотных характеристик, возникающих при простом усечении импульсной характеристики во времени, построим график АЧХ фрагмента импульсной характеристики, приведенного выше на рис. 4.30 (симметрия используемого фрагмента импульсной характеристики является принципиальной для сохранения линейной ФЧХ фильтра). Результаты показаны на рис. 4.31.
» [hh. f] = freqz(h. 1. 'whole'):
»plot(f/pi. abs(hh)). grid
» xlabeK'Normalized Frequency')
» ylabel('Magnitude')
Рис. 4.31. Искажения АЧХ, возникающие при усечении импульсной характеристики идеального дифференцирующего фильтра
На рис. 4.31 хорошо заметны пульсации АЧХ, усиливающиеся при приближении к частоте Найквиста. Для уменьшения этих пульсаций при синтезе диффе-
ренцирующих фильтров применяют те же подходы, что и для фильтров, выполняющих преобразование Гильберта, — задают переходные полосы вблизи нулевой частоты и частоты Найквиста, считают коэффициент передачи фильтра в этих полосах неопределенным и производят оптимизацию только в оставшейся (рабочей) полосе частот.
Визуализатор фильтров
В последней (5.1) версии пакета Signal Processing появилась функция fvtool (Filter Visualization Tool), предназначенная для визуализации характеристик дискретных фильтров. Синтаксис вызова этой функции следующий:
fvtooKb, а)
Здесь b и а — коэффициенты полиномов числителя и знаменателя функции передачи соответственно.
Можно вызвать функцию fvtool для одновременного просмотра характеристик нескольких фильтров, в этом случае следует указать в списке входных параметров несколько пар векторов:
fvtool (bl. al. Ь2, а2. ...)
В качестве примера вызовем функцию fvtool для просмотра характеристик того же фильтра, что использовался ранее, при описании функции freqz (см. рис. 4.14).
Рис. 4.32. Просмотр характеристик дискретного фильтра с помощью функции fvtool
» b = [1 2 3 4]:
» а = [1 -0.11;
» fvtooKb, а)
Появится окно, показанное на рис. 4.32. Выбор отображаемой характеристики производится с помощью кнопок панели инструментов. На рис. 4.32 представлен график частотной зависимости групповой задержки анализируемого фильтра.
Интерфейс окна просмотра характеристик фильтра аналогичен интерфейсу программы расчета и анализа фильтров FDATool, которая будет рассмотрена в главе 6.
ГЛАВА 5 Спектральный анализ
В главе 3 было показано, что при дискретизации аналогового сигнала его спектр становится периодическим с периодом повторения, равным частоте дискретизации. Однако одного только этого соотношения оказывается недостаточно для решения всех практических задач спектрального анализа. Во-первых, в качестве исходных данных выступает именно последовательность дискретных отсчетов, а не аналоговый сигнал. Во-вторых, в большинстве случаев анализируемые сигналы являются случайными процессами, что требует выполнения какого-либо усреднения при расчете их спектров. Кроме того, в ряде случаев нам известна некоторая дополнительная информация об анализируемом сигнале, и эту информацию желательно учесть в спектральном анализе.
Обо всех этих аспектах спектрального анализа и пойдет речь в данной главе. Прежде всего мы рассмотрим дискретное преобразование Фурье (ДПФ) — разновидность преобразования Фурье, специально предназначенную для работы с дискретными сигналами. Далее обсудим идеи, лежащие в основе алгоритмов быстрого преобразования Фурье, позволяющих значительно ускорить вычисления. Дискретное преобразование Фурье, по возможности вычисляемое быстрыми методами, лежит в основе различных технологий спектрального анализа, предназначенных для исследования случайных процессов. Дело в том, что если анализируемый сигнал представляет собой случайный процесс, то простое вычисление его ДПФ обычно не представляет большого интереса, так как в результате получается лишь спектр единственной реализации процесса. Поэтому для спектрального анализа случайных сигналов необходимо использовать усреднение спектра. Такие методы, в которых используется только информация, извлеченная из самого входного сигнала, называются непараметрическими (nonparametric).
Другой класс методов предполагает наличие некоторой статистической модели случайного сигнала. Процесс спектрального анализа в данном случае включает в себя определение параметров этой модели, и потому такие методы называются параметрическими (parametric). Используется также термин «модельный спектральный анализ» (Model-Based Spectrum Analysis, MBSA).
В MATLAB имеются функции, реализующие разнообразные методы спектрального анализа, — как параметрические, так и непараметрические. Все они будут рассмотрены в этой главе.
Дискретное преобразование Фурье
В разделе «Спектр дискретного сигнала» главы 3 мы проанализировали явления, происходящие со спектром при дискретизации сигнала. Рассмотрим теперь, что представляет собой спектр дискретного периодического сигнала.
Итак, пусть последовательность отсчетов {х(&)} является периодической с периодом N:
х (k + N) = х (к) для любого к.
Такая последовательность полностью описывается конечным набором чисел, в качестве которого можно взять произвольный фрагмент длиной N, например ^(к), к = 0, 1,..., N - 1}. Поставленный в соответствие этой по следовательности сигнал из смещенных по времени дельта-функций:
s(t)= ^x(^)5(t-^T)(5.1)
также, разумеется, будет периодическим с минимальным периодом N Т.
Так как сигнал (5.1) является дискретным, его спектр должен быть периодическим. с периодом 2 л/Г. Так как этот сигнал является также и периодическим, его спектр должен быть дискретным с расстоянием между гармониками, равным 2k/(NT\
Итак, периодический дискретный сигнал имеет периодический дискретный спектр, который также описывается конечным набором из Nчисел (один период спектра содержит ^/-^ = N гармоник).
Рассмотрим процедуру вычисления спектра периодического дискретного сигнала. Так как сигнал периодический, будем раскладывать его вряд Фурье. Коэффициенты Х(п) этого ряда, согласно общей формуле (1.9), равны
< NT.NT N_t
4 JV-t NT, y-t
===(5.2)
/Ls ( .lunk^X => x(^)exp -i .
NTkN)
Таким образом, формула для вычисления комплексных амплитуд гармоник представляет собой линейную комбинацию отсчетов сигнала.
В выражении (5.2) реальный масштаб времени фигурирует только в множителе Х/Т перед оператором суммирования. При рассмотрении дискретных последовательностей обычно оперируют номерами отсчетов и спектральных гармоник без привязки к действительному масштабу времени и частоты. Поэтому мно-
житель \/Тиз (5.2) удаляют, то есть считают частоту дискретизации равной единице. Удаляют обычно и множитель Y/N (об этом см. замечание ниже). Получившееся выражение называется дискретным преобразованием Фурье (ДПФ; английский термин — Discrete Fourier Transform, DFT):
■f OlLTlb^X
X(n)= Xx(6)exp -J—— .(5.3)
t = o V N J
Существует и обратное дискретное преобразование Фурье. Переход от дискретного спектра к временным отсчетам сигнала выражается следующей формулой:
. f 2теи^А
х<^ = — £^(и)ехР •(5.4)
N п=й V N )
Это выражение отличается от формулы прямого ДПФ (5.3) лишь знаком в показателе комплексной экспоненты и наличием множителя 1/N перед оператором суммирования.
ЗАМЕЧАНИЕ .
В размещении множителя 1/N в формулах (5.3) и (5.4) нет полного единства. В большинстве источников, среди которых [1, 4, 8], а также в математических пакетах компьютерных программ (в том числе и в MATLAB) этот множитель фигурирует в формуле обратного ДПФ (5.4) (этот вариант принят и в данной книге). В то же время в учебнике [2] этот множитель включен в формулу прямого ДПФ (5.3).
Свойства дискретного преобразования Фурье
В целом свойства ДПф аналогичны свойствам непрерывного преобразования Фурье (см. главу 1), однако дискретный характер анализируемого сигнала привносит некоторую специфику.
Линейность
Из формулы (5.3) очевидно, что ДПФ является линейным, то есть если последовательностям (х(^)} и (z/(^)} с одним и тем же периодом Nсоответствуют наборы гармоник Х(и) и У(и), то последовательности {ах(&) + Ьу(ку$ будет соответствовать спектр аХ(п) + Ь¥(п\
Задержка
Если задержать исходную последовательность на один такт (z/(^) - x(k - 1)), то, согласно (5.3), спектр необходимо умножить на ехр(-у'2лп/Х):
У(И) = Х(И)ехрГ-;^1
Поскольку мы считаем последовательность {х(#)} периодической, рассматриваемый здесь сдвиг является циклическим: г/(0) = х(-1) = x(N - 1).
Симметрия
Как уже отмечалось, спектр дискретного периодического сигнала является периодическим. Кроме того, сохраняется и свойство симметрии, которым обладает спектр непрерывного вещественного сигнала (5(-со) = 5'(со)). Поэтому
Х(У-п) = Х(-п) = Х‘(и).(5.5)
Гармоника с нулевым номером (постоянная составляющая), как видно из (5.3), представляет собой сумму отсчетов последовательности на одном периоде:
X(0)=Z^)-С5'6)
к = й
Если ^ четно, то амплитуда гармоники с номером N/2 является суммой отсчетов с чередующимися знаками:
X{N/2) = х(0) - х( 1)+...+x(N - 2) - x(N -1) = §(-1/ х(к).
4=0
Согласно (5.5), спектр является «сопряженно-симметричным» относительно N/2, то есть содержит ровно такое же количество информации, что и сам сигнал. В самом деле, исходная последовательность представляется набором из N вещественных чисел. Спектр же представляется набором из N/2 (вторая половина взаимно-однозначно связана с первой) комплексных чисел, каждое из которых с информационной точки зрения эквивалентно двум вещественным. Если же исходная последовательность (х(#)} не является вещественной, симметрия спектра отсутствует и N комплексным отсчетам во временной области соответствует N комплексных отсчетов в спектральной области.
ДПФ произведения последовательностей
Возьмем две последовательности отсчетов {х/^)} и (х2(^)} одинаковой длины N и вычислим результат их поэлементного умножения:
y(k) - х^(к) х2(к).
Если применить к этой формуле прямое ДПФ, получится следующее выражение:
вдЦ^ХДОХ^-О.(5.7)
ЗАМЕЧАНИЕ
При выполнении вычислений по формуле (5.7) могут понадобиться значения Х2(г) с номерами г, выходящими за рамки диапазона 0... N - 1. В этом случае следует воспользоваться свойством периодичности спектра: Х2(г) = X2(i ± Ы\
Это выражение представляет собой круговую свертку спектров Xt (г) и Х2 (i). Итак, как и для непрерывного преобразования Фурье, спектр произведения является сверткой спектров.
При п = 0 из (5.7) получается дискретный аналог теоремы Рэлея (см. раздел «Энергетические расчеты в спектральной области» главы 1):
N-tI N-l ,< N-1
У(0) = X х, (k)x2 (к) = А £ X, (0Х2 (-0 = А X X, (:)х; (i).(5.8)
к=0N ;=0N i=0
При выводе формулы (5.8) были использованы соотношения (5.5) и (5.6).
Если, кроме того, последовательности {xj(6)} и {х2(^)} совпадают, то есть хх(к) = = х2(6) = х(к) для всех к = 0... N - 1, из (5.8) получается дискретный аналог равенства Парсеваля (см. раздел «Энергетические расчеты в спектральной области» главы 1 и формулу (1.24)):
N-t1 N-1. .|2
2>W-^M
Круговая свертка
Так как мы рассматриваем периодические последовательности, то и суммирование при вычислении свертки таких последовательностей следует производить по одному периоду. Такую операцию называют круговой сверткой;
у(к) = У1хх(г)х2(к -1) = '£x1(i')x2((k -г)modN\(5.9)
i=0i=0
ЗАМЕЧАНИЕ
В этой формуле выражение (к - г) mod Nозначает взятие (& - О по модулю N, то есть вычисление остатка от деления (к - i) на N.
Подставив выражение (5.9) в (5.3), легко убедиться, что круговая свертка периодических временных последовательностей соответствует перемножению их спектров:
У(п) = Х,(п)Х2(п).(5.10)
ЗАМЕЧАНИЕ
Круговую свертку периодических последовательностей не следует путать с линейной сверткой (4.3), являющейся основой алгоритма дискретной фильтрации.
Восстановление непрерывного сигнала с помощью ДПФ
Являясь по своей сути спектром дискретного периодического сигнала, дискретное преобразование Фурье позволяет легко восстановить непрерывный периодический сигнал, занимающий ограниченную полосу частот. Для этого в формуле обратного ДПФ (5.4) необходимо заменить дискретный параметр (номер отсчета к) на непрерывный — нормированное время t/T, где Г — период дискретизации:
(5.И)(5.И)^О = Тт L ад exp ;^ . n„^/2 V nt )
(5.И)
(5.И)
Следует обратить внимание на еще одно отличие этого соотношения от формулы (5.4): диапазон индексов суммирования смещен вниз на N/2 (при четном N; при нечетном N суммирование производится от п = - (N - 1 )/2 до (N - 1 )/2). Это необходимо, чтобы получить аналоговый сигнал, занимающий полосу частот от 0 до к/Т. Коэффициенты Х(п)с отрицательными номерами могут быть получены из соотношения симметрии (5.5).
Результат восстановления непрерывного периодического сигнала с помощью ДПФ, разумеется, совпадает с результатами, получаемыми при использовании ряда Котельникова (3.12). Однако использование ДПФ в данном случае оказывается более предпочтительным, так как ряд Котельникова для периодического сигнала содержит бесконечное число слагаемых, а формула (5.11) — конечное.
Матрица ДПФ
ДПФ является линейным преобразованием, трансформирующим вектор временных отсчетов в вектор такой же длины, содержащий отсчеты спектральные. Такое преобразование может быть реализовано [5] как умножение некоторой квадратной матрицы на входной вектор-столбец:
у = А х,
где А — матрица преобразования. В случае ДПФ эта матрица имеет вид
'111
,2л.4л
1е^
,4л,8л
1е’^е’^
^DFT =-/—-; —
1е Nе
1...1
вe N
eN...eN
-j^3(ZV-l)
eN... eN
1 е Nе N
e Л... e N
Общая формула для элемента матрицы, расположенного в п-м столбце т-й строки, выглядит так:
1 < т < N, 1 < п < N.1 < т < N, 1 < п < N.Adft (т, п) = expl -; 2лI,
1 < т < N, 1 < п < N.
1 < т < N, 1 < п < N.
Вычисление ДПФ путем умножения матрицы на вектор полностью соответствует формуле (5.3). Этот метод требует большого количества вычислительных операций, поэтому на практике вместо него применяются быстрые алгоритмы, рассматриваемые далее.
Связь ДПФ и спектра дискретного сигнала
Имея один и тот же конечный набор чисел, можно рассчитать либо спектральную функцию этого дискретного сигнала по формуле (3.2), либо его ДПФ по формуле (5.3). Разумеется, возникает вопрос о том, как связаны друг с другом
(5.12)(5.12)£ 16 отсчетов% ДПФ сигнала xlX добавляем 16 нулей% ДПФ сигнала х2% график сигнала xl% модуль ДПФ сигнала xl% график сигнала х2X модуль ДПФ сигнала х2£ 16 отсчетов% ДПФ сигнала xlX добавляем 16 нулей% ДПФ сигнала х2% график сигнала xl% модуль ДПФ сигнала xl% график сигнала х2X модуль ДПФ сигнала х2
(5.12)
(5.12)
£ 16 отсчетов
% ДПФ сигнала xl
X добавляем 16 нулей
% ДПФ сигнала х2
% график сигнала xl
% модуль ДПФ сигнала xl
% график сигнала х2
X модуль ДПФ сигнала х2
£ 16 отсчетов
% ДПФ сигнала xl
X добавляем 16 нулей
% ДПФ сигнала х2
% график сигнала xl
% модуль ДПФ сигнала xl
% график сигнала х2
X модуль ДПФ сигнала х2
эти два спектральных представления, полученные на основе одних и тех же отсчетов сигнала.
Сравнение формул (3.2) и (5.3) показывает, что ДПФ представляет собой просто дискретные отсчеты спектральной функции дискретного сигнала, соответствующие частотам ю„ = ю!Хп/№.
■■ / 9 ТЕИ 1■ / И I
Х(п) = 5 — =5 юл- . ( NT)( л N)
По этой причине значения ДПФ иногда называют спектралънъши отсчетами.
Из соотношения (5.12) следует еще один важный вывод: если добавить к конечному набору отсчетов некоторое количество нулей, спектральная функция дискретного сигнала, естественно, не изменится, но ДПФ даст большее число спектральных отсчетов, соответствующих частотам, более тесно расположенным в интервале от нуля до частоты дискретизации.
Поясним сказанное на простом примере, вычислив ДПФ для отсчетов прямоугольного импульса при разном количестве концевых нулей (рис. 5.1):
» xl = [ones(8.D: zeros(8,l)]:
» yl = fft(xl):
» х2 = Exl: zeros(16.1)];
» у2 = fft(x2);
» subplot(2. 2. 1). stem(0:15. xl)
» xl1m(E0 31])
» subplot(2, 2, 2). stem((0:15)/16. abs(yl))
» subplot(2. 2. 3). stem(0:31. x2)
» x!1m(E0 31])
» subplot(2. 2, 4)
» stem((0:31)/32. abs(y2))
Рис. 5.1. Повышение спектрального разрешения ДПФ при дополнении сигнала нулями: сверху — исходный сигнал и модуль его ДПФ, снизу — сигнал, дополненный 16 нулями, и модуль его ДПФ
Горизонтальные оси на спектральных графиках проградуированы в долях частоты дискретизации. Из рис. 5.1 видно, что после увеличения длины сигнала вдвое за счет добавления нулевых отсчетов результат ДПФ стал содержать вдвое больше значений, соответствующих в два раза чаще расположенным частотам. Таким образом, дополнение сигнала нулями позволяет повысить спектральное разрешение при вычислении ДПФ.
Алгоритм быстрого преобразования Фурье
Для вычисления одного коэффициента ДПФ по формуле (5.3) необходимо выполнить N комплексных умножений и сложений. Таким образом, расчет всего ДПФ, содержащего N коэффициентов, потребует N2 пар операций «умножение- сложение». Число операций возрастает пропорционально квадрату размерности ДПФ. Однако, если N не является простым числом и может быть разложено на множители, процесс вычислений можно ускорить, разделив анализируемый набор отсчетов на части, вычислив их ДПФ и объединив результаты. Такие способы вычисления ДПФ называются быстрым преобразованием Фурье (БПФ; английский термин — Fast Fourier Transform, FFT) и повсеместно используются на практике. При реализации БПФ возможно несколько вариантов организации вычислений в зависимости от способа деления последовательности отсчетов на части (прореживание по времени либо по частоте) и от того, на сколько фрагментов производится разбиение последовательности на каждом шаге (основание БПФ).
БПФ с прореживанием по времени
Рассмотрим идею БПФ с прореживанием по времени (decimation in time, DIT) на примере деления набора отсчетов пополам.
Итак, пусть N — четное число. Выделим в формуле (5.3) два слагаемых, соответствующих элементам исходной последовательности с четными и нечетными номерами:
^2-12п2тл N/2-l2к(2т*\)п
Х(п) = £ х(2т)е N + ^ х(2т+1)е N т=0т=0
Введем обозначения у(т) = х(2т) и z(m) = х(2т+1), а также вынесем из второй суммы общий множитель e"t2nn/lV.
Х/2-1 -jj^OOL ^ZV/2-l_^.™л
Х(п)= £ у(т)е N/2 +е N £ z(m)e N’2 .(5.13)
m=0m=0
Две суммы в (5.13) представляют собой ДПФ последовательностей ^(т^ (отсчеты с четными номерами) и (r(m)} (отсчеты с нечетными номерами). Каждое из этих ДПФ имеет размерность N/2. Таким образом,
Х(и) = У(и) + е~^ Z(n),(5.14)
где У(и) и Z(n) — ДПФ соответственно последовательностей отсчетов с четными и нечетными номерами:
N/2-1/™”
У(и) = z у{т)е N'2 , m=0
N/2-1.2ктп
Z(n) = z(m)e N'2 . m=0
Так как ДПФ размерности У/2 дает лишь У/2 спектральных коэффициентов, непосредственно использовать формулу (5.14) можно только при 0 < и < N/2. Для остальных п (N/2 <п < N) следует воспользоваться периодичностью спектра дискретного сигнала (и, соответственно, периодичностью результатов ДПФ):
У и + — = У(п), Z\п + — = Z(n).
V 2)V 2)
С учетом этого при пС учетом этого при п,2лл / хг- n z(n-—I 2,2лл / хг- n z(n-—I 2(5.15)(5.15)> N/2 формула (5.14) представляется в виде
С учетом этого при п
С учетом этого при п
,2лл / хг- n z(n-—
I 2
,2лл / хг- n z(n-—
I 2
(5.15)
(5.15)
• (
Х(п) = У\ и-— +
I 2 J
Процесс вычисления 8-точечного ДПФ путем разбиения его на два 4-точечных ДПФ иллюстрируется на рис. 5.2.
Рис. 5.2. Вычисление 8-точечного ДПФ с помощью двух 4-точечных ДПФРис. 5.2. Вычисление 8-точечного ДПФ с помощью двух 4-точечных ДПФ
Рис. 5.2. Вычисление 8-точечного ДПФ с помощью двух 4-точечных ДПФ
Рис. 5.2. Вычисление 8-точечного ДПФ с помощью двух 4-точечных ДПФ
Блоки, выполняющие на рис. 5.2 объединение результатов двух ДПФ, требуют дополнительных комментариев. Каждый такой блок имеет два входных и два выходных сигнала. Один из входных сигналов умножается на комплексную экспоненту wk, после чего суммируется со вторым входным сигналом и вычитается
из него, формируя таким образом два выходных сигнала. Это соответствует реализации формул (5.14) и (5.15). Данная операция получила название «бабочки» (butterfly). Расшифровка ее структуры представлена на рис. 5.3.
Рис. 5.3. Условное обозначение «бабочки» БПФ с прореживанием по времени (слева) и ее структурная схема (справа)Рис. 5.3. Условное обозначение «бабочки» БПФ с прореживанием по времени (слева) и ее структурная схема (справа)
Рис. 5.3. Условное обозначение «бабочки» БПФ с прореживанием по времени (слева) и ее структурная схема (справа)
Рис. 5.3. Условное обозначение «бабочки» БПФ с прореживанием по времени (слева) и ее структурная схема (справа)
Оценим количество операций, необходимое для вычисления ДПФ указанным способом. Каждое из двух ДПФ половинной размерности требует ЛГ2/4 операций. Кроме того, при вычислении окончательных результатов каждый спектральный коэффициент Z(n) умножается на экспоненциальный комплексный множитель. Это добавляет еще N/2 операций. Итого получается 2 №/4 + N/2 = N(N + 1)/2, что почти вдвое меньше, чем при вычислении ДПФ прямым способом.
Если N/2 тоже является четным числом (то есть если N делится на 4), можно продолжить описанную процедуру, выразив результат через четыре ДПФ размерности N/4. Это позволяет еще больше сократить число требуемых вычислительных операций.
3 АМ ЕЧ АН И Е
Делить исходную последовательность можно на любое количество частей. Таким образом, приведенный алгоритм позволяет уменьшить число операций в случае любого N, не являющегося простым числом. Степень ускорения вычислений зависит от числа фрагментов последовательности и является максимальной при делении па две части, как в рассмотренном примере.
Наибольшая степень ускорения вычислений может быть достигнута при N = 2*, в этом случае деление последовательностей на две части можно продолжать до тех пор, пока не получатся двухэлементные последовательности, ДПФ которых рассчитывается вообще без использования операций умножения (достаточно вычислить сумму и разность двух отсчетов). Число требуемых при этом пар операций «умножение — сложение» можно оценить как ^log2(^). Таким образом, вычислительные затраты по сравнению с непосредственным использованием формулы (5.3) уменьшаются в N/log2(7V) раз. При больших N это отношение становится весьма велико (например, 1024/log2( 1024) = 102,4, то есть при N = 1024 достигается более чем 100-кратное ускорение).
БПФ с прореживанием по частоте
Формулы прямого и обратного ДПФ (5.3) и (5.4) отличаются только знаком в показателе экспоненты и множителем перед суммой. Поэтому можно получить еще один вариант алгоритма БПФ, выполнив преобразования, показанные на схеме рис. 5.2, в обратном порядке. Этот способ вычислений называется проре-
живанием по частоте (decimation in frequency, DIF). Покажем, как получить описание этого метода на основе формулы прямого ДПФ (5.3).
Разделим исходную последовательность (х(^)} на две следующие друг за другом половины (как и в предыдущем случае, N должно быть четным числом):
Лктп N/2-t„ 2n(mtN(2)n
Х(п) = 2^ x(m)e ^ + 2^ х(т +—)е N • m=0m=02
Из второй суммы можно выделить множитель _ .2$<NJ2)n
в’ N =e-j« =(-!)".
Этот множитель равен 1 или -1 в зависимости от четности номера вычисляемого спектрального отсчета п, поэтому дальше рассматриваем четные и нечетные п по отдельности. После выделения множителя ±1 комплексные экспоненты в обеих суммах становятся одинаковыми, поэтому выносим их за скобки, объединяя две суммы:
Х(2к) = 2^ x(m) + x(m + —) е N/2 , m=0 \2 )
N A;2кт
Х(2к + 1) = 2L х(/и)-х(/и+—) е Nf2 е N .
m=0 V2 )
Фигурирующие здесь суммы представляют собой ДПФ суммы и разности половин исходной последовательности, при этом разность перед вычислением ДПФ умножается на комплексные экспоненты expQ-j^Km/Ny Каждое из двух используемых здесь ДПФ имеет размерность N/2.
Итак, при прореживании по частоте вычисления организуются следующим образом:
Из исходной последовательности {х(£)} длиной N получаются две последовательности (г/(т)} и (z(m)} длиной N/2 согласно следующим формулам:
/ X(N
у(т) = x(m) + xlm + —
/ х Г / х (N
г^тп) = х(т) -х т + —
.1ккт.1кктДПФ последовательности {у(т)} дает спектральные отсчеты с четными номерами, ДПФ последовательности ^(jn^ — с нечетными:
.1ккт
.1ккт
№2-1
X(2k) = Y(k) = £ у<т)
_ . 2пЛте"^_ . 2пЛте"^т=0
_ . 2пЛте"^
_ . 2пЛте"^
A72-t
Х(2к + 1) = Z(k) = £ 2(m)
т=0
Все сказанное в предыдущем разделе о возможности деления последовательности на иное, отличное от двух, число частей и об уменьшении числа опера-
ций, требуемых для расчетов, относится и к алгоритму с прореживанием по частоте.
Процесс вычисления 8-точечного ДПФ путем разбиения его на два 4-точечных ДПФ с прореживанием по частоте показан на рис. 5.4.
Рис. 5.4. Вычисление 8-точечного ДПФ с помощью двух 4-точечных ДПФ путем прореживания по частотеРис. 5.4. Вычисление 8-точечного ДПФ с помощью двух 4-точечных ДПФ путем прореживания по частоте
Рис. 5.4. Вычисление 8-точечного ДПФ с помощью двух 4-точечных ДПФ путем прореживания по частоте
Рис. 5.4. Вычисление 8-точечного ДПФ с помощью двух 4-точечных ДПФ путем прореживания по частоте
Поскольку комплексный экспоненциальный множитель в данном алгоритме применяется к результату вычитания двух сигналов, «бабочка» БПФ с прореживанием по частоте имеет несколько иную структурную схему (рис. 5.5).
Рис. 5.5. Условное обозначение «бабочки» БПФ с прореживанием по частоте (слева) и ее структурная схема (справа)Рис. 5.5. Условное обозначение «бабочки» БПФ с прореживанием по частоте (слева) и ее структурная схема (справа)
Рис. 5.5. Условное обозначение «бабочки» БПФ с прореживанием по частоте (слева) и ее структурная схема (справа)
Рис. 5.5. Условное обозначение «бабочки» БПФ с прореживанием по частоте (слева) и ее структурная схема (справа)
3АМ ЕЧАН И Е
Для получения алгоритма обратного БПФ достаточно поменять в приведенных формулах знак в показателях комплексных экспонент и добавить на выходе (или на входе) деление на два (в более общем случае — на используемый коэффициент прореживания).
ЗАМЕЧАЙие
Возможен также обобщенный подход к рассмотрению алгоритмов БПФ с прореживанием по времени и по частоте. Его описание можно найти в [7, 8].
Основание алгоритма БПФ
В названиях алгоритмов БПФ можно встретить слово «RADIX» («основание» — в математическом смысле). Следующее после него число обозначает число фраг-
ментов, на которое разбивается сигнал на каждом этапе прореживания (а также минимальный размер «кусочков» входного вектора, который достигается в результате его последовательных разбиений).
В алгоритмах «RADIX-2» размер анализируемой последовательности должен быть равен степени двойки, а ее половинное деление производится вплоть до получения двухэлементных последовательностей. Вычисление их ДПФ не требует операций умножения — два спектральных отсчета представляют собой сумму и разность отсчетов временных:
Х(0) = х(0) + х(1),
Х(1)=х(0)-х(1).
В алгоритмах «RADIX-4» количество отсчетов сигнала должно быть равно степени четверки, при каждом прореживании сигнал делится на четыре фрагмента, а последней стадией деления являются четырехэлементные последовательности. При вычислении их ДПФ умножение производится только на +j, а такое умножение сводится к взаимной перестановке вещественной и мнимой частей комплексного числа с изменением знака у одной из них:
Х(0) = х(0) + х(1) + х(2) + х(3),
Х(1) = х(0)-;х(1)-х(2) + ;х(3),
Х(2) = х(0) -х(1) + х(2) -х(3),
Х( 3) = х(0) + Ji х( 1) - х(2) - ; х( 3).
В [8] показано, что использование основания 4 позволяет ощутимо уменьшить число выполняемых умножений.
Выводы
Наибольшее ускорение вычислений благодаря алгоритму БПФ достигается при длине анализируемого вектора, равной степени двойки. При разложении длины вектора на иные множители ускорение также возможно, хотя и не столь значительное. Если длина вектора — простое число, вычисление спектра может быть выполнено только по прямой формуле ДПФ.
Пример, демонстрирующий зависимость числа вычислительных операций от размерности БПФ, будет приведен далее, при описании функции fft в разделе «Функции спектрального анализа в MATLAB».
Завершая краткое рассмотрение идеи БПФ, необходимо отметить следующее:
БПФ не является приближенным алгоритмом; при отсутствии вычислительных погрешностей он даст точно такой же результат, что и исходная формула ДПФ (5.3). Ускорение достигается исключительно за счет оптимальной организации вычислений;
применение БПФ имеет смысл, если число элементов в анализируемой последовательности является степенью числа 2. Как уже отмечалось, некоторое ускорение вычислений возможно и при разложении N на другие множители, однако это ускорение не столь велико, как при N = ^
алгоритм БПФ предназначен для одновременного расчета всех спектральных отсчетов Х(п\ Если же необходимо получить эти отсчеты лишь для некоторых п, может оказаться предпочтительнее прямая формула ДПФ или рассматриваемый далее алгоритм Герцеля.
Взаимосвязь ДПФ и фильтрации
К данному моменту мы уже познакомились с понятиями дискретной фильтрации и дискретного преобразования Фурье, однако пока что эти понятия обсуждались по отдельности. В данном разделе рассматривается, как они связаны друг с другом, причем связь эта оказывается двусторонней — ДПФ можно представить как обработку сигнала набором фильтров, а дискретную фильтрацию можно организовать с помощью ДПФ, что позволяет значительно уменьшить число вычислительных операций за счет использования алгоритмов БПФ.
ДПФ как дискретная фильтрация
Рассмотрев принципы дискретной фильтрации и познакомившись с дискретным преобразованием Фурье, можно заметить, что формулы, описывающие эти два процесса, весьма схожи — в обоих случаях они представляют собой линейную комбинацию отсчетов входного сигнала. Это говорит о том, что ДПФ можно трактовать как обработку сигнала фильтром с соответствующей импульсной характеристикой. Эту импульсную характеристику можно получить, если заметить, что ej2™ - 1 при целочисленном и, и с учетом этого записать формулу прямого ДПФ (5.3) в виде
Х(п) = ^х^ехр^ j2u^-(N-к) к=йk N
Преобразованная таким способом формула ДПФ представляет собой дискретную свертку (4.3), то есть N-й отсчет результата обработки входного сигнала х(Х) фильтром, импульсная характеристика которого равна
hn(k) = ехр^у2л-^^^, k - 0, 1^-1.
Разумеется, импульсная характеристика для каждого частотного отсчета ДПФ своя; чтобы подчеркнуть это, в ее обозначении использован индекс п.
Определим частотную характеристику такого фильтра. Для этого, как было показано в разделе «Способы описания дискретных систем» главы 4, сначала необходимо получить функцию передачи:
H^V 1 + ехр ;2л— z ‘ + ехр ;2л— z 2+...+ ехр ;2л^——^- z y+1 =
V N) VN )( N J
exp^j2n^y-N -1<5-16)
expf ;'2л—|z-1 -11-ехр(;'2л—)z-1
I NJ( N)
K^VHA^VK^VHA^V
K^VHA^V
K^VHA^V
ЗАМЕЧАНИЕ
Для расчета функции передачи использована формула суммы конечной геометрической прогрессии:
Для расчета частотной характеристики используем подстановку г - е,шГ:
АЧХ такого фильтра после несложных тригонометрических преобразований можно записать следующим образом:
K„(to)=|K„(to)| =
ГДе = ^Юд"
Результат показывает, что АЧХ фильтра описывается рассмотренной в разделе «Функции генерации периодических сигналов» главы 3 функцией Дирихле:
Х(и) = diricjv (со - и„).
На рис. 5.6 показан график АЧХ одного из каналов ДПФ при N- 8 (градуировка частотной оси выполнена в номерах каналов). Пунктирной линией на этом рисунке изображена АЧХ соседнего частотного канала:
» N - 8:
» w - 0:0.1:N;
» plot(w, abs(diric((w-3)/N*2*pi , N)))
» hold on
» plot(w. abs(diric((w-4)/N*2*p1. N)). '--')
» hold off
Как видно из графиков, АЧХ фильтра, реализуемого при вычислении ДПФ, имеет большой уровень боковых лепестков — примерно l/(^sin(Зл/(2^))). При N » 1 это выражение стремится к 2/(Зл)* 0,2 * -13,5 дБ. Для уменьшения уровня боковых лепестков используют весовые функции, или окна (см. в этой главе далее).
Рис. 5.6. АЧХ частотных каналов ДПФ
Алгоритм Герцеля
Функция передачи отдельного канала ДПФ, записанная в форме (5.16), соответствует рекурсивному фильтру N-ro порядка. Поэтому вычисление отдельного спектрального отсчета можно реализовать с помощью такого фильтра. Если необходимо вычислить лишь некоторые отсчеты ДПФ, данный алгоритм может оказаться предпочтительнее, чем использование БПФ, принципиально ориентированного на получение всех спектральных отсчетов.
Однако для удобства практического использования формулу (5.16) можно модифицировать. Прежде всего заметим, что слагаемое -z~N в числителе выполняет лишь роль «ограничителя», заставляя импульсную характеристику закончиться, достигнув длины N отсчетов. Такой фильтр вычисляет отсчет мгновенного спектра сигнала, все время используя последние N отсчетов входного сигнала. Если же мы будем обрабатывать сигнал порциями по N отсчетов, перед каждой порцией обнуляя состояние фильтра, то конечность длины импульсной характеристики не будет иметь значения. В этом случае можно удалить слагаемое -г~л'из числителя функции передачи, получив таким образом рекурсивный фильтр первого порядка:
1 -expQlnr^N^: 1
Следующее изменение связано с тем, что коэффициент обратной связи в единственной рекурсивной ветви данного фильтра является комплексным. Поэтому при обработке каждого входного отсчета необходимо выполнить четыре вещественных умножения и столько же вещественных сложений. Число операций можно сократить, умножив числитель и знаменатель функции передачи на (1 - е->2ли/л£-1), перейдя за счет этого к фильтру второго порядка:
1 - exp(-y2nn/N)r-1l-exp(-;'27tn/N)z"1
^-ехр^З-кп^^г-^^-ехр^Зкп^ЬГ)^^ l-2cos(2nn/2V)z"‘+z"2
Рекурсивная часть получившегося фильтра имеет вещественные коэффициенты, к тому же коэффициент при z”2 равен единице. Поэтому при обработке каждого
входного отсчета в рекурсивной ветви фильтра необходимо выполнить всего одно вещественное умножение и два вещественных сложения.
В рекурсивной ветви фильтра комплексные коэффициенты исчезли, но они, естественно, появились в числителе функции передачи, то есть в нерекурсивной части фильтра. Однако если реализовать фильтр в канонической форме (см. рис. 4.6 в главе 4), то расчеты будут выполняться сначала в рекурсивной ветви, а затем в нерекурсивной. Поскольку нас интересует только конечный результат вычисления спектрального отсчета, комплексное умножение и сложение в нерекурсивной ветви должны быть выполнены только один раз — для получения окончательного результата.
Полученная структура фильтра показана на рис. 5.7. Данный способ вычисления отдельного спектрального отсчета называется алгоритмом Герцеля (Hoertzel) [7].
Для вычисления спектрального отсчета по алгоритму Герцеля требуется N + 4 вещественных умножений и 2N + 3 вещественных сложений. Если число вычисляемых спектральных отсчетов невелико, этот алгоритм оказывается эффективнее, чем расчет всех спектральных отсчетов с помощью БПФ.
Дискретная фильтрация с помощью ДПФ
Ранее в этой главе мы представили ДПФ как дискретную фильтрацию. Теперь же займемся обратной задачей — реализацией фильтрации с помощью ДПФ.
Рассматривая свойства ДПФ, мы видели, что перемножение дискретных спектров соответствует круговой свертке периодических последовательностей, в то время как выходной сигнал дискретного фильтра представляет собой линейную свертку последовательностей конечной длины — входного сигнала и импульсной характеристики фильтра (см. раздел «Способы описания дискретных систем» главы 4). Однако с помощью ДПФ можно получить и линейную свертку, для этого необходимо добавить к каждой из сворачиваемых последовательностей нулевые отсчеты в количестве, не меньшем, чем длина второй последовательности минус единица. Длины двух последовательностей после этого должны стать одинаковыми и равными как минимум длине линейной свертки исходных последовательностей.
Круговая свертка таких дополненных нулями последовательностей совпадает с линейной сверткой исходных последовательностей.
Поясним сказанное на простом примере. Пусть сворачиваемые последовательности состоят из четырех элементов:
х, = {1,2, 4, 8}их2 = {2, 3, 4, 5}.
Линейная свертка этих последовательностей рассчитывается согласно формуле (4.3). Процесс расчета показан на рис. 5.8, сверху.
Результат| 2 | 7 | 18,41 150 152 1401Результат| 2 | 7 | 18,41 150 152 1401Результатт№= ] 52 159 158 141~|Результатт№= ] 52 159 158 141~|Рис. 5.8. Расчет линейной (сверху) и круговой (снизу) свертки дискретных последовательностейРис. 5.8. Расчет линейной (сверху) и круговой (снизу) свертки дискретных последовательностей
Результат
| 2 | 7 | 18,41 150 152 1401
Результат
| 2 | 7 | 18,41 150 152 1401
Результат
т№= ] 52 159 158 141~|
Результат
т№= ] 52 159 158 141~|
Рис. 5.8. Расчет линейной (сверху) и круговой (снизу) свертки дискретных последовательностей
Рис. 5.8. Расчет линейной (сверху) и круговой (снизу) свертки дискретных последовательностей
Круговая свертка этих же последовательностей рассчитывается по формуле (5.9). Процесс расчета показан на рис. 5.8, снизу. Результат, как видите, совсем другой. Но если мы дополним каждую из последовательностей тремя нулями, чтобы их длины стали равны семи (это длина их линейной свертки), и вычислим круговую свертку еще раз, то получим результат линейной свертки, приведенный ранее (рис. 5.9).
Исходные сигналы
Рис. 5.9. Круговая свертка последовательностей, дополненных нулями, совпадает с их линейной сверткой
Поскольку ДПФ линейной свертки равно произведению ДПФ сворачиваемых последовательностей, мы получаем следующий алгоритм фильтрации в частотной области.
Последовательность отсчетов входного сигнала и импульсная характеристика фильтра дополняются нулями так, чтобы длины последовательностей стали равными и не меньшими, чем сумма длин исходных последовательностей минус единица.
Вычисляются ДПФ дополненных нулями последовательностей.
Вычисленные ДПФ поэлементно перемножаются.
Вычисляется обратное ДПФ от результата перемножения.
Реализуем обычную линейную свертку и приведенный алгоритм средствами MATLAB. Сначала задаем исходные последовательности:
» х1 = [1 2 4 8];
» х2 = [2 3 4 5];
Теперь вычислим линейную свертку, чтобы затем было с чем сравнивать результаты фильтрации с помощью ДПФ:
» у = conv(xl. х2)
=
271841505240
Далее реализуем рассмотренный алгоритм (забегая вперед, скажем, что ДПФ в MATLAB вычисляется по быстрому алгоритму с помощью функции fft; описание данной функции будет приведено в этой главе далее). Дополнять векторы нулями в явном виде не обязательно — это сделает функция fft при принудительном задании размерности преобразования:
» XI = fft(xl. 8):
» Х2 = fft(x2, 8):
» Y = XI .* Х2:
» у_т = 1 fft(Y)
y_fft =
Columns 1 through 6
2.00007.000018.0000 41.000050.0000 52.0000
Columns 7 through 8
40.00000.0000
Как видите, результат в точности соответствует полученному выше.
Количество нулей, добавляемых к последовательностям, может быть больше минимально необходимого — при этом лишь появится соответствующее число краевых нулей в вычисленной свертке (именно это было проделано в только что приведенном примере). Таким образом, мы всегда можем выбрать количество нулей таким, чтобы длина получившейся последовательности была равна степени двойки, и использовать эффективный алгоритм БПФ. Это дает возможность существенно сократить число операций по сравнению с вычислением свертки обычным методом.
Недостатком описанного метода фильтрации является то, что входной сигнал обрабатывается сразу целиком, то есть расчеты можно начать только по окончании входного сигнала. Однако на практике в большинстве случаев необходимо обрабатывать отсчеты входного сигнала по мере их поступления.
Возможным решением проблемы является блочная, или секционная, обработка входного сигнала. При этом последовательность входных отсчетов делится на блоки (секции) заданного размера, и эти блоки подвергаются фильтрации в частотной области по отдельности. При выборе размера блока необходимо реализовать компромисс между числом операций (чем больше размер блока, тем эффективнее
использование алгоритма БПФ) и задержкой получения выходного сигнала (чем меньше размер блока, тем меньше эта задержка).
При использовании блочной фильтрации необходимо разобраться в идее объединения выходных сигналов, полученных при обработке отдельных блоков. Рассмотрим ее на конкретном примере.
Пусть входной сигнал х и импульсная характеристика фильтра h имеют следующий вид:
» h = (1 4 2]:
» х = [1 2 3 4 5 4 3 3 2 2 1 1];
Прежде всего вычислим линейную свертку, чтобы знать, что должно получиться:
» у = conv(x, h)
У =
Columns 1 through 10
161320273229232016
Columns 11 through 14
13962
Теперь разобьем входной сигнал на два блока по 6 отсчетов и обработаем их по отдельности:
» х! = х(1:6):
» х2 = х(7:end):
» yl = conv(xl, h)
1 =
1613202732268
» у2 = conv(x2. h)
2 -
315201613962
Анализируя полученные результаты, мы заметим, что первые шесть отсчетов вектора у! совпадают с первыми шестью элементами полного выходного сигнала у. Последние шесть отсчетов вектора у2, в свою очередь, совпадают с шестью последними элементами полного выходного сигнала у. Оставшиеся два «средних» элемента (7-й и 8-й) вектора у могут быть получены суммированием двух последних элементов вектора yl с двумя первыми элементами вектора у2.
» y_add = [yl(l:6) yl(7:8)+у2(1:2) y2(3:end)]
y_add =
Columns 1 through 10
161320273229232016
Columns 11 through 14
13962
Результат совпадает с полученным ранее. Итак, в общем случае фильтрация организуется следующим образом.
Входной сигнал разбивается на блоки длиной N отсчетов.
Каждый блок фильтруется независимо. Длина выходного сигнала составляет N + М - 1 отсчетов, где М — длина импульсной характеристики фильтра.
Для повышения эффективности фильтрация осуществляется в частотной области с использованием БПФ.
Блоки выходного сигнала объединяются, при этом их крайние М - 1 отсчетов перекрываются и суммируются.
Данный алгоритм называется методом перекрытия с суммированием (overlap-add). Другой возможный вариант — перекрытие с накоплением (overlap-save). При этом входной сигнал разбивается на блоки, перекрывающиеся по краям на М - 1 отсчетов, а у выходного сигнала для каждого блока отбрасываются крайние «хвосты» по М - 1 отсчетов с каждой стороны. После этого выходные блоки объединяются без перекрытия.
Растекание спектра
Как уже говорилось, при ДПФ предполагается, что последовательность отсчетов анализируемого сигнала является периодически продолженной вперед и назад во времени. При этом, если значения начальных и конечных отсчетов сигнала сильно различаются, при периодическом повторении на стыках сегментов возникают скачки, из-за которых спектр сигнала расширяется.
Это явление, называемое растеканием спектра (spectrum leakage), можно наглядно проиллюстрировать на простейшем примере вычисления спектра дискретного гармонического сигнала
s(k) = A cos(a>kT + <р). (5.18)
Если анализируемая последовательность содержит целое число периодов гармонического сигнала (то есть если отношение N®T/(2tc) является целым числом), то периодически продолженный сигнал представляет собой гармонические колебания (без скачков), а подстановка (5.18) в формулу ДПФ (5.3) показывает, что вычисленное ДПФ содержит лишь два спектральных отсчета, отличных от нуля:
св7 .. п = — N, 2л
в остальных случах.
Таким образом, аналогично спектру непрерывного гармонического сигнала, ДПФ отличается от нуля всего для двух значений п. Однако если отношение Мв7/(2л) не является целым числом, спектр оказывается значительно более богатым. Этому можно дать простое объяснение: ведь в данном случае периодически продолженная последовательность уже не может являться набором отсчетов непрерывной синусоиды. Поэтому, в полном соответствии со свойствами преобразования Фурье, в спектре появляются дополнительные составляющие.
Построим графики дискретных сигналов, содержащих по 16 отсчетов гармонических сигналов с периодами, равными 4 отсчетам (периодически продолженный сигнал является периодическим, рис. 5.10 сверху) и 6 отсчетам (периоди-
чески продолженный сигнал содержит скачки, рис. 5.10 снизу), и покажем вид модуля их ДПФ:
» td=0:15:Квремя длЯ дискретных сигналов
» ta=0:0.1:16: Ввремя длЯ аналоговых сигналов
» П=4:%период первого сигнала - 4 отсчета
» Т2=6:Впериод второго сигнала - 6 отсчетов
» xld = cos(2*p1*td/Tl): К дискретный сигнал
» xla = cos(2*pi*ta/Tl); К аналоговый сигнал
» yl = fft(xld):К ДПФ
» x2d = cos(2*pi*td/T2); К дискретный сигнал
» х2а = cos(2*pi*ta/T2): В аналоговый сигнал
» у2 - fft(x2d):^ ДПФ
» subplot(2, 2. 1)
» stem(td. xld)В график дискретного сигнала
» hold on
» plotCta. xla, '--')% график аналогового сигнала
» hold off
» xlim([0 16])
» subplot(2. 2. 2)
» stem(td. abs(yl)) К график спектра
» subplot(2. 2. 3)
» stem(td. x2d)£ график дискретного сигнала
» hold on
» plot(ta, x2a, ’--’)^ график аналогового сигнала
» hold off
» xlim([0 16])
Рис, 5.10. Дискретное преобразование Фурье для целого (сверху) и нецелого (снизу) числа периодов гармонического сигнала (слева — исходные последовательности, справа — модули их ДПФ)
Необходимо подчеркнуть, что причиной растекания спектра является именно периодическое продолжение анализируемого сигнала. Спектр одиночного фраг-
мента дискретной синусоиды, в соответствии с тем, что говорилось в главе 3, является периодической непрерывной функцией частоты. Эта функция имеет лепестковую структуру независимо от того, целое или нецелое число периодов укладывается в анализируемом сегменте. Однако дискретный ряд частот, на которых вычисляется ДПФ, может быть по-разному расположен относительно лепестков спектральной функции. В случае целого числа периодов все анализируемые частоты (кроме двух) попадают как раз на границы между лепестками. При нецелом числе периодов такого не происходит. Для иллюстрации этого факта построим графики периодически продолженных сигналов, а также модулей их ДПФ и непрерывных амплитудных спектров одиночных фрагментов синусоиды (рис. 5.11):
» td_m = [[td-16, td. td+16]]:
» xld_m = [xld. xld, xld]; % продолженный сигнал xld
» x2d_m = [x2d, x2d, x2d]; % продолженный сигнал x2d
» % спектры одиночных сигналов xld и x2d
» [hl, wl] = freqz(xld, 1, (], 16, 'whole'):
» [h2, w2] = freqz(x2d, 1, []. 16, 'whole'):
» subplot(2, 2, 1)
» stem(td_m, xld_m) % график продолженного сигнала xld » hold on
» % график продолженного сигнала xla
» plot(ta-16, xla, 'b--', ta, xla, 'b--', ta+16, xla, 'b--')
» hold off
» xlim(C-16 32])
» subplot(2, 2, 2)
» stemltd, abs(yl)) % график модуля ДПФ сигнала xld
» hold on
» plot(wl, abs(hl), '--') % спектр одиночного сигнала xld
» xlim([0 16])
» hold off
» subplot(2, 2, 3)
» stem(td_m. x2d_m) % график продолженного сигнала x2d » hold on
» % график продолженного сигнала x2a
» plot(ta-16, x2a, 'b--'. ta. x2a, 'b--'. ta+16, x2a. 'b--')
» hold off
» xlim([-16 32])
» subplot(2, 2, 4)
» stemltd, abs(y2)) % график модуля ДПФ сигнала x2d
» hold on
» plot(w2, abs(h2), '--') % спектр одиночного сигнала x2d
» xlim(EO 16])
» hold off
Возможна еще одна трактовка причины растекания спектра. В этом случае мы не считаем анализируемый сигнал периодически продолженным, а предполагаем, что все содержащиеся в нем гармонические компоненты существуют и за преде-
лами анализируемого фрагмента. Спектр такого сигнала представляет собой набор дельта-функций, а растекание спектра при ДПФ можно объяснить наличием боковых лепестков у АЧХ фильтров, соответствующих отдельным частотным каналам ДПФ (см. раздел «ДПФ как дискретная фильтрация», формулу (5.17) и рис. 5.6).
Рис. 5.11. Происхождение растекания спектра: слева — периодически продолженные сигналы, справа — амплитудные спектры одиночных сигналов (пунктирные линии) и модули ДПФ (кружочки)
ЗАМЕЧАНИЕ
Аналогичные проблемы, связанные с наличием боковых лепестков у АЧХ фильтров, соответствующих отдельным частотным каналам ДПФ, возникают при использовании ДПФ для синтеза дискретных фильтров (см. далее раздел «Синтез с использованием окон» главы 6).
Весовые функции
Для уменьшения растекания спектра при ДПФ применяются весовые функции (weighting functions), которые также называют окнами (window). В этом случае перед расчетом ДПФ сигнал умножается на весовую функцию ®(&), которая должна спадать к краям сегмента. Формула прямого ДПФ (5.3) при использовании весовых функций принимает следующий вид:
дг-1.2кп&
X„,(n)= £x(&)w(£)e ’ N .
Роль весовой функции в этой формуле можно рассматривать с различных точек зрения. Сначала проанализируем ситуацию во временной области. Если мы используем весовую функцию, которая имеет максимум в середине (при k = N/2) и плавно спадает к краям (^ = 0 и ^ = А - 1), то это приведет к ослаблению эффектов, связанных с возникновением скачков сигнала при периодическом повторении анализируемой конечной последовательности, и, таким образом, к уменьшению растекания спектра.
Аналогичный вывод можно сделать, рассмотрев влияние весовой функции в частотной области. Умножение сигнала на весовую функцию соответствует свертке спектров сигнала и весовой функции (см. раздел «Свойства дискретного преобразования Фурье»). Это приводит к тому, что пики, содержащиеся в спектре сигнала, несколько расширяются. Однако при этом становится возможно уменьшить уровень боковых лепестков спектральной функции, что и является целью применения весовых функций.
Если трактовать ДПФ как фильтрацию, при использовании весовой функции ®(&) получаются частотные характеристики фильтров следующего вида:
K„,w(®) = lL™We N-
4=0
Выбирая весовую функцию ®(&) определенным образом, можно уменьшить уровень боковых лепестков частотой характеристики фильтров, соответствующих отдельным каналам ДПФ. Естественно, платой за это является расширение центрального лепестка частотной характеристики.
Спектр дискретного случайного процесса
Все сказанное в этой главе до сих пор относилось к детерминированным сигналам, теперь же мы переходим к рассмотрению спектров дискретных случайных процессов.
Для определения спектральных характеристик дискретного случайного процесса используем тот же подход, что и в аналоговом случае (см. раздел «Спектральные характеристики случайных процессов» главы 1 и формулу (1.45)) — будем усреднять спектр мощности:
Ш(и) = limШ(и) = lim12п+112п+1к = -пк = -п(5.19)(5.19)
Ш(и) = lim
Ш(и) = lim
1
2п+1
1
2п+1
к = -п
к = -п
(5.19)
(5.19)
Черта сверху обозначает здесь усреднение по ансамблю реализаций. Если процесс эргодический, спектр мощности для всех реализаций является одинаковым и выполнять усреднение по ансамблю не обязательно.
Выполнять вычисления непосредственно по формуле (5.19) неудобно, поэтому попробуем привести ее к более приемлемому виду. Для этого раскроем выраже
ние для квадрата модуля:
W(ro) = limW(ro) = lim12n+l12n+l^х^е'^7 ^х*<т)е,ютТ^х^е'^7 ^х*<т)е,ютТ
W(ro) = lim
W(ro) = lim
12n+l
12n+l
^х^е'^7 ^х*<т)е,ютТ
^х^е'^7 ^х*<т)е,ютТ
lim-^- J
1- 1 hm
"^гн 1
Суммируемые слагаемые зависят от разности индексов суммирования кит, поэтому можно преобразовать двойную сумму в одиночную:
12”
W(<D)= hm——- £(2и + 1-|/|)О)е-;“'г.
Поскольку при любом /
Г 2и + 1-|/|.
hm— = 1, "->” 2п + 1
(5.20)(5.20)окончательно получаем W(ro) = ^R^e"^.
(5.20)
(5.20)
Выражение (5.20) представляет собой дискретный аналог теоремы Винера—Хин- чина: спектр дискретного случайного процесса является преобразованием Фуръе от его корреляционной функции.
Непараметрические методы
При использовании непараметрических методов расчета спектра случайного процесса используется только информация, заключенная в отсчетах сигнала, без каких-либо дополнительных предположений. Мы кратко рассмотрим два таких метода — периодограмму и метод Уэлча (Welch). Примеры реализации данных методов спектрального анализа будут приведены далее, при описании соответствующих функций MATLAB.
Периодограмма
Этим довольно странно звучащим термином — периодограмма (periodogram) — называется оценка спектральной плотности мощности, полученная по N отсчетам одной реализации случайного процесса согласно определению (5.19) (естественно, не путем взятия предела, а усреднением конечного числа слагаемых). Таким образом, периодограмма рассчитывается по следующей формуле:
W(co) =<W(co) =<N-t* = 0N-t* = 0(5.21)(5.21)
W(co) =
<
W(co) =
<
N-t
* = 0
N-t
* = 0
(5.21)
(5.21)
Деление на частоту дискретизации /д необходимо для получения оценки спектральной плотности мощности аналогового случайного процесса, восстановленного по отсчетам х(к) (ведь в формуле (3.7), связывающей спектры аналогового и дискретизированного сигналов, имеется множитель 1 /Т).
Если при расчете спектра используется весовая функция (окно) с коэффициентами w(h), формула (5.21) слегка модифицируется — вместо числа отсчетов Ав знаменателе должна стоять сумма квадратов модулей коэффициентов окна. Полученная оценка спектра мощности называется модифицированной периодограммой (modified periodogram):
W'(M)= —W'(M)= —4 = 04 = 04 = 04 = 0(5.22)(5.22)
W'(M)= —
W'(M)= —
4 = 0
4 = 0
4 = 0
4 = 0
(5.22)
(5.22)
В [10] показано, что периодограмма не является состоятельной оценкой спектральной плотности мощности, поскольку дисперсия такой оценки сравнима с квадратом ее математического ожидания. С ростом числа используемых отсчетов значения периодограммы начинают все быстрее флуктуировать.
Метод Уэлча
При вычислении периодограммы по длинному фрагменту случайного сигнала она оказывается весьма изрезанной (см. далее пример вычисления периодограммы в разделе, посвященном описанию функции periodogram — рис. 5.24). Для уменьшения этой изрезанности необходимо применить какое-либо усреднение. Дань- елл (Daniell) предложил сглаживать быстрые флуктуации выборочного спектра путем усреднения по соседним частотам спектра. Данный метод, называемый периодограммой Даньелла, сводится к вычислению свертки периодограммы со сглаживающей функцией. В методе Бартлетта (Bartlett) анализируемый сигнал делится на неперекрывающиеся сегменты, для каждого сегмента вычисляется периодограмма и затем эти периодограммы усредняются. Если корреляционная функция сигнала на длительности сегмента затухает до пренебрежимо малых значений, то периодограммы отдельных сегментов можно считать независимыми. В этом случае дисперсия периодограммы Бартлетта обратно пропорциональна числу используемых сегментов, однако с ростом числа сегментов при фиксированном общем числе отсчетов сигнала падает спектральное разрешение (за счет того, что сегменты становятся короче).
Уэлч (Welch) внес в метод Бартлетта два усовершенствования: использование весовой функции и разбиение сигнала на перекрывающиеся фрагменты. Применение весовой функции позволяет ослабить растекание спектра и уменьшить смещение получаемой оценки спектра плотности мощности ценой незначительного ухудшения разрешающей способности. Перекрытие сегментов введено для того, чтобы увеличить их число и уменьшить дисперсию оценки.
Итак, вычисления при использовании метода Уэлча (он называется еще методом усреднения модифицированных периодограмм — averaged modified periodogram method) организуются следующим образом:
Вектор отсчетов сигнала делится на перекрывающиеся сегменты. Как правило, на практике используется перекрытие на 50 %. Строго говоря, оптимальная степень перекрытия зависит от используемой весовой функции. В [10] приводятся данные о том, что для гауссовских случайных процессов при использовании окна Ханна минимальная дисперсия оценки спектра плотности мощности получается при перекрытии сегментов на 65 %.
Каждый сегмент умножается на используемую весовую функцию.
Для взвешенных сегментов вычисляются модифицированные периодограммы.
Периодограммы всех сегментов усредняются.
Так же как и для периодограммы Бартлетта, дисперсия оценки, получаемой методом Уэлча, уменьшается примерно пропорционально числу сегментов. Благодаря перекрытию в методе Уэлча используется больше сегментов, поэтому дисперсия оценки спектра плотности мощности оказывается меньше, чем для метода Бартлетта.
Метод Уэлча, согласно [10], является наиболее популярным периодограммным методом спектрального анализа.
Параметрические методы
Использование параметрических методов подразумевает наличие некоторой математической модели анализируемого случайного процесса. Спектральный анализ сводится в данном случае к решению оптимизационной задачи, то есть поиску таких параметров модели, при которых она наиболее близка к реально наблюдаемому сигналу.
Мы рассмотрим два параметрических метода: авторегрессионный и MUSIC (Multiple Signal Classification).
Авторегрессионная модель
Среди возможных параметрических методов спектрального анализа наибольшее распространение получили методы, основанные на авторегрессионной (Autoregressive, AR) модели формирования сигнала. Это обусловлено простотой модели, удобством расчетов на ее основе и тем, что данная модель хорошо соответствует многим реальным задачам.
Согласно авторегрессионной модели, сигнал {Х^)} формируется путем пропускания дискретного белого шума {«(&)} через «чисто рекурсивный» фильтр TV-го порядка (рис. 5.12).
Рис. 5.12. Авторегрессионная модель формирования сигнала
ЗАМЕЧАНИЕ
Помимо авторегрессионной существуют и другие модели формирования сигнала путем пропускания белого шума через формирующий фильтр. Так, в MA-модели (Moving Average, «скользящее среднее») для этого используется нерекурсивный фильтр, а в ARMA-модели (Autoregressive Moving Average) — фильтр общего вида, содержащий рекурсивную и нерекурсивную ветви.
Спектральная плотность мощности такого сигнала пропорциональна квадрату модуля коэффициента функции передачи фильтра:
W(co) = -^W(co) = -^11-а2е-)2юТ -...-aNe-iNtoT\2 '-а2е-)2юТ -...-aNe-iNtoT\2 '(5.23)(5.23)
W(co) = -^
W(co) = -^
1
1
-а2е-)2юТ -...-aNe-iNtoT\2 '
-а2е-)2юТ -...-aNe-iNtoT\2 '
(5.23)
(5.23)
Таким образом, данный метод спектрального анализа сводится к определению коэффициентов модели {а,} заданного порядка N, оценке мощности белого шума а„2 и расчету спектральной плотности мощности по формуле (5.23).
Для определения коэффициентов модели производится минимизация ошибки линейного предсказания сигнала. Сущность этого метода состоит в следующем. Сигнал {х(&)} пропускается через нерекурсивный фильтр с коэффициентами (1, -Ьх, -Ь2, ..., —Ь^ (рис. 5.13).
Взвешенную сумму предыдущих отсчетов входного сигнала называют линейным предсказанием (linear prediction) следующего входного отсчета, а выходной сигнал рассматриваемого фильтра, то есть разность между истинным и предсказанным значением отсчета, — ошибкой предсказания (prediction error).
/-преобразование ошибки предсказания с учетом модели формирования сигнала {х(&)} можно записать следующим образом:
1 — а.1 — а.л .-2 б?2л .-2 б?2
1 — а.
1 — а.
л .-2 б?2
л .-2 б?2
Отношение двух полиномов можно в общем случае записать в виде бесконечного полинома по отрицательным степеням переменной z, причем целая часть этого отношения в данном случае, очевидно, равна единице:
Y^ - N^ (1 + h^ + h^"2 + ...).
Сам выходной сигнал будет представлять собой результат преобразования белого шума (и(&)} эквивалентным фильтром (/г(&)}:
у(к) = п(&) + htn(k - 1) + hin^k - 2) +
Поскольку отсчеты белого шума являются независимыми, дисперсия сигнала {#(&)} рассчитывается согласно следующей формуле:
а#2 = а? (1 + h2 + h22 + ...).
Отсюда видно, что с2 £ а 2 и равенство достигается, только когда /г,- = 0 для всех г. Это возможно, если наборы коэффициентов {а,} и {6J совпадают.
Таким образом, коэффициенты фильтра, минимизирующего дисперсию (или среднеквадратическое значение) ошибки предсказания, совпадают с коэффициентами авторегрессионной модели формирования сигнала.
Теперь обратимся к собственно процедуре расчета коэффициентов предсказывающего фильтра по отсчетам сигнала {х(#)}. Ошибка предсказания определяется как
г/(^) = x(k)-blx(k -У)-Ьгх{к -2)-... ~bNx{k~N) =
-х^-ЦЬ^к-ту m = l
Нам нужно подобрать коэффициенты bm, обеспечивающие минимальное среднеквадратическое значение г/(&). Возведем г/(^) в квадрат:
у2^ = х2<к^-гхО<У^Ьтх(>-т')А-^У4Ьтх<к-т')
= x2(^)-2x(^)^Z>mx(^-m) + £ ^6т6„х(^-т)х(^-и). т = \т = 1 п = \
Теперь усредняем это по ансамблю реализаций, чтобы получить средний квадрат (считаем случайный процесс х(к) центрированным, поэтому математическое ожидание у(к) также равно нулю, а средний квадрат равен дисперсии):
a, = #2(&) = x2(&)-2]£Z>mx(&)x(&-m) + £ ^ЬтЬ„х(,к-т)х(к-п).
т=1т = 1 п = 1
Усредненные попарные произведения, входящие в это выражение, дают значения корреляционной функции входного сигнала:
^(Г) = Яг(0) = о2,
х(к)х(к-т) = ^(т),
x(k-m)x(k -п) = НДт-п).
С учетом этих обозначений средний квадрат сигнала {у(^)} можно записать следующим образом:
^ =°х -Г2ТЛЛх(т) + £ HbmbnRx(m-n').(5.24)
т =1т =1 п = 1
Дифференцирование этого выражения по bk дает
6b кm = t
Таким образом, для нахождения коэффициентов линейного предсказания необходимо решить систему линейных уравнений
^bmRAm-k) = Rx(k), к = 1, 2, N.
т = 1
Можно записать эту систему в матричном виде:
Rr b = р.
Здесь R, — корреляционная матрица сигнала {х(^)} (см. раздел «Дискретные случайные сигналы» главы 3), b — столбец коэффициентов Ьт, р — столбец значений корреляционной функции R^k) для к от 1 до N.
Теперь можно записать искомое решение:
b = R,1 р.(5.25)
Подстановка найденного вектора b в формулу (5.24) дает минимально возможное значение среднего квадрата ошибки предсказания:
(^)„lin =^-pTR/,p.(5.26)
ЗАМ ЕЧ АН И Е
В приведенных выкладках предполагалось, что сигнал {х(^)} вещественный. Это было сделано лишь для упрощения изложения материала и не является принципиальным. В комплексном случае формула (5.25) не меняется, а операцию транспонирования в (5.26) следует заменить эрмитовым сопряжением (сочетанием транспонирования с комплексным сопряжением). Кроме того, при вычислении корреляционной функции комплексного сигнала один из перемножаемых сигналов подвергается комплексному сопряжению.
На практике мы не знаем истинной корреляционной функции исследуемого сигнала, поэтому для минимизации ошибки предсказания используются оценки КФ, полученные путем временного усреднения. Был разработан целый ряд методов авторегрессионного анализа, отличающихся в основном подходом к обработке краевых эффектов (то есть к способу вовлечения в вычисления тех краевых отсчетов сигнала, для которых при вычислении КФ не оказывается сдвинутой пары). Это метод Берга (Burg), ковариационный метод, модифицированный ковариационный метод, авторегрессионный метод Юла—Уолкера (Yule—Walker) и некоторые другие. Подробные теоретические сведения об этих методах можно найти в [10], здесь же отметим лишь то, что при анализе длинных последовательностей отсчетов все методы дают практически одинаковые результаты, различия начинают проявляться в случае коротких сигналов. Достоинства и недостатки
методов авторегрессионного спектрального анализа, реализованных в MATLAB, кратко перечислены в табл. 5.1.
Таблица 5.1. Характеристики авторегрессионных методов спектрального анализа
Метод
Достоинства
i
Недостатки!
Берга
Высокая разрешающая способность при анализе коротких сигналов
Гарантированная стабильность рассчитанного формирующего фильтра
Положения спектральных пиков сильно зависят от начальных фаз синусоид
При большом порядке модели может наблюдаться расщепление спектральных ников।
При анализе суммы синусоид с шумом получаются смещенные спектральные ники
Ковариационный
Большая (по сравнению с методом Юла—Уолкера) разрешающая способность при анализе коротких сигналов
Возможность оценки частот для сигнала, представляющего собой сумму «чистых» синусоид
Рассчитанный формирующий фильтр может оказаться нестабильным
При анализе суммы синусоид с шумом получаются смещенные спектральные пики
Модифицированный ковариационн ый
Высокая разрешающая способность при анализе коротких сигналов
Возможность оценки частот для сигнала, представляющего собой сумму «чистых» синусоид Отсутствие расщепления спектральных пиков
Положения спектральных пиков в некоторой степени зависят от начальных фаз синусоид Рассчитанный формирующий фильтр может оказаться нестабильным
При анализе суммы синусоид с шумом получаются слегка смещенные спектральные пики
Юла—Уолкера
Хорошие результаты при анализе длинных сигналов Гарантированная стабильность рассчитанного формирующего фильтра
Плохие результаты при анализе коротких сигналов
При анализе суммы синусоид с шумом получаются смещенные спектральные пики
Авторегрессионные методы анализа спектра больше всего подходят для сигналов, действительно являющихся авторегрессионными процессами. Вообще, хорошие результаты эти методы дают тогда, когда спектр анализируемого сигнала имеет четко выраженные пики. В частности, к таким сигналам относится сумма нескольких синусоид с шумом.
При использовании авторегрессионных методов важно правильно выбрать порядок авторегрессионной модели — он должен быть в два раза больше числа синусоидальных колебаний, которые предположительно содержатся в анализируемом сигнале.
Пример, демонстрирующий влияние порядка модели на результаты расчетов, будет приведен далее, при описании функций авторегрессионного спектрального анализа, имеющихся в MATLAB.
Помимо спектрального анализа техника линейного предсказания широко используется для кодирования звуковых сигналов. При этом звук делится на фрагменты (кадры) и вместо самих отсчетов звука для каждого кадра передаются только коэффициенты авторегрессионной модели формирования звука, что позволяет во много раз уменьшить требуемую скорость передачи данных. Такая технология используется, например, в сотовых телефонных сетях GSM и в радиотелефонах стандарта DECT.
Формула (5.25) имеет очень важное значение, и сфера ее использования далеко не ограничивается расчетом коэффициентов линейного предсказания. Рассматривая нашу частную задачу, мы получили формулу оптимального фильтра Винера, который позволяет сделать входной сигнал максимально близким (в смысле среднеквадратической ошибки) к заданному образцу. При этом Rx в формуле (5.25) — это по-прежнему корреляционная матрица входного сигнала, ар — вектор взаимных корреляций между желаемым (образцовым) значением выходного сигнала фильтра и входными отсчетами, используемыми при вычислениях (это, как обычно, текущий отсчет и некоторое количество предыдущих).
Метод MUSIC
Метод MUSIC (Multiple Signal Classification) предназначен для спектрального анализа сигналов, представляющих собой сумму нескольких синусоид (точнее, в общем случае — нескольких комплексных экспонент) с белым шумом. Целью спектрального анализа подобных сигналов, как правило, является не расчет спектра как такового, а определение частот и уровней (амплитуд или мощностей) гармонических составляющих. Метод MUSIC предназначен именно для этого, поэтому получаемая с его помощью зависимость уровня сигнала от частоты называется псевдоспектром (pseudospectrum).
В основе метода лежит анализ собственных чисел и собственных векторов корреляционной матрицы сигнала. Подробное математическое обоснование можно найти в [10], ниже приводятся лишь базовые идеи.
Итак, пусть сигнал представляет собой сумму М комплексных экспонент, начальные фазы которых случайны, с белым шумом:
х(6) = п(£) + ^Ат expOj}T + j<pmy(5.27)
m-l
Здесь п(&) — отсчеты дискретного белого шума, Ат, со„ и <р„ — соответственно амплитуды, частоты и начальные фазы комплексных экспонент, содержащихся в сигнале, Т — период дискретизации. Начальные фазы <р„ — независимые случайные величины, равномерно распределенные на интервале 0...2л.
ЗАМЕЧАНИЕ
Каждая вещественная синусоидальная составляющая сигнала может быть представлена как сумма двух комплексных экспонент с помощью формулы Эйлера.
Корреляционная функция такого сигнала будет иметь следующий вид:
м
Д,(^) = ст2х0(^) + ехр(->тйГ).(5.28)
Здесь х0(й) — единичная импульсная функция (3.17), равная 1 при & - 0 и 0 в остальных случаях, о„2 — дисперсия шума п(&).
Далее из отсчетов корреляционной функции формируется корреляционная матрица размера NxN, причем размер матрицы должен превышать число комплексных экспонент: N> М.
Анализируя собственные числа и собственные векторы такой корреляционной матрицы, можно показать, что наименьшее собственное число равно а2, и оно имеет кратность N - М. Остальные М собственных чисел превышают ст2, а их конкретные значения зависят от амплитуд и частот комплексных экспонент.
Собственные векторы, соответствующие М наибольшим собственным числам, представляют собой линейные комбинации комплексных экспонент, содержащихся в сигнале. Множество всех таких линейных комбинаций называют сигнальным, подпространством (signal subspace), а упомянутые собственные векторы образуют базис в этом подпространстве.
Оставшиеся N - М собственных векторов ортогональны всем комплексным экспонентам, содержащимся в сигнале. Эти векторы образуют базис шумового подпространства (noise subspace).
Спектр комплексной экспоненты, рассчитанный аналитически, представляет собой дельта-функцию, расположенную на соответствующей частоте. Чтобы получить бесконечные выбросы на частотах ют, псевдоспектр при использовании метода MUSIC рассчитывается следующим образом:
W(co) =.(5.29)
N N-t
*-М+1 п-0
Здесь v^n) — п-й элемент k-ro собственного вектора корреляционной матрицы. Векторы пронумерованы по убыванию соответствующих им собственных чисел. Таким образом, внешняя сумма по k от М + 1 до N задает участие в вычислениях только шумовых собственных векторов. Внутренняя сумма представляет собой вычисление спектра собственного вектора на частоте со. Шумовые собственные векторы ортогональны всем комплексным экспонентам с частотами со„, содержащимся в сигнале. Поэтому при со - со„ все внутренние суммы равны нулю, и W(co) —> оо.
Сами частоты со„ можно получить, приравняв к нулю знаменатель формулы (5.29):
Раскроем квадрат модуля, превратив его в двойную сумму:
N N-i N-l
(5.30)(5.30)£ £ iLuMvXhe"Mn"1)T =0.
(5.30)
(5.30)
*-М*1 n-0 /-0
Теперь видно, что левая часть полученного выражения в конечном счете представляет собой полином относительно е"’юТ степени 2^ - 2. Те корни этого полинома которые лежат на единичной окружности, равны ехр(-усотТ), и для расчета частот остается вычислить аргументы этих комплексных чисел и разделить их на Т.
Все сказанное до сих пор относилось к идеализированной модели сигнала (5.27) г аналитически полученной корреляционной функции (5.28). В реальных ситуациях, когда сигнал не вполне соответствует модели (5.27), а его корреляционная функция оценивается по результатам измерений (к тому же зачастую без возможности усреднения по нескольким наблюдениям), результаты оказываются несколько иными — пики в (5.29) будут иметь конечную высоту, а корни полиноме (5.30) не будут лежать строго на единичной окружности. Однако если сигнал близок к предполагаемой модели, метод MUSIC дает хорошие результаты. Для расчета частот выбираются корни полинома (5.30), ближайшие к единичной окружности
Метод EV
Близким родственником MUSIC является метод анализа собственных векторо! (eigenvectors, EV). Его отличие состоит лишь в том, что в формулах (5.29) и (5.30' при суммировании по к используются весовые коэффициенты, обратно пропор циональные соответствующим собственным числам. Таким образом, формула дл)
псевдоспектра принимает вид:
W(co) =W(co) =(5.31
W(co) =
W(co) =
а уравнение, которое необходимо решить для оценки значений частот, оказыва ется следующим:
£(5.32
к = М+\ ^к п = 0 1 = 0
В этих формулах Xt — собственное число, соответствующее к-му собственном; вектору vk.
В [10] приводятся сведения о том, что при заданном значении порядка М мето, EV порождает меньше ложных спектральных пиков, чем MUSIC, и, как правиле лучше передает форму спектра шума.
Еще раз подчеркнем, что псевдоспектры (5.29) и (5.31) не являются оценкам! истинного спектра плотности мощности, а представляют собой лишь спектраль ные псевдооценки, позволяющие оценивать частоты синусоидальных или узко полосных составляющих сигнала с разрешением, несколько превосходящим раз решение авторегрессионных методов.
Функции спектрального анализа в MATLAB
Для выполнения спектрального анализа в MATLAB имеется большое число функ ций, реализующих разнообразные методы — от обычного ДПФ до MUSIC.
Прямое и обратное ДПФ
Для выполнения прямого и обратного ДПФ в MATLAB служат функции fft и i fft:
у = fft(х) — вычисляет прямое ДПФ для вектора х; если х — матрица, преобразование производится для каждого ее столбца по отдельности;
у = fft(x, N) — предварительно приводит исходные данные к размеру X, урезая их или дополняя нулями;
х = ifft(y) и х = ifft(y, N) — аналогичные варианты вызова для функции обратного ДПФ.
Функции fft и i fft входят в базовую библиотеку MATLAB. Вычисления организованы так, что реализуется максимально возможное для каждой длины исходного вектора ускорение вычислений: длина вектора (число строк в матрице) х раскладывается на простые множители, число этих множителей соответствует количеству ступеней БПФ, а сами множители определяют коэффициенты прореживания на разных ступенях БПФ.
Продемонстрируем зависимость числа вычислительных операций от размерности БПФ. Создадим вектор из 128 случайных чисел (на всякий случай — комплексных, чтобы лишить MATLAB возможности что-либо сэкономить на отсутствии мнимой части у исходных данных; впрочем, при использовании алгоритмов БПФ такая экономия очень мала).
ВНИМАНИЕ
Приводимый ниже пример работает только в младших версиях MATLAB — до 5.x включительно. Дело в том, что в версии 6 было обновлено ядро MATLAB и функция flops, подсчитывавшая число выполненных арифметических операций, более не поддерживается.
N = 128:
х = randn(N. 1) + 1 * randn(N, 1);
for k=T.N
flops(O):О MATLAB 6 это не работает!
у = fft(x. k):
flop(k) = flops: % В MATLAB б это не работает!
end
plot(flop) hold on plot((l:N).A2*8. ':') plot((l:N).*log2(l:N)*6, ’:') hold off
Полученный график (рис. 5.14) настолько показателен, что не привести этот пример было бы совершенно непростительно, несмотря на то, что он не работает в последних версиях MATLAB.
Кроме собственно зависимости числа операций от размерности БПФ на графике показаны также верхняя и нижняя границы. Верхняя линия — это число операций, соответствующее прямой формуле ДПФ и равное 8N1 (множитель 8 возникает из-за того, что функция flops подсчитывает вещественные операции). Нижняя
линия — число операций, соответствующее максимальному ускорению вычислений и равное 6A4og2(N) (множитель 6 также возникает из-за подсчета функцией flops вещественных операций). Хорошо видно, что график числа операций при БПФ касается верхней границы, если N — простое число, и касается нижней границы, если N — степень двойки.
Рис. 5.14. Зависимость числа арифметических операций от размерности БПФРис. 5.14. Зависимость числа арифметических операций от размерности БПФ
Рис. 5.14. Зависимость числа арифметических операций от размерности БПФ
Рис. 5.14. Зависимость числа арифметических операций от размерности БПФ
Функция fftshift
Элементы вектора, возвращаемого функцией fft, соответствуют частотам, равномерно распределенным в диапазоне от нуля и почти до частоты дискретизации. Первый элемент, таким образом, соответствует нулевой частоте, а последний — частоте, меньшей частоты дискретизации на fn/N, где N — размер входного и выходного векторов. При выводе спектральных графиков иногда желательно, чтобы нулевая частота находилась в центре, а диапазон отображаемых частот простирался от -/л/2 до/д/2. Сделать это позволяет функция fftshift, которая меняет местами половины переданного ей вектора:
у = fftshift(x)
Продемонстрируем действие функции fftshift на примере двух коротких векторов четной и нечетной длины:
» fftshift([l 2 3 4])
ans =
3412
» fftshift([l 2 3 4 5])
ans =
4455112233
4
4
5
5
1
1
2
2
3
3
Как видите, в случае четной длины действительно происходит перестановка половин входного вектора (при этом первый элемент результирующего вектора соответствует частоте Найквиста). В случае нечетной длины перестановка выполняется так, чтобы первый элемент, соответствующий нулевой частоте, стал средним, элементом результирующего вектора.
Разумеется, функцию fftshi ft можно использовать не только для вывода спектральных графиков, но и в других случаях, когда требуется поменять местами половины вектора.
Матрица ДПФ
В MATLAB расчет матрицы прямого ДПФ реализуется с помощью функции dftmtx. Синтаксис ее вызова следующий:
А = dftmtx(n)
Здесь п — размерность ДПФ.
Матрица обратного ДПФ отличается от матрицы прямого ДПФ комплексным сопряжением и делением на N, поэтому она может быть получена следующим образом:
Aj'nv = conj (dftmtx(n) )/n
Блочная фильтрация в частотной области
Для реализации блочной фильтрации с помощью БПФ в MATLAB используется функция fftfilt, имеющая следующий синтаксис:
у = fftfnt(h. х. п)
Здесь h — импульсная характеристика фильтра, х — входной сигнал, п — размерность БПФ (точнее, размерность БПФ при задании этого параметра определяется так: Nfft = 2Anextpow2(n), то есть п округляется вверх до степени двойки).
Выходной параметр у — результат фильтрации.
Третий входной параметр п при вызове можно опускать, тогда размерность БПФ будет выбираться автоматически, исходя из максимальной эффективности вычислений (минимального числа операций).
Окна
MATLAB содержит (в пакете Signal Processing) целый ряд стандартных весовых функций. Они возвращают векторы отсчетов, которые могут использоваться в качестве одного из параметров разнообразных функций непараметрического спектрального анализа.
Все рассматриваемые ниже функции принимают в качестве параметра требуемую длину вектора (п), которая должна быть целым положительным числом, и возвращают вектор-столбец w. При п=1 все функции возвращают значение 1.
Амплитудный спектр весовой функции соответствует частотной характеристике нулевого канала ДПФ при использовании данной весовой функции. При рас-
смотрении конкретных функций графики их амплитудных спектров будут строиться в логарифмическом масштабе для и = 16. Чтобы обеспечить на нулевой частоте значение спектральной функции, равное единице (0 дБ), перед вычислением спектра весовые функции нормируются — делятся на сумму своих отсчетов.
Графики спектров будут строиться функцией freqz (см. раздел «Расчет частотной характеристики» главы 4). Поскольку фазовый спектр для всех весовых функций линейно зависит от частоты, его графики не представляют интереса и потому не приводятся. Для повышения наглядности частотная ось градуируется в номерах каналов ДПФ, для этого при вызове функции freqz указана частота дискретизации, равная длине окна.
Прямоугольное окно
Функция boxcar, реализующая «прямоугольное окно», введена в MATLAB лишь для полноты набора весовых функций, поскольку она соответствует отсутствию взвешивания:
w = boxcar(n)
Возвращаемый вектор заполнен единицами: w = ones(n.l).
Приводить график данной весовой функции не имеет смысла, а ее амплитудный спектр (смещенный по горизонтали) для и = 8 был показан ранее на рис. 5.6.
Треугольное окно
Функция triang реализует треугольное окно:
w = trlang(n)
Отсчеты треугольного окна рассчитываются по следующей формуле:
»'(&) = ■
,^<к <, п +12
для нечетного п
2(n-k + 1) п+ 1 , .
—-, < к < п
. п +12
2^-1и
®'(£) =
п ’2 ’
для четного п.
2(п-к +1) п
——, - + 1 < к < п
. п2
При нечетном п треугольное окно является симметричным, его крайние значения (при k = 1 и k = и) равны 2/(и + 1), а в середине окна (при & = (и + 1)/2) достигается единичное значение.
При четном п треугольное окно является несимметричным, его можно представить как отсчеты симметричного треугольного импульса, который начинается при к = 0,5 и заканчивается при к = п + 1. Вершина импульса расположена при k = п(2 + 0,75, а его амплитуда равна 1 + 1/(2и). При к = n/2 + 1 отсчет окна имеет единичное значение.
На рис. 5.15 приведены графики треугольного окна и его амплитудного спектра при и = 16:
» w = tr1ang(l6);
» w = w/sum(w):
» plot(w)
» figure*
» [h. f] = freqz(w. 1. [], 16):
» plot(f. 20*1oglO(abs(h)))
» ylim([-80 0])
» grid on
Рис. 5.15. Треугольное окно (сверху) и его амплитудный спектр (снизу)
Уровень первого бокового лепестка составляет -26,5 дБ.
Окно Бартлетта
Функция bartlett реализует окно Бартлетта:
w = bartlett(n)
Окно Бартлетта, поОкно Бартлетта, посути, тоже является треугольным, но рассчитывается н
Окно Бартлетта, по
Окно Бартлетта, по
сколько иначе:сколько иначе:2(^-1)2(^-1)w(k') = ■w(k') = ■п-12(п-А)п-12(п-А)п-1п-12для нечетного п, п + 1 , < А £ п22для нечетного п, п + 1 , < А £ п2
сколько иначе:
сколько иначе:
2(^-1)
2(^-1)
w(k') = ■
w(k') = ■
п-12(п-А)
п-12(п-А)
п-1
п-1
2
для нечетного п, п + 1 , < А £ п
2
2
для нечетного п, п + 1 , < А £ п
2
w(k^ =w(k^ =2(^-1)п-1 ’ 2(п-А) . п-12(^-1)п-1 ’ 2(п-А) . п-1\<ks-,2 для четного п.- + 1 < к < п2\<ks-,2 для четного п.- + 1 < к < п2
w(k^ =
w(k^ =
2(^-1)
п-1 ’ 2(п-А) . п-1
2(^-1)
п-1 ’ 2(п-А) . п-1
\<ks-,
2 для четного п.
- + 1 < к < п
2
\<ks-,
2 для четного п.
- + 1 < к < п
2
Рис. 5.16. Окно Бартлетта (сверху) и его амплитудный спектр (снизу)Рис. 5.16. Окно Бартлетта (сверху) и его амплитудный спектр (снизу)
Рис. 5.16. Окно Бартлетта (сверху) и его амплитудный спектр (снизу)
Рис. 5.16. Окно Бартлетта (сверху) и его амплитудный спектр (снизу)
В отличие от треугольного окна, значения окна Бартлетта по краям (при k - 1 и £ = и) равны нулю. Кроме того, независимо от четности п оно является симметричным. Окно Бартлетта представляет собой отсчеты симметричного треугольного импульса, который начинается при k = 1, заканчивается при к = п и имеет единичную амплитуду. Максимум значения этого импульса достигается при k = п/2, поэтому при нечетном п окно Бартлетта не достигает единичного значения в середине.
При нечетном п ненулевые отсчеты окна Бартлетта совпадают с отсчетами треугольного окна длины п - 2.
На рис. 5.16 приведены графики окна Бартлетта и его амплитудного спектра при п = 16:
» w - bartlett(16):
» w = w/sum(w);
• » plot(w)
» figure
» [h. f] - freqz(w, 1. []. 16):
» plot(f, 20*1oglO(abs(h)))
» ylim([-80 0])
» grid on
Уровень первого бокового лепестка, как и в случае треугольного окна, составляет -26,5 дБ.
Окно Ханна
Функция hann реализует окно Ханна (по аналогии с рассматриваемым далее окном Хэмминга его часто ошибочно называют окном Хэннинга; даже соответствующая функция в предыдущей версии пакета Signal Processing имела имя banning):
w = hann(n. 'sflag')
Строковый параметр 'sflag' позволяет выбрать режим расчета окна. При значении 'symmetric', принятом по умолчанию, генерируется симметричное окно, для которого к (к) = w(n + 1 - ку При значении 'periodic' создается слегка несимметричное окно, синусоидальные компоненты которого будут аккуратно стыковаться при соединении нескольких экземпляров окна.
В симметричном случае отсчеты окна Ханна рассчитываются по формуле
®(к) = - 1 — cos 2л .
2( к п-1))
Для периодического варианта п - 1 в знаменателе формулы заменяется на п (возможна и иная трактовка: выполняется расчет по приведенной формуле для окна длиной т? + 1, а затем последний элемент отбрасывается).
На рис. 5.17 приведены графики окна Ханна и его амплитудного спектра при т? = 16:
» w = hann(16):
» w = w/sum(w):
» plot(w)
» figure
» [h. f] = freqz(w. 1. []. 16):
» plot(f. 20*logl0(abs(h)))
» ylim([-80 0])
» grid on
Уровень первого бокового лепестка составляет -31,5 дБ.
Рис. 5.17. Окно Ханна (сверху) и его амплитудный спектр (снизу)
Окно Хэмминга
Функция hamming реализует окно Хэмминга: w = hamming(n. 'sflag')
Строковый параметр 'sflag' позволяет выбрать режим расчета окна. При значении 'symmetric', принятом по умолчанию, генерируется симметричное окно, для которого те^ = w(n + 1 - k). При значении 'periodic' создается слегка несимметричное окно, синусоидальные компоненты которого будут аккуратно стыковаться при соединении нескольких экземпляров окна.
В симметричном случае отсчеты окна Хэмминга рассчитываются по формуле
w(k') = 0,54-0,46cos| 2л-—-
V
Для периодического варианта и - 1 в знаменателе формулы заменяется на п (возможна и иная трактовка: выполняется расчет по приведенной формуле для окна длиной т? + 1, а затем последний элемент отбрасывается).
Рис. 5.18. Окно Хэмминга (сверху) и его амплитудный спектр (сверху)
На рис. 5.18 приведены графики окна Хэмминга и его амплитудного спектра при п = 16:
» w = hammi ng(16);
» w - w/sum(w):
» plot(w)
» figure
» [h. f] = freqz(w. 1. []. 16):
» plot(f. 20*logl0(abs(h)))
» ylim([-80 0])
» grid on
Уровень первого бокового лепестка в данном примере составляет -40 дБ; с ростом п этот уровень уменьшается до -43 дБ.
Окно Блэкмена
Функция bl ackman реализует окно Блэкмена:
w = blackman(n, ’sflag’)
Строковый параметр 'sflag' позволяет выбрать режим расчета окна. При значении 'symmetric', принятом по умолчанию, генерируется симметричное окно, для которого w^ - w(n + 1 - k). При значении 'periodic' создается слегка несимметричное окно, синусоидальные компоненты которого будут аккуратно стыковаться при соединении нескольких экземпляров окна.
В симметричном случае отсчеты окна Блэкмена рассчитываются по формуле
w(Ji^ = 0,42 -0,5 cos (2л-—-) + 0,08 cos ( 4л-—-).
V и — 1V I п-1)
Для периодического варианта п - 1 в знаменателе формулы заменяется на п (возможна и иная трактовка: выполняется расчет по приведенной формуле для окна длиной п + 1, а затем последний элемент отбрасывается).
На рис. 5.19 приведены графики окна Блэкмена и его амплитудного спектра при п = 16:
» w = Ы ackmanC16):
» w = w/sum(w):
» plot(w)
» figure
» [h. f] = freqz(w, 1. []. 16):
» plot(f. 20*logl0(abs(h)))
» ylim([-100 0])
» grid on
Уровень первого бокового лепестка составляет -58 дБ. Окно Блэкмена имеет несколько более широкий главный лепесток и меньший уровень боковых лепестков по сравнению с окнами Ханна и Хэмминга той же длины.
Рис. 5.19. Окно Блэкмена (сверху) и его амплитудный спектр (снизу)
Окно Кайзера
Функция kaiser реализует окно Кайзера: w = kaiser(n. beta)
Здесь beta — параметр окна (см. формулу ниже).
Отсчеты окна Кайзера рассчитываются по формуле
те(к') =те(к') =/о 1-/о 1-2к -n-lVи -1 J2к -n-lVи -1 Jмр)|мр)|к- 1,2,..., п.к- 1,2,..., п.
те(к') =
те(к') =
/о 1-
/о 1-
2к -n-lVи -1 J
2к -n-lVи -1 J
мр)|
мр)|
к- 1,2,..., п.
к- 1,2,..., п.
Здесь /0 — модифицированная функция Бесселя первого рода нулевого порядка. Чем больше р, тем больше доля энергии, сосредоточенная в главном лепестке спектра (и тем шире этот главный лепесток), и тем меньше уровень боковых лепестков. На практике используются значения р от 4 до 9.
Рис. 5.20. Окно Кайзера (сверху) и его амплитудный спектр (снизу) для р = 4 (сплошные линии) и р = 9 (пунктирные линии)
На рис. 5.20 приведены графики окна Кайзера и его амплитудного спектра при п - 16 для двух указанных крайних значений 0:
» wl = kaiser(16. 4):
» w2 = kaiser(16. 9);
» wl = wl/sum(wl);
» w2 = w2/sum(w2):
» plot(wl): hold on: plot(w2, '--'): hold off
» figure
» [hl. f] = freqz(wl, 1. [L 16):
» h2 = freqz(w2, 1. []. 16):
» plot(f. 20*1oglO(abs(hl)))
» hold on
» plot(f. 20*logl0(abs(h2)). '--')
» hold off
» ylim([-100 0])
» grid on
Из графиков видно, что при 0 = 4 главный лепесток имеет ширину 1,75 (за единицу принято расстояние между соседними каналами частотного анализа), а уровень боковых лепестков составляет -32,5 дБ. При 0 = 9 главный лепесток расширяется примерно до 3,2, а уровень боковых лепестков падает до -66 дБ.
Окно Чебышева
Функция chebwi п реализует окно Чебышева:
w = chebwin(n. beta)
Здесь beta — степень подавления боковых лепестков в децибелах (см. формулу ниже).
Рис. 5.21. Окно Чебышева (сверху) и его амплитудный спектр (снизу) для уровня боковых лепестков -40 дБ
Для окна Чебышева все боковые лепестки имеют одинаковый, заданный при расчете окна уровень. Отсчеты окна Чебышева рассчитываются путем вычисления обратного преобразования Фурье от его частотной характеристики:
5(со) =5(со) =,,.соcos (w-l)arccos тс— 1,,.соcos (w-l)arccos тс— 1где а = chгде а = charch(10,/2")arch(10,/2")
5(со) =
5(со) =
,,.со
cos (w-l)arccos тс— 1
,,.со
cos (w-l)arccos тс— 1
где а = ch
где а = ch
arch(10,/2")
arch(10,/2")
Здесь р — степень подавления боковых лепестков в децибелах, п — требуемое количество отсчетов окна.
На рис. 5.21 приведены графики окна Чебышева и его амплитудного спектра при
и = 16 для уровня боковых лепестков -40 дБ:
» w - chebwin(16. 40);
» w = w/sum(w);
» plot(w)
» figure
» [h. f] = freqz(w, 1. [], 16);
» plot(f. 20*logl0(abs(h)))
» ylim([-60 0])
» grid on
Как обычно, с уменьшением уровня боковых лепестков главный лепесток расширяется.
Новые весовые функции в Signal Processing Toolbox 5.1
В последней (5.1) версии пакета Signal Processing появилось еще несколько весовых функций:
barthannwi п — окно Бартлетта—Ханна (линейная комбинация окон Бартлетта и Ханна);
Ы ackmanharri s — окно Блэкмена—Харриса (в отличие от окна Блэкмена, суммируется не два, а три косинусоидальных слагаемых);
bohmanwin — окно Бомена (свертка двух одинаковых косинусоидальных импульсов);
gausswin — гауссово окно;
nuttalwin — версия окна Блэкмена—Харриса, предложенная Наттоллом (слегка отличаются весовые коэффициенты при суммировании косинусоидальных слагаемых);
tukeywin — окно Тьюки (прямоугольник с косинусоидально сглаженными краями; при крайних допустимых значениях коэффициента сглаживания получаются прямоугольное окно и окно Ханна).
Функции непараметрического спектрального анализа
В данном разделе будут рассмотрены три функции, осуществляющие спектральный анализ сигнала без использования дополнительной информации:
specgram — вычисление мгновенного спектра сигнала;
periodogram — вычисление спектральной плотности мощности одной реализации случайного сигнала;
pwel ch — оценка спектральной плотности мощности случайного процесса методом усреднения модифицированных периодограмм.
Для демонстрации работы многих функций спектрального анализа будет использоваться дискретный случайный процесс с экспоненциальной функцией корреляции. Формирование такого процесса было рассмотрено в разделе «Формирование случайных сигналов» главы 3, поэтому соответствующие строки листингов далее будут приводиться без комментариев.
Чтобы в дальнейшем было с чем сравнивать получаемые результаты, построим теоретический спектр плотности мощности данного сигнала. Поскольку он является авторегрессионным процессом первого порядка, его спектр можно рассчитать по формуле (5.23), положив в ней ^ - 1. Коэффициент аъ как и в примере главы 3, принимаем равным 0,9, а частоту дискретизации /д и дисперсию белого шума а^ считаем равными единице. Функции спектрального анализа пакета Signal Processing для веществённого сигнала рассчитывают односторонний спектр плотности мощности, поэтому умножим результат вычислений по формуле (5.23) на два. Строим график спектра плотности мощности (рис. 5.22):
» Т - 1;% период дискретизации
» var_n - 1: % дисперсия белого шума
» al - 0.9; % параметр экспоненциальной корреляции
» f - 11nspace(0. 1/(2*Т), 100): % вектор значений частот
» % рассчитываем спектр плотности мощности
» р - 2 * var_n * Т ./ abs(l - al * exp(-1*2*pi*f*T)).A2:
» psdplot(P, f. 'Hz')
Рис. 5.22. Спектр плотности мощности экспоненциально коррелированного дискретного случайного процесса
Спектрограмма
Спектрограммой (spectrogram ) сигнала называется его мгновенный спектр, зависящий от времени. Для вычисления спектрограммы вектор сигнала разбивается на сегменты (возможно, с перекрытием). Для каждого сегмента вычисляется спектр с помощью функции fft. Набор спектров всех сегментов и образует спектрограмму.
Для вычисления спектрограммы служит функция specgram:
В - specgram(x, Nfft. Fs. window, numoverlap)
Здесь x — вектор сигнала (сигнал не может быть многоканальным), Nfft — используемая размерность дискретного преобразования Фурье, Fs — частота дискретизации в герцах, window — вектор отсчетов весовой функции (размер этого вектора определяет размер сегментов, на которые разбивается анализируемый сигнал), numoverlap — величина перекрытия соседних сегментов (в отсчетах).
Обязательным входным параметром является только вектор значений сигнала х, остальные параметры имеют значения по умолчанию, которые используются, если в качестве параметра указана пустая матрица ([]) или если несколько последних параметров при вызове опущены:
О Nfft - m1n(256, length(x));
Fs - 2;
window - hann(nfft, 'periodic');
О numoverlap - length(w1ndow)/2.
Выходной параметр В — матрица, столбцы которой являются комплексными спектрами отдельных сегментов сигнала. Если входной вектор х является вещественным, спектр вычисляется только для положительных частот и возвращаемая матрица В содержит Nfft/2+l (для четного Nfft) или (Nfft+l)/2 (для нечетного Nfft) строк. В случае комплексного анализируемого вектора х спектр не обладает симметрией, и возвращаемая матрица В содержит Nfft строк.
При отсутствии выходных параметров функция specgram строит графическое изображение спектрограммы в координатах «время — частота», отображая значения амплитудного спектра с помощью цвета (для этого используется функция imagesc):
specgram(„.)
Примеры использования функции specgram уже приводились в главах 3 и 4 (см. рис. 3.26 и рис. 4.19-4.21). Поэтому здесь мы покажем, какой забавный вид может иметь спектрограмма сигнала, сформированного из нескольких импульсов с меняющейся частотой. Запись такого сигнала содержится в файле vcosig.mat, входящем в состав пакета Signal Processing. В этом же файле хранится и значение частоты дискретизации этого сигнала (переменная Fs). Формируем спектрограмму (рис. 5.23):
» load vcoslg
» specgram(vcoslg, [], Fs)
Рис. 5.23. Пример использования функции specgram
ВНИМАНИЕ
Для отображения спектрограммы используется цветовая палитра jet, так что минимальному уровню амплитудного спектра соответствует темно-синий цвет, максимальному — темно-красный. Переход от синего к красному происходит через оттенки голубого, зеленого и желтого. В результате при черно-белой печати зависимость оттенка графика от уровня спектра оказывается немонотонной. Для правильной передачи уровня спектра в черно-белом виде следует установить для рисунка палитру оттенков серого командой colormap gray. В данном примере этого не сделано только потому, что «рожица» выглядит выразительнее именно после преобразования исходных цветов рисунка в оттенки серого, а не при использовании серой палитры для вывода спектрограммы.
Расчет периодограммы
Для вычисления периодограммы в MATLAB предназначена функция periodogram. Синтаксис ее вызова следующий:
[Рхх, f] - periodogram(x, window, Nfft, Fs, 'range')
Единственным обязательным входным параметром является х — вектор отсчетов сигнала. Остальные параметры имеют значения по умолчанию, которые используются, если в качестве параметра указана пустая матрица [] или если некоторое количество параметров (начиная с последнего) опущены при вызове.
Вектор window должен содержать коэффициенты используемого окна (при этом вычисляется модифицированная периодограмма по формуле (5.22)). По умолчанию используется прямоугольное окно, то есть периодограмма вычисляется по формуле (5.21).
Параметр Nfft задает размерность БПФ, используемого для вычисления периодограммы. По умолчанию этот параметр равен max(256, 2Anextpow2(length(x))). Входной сигнал, умноженный на окно, приводится к размеру Nfft (обрезается либо дополняется нулями).
Параметр Fs — частота дискретизации в герцах. Эта величина используется в формулах (5.21) и (5.22), а также для оцифровки графика и расчета возвращаемого вектора частот f. Значение по умолчанию равно 2л.
Строковый параметр 'range' определяет частотный диапазон для возвращаемого вектора Рхх. Возможны два значения:
'twosided' — векторы Рхх и f имеют длину Nfft и соответствуют полному диапазону частот O...Fs. Этот вариант используется по умолчанию, если х содержит комплексные отсчеты;
'onesided' — векторы Рхх и f имеют длину ceil ((Nfft + 1)/2) и соответствуют половинному диапазону частот 0...FS/2. Этот вариант используется по умолчанию в случае вещественного вектора х.
Параметр 'range' может быть указан в списке параметров в любом месте после window.
Возвращаемые параметры: Рхх — вектор значений спектральной плотности мощности, f — вектор значений частот, использованных для расчета. Шаг между соседними элементами этого вектора равен Fs/Nfft, первый элемент равен нулю.
Если выходные параметры при вызове не указаны, функция строит график спектральной плотности с помощью функции psdpl ot.
Рис. 5.24. Периодограмма экспоненциально коррелированного случайного процесса, полученная с помощью функции periodogram
В качестве примера оценим спектр плотности мощности экспоненциально коррелированного случайного процесса (рис. 5.24):
» X формирование случайного сигнала
» ХО - randnd. 1000):
» а - 0.9:
» X - fllter(l. [1 -а]. ХО):.
» % оценка спектра плотности мощности
» periodogram(X, []. []. 1)
Как видите, хотя общий ход графика совпадает с аналитически построенным спектром данного случайного процесса (см. рис. 5.22), периодограмма оказывается сильно изрезанной, что полностью соответствует теоретическим сведениям, приведенным ранее в разделе «Непараметрические методы».
Реализация метода Уэлча
Функция pwelch предназначена для определения спектра мощности случайного сигнала методом Уэлча (методом усреднения модифицированных периодограмм — averaged modified periodogram method). Синтаксис вызова функции следующий:
[Рхх. f] - pwelch(x, Nwin, Noverlap, Nfft, Fs. 'range')
Единственным обязательным входным параметром является х — вектор отсчетов анализируемого сигнала. Все остальные параметры имеют значения по умолчанию, которые используются, если при вызове в качестве параметра указана пустая матрица ([]) или если несколько последних параметров опущено.
Параметр Nwin управляет выбором окна, используемого для анализа. Если Nwin — число, используется окно Хэмминга указанной длины, если вектор, то данный вектор используется в качестве окна. По умолчанию используется окно Хэмминга, длина которого выбирается так, чтобы с учетом заданного перекрытия (см. ниже) сигнал оказался разделенным на 8 фрагментов.
Параметр Noverlap задает (в отсчетах) перекрытие соседних фрагментов сигнала, для которых вычисляются периодограммы. По умолчанию перекрытие равно половине длины окна.
Параметр Nfft задает размерность БПФ, используемого для вычисления периодограммы. По умолчанию Nfft - max(256, 2Anextpow2(Nwin)), где Nwin — длина фрагмента сигнала (длина используемого окна).
Параметр Fs указывает частоту дискретизации сигнала. Это значение используется для нормировки рассчитанного спектра мощности, а также при расчете возвращаемого вектора f и для оцифровки графика. По умолчанию значение этого параметра равно 2л.
Строковый параметр ’ range' определяет частотный диапазон для возвращаемого вектора Рхх. Возможны два значения:
'twosided' — векторы Рхх и f имеют длину Nfft и соответствуют полному диапазону частот O...Fs. Этот вариант используется по умолчанию, если х содержит комплексные отсчеты;
'onesided' — векторы Рхх и f имеют длину ceil((Nfft + 1)/2) и соответствуют половинному диапазону частот O...Fs/2. Этот вариант используется по умолчанию в случае вещественного вектора х.
Параметр Nfft задает размерность БПФ, используемого для вычисления периодограммы. По умолчанию этот параметр равен max(256, 2Anextpow2(length(x))). Входной сигнал, умноженный на окно, приводится к размеру Nfft (обрезается либо дополняется нулями).
Параметр Fs — частота дискретизации в герцах. Эта величина используется в формулах (5.21) и (5.22), а также для оцифровки графика и расчета возвращаемого вектора частот f. Значение по умолчанию равно 2л.
Строковый параметр ' range1 определяет частотный диапазон для возвращаемого вектора Рхх. Возможны два значения:
'twosided' — векторы Рхх и f имеют длину Nfft и соответствуют полному диапазону частот O...FS. Этот вариант используется по умолчанию, если х содержит комплексные отсчеты;
'onesided' — векторы Рхх и f имеют длину ceil ((Nfft + 1)/2) и соответствуют половинному диапазону частот O...Fs/2. Этот вариант используется по умолчанию в случае вещественного вектора х.
Параметр 'range' может быть указан в списке параметров в любом месте после window.
Возвращаемые параметры: Рхх — вектор значений спектральной плотности мощности, f — вектор значений частот, использованных для расчета. Шаг между соседними элементами этого вектора равен Fs/Nfft, первый элемент равен нулю.
Если выходные параметры при вызове не указаны, функция строит график спектральной плотности с помощью функции psdplot.
Рис. 5.24. Периодограмма экспоненциально коррелированного случайного процесса, полученная с помощью функции periodogram
В качестве примера оценим спектр плотности мощности экспоненциально коррелированного случайного процесса (рис. 5.24):
» % формирование случайного сигнала
» ХО ■ randnd, 1000);
» а - 0.9;
» X - fllterd, [1 -а]. ХО);
» % оценка спектра плотности мощности
» periodogram(X, [], []. 1)
Как видите, хотя общий ход графика совпадает с аналитически построенным спектром данного случайного процесса (см. рис. 5.22), периодограмма оказывается сильно изрезанной, что полностью соответствует теоретическим сведениям, приведенным ранее в разделе «Непараметрические методы».
Реализация метода Уэлча
Функция pwelch предназначена для определения спектра мощности случайного сигнала методом Уэлча (методом усреднения модифицированных периодограмм — averaged modified periodogram method). Синтаксис вызова функции следующий:
[Рхх, f] - pwelch(x. Nwin, Noverlap, Nfft, Fs. 'range')
Единственным обязательным входным параметром является х — вектор отсчетов анализируемого сигнала. Все остальные параметры имеют значения по умолчанию, которые используются, если при вызове в качестве параметра указана пустая матрица ([]) или если несколько последних параметров опущено.
Параметр Nwin управляет выбором окна, используемого для анализа. Если Nwin — число, используется окно Хэмминга указанной длины, если вектор, то данный вектор используется в качестве окна. По умолчанию используется окно Хэмминга, длина которого выбирается так, чтобы с учетом заданного перекрытия (см. ниже) сигнал оказался разделенным на 8 фрагментов.
Параметр Mover! ар задает (в отсчетах) перекрытие соседних фрагментов сигнала, для которых вычисляются периодограммы. По умолчанию перекрытие равно половине длины окна.
Параметр Nfft задает размерность БПФ, используемого для вычисления периодограммы. По умолчанию Nfft - max(256, 2Anextpow2(Nwin)), где Nwin — длина фрагмента сигнала (длина используемого окна).
Параметр Fs указывает частоту дискретизации сигнала. Это значение используется для нормировки рассчитанного спектра мощности, а также при расчете возвращаемого вектора f и для оцифровки графика. По умолчанию значение этого параметра равно 2л.
Строковый параметр 'range' определяет частотный диапазон для возвращаемого вектора Рхх. Возможны два значения:
'twosided' — векторы Рхх и f имеют длину Nfft и соответствуют полному диапазону частот O...Fs. Этот вариант используется по умолчанию, если х содержит комплексные отсчеты;
'onesided' — векторы Рхх и f имеют длину ceil ((Nfft + 1)/2) и соответствуют половинному диапазону частот O...FS/2. Этот вариант используется по умолчанию в случае вещественного вектора х.
Параметр ’range’ может быть указан в списке параметров в любом месте после Noverlap.
Возвращаемые параметры: Рхх — вектор значений спектральной плотности мощности, f — вектор значений частот, использованных для расчета. Шаг между соседними элементами этого вектора равен Fs/Nfft, первый элемент равен нулю.
Если выходные параметры при вызове не указаны, функция строит график спектральной плотности мощности с помощью функции psdplot.
Расчет спектра производится следующим образом. Анализируемый сигнал х делится на перекрывающиеся фрагменты согласно параметрам Nw1 п и Noverl ар. Для каждого фрагмента вычисляется модифицированная периодограмма с использованием заданных окна и размерности БПФ (см. раздел «Расчет периодограммы» в этой главе). Полученный набор модифицированных периодограмм усредняется, и результат делится на Fs.
В качестве примера оценим спектр плотности мощности экспоненциально коррелированного случайного процесса (рис. 5.25):
» % формирование случайного сигнала
» ХО - randnd. 1000):
» а - 0.9;
» X - filterd, [1 -а], ХО):
» X оценка спектра плотности мощности
» pwelch(X, [], [], [], 1)
Welch PSD Estimate
25
111i 00.10.20.30.40.5
Frequency (Hz)
Рис. 5.25. Оценка спектра плотности мощности, полученная с помощью функции pwelch
Как видите, по сравнению с периодограммой, показанной ранее на рис. 5.24, спектр значительно меньше изрезан и приближается к теоретическому спектру данного процесса (см. рис. 5.22).
ВНИМАНИЕ
В предыдущих версиях 4.x пакета Signal Processing, поставлявшихся с версиями MATLAB 5.x, данный метод спектрального анализа был реализован с помощью функции psd. Опа сохранена и в нынешней, пятой версии пакета Signal Processing^ по считается устаревшей, поэтому использовать се не рекомендуется.
Функция построения графика спектра мощности
Функция psdplot предназначена для построения графика спектральной плотности мощности. В частности, она используется для этого всеми функциями спектрального анализа, если при их вызове не указаны выходные параметры. Синтаксис вызова функции psdpl ot следующий:
psdplot(Pxx, f. 'units', 'yscale', 'title')
Здесь Pxx — вектор значений рпектральной плотности мощности (данный параметр может быть матрицей, в таком случае выводится несколько графиков, соответствующих отдельным столбцам этой матрицы), f — вектор той же длины, что и Рхх, содержащий значения частот, которым соответствуют значения спектральной плотности мощности.
Остальные параметры являются необязательными. Параметр 'units' задает подпись для оси частот — ' rad/sample' (радиан/отсчет, этот вариант используется по умолчанию) или 'Hz'. Параметр 'yscale' управляет режимом построения графика. Принятое по умолчанию значение ' db' задает вывод мощности в децибелах, то есть в логарифмическом масштабе. Линейный масштаб используется при значении 'linear'. Наконец, параметр 'title' — строка заголовка для графика.
Параметрический спектральный анализ в MATLAB
В данном разделе будет рассмотрено семейство функций, осуществляющих спектральный анализ с использованием авторегрессионных моделей, а также несколько функций, реализующих методы MUSIC и EV.
Работа с авторегрессионными моделями
В MATLAB реализовано несколько методов анализа спектра на основе авторегрессионной модели формирования сигнала. Эти методы отличаются друг от друга способом оценивания коэффициентов авторегрессионной модели. Каждому методу соответствуют две функции — функция вычисления коэффициентов модели и функция собственно спектрального анализа. Функция спектрального анализа вызывает функцию расчета коэффициентов модели, а затем производит вычисление спектра по формуле (5.23). Имена функций сведены в табл. 5.2.
Синтаксис вызова функций для разных методов анализа совершенно одинаков, поэтому рассматривать функции по отдельности не имеет смысла.
Таблица 5.2. Функции авторегрессионных моделей
Название метода
Функция расчета коэффициентов модели
Функция спектрального анализе
Ковариационный метод
arcov
pcov
Модифицированный ковариационный метод
armcov
pmcov
Метод Берга
arburg
pburg
Авторегрессионный метод Юла—Уолкера
aryule
pyulear
Функции расчета коэффициентов авторегрессионных моделей
Синтаксис вызова функций, выполняющих оценивание коэффициентов авторегрессионных моделей формирования сигнала, приведен ниже:
[а. е] = агххх(х, р)
Здесь агххх — имя одной из функций, перечисленных во втором столбце табл. 5.2.
Входные параметры: х — вектор отсчетов сигнала, р — порядок авторегрессионной модели.
Выходные параметры: а — вектор коэффициентов модели (это полный вектор знаменателя функции передачи формирующего фильтра, его длина равна р + 1, а первый элемент равен 1), е — оценка дисперсии белого шума, возбуждающего фильтр.
В качестве примера оценим параметры авторегрессионной модели для экспоненциально коррелированного шума (такой шум является авторегрессионным процессом первого порядка, поэтому задаем р - 1):
» % формирование случайного сигнала
» ХО - randnd. 1000):
» а = 0.9:
» X = f11ter(l. [1 -а]. ХО):
» X оценка параметров авторегрессионной модели
» [аа, е] - arburg(X, 1) аа =
1.0000 -0.9107 е =
0.8904
Как видите, оценка коэффициента обратной связи весьма близка к истинной. Оценка дисперсии белого шума, возбуждающего авторегрессионный формирователь, для данной реализации процесса оказывается несколько заниженной.
Функции авторегрессионного спектрального анализа
Синтаксис вызова функций, производящих расчет спектра мощности на основе авторегрессионной модели формирования сигнала, приведен ниже:
[Рхх, f] - рххх(х, р, Nfft, Fs, 'range')
Здесь рххх — имя одной из функций, перечисленных в последнем столбце табл. 5.2. Обязательные входные параметры: х — вектор отсчетов сигнала, р — порядок авторегрессионной модели. Остальные входные параметры имеют значения по умолчанию, которые используются, если параметр представляет собой пустую матрицу ([]) или отсутствует.
Параметр Nfft задает число частотных точек для расчета спектра. По умолчанию его значение равно 256. Параметр Fs — частота дискретизации входного сигнала (используется при расчете возвращаемого вектора частот f и для оцифровки горизонтальной оси графика). Значение по умолчанию — 2л Гц.
Строковый параметр ’ range’ определяет частотный диапазон для возвращаемого вектора Рхх. Возможны два значения:
'twosided' — векторы Рхх и f имеют длину Nfft и соответствуют полному диапазону частот O...Fs. Этот вариант используется по умолчанию, если х содержит комплексные отсчеты;
'onesided' — векторы Рхх и f имеют длину ceil ((Nfft + 1)/2) и соответствуют половинному диапазону частот 0...FS/2. Этот вариант используется по умолчанию в случае вещественного вектора х.
Параметр 'range' может быть указан в любом месте списка параметров после р. Возвращаемые параметры: Рхх — вектор значений спектральной плотности мощности, f — вектор значений частот, использованных для расчета. Шаг между соседними элементами этого вектора равен Fs/Nfft, первый элемент равен нулю. Если выходные параметры при вызове не указаны, функции строят график спектральной плотности с помощью функции psdplot.
В качестве примера выполним спектральный анализ экспоненциально коррелированного случайного сигнала. Такой сигнал является авторегрессионным процессом первого порядка, поэтому мы продемонстрируем влияние порядка авторегрессионной модели на получаемые результаты, построив оценки спектра (рис. 5.26) для р - 1 (оптимальный порядок модели) и р - 20 (избыточный порядок):
» X формирование случайного сигнала
» ХО - randnd, 1000):
» а = 0.9;
» X = filterd, [l.-а]. ХО):
» Ж оценка спектра плотности мощности
» pburg(X. 1, []. 1) Ж порядок модели оптимален
» figure
» pburg(X, 20, []. 1) Ж порядок модели избыточен
Burg PSD Estimate
Frequency (Hz)
Рис. 5.26. Результаты авторегрессионного спектрального анализа при оптимальном (сверху) и избыточном (снизу) порядке модели
Из графиков видно, что при оптимальном порядке модели (рис. 5.26, сверху) спектр практически совпадает с теоретическими результатами (см. рис. 5.22), а при избыточном (см. рис. 5.26, снизу) в спектре начинают возникать ложные флуктуации.
Реализация метода MUSIC
Функция pmusic реализует расчет псевдоспектра путем анализа собственных чисел и собственных векторов корреляционной матрицы сигнала (метод MUSIC). Синтаксис вызова функции pmusic следующий:
[s, f, v; е] - pmus1c(x, р, Nfft, Fs. Nw1n. Noverlap, 'range')
У функции много входных параметров, однако обязательными являются только х и р. В простейшем случае к — это вектор отсчетов сигнала, ар — целое число, задающее размерность сигнального подпространства. Однако смысл этих параметров может быть и несколько иным, о чем речь пойдет чуть ниже.
Формирование корреляционной матрицы
Данный метод расчета спектра основан на анализе корреляционной матрицы сигнала, поэтому прежде всего необходимо определить эту матрицу. Если х — вектор отсчетов Сигнала, формированием корреляционной матрицы управляют параметры Nwin и Noverlap. Параметр Nwin может быть числом, обозначающим размер прямоугольного окна, или вектором, содержащим коэффициенты окна. Сигнал делится на фрагменты в соответствии с длиной окна (равной Nwin или length(Nwin)), при этом перекрытие соседних фрагментов составляет Nover 1 ар отсчетов.
По умолчанию используется прямоугольное окно, размер которого в два раза превышает заданную размерность сигнального подпространства. Перекрытие фрагментов по умолчанию на единицу меньще размера окна (то есть соседние фрагменты сигнала сдвинуты друг относительно друга на один отсчет).
Кроме вектора, входной Параметр х может быть матрицей, содержащей несколько реализаций (наблюдений) случайного процесса. При этом каждая строка матрицы соответствует отдельной реализации. Корреляционная матрица в этом случае рассчитывается как х'*х. Параметр Nover! ар игнорируется, так же как и числовой параметр Nwin. Если Nwin задан в виде вектора, его длина должна быть равна числу столбцов в матрице х (при этом каждая реализация сигнала поэлементно умножается на вектор коэффициентов окна перед вычислением корреляционной матрицы).
Наконец, в качестве х можно подставить уже готовую корреляционную матрицу (в этом случае параметр х должен удовлетворять свойствам корреляционной матрицы — быть квадратной эрмитовой, то есть обладающей комплексно-сопряженной симметрией, матрицей Теплица). Чтобы использовать такой вариант, в число входных параметров необходимо включить строку ' согг' (в любом месте списка параметров после размерности сигнального подпространства р). Параметры Nwi п и Noverl ар в данном случае игнорируются.
Управление размером сигнального подпространства
Как уже говорилось, в простейшем случае размерность сигнального Подпространства задается числом р. Однако функция pmusic позволяет использовать более гибкий способ разделения собственного пространства корреляционной матрицы на сигнальное и шумовое подпространства. Для этого параметр р должен быть двухэлементным вектором. Значение р(1) задает максимально допустимый предел размерности сигнального подпространства, а значение р(2) — пороговый уровень для собственных чисел, соответствующих сигнальному подпространству. Если Xmin — минимальное собственное число корреляционной матрицы, то собственные числа, меньшие чем Xmin р(2), будут отнесены к шумовым компонентам, а собственные числа, превышающие этот порог, — к сигнальным компонентам. Чтобы использовать этот режим, длина окна должна быть не меньше, чем р(1).
Значение р(1) может быть равно бесконечности (Inf), при этом необходимо явное задание параметра Nwin, поскольку использование значения по умолчанию оказывается невозможным.
Управление расчетом псевдоспектра
Параметр Nfft задает число точек для расчета псевдоспектра. Значение по умолчанию — 256. Частота дискретизации Fs используется для расчета возвращаемого вектора f и для вывода графика. Ее значение по умолчанию равно 2л. Наконец, строковый параметр ' range' задает диапазон частот анализа. Этот параметр может принимать одно из двух значений:
'whole' — длина возвращаемых векторов s и f равна Nfft, расчет проводится для всего частотного диапазона O...FS. Этот вариант принят по умолчанию для случая, когда х содержит комплексные элементы;
'half — ддина возвращаемых векторов s и f равна ceil((Nfft+l)/2), расчет проводится для половинного частотного диапазона 0...FS/2. Этот вариант принят по умолчанию для вещественного сигнала х.
Выходные параметры
Возвращаемые функцией pmusic результаты имеют следующий смысл:
s — вектор рассчитанных значений псевдоспектра;
f — вектор частот, которым соответствуют значения в векторе s;
v — собственные векторы корреляционной матрицы, соответствующие шумовому подпространству;
□ е — собственные числа корреляционной матрицы, соответствующие шумовому подпространству.
Функция rootmusic
Если функция pmusic дает вектор рассчитанных значений псевдоспектра, то функция rootmusic, используя тот же метод анализа MUSIC, извлекает из корреляционной матрицы сигнала несколько иную информацию — частоты содержащихся в сигнале комплексных экспонент и соответствующие им мощности.
Синтаксис вызова функции следующий:
[f. pow] = rootmusic(x, р. Fs, 'corr')
Все входные параметры имеют тот же смысл, что и для функций pmusic.
Результатами работы функции являются векторы частот f и соответствующих им мощностей pow. Длина вектора f равна размерности сигнального подпространства. Размер вектора pow зависит от того, вещественным или комплексным является анализируемый сигнал х. Если сигнал х комплексный, длина вектора pow равна длине вектора f, а если вещественный, то она вдвое меньше.
Пример использования
В качестве примера применения функций pmusic и rootmusic сформируем сигнал, состоящий из трех синусоид разного уровня, смешанных с белым шумом, а затем
выведем график его псевдоспектра (рис. 5.27) и оценим частоты гармонических составляющих:
» Fs = 1000;% частота дискретизации
» fl = 50:% частоты, содержащиеся в сигнале
» f2 = 120:
» f3 = 300:
» t = 0:1/Fs:l; % дискретное время
» % анализируемый сигнал
» s = 2*cos(2*pi*fl*t) + 5*s1n(2*p1*f2*t) - 0.5*cos(2*pi*f3*t):
» s - awgn(s, 10, 'measured'); % отношение С/Ш = 10 дБ
» pmusic(s, 6. [], Fs)% график псевдоспектра
» rootmusic(s, 6, Fs)% оценка частот
ans =
120.0306
-120.0306
49.8887
-49.8887
296.9443
-296.9443
MUSIC Pseudospectrum
Рис. 5.27. Оценка псевдоспектра, полученная с помощью функции pmusic
Как видите, частоты оценены довольно точно, а график демонстрирует четкие пики.
Функции peig и rooteig
Функции peig и rooteig аналогичны функциям pmusic и rootmusic соответственно. Отличие состоит в том, что ими реализуется метод EV и расчеты производятся по формулам (5.31) и (5.32), где при суммировании используются весовые коэф-
фициенты, обратно пропорциональные «шумовым» собственным числам корреляционной матрицы сигнала. Синтаксис вызова функций следующий:
[s, f, V. е] = peig(x, р. Nfft, Fs, Nwln, Noverlap, 'range')
[f, pow] = rooteig(x, p. Fs, 'corn')
Все входные и выходные параметры соответствуют описаниям, приведенным выше для функций pmuslc и rootmusic.
ГЛАВА 6 Проектирование дискретных фильтров
Под проектированием (или синтезом) цифрового фильтра понимается выбор таких'наборов коэффициентов {а,} и {Ь,}, при которых характеристики получающегося фильтра удовлетворяют заданным требованиям. Строго говоря, в задачу проектирования входит и выбор подходящей структуры фильтра (см. раздел «Формы реализации дискретных фильтров» главы 4) с учетом конечной точности вычислений. Это особенно актуально при реализации фильтров «в железе» — с использованием специализированных БИС или цифровых сигнальных процессоров. Эффекты, связанные с конечной точностью вычислений, будут обсуждаться в главе 7, здесь же речь пойдет только о методах синтеза цифровых фильтров, то есть способах получения значений {я,} и {6J.
Методы синтеза цифровых фильтров можно классифицировать по различным признакам:
по типу получаемого фильтра:
О методы синтеза рекурсивных фильтров;
О методы синтеза нерекурсивных фильтров;
по наличию аналогового прототипа:
О методы синтеза с использованием аналогового прототипа;
О прямые (без использования аналогового прототипа) методы синтеза.
Синтез рекурсивных фильтров по аналоговому прототипу
При синтезе дискретного фильтра по аналоговому прототипу необходимо реализовать переход из s-области в 2-область, то есть преобразовать функцию передачи аналогового фильтра H(s) в функцию передачи дискретного фильтра Н(с). Получающийся дискретный фильтр не может быть полностью идентичен анало-
говому по своим характеристикам — хотя бы потому, что частотные характеристики дискретного фильтра являются периодическими. Можно говорить только об определенном соответствии характеристик аналогового и дискретного фильтров.
В данном разделе мы рассмотрим два метода синтеза рекурсивных дискретных фильтров по аналоговым прототипам:
метод билинейного ^-преобразования;
□ метод инвариантной импульсной характеристики.
Поскольку теория аппроксимации идеальных АЧХ аналоговыми средствами хорошо развита (см. раздел «Расчет аналоговых фильтров-прототипов» главы 2), методы синтеза дискретных фильтров по аналоговым прототипам получили широкое распространение.
Метод билинейного z-преобразования
Данный метод позволяет синтезировать рекурсивный дискретный фильтр по частотной характеристике аналогового прототипа.
Функция передачи аналоговой цепи с сосредоточенными параметрами представляет собой дробно-рациональную функцию переменной s. Чтобы получить функцию передачи дискретного фильтра, необходимо перейти из s-области в с-область, причем дробно-рациональный характер функции должен сохраниться (см. раздел «Функция передачи» главы 4). Поэтому замена для переменной s должна представлять собой также дробно-рациональную функцию переменной z. Чтобы частотные характеристики аналогового и дискретного фильтров были связаны простой зависимостью, искомая замена переменной должна отображать мнимую ось в s-области на единичную окружность в z-области. В этом случае частотные характеристики аналогового и дискретного фильтров будут связаны лишь трансформацией частотной оси и никаких искажений «по вертикали» не будет.
Простейшей из функций, удовлетворяющих перечисленным требованиям, является билинейное z-преобразование (bilinear transformation):
s = ~ —=2/,-^-^.(6.1)
T z + \'' 1 + z"1
Частотные характеристики аналогового Ka (со) и дискретного Кд(со) фильтров, как уже было сказано, связаны друг с другом лишь трансформацией частотной оси:
z \ Г 2 f coTYl'
Xa(co) = X,^arctg^^.(6.2)
На низких частотах, когда со Г « 1, тангенс примерно равен своему аргументу, так что'
2(соТА,
— tg — = со, если cor « 1.
Т I 2 )
Поэтому в области низких частот частотные характеристики аналогового и дискретного фильтров почти совпадают. Далее, по мере ускорения роста функции тангенса, частотная характеристика дискретного фильтра все сильнее сжимается по горизонтали (по сравнению с аналоговым прототипом) и на частоте Найквиста, равной л/Г, достигает значения, которое частотная характеристика аналогового фильтра имела бы на бесконечной частоте (рис. 6.1). .
Рис. 6.1. Трансформация частотной оси при билинейном z-преобразованииРис. 6.1. Трансформация частотной оси при билинейном z-преобразовании
Рис. 6.1. Трансформация частотной оси при билинейном z-преобразовании
Рис. 6.1. Трансформация частотной оси при билинейном z-преобразовании
При билинейном z-преобразовании левая половина s-плоскости отображается внутрь единичной окружности на z-плоскости, поэтому синтез по устойчивому аналоговому прототипу даст гарантированно устойчивый дискретный фильтр (см. раздел «Полюсы и вычеты» в главах 2 и 4, где шла речь об условиях устойчивости соответственно аналоговых и дискретных систем).
Для получения дискретного фильтра с заданными частотами среза необходимо скорректировать частоты среза аналогового прототипа, чтобы компенсировать искажения частотной оси. Так, для синтеза дискретного ФНЧ с частотой среза со0л аналоговый фильтр-прототип должен иметь частоту среза иОа, связанную с со0д следующим образом: .
(6.3)(6.3)2 Л
(6.3)
(6.3)
“оа ~5~
Метод инвариантной импульсной характеристики
Метод инвариантной импульсной характеристики (impulse invariance) позволяет синтезировать рекурсивный дискретный фильтр путем дискретизации импульсной характеристики аналогового прототипа.
Как говорилось в разделе «Полюсы и вычеты» главы 2, импульсная характеристика аналоговой цепи с сосредоточенными параметрами может быть представлена в виде суммы экспоненциальных слагаемых
Ai(t) = A epl
и (при наличии кратных полюсов) слагаемых вида
/г2(Г) -At" ept.'
Каждое из этих слагаемых может быть дискретизировано и воспроизведено в дискретном виде. Экспоненциальные слагаемые вида A^t) после дискретизации дают последовательность отсчетов
^(А) - А екрТ.(6.4)
Z-преобразование этой последовательности равно (см. раздел «Примеры вычисления z-преобразования» главы 3).
Н/г) = А(1 + +e2pTz'2+...) =^—.
Такая функция передачи соответствует дискретному рекурсивному фильтру 1-го порядка.
Теперь займемся слагаемыми вида /г2(0, соответствующими кратным полюсам.
Такое слагаемое дает после дискретизации последовательность отсчетов h2(h) = А (кТУ екрТ.
Z-преобразование этой последовательности можно легко рассчитать, если заметить, что она представляет собой n-ю производную по р от последовательности (6.4):
Н^-А^Ге”7-^ *фТуе2рТг-2 ^Туе3рГг^ +...) =
= А — Г1 ) dpn
Такая функция передачи, получаемая после вычисления п-й производной, соответствует дискретному рекурсивному фильтру n-го порядка.
Выполнив указанные преобразования для всех слагаемых, мы получим дискретный фильтр, импульсная характеристика которого представляет собой дискретизированную версию импульсной характеристики аналогового прототипа.
Частотная характеристика получаемого фильтра связана с частотной характеристикой аналогового прототипа точно так же, как спектр дискретизированного сигнала связан со спектром сигнала аналогового — периодическим повторением (см. раздел «Спектр дискретного сигнала» главы 3). Поэтому для получения хороших результатов при таком методе синтеза коэффициент передачи аналогового прототипа должен быть пренебрежимо малым на частотах, превышающих частоту Найквиста. Отсюда следует также, что этот метод подходит для создания ФНЧ и полосовых фильтров, но непригоден для синтеза ФВЧ и режскторных фильтров.
В качестве примера синтезируем методом инвариантной импульсной характеристики ФНЧ Чебышева 2-го порядка с частотой среза 10 кГц, причем специально выберем недостаточно высокую частоту дискретизации (48 кГц), чтобы хорошо видеть эффекты, связанные с наложением сдвинутых копий спектра (рис. 6.2):
» ТО = ЮеЗ:% частота среза
» [b, а] = chebyl(2, 3, T0*2*pi, 's'): % аналоговый фильтр
» Fs - 48еЗ;% частота дискретизации
» [bz. az] = impinvar(b, a. Fs); % дискретный фильтр
» X ЧХ дискретного фильтра
» [hz. wz] = freqz(bz, az, []. Fs, 'whole'):
» % ЧХ аналогового фильтра
» h = freqs(b. a, 2*p1*wz);
» plot(wz, abs(h). ':’)
» hold on
» plot(wz, abs(hz))
» hold off■
» xlabeK'Frequency (Hz)')
» ylabel('Magnitude')
» xl1m([0 Fs])
Рис. 6.2. АЧХ аналогового прототипа (пунктир) и дискретного фильтра (сплошная линия), синтезированного методом инвариантной импульсной характеристики
На рисунке хорошо видно, что из-за недостаточно высокой частоты дискретизации коэффициент передачи аналогового фильтра на частоте Найквиста недостаточно мал, что обусловливает заметные искажения формы АЧХ синтезированного дискретного фильтра. Повышение частоты дискретизации позволяет сделать эти искажения пренебрежимо малыми.
Прямые методы синтеза
Название «прямые методы» означает, что в данном случае не используется аналоговый прототип. Исходными данными для синтеза служат какие-либо параметры фильтра (чаще всего — его АЧХ), которые могут задаваться, вообще говоря, произвольно.
Прямые методы синтеза можно разделить на две категории:
оптимальные методы, в которых численными итерационными методами ищется минимум заданной функции качества;
субоптимальные методы, не дающие в точности оптимального решения, но позволяющие значительно упростить вычисления по сравнению с оптимальными методами. Как правило, эти методы используют специфику решаемой задачи, например дробно-рациональный вид функции передачи рекурсивного фильтра или экспоненциальный вид отдельных слагаемых его импульсной характеристики.
Оптимальные методы
Чаще всего отправной точкой при расчете фильтра служит его желаемая частотная характеристика — либо АЧХ (когда фазовые характеристики не важны), либо комплексный коэффициент передачи. В качестве минимизируемой меры отклонения характеристики фильтра от заданной в общем случае используется р-нор- ма ошибки. Такая норма Lp для функции /(х), определенной на интервале от а до Ь, рассчитывается следующим образом:
£p(/)=Ql/G<^ •
Чаще всего используются два значения р: р - 2 и р - оо. При р = 2 норма £2 пропорциональна среднеквадратическому значению функции. При р -> оо норма £т дает максимальное (по модулю) значение функции, достигаемое на рассматриваемом интервале.
Поскольку корень р-й степени при любом р является монотонно возрастающей функцией, при расчете минимизируемой величины его можно не вычислять.
Если при синтезе фильтра нас интересует только его АЧХ, р-норма ошибки е (со) рассчитывается следующим образом:
ЬДе) = Jw(co)|£)(co)-|K(co)| | с/со,(6.5)
о'.
где £>(со) — желаемая АЧХ, | К(со)| — АЧХ фильтра, ®(со) — неотрицательная вещественная весовая функция. Использование весовой функции позволяет придать разную значимость различным участкам частотной оси. В частности, это дает возможность задать переходные зоны, поведение АЧХ в которых не имеет значения. В этих зонах значение весовой функции должно быть нулевым.
Если необходимо аппроксимировать заданную частотную зависимость комплексного коэффициента передачи, норма ошибки аппроксимации рассчитывается так:
£р(е) = j®(co)|£)(co)-К(со)|' с/со.(6.6)
о
Здесь £)(со) — желаемая комплексная частотная характеристика, К (со) — частотная характеристика реального фильтра.
В большинстве случаев задача минимизации функции (6.5) или (6.6) не имеет аналитического решения. Исключение составляет синтез нерекурсивного фильтра при р = 2, когда рассматриваемая оптимизационная задача приводит к систе-
ме линейных уравнений относительно коэффициентов фильтра. При этом если весовая функция не используется (то есть если m(co) s 1), то коэффициенты фильтра представляют собой коэффициенты разложения желаемой частотной характеристики в ряд Фурье. Однако минимизация среднеквадратической ошибки приводит к появлению больших выбросов АЧХ при попытке аппроксимировать ее скачкообразное изменение. Это связано с явлением Гиббса, которое рассматривалось в главе 1 при обсуждении рядов Фурье.
В общем случае задача, как уже говорилось, не имеет аналитического решения и поэтому должна решаться итерационными численными методами. Для уменьшения влияния эффекта Гиббса при этом может использоваться наложение ограничений на предельное абсолютное отклонение частотной характеристики от заданной. Узнать подробнее о численных методах оптимизации, в том числе с ограничениями, можно, например, из книги [17].
При р - со рассматриваемая норма ошибки равна максимальному абсолютному отклонению характеристики от заданной. Минимизация этой нормы соответствует минимаксной аппроксимации (minimax approximation) и дает фильтры с равномерными пульсациями АЧХ (equiripple filter). Для минимаксного синтеза нерекурсивных фильтров используется метод чебышевской аппроксимации с использованием алгоритма многократной замены Ремеза, соответствующий алгоритм расчета применительно к синтезу дискретных фильтров разработан Парксом (Т. W. Parks) и Мак-Клелланом (J. Н. McClellan). Узнать о данном алгоритме подробнее можно, например, из книги [8].
Субоптимальные методы
Как уже говорилось, субоптимальные методы позволяют упростить вычисления за счет учета специфики решаемой задачи. При этом, в частности, может использоваться тот факт, что коэффициенты числителя функции передачи фильтра линейно связаны с его комплексной частотной характеристикой и потому влияют на ее форму значительно слабее, чем коэффициенты знаменателя.
Кроме того, для поиска коэффициентов знаменателя часто используются методы авторегрессионного анализа (см. раздел «Авторегрессионная модель» главы 5).
Вот перечень субоптимальных методов синтеза, реализованных в MATLAB (пакет Signal Processing):
метод, основанный на решении системы уравнений Юла—Уолкера (Yule- Walker) для поиска коэффициентов знаменателя функции передачи фильтра;
метод идентификации частотной характеристики, в котором минимизируется норма разности между числителем функции передачи и произведением желаемой частотной характеристики и знаменателя функции передачи фильтра;
аппроксимация заданной импульсной характеристики с помощью метода экспоненциального оценивания Прони (данный алгоритм был разработан Гаспаром Рише (бароном де Прони) в 1795 г. для подгонки экспоненциальной модели под экспериментальные данные при исследовании физических свойств газов);
метод, основанный на использовании весовых функций (окон). Данный алгоритм будет подробно рассмотрен далее, в разделе «Синтез с использованием окон»;
синтез ФНЧ с косинусоидальным сглаживанием АЧХ является частным случаем использования окон; данный метод также будет подробно рассмотрен далее (см. раздел «Фильтры с косинусоидальным сглаживанием АЧХ»),
Дополнительные сведения о конкретных субоптимальных методах будут приведены далее, при описании соответствующих функций MATLAB.
Субоптимальный синтез нерекурсивных фильтров
В данном разделе будет подробно рассмотрена общая идея синтеза нерекурсивных фильтров с использованием окон, а также частный случай, связанный с применением конкретного окна и приводящий к фильтрам с косинусоидальным сглаживанием АЧХ.
Синтез с использованием окон
Данный метод предназначен для синтеза нерекурсивных фильтров. Идея его очень проста. Прежде всего мы задаем желаемый комплексный коэффициент передачи в виде непрерывной функции, определенной в диапазоне частот от нуля до частоты Найквиста (если синтезируется вещественный фильтр) или до частоты дискретизации (если проектируется комплексный фильтр). Обратное преобразование Фурье этой характеристики, вычисленное с учетом ее периодического характера, даст бесконечную в обе стороны последовательность отсчетов импульсной характеристики. Для получения реализуемого нерекурсивного фильтра заданного порядка эта последовательность усекается — из нее выбирается центральный фрагмент нужной длины.
Простое усечение последовательности отсчетов импульсной характеристики соответствует использованию прямоугольного окна. Из-за усечения первоначально заданная частотная характеристика искажается — она сворачивается со спектром окна. В результате появляются переходные полосы между областями пропускания и задерживания, наблюдаются колебания коэффициента передачи в полосах пропускания, а в полосах задерживания АЧХ приобретает лепестковый характер.
Для ослабления перечисленных эффектов и прежде всего для уменьшения уровня лепестков в полосах задерживания усеченная импульсная характеристика умножается на весовую функцию (окно), плавно спадающую к краям.
Мы уже говорили о весовых функциях применительно к спектральному анализу (см. раздел «Весовые функции» главы 5) и видели, что различные используемые на практике окна имеют разный уровень боковых лепестков. Однако величина боковых лепестков собственного спектра окна не совпадает с величиной лепестков АЧХ фильтра, синтезированного с применением данного окна. Убедимся в этом на простом примере, используя различные окна для синтеза нерекурсивного ФНЧ 32-го порядка с частотой среза, равной 1/4 от частоты Найквиста.
(6.7)(6.7)Прежде всего рассчитываем бесконечную импульсную характеристику. Обратное преобразование Фурье от интересующей нас АЧХ (ФЧХ считаем нулевой) дает следующее:
(6.7)
(6.7)
4 л ^/4
Для получения фильтра 32-го порядка выбираем 33 отсчета этой импульсной характеристики, расположенных симметрично относительно нуля, то есть используем к - -16...16. Выбор симметричного фрагмента бесконечной импульсной характеристики позволяет получить фильтр с линейной ФЧХ и, следовательно, постоянной групповой задержкой, равной (в отсчетах) половине порядка фильтра.
Рис. 6.3. Импульсная характеристика (сверху) и АЧХ (снизу) ФНЧ, синтезированного с использованием прямоугольного окнаРис. 6.3. Импульсная характеристика (сверху) и АЧХ (снизу) ФНЧ, синтезированного с использованием прямоугольного окна
Рис. 6.3. Импульсная характеристика (сверху) и АЧХ (снизу) ФНЧ, синтезированного с использованием прямоугольного окна
Рис. 6.3. Импульсная характеристика (сверху) и АЧХ (снизу) ФНЧ, синтезированного с использованием прямоугольного окна
Урезав импульсную характеристику, мы фактически использовали прямоугольное окно. Построим графики импульсной характеристики полученного фильтра и его АЧХ (рис. 6.3).
» к = (-16:16)';
» Ь - slnc(k/4)/4;
» impz(b)X график импульсной характеристики
» figure
» [h. f] - freqz(b, 1, []. 2);
» plot(f. 20*logl0(abs(h))) % график АЧХ в децибелах
» ylim([-50 10])
» grid on
Из графика АЧХ видно, что уровень боковых лепестков составляет -21 дБ, а их ширина равна 1/32 от частоты дискретизации.
Рис. 6.4. Импульсная характеристика (сверху) и АЧХ (снизу) ФНЧ, синтезированного с использованием окна Хэмминга
Теперь воспользуемся какой-либо весовой функцией, например окном Хэмминга, которое используется по умолчанию при синтезе фильтров данным методом в MATLAB (функции f 1 rl и fir2). Результаты показаны на рис. 6.4.
» Ы = b .* hamming(33);
» impz(bl)Я график импульсной характеристики
» figure
» [hl, f] = freqz(bl. 1. []. 2):
» plot(f, 20*1oglO(abs(hl))) % график АЧХ в децибелах
, » ylim([-80 10])
' » grid on-
Как видите, уровень лепестков в полосе задерживания упал примерно до -52 дБ за счет некоторого расширения полосы пропускания.
Сведения об уровне лепестков, достигаемом при синтезе ФНЧ с использованием разных окон, сведены в табл. 6.1. Результаты получены с помощью MATLAB при синтезе фильтра 256-го порядка с частотой среза, равной 1/4 от частоты Найквиста. Уровень лепестков в некоторой степени зависит от порядка фильтра и его частоты среза, поэтому данные, приводимые в различных литературных источниках, могут несколько различаться. Этот эффект мы только что наблюдали: АЧХ, приведенная на рис. 6.4, имеет уровень боковых лепестков -52 дБ (фильтр 32-го порядка), а в табл. 6.1 для окна Хэмминга указана величина -53,6 дБ (фильтр 256-го порядка).
Таблица 6.1. Уровень боковых лепестков при синтезе ФНЧ с окнами разного типа
Тип окна
Уровень боковых лепестков, дБ
Прямоугольное
-21,0’
Треугольное '
-26,5
Бартлетта
-26,5
Ханна
-44,0
Хэмминга
-53,6
Блэкмена
-75,3
Кайзера при 0 = 4
-45,2
Кайзера при 0 = 9
-90,5
Чебышева при 0 = 40 дБ
-51,0
Чебышева при 0 = 60 дБ
-71,6
Чебышева при 0 = 80 дБ
-92,4
В случае окон Кайзера и Чебышева результаты зависят от дополнительных параметров этих окон. Для окна Кайзера есть эмпирическая формула, связываю-
щая параметр р с уровнем подавления боковых лепестков а (в децибелах) при синтезе ФНЧ (см., например, документацию пакета Signal Processing):
О,О,а < 21,
О,
О,
Р =Р =О,5842(а-21)04 +0,07886(а-21), 21 £ а 5 50,О,5842(а-21)04 +0,07886(а-21), 21 £ а 5 50,(6.8)(6.8)
Р =
Р =
О,5842(а-21)04 +0,07886(а-21), 21 £ а 5 50,
О,5842(а-21)04 +0,07886(а-21), 21 £ а 5 50,
(6.8)
(6.8)
а > 50.а > 50.0,1102 (а-8,7),
а > 50.
а > 50.
Из табл. 6.1 видно, что использование весовых функций позволяет достигнуть подавления боковых лепестков, превышающего 90 дБ. Однако следует помнить о том, что уменьшение уровня боковых лепестков неизбежно приводит к расширению переходной зоны между полосами пропускания и задерживания. Поэтому выбирать весовую функцию следует исходя из требований, предъявляемых к параметрам фильтра.
Фильтры с косинусоидальным сглаживанием АЧХ
Строго говоря, расчет фильтров с косинусоидальным сглаживанием АЧХ следует отнести к категории методов, основанных на весовых функциях. Однако мы рассматриваем эти фильтры отдельно по следующим двум причинам. Во-первых, они получили широкое распространение в телекоммуникационных системах (в частности, для формирования спектра при квадратурной манипуляции). Во-вторых, и это главное, данный частный метод удобно рассматривать с несколько иной точки зрения, чем использование окон вообще, а умение видеть различные трактовки одной и той же проблемы является важнейшим качеством современного специалиста в любой области.
Итак, пусть нам необходимо синтезировать ФНЧ с заданной частотой среза. Обсуждая использование окон, мы видели, что обратное преобразование Фурье от идеальной прямоугольной АЧХ дает отсчеты бесконечной в обе стороны импульсной характеристики вида sin(a£)/(a&) (см. формулу (6.7)). Далее было показано, что простое усечение этой бесконечной импульсной характеристики плохо сказывается на АЧХ, поэтому необходимо использовать весовые функции. На сей раз задумаемся, от чего может зависеть степень проявления нежелательных эффектов при усечении бесконечных характеристик. Очевидный ответ — от скорости убывания отсчетов характеристики. Исходный вариант (6.7), соответствующий прямоугольной АЧХ, убывает пропорционально k. Это связано с наличием разрывов (скачков) у АЧХ (см. раздел «Примеры разложения сигналов в ряд Фурье» главы 1. Там идет речь о связи скорости убывания спектра с количеством непрерывных производных у сигнала, но благодаря дуальности прямого и обратного преобразований Фурье те же соотношения выполняются и в другую сторону).
Итак, увеличив скорость затухания импульсной характеристики, можно надеяться, что ее усечение скажется на виде АЧХ не столь катастрофически. Для ускорения затухания необходимо изменить синтезируемую АЧХ так, чтобы она не содержала разрывов. В этом разделе мы рассматриваем косинусоидальное сглаживание, при котором в переходной зоне от полосы пропускания к полосе задер-
живания АЧХ представляет собой половину периода косинуса. Такой фильтр называется фильтром с косинусоидальным сглаживанием АЧХ (raised cosine filter) и для аналогового случая описывается в частотной области следующим образом (рис. 6.5):
ВД =ВД =1 1 . Г л | СО |- со0 Sin - 1!- 2 2(2 асо01 1 . Г л | СО |- со0 Sin - 1!- 2 2(2 асо0о,о,| со | <со0(1-а),соо(1 — а) <| со | < со0(1 + а), | со | > со0(1 + а).| со | <со0(1-а),соо(1 — а) <| со | < со0(1 + а), | со | > со0(1 + а).(6-9)(6-9)Рис. 6.5. АЧХ фильтра с косинусоидальным сглаживаниемРис. 6.5. АЧХ фильтра с косинусоидальным сглаживанием
ВД =
ВД =
1 1 . Г л | СО |- со0 Sin - 1!- 2 2(2 асо0
1 1 . Г л | СО |- со0 Sin - 1!- 2 2(2 асо0
о,
о,
| со | <со0(1-а),
соо(1 — а) <| со | < со0(1 + а), | со | > со0(1 + а).
| со | <со0(1-а),
соо(1 — а) <| со | < со0(1 + а), | со | > со0(1 + а).
(6-9)
(6-9)
Рис. 6.5. АЧХ фильтра с косинусоидальным сглаживанием
Рис. 6.5. АЧХ фильтра с косинусоидальным сглаживанием
Параметр а называется коэффициентом сглаживания (rolloff factor), он равен половине ширины переходной зоны, нормированной к частоте среза. При а - О фильтр превращается в идеальный ФНЧ с прямоугольной АЧХ, при а = 1 АЧХ перестает содержать плоский участок в полосе пропускания.
Чтобы понять, как выглядит импульсная характеристика такого фильтра, заметим, что его АЧХ может быть получена как свертка идеальной прямоугольной АЧХ с функцией в виде половины периода косинуса (рис. 6.6 слева), математически описываемой следующим образом;
W(co) =
2асо0 (2 асо0 / О,
I со | S асо0, | со | > асо0.
Рис. 6.6. Весовая функция косинусоидального сглаживания в частотной (слева) и временной (справа) областях
Такой спектр соответствует временному сигналу
(6.10)(6.10)^0=- Т — f- —.
(6.10)
(6.10)
2л-ащд 2^®о I2t <2аст0Г Г
I Л J
Свертка спектров соответствует перемножению функций времени, так что полученное выражение, по сути дела, описывает весовую функцию. Ее график показан на рис. 6.6 справа.
При аст0Д = ±л/2 формула (6.10) дает неопределенность вида 0/0. Вычисление предела показывает, что значение весовой функции в этих точках равно л/4:
lim w(t) = -.
С->±л/(2ашо)4
С учетом всего сказанного получаем выражение для импульсной характеристики ФНЧ с косинусоидальным сглаживанием АЧХ:
(6.11)(6.11)h(t) = Ю° _£25<^o£L ^(^оО л 1 pacoptY ^t
(6.11)
(6.11)
I л J
Использованный способ сглаживания делает непрерывной не только саму АЧХ, но и ее первую производную, поэтому полученная импульсная характеристика фильтра убывает пропорционально Д3.
Проверим, как будет выглядеть АЧХ дискретного фильтра с косинусоидальным сглаживанием после усечения импульсной характеристики. Пусть частота среза составляет 1/8 от частоты дискретизации (1/4 от частоты Найквиста). Тогда в (6.11) нужно подставить дискретные значения 2л , 2л , t = кТ = — к =к =.
стд 8ст0 4ст0
С учетом этого
2424nkTnkT(ал^) . fnk cos sin —
2
4
2
4
nk
T
nk
T
h(k) = T^.—LlJ-A^
л , fa^Y ™
Будем использовать коэффициент сглаживания a - 0,25 и рассчитаем фильтр 32-го порядка, взяв к в диапазоне -16...16 (рис. 6.7):
» к = -16:16;
» alpha = 0.25:% коэффициент сглаживания
» w - cos(alpha*pi*k/4) ./ (1 - (alpha*k/2),А2);
» wdsinf(w)) = pi/4:% устранение неопределенности
» b = w .* sinc(k/4) / 4:
» 1mpz(b)% график импульсной характеристики
» figure
» [h. f] = freqz(b. 1, []. 2);
» plottf, 20*1oglO(abs(h))) % график АЧХ в децибелах
» у11т([-60 10])
Рис. 6.7. Импульсная (сверху) и частотная (снизу) характеристики дискретного фильтра с косинусоидальным сглаживанием АЧХ
Сравнение рис. 6.7 и 6.3, где были приведены результаты простого усечения импульсной характеристики идеального ФНЧ, показывает, что импульсная характеристика фильтра с косинусоидальным сглаживанием затухает быстрее, а уровень боковых лепестков АЧХ уменьшился более чем на 10 дБ (до -33,3 дБ) без заметного расширения полосы пропускания. Пульсации коэффициента передачи в полосе пропускания в данном случае тоже оказываются слабее.
SQRT-вариант
Фильтры с косинусоидальным сглаживанием АЧХ, как уже говорилось, часто используются в системах связи для формирования спектра сигнала. При этом иногда используется идея «распределения» этого фильтра между передатчиком
и приемником. Тогда на передающей и приемной сторонах используются одинаковые фильтры, АЧХ которых показана на рис. 6.8 и представляет собой квадратный корень из формулы (6.9):
1,1,Х(о) =Х(о) =О,О,Ы <о0(1-а),оэ0 (1 — а) < | со ] < а>0(1 + а), | а> | > а>0(1 + а).Ы <о0(1-а),оэ0 (1 — а) < | со ] < а>0(1 + а), | а> | > а>0(1 + а).Рис. 6.8. АЧХ SQRT-варианта ФНЧ с косинусоидальным сглаживаниемРис. 6.8. АЧХ SQRT-варианта ФНЧ с косинусоидальным сглаживаниемИмпульсная характеристика такого фильтра описывается следующей формулой:Импульсная характеристика такого фильтра описывается следующей формулой:Ц0 =Ц0 =4асо0л2 ~(4аа>0Г)24асо0л2 ~(4аа>0Г)2cos((l + а)а>ог)cos((l + а)а>ог)sin((l-a)coot)>4асоо t/к ,sin((l-a)coot)>4асоо t/к ,(6.12)(6.12)
1,
1,
Х(о) =
Х(о) =
О,
О,
Ы <о0(1-а),
оэ0 (1 — а) < | со ] < а>0(1 + а), | а> | > а>0(1 + а).
Ы <о0(1-а),
оэ0 (1 — а) < | со ] < а>0(1 + а), | а> | > а>0(1 + а).
Рис. 6.8. АЧХ SQRT-варианта ФНЧ с косинусоидальным сглаживанием
Рис. 6.8. АЧХ SQRT-варианта ФНЧ с косинусоидальным сглаживанием
Импульсная характеристика такого фильтра описывается следующей формулой:
Импульсная характеристика такого фильтра описывается следующей формулой:
Ц0 =
Ц0 =
4асо0л2 ~(4аа>0Г)2
4асо0л2 ~(4аа>0Г)2
cos((l + а)а>ог)
cos((l + а)а>ог)
sin((l-a)coot)>
4асоо t/к ,
sin((l-a)coot)>
4асоо t/к ,
(6.12)
(6.12)
Фильтр такого типа называется SQRT-вариантом фильтра с косинусоидальным сглаживанием АЧХ (square root raised cosine filter).
Синтез дискретных фильтров в MATLAB
В MATLAB имеется более двадцати функций синтеза дискретных фильтров. Большая их часть сосредоточена в пакете Signal Processing, три функции расчета конкретных фильтров имеются в пакете Communications, наконец, несколько редко используемых на практике методов добавляет специализированный пакет Filter Design.
Общие сведения о функциях расчета фильтров представлены в табл. 6.2. В столбце «Пакет» используются следующие обозначения:
SP — Signal Processing;
Comm — Communications;
FD — Filter Design.
Кроме перечисленных функций в пакете Signal Processing имеется программа FDATool (Filter Design and Analysis Tool), реализующая графический интерфейс для расчета фильтров и просмотра их характеристик.
Функции, использующие билинейное z-преобразование
В пакете Signal Processing имеется функция bilinear, позволяющая синтезировать дискретный фильтр методом билинейного ^-преобразования по произвольному аналоговому прототипу. Кроме того, имеются готовые функции расчета фильтров Баттерворта, Чебышева первого и второго рода, а также эллиптических фильтров (фильтров Кауэра). Свойства этих аналоговых прототипов были описаны в главе 2, там же были рассмотрены функции MATLAB для расчета аналоговых вариантов данных фильтров. При расчете дискретных фильтров используются те же самые функции, только без последнего параметра * s'; кроме того, частоты среза задаются нормированными к частоте Найквиста. Аналогичное «двойное назначение» имеют и функции выбора порядка фильтра (см. раздел «Выбор порядка фильтра» главы 2).
В принципе сказанного должно быть достаточно, чтобы читатель смог воспользоваться функциями синтеза дискретных фильтров, обратившись к материалу главы 2. Однако, чтобы сосредоточить информацию о синтезе дискретных фильтров в одном месте, кратко повторим синтаксис вызова функций и описание их параметров.
Функции синтеза стандартных фильтров
Функции, о которых здесь пойдет речь, выполняют расчет дискретных ФНЧ, ФВЧ, полосовых и режекторных фильтров по аналоговым прототипам Баттерворта, Чебышева (первого и второго рода) и Кауэра методом билинейного г-преобразо- вания. Требуемая при этом последовательность действий оформлена в виде следующих функций MATLAB:
butter(n, wO, type) — расчет фильтров Баттерворта;
chebyKn, Rp, wO, type) — расчет фильтров Чебышева первого рода;
cheby2(n, Rs, wO, type) — расчет фильтров Чебышева второго рода;
ellip(n, Rp, Rs, wO, type) — расчет эллиптических фильтров (фильтров Кауэра).
Параметры всех функций задаются одинаково, поэтому обсуждать функции по отдельности не будем.
Перечисленные функции позволяют рассчитывать как дискретные, так и аналоговые фильтры. Признаком дискретного расчета служит отсутствие строки ' s' в конце списка входных параметров. Использование этих функций для расчета аналоговых фильтров было рассмотрено в разделе «Расчет аналоговых фильтров» главы 2.
Параметры n, Rp, Rs (их состав зависит от типа фильтра) — это параметры фильтра-прототипа: п — порядок фильтра, Rp — уровень пульсаций АЧХ в полосе пропускания (в децибелах), Rs — уровень пульсаций АЧХ в полосе задерживания (в децибелах). Более подробное описание этих параметров было приведено в разделах главы 2, посвященных фильтрам-прототипам.
Функция
Пакет
Тип фильтра
АЧХ
Метод синтеза
butter
SP
Рекурсивный
Баттерворта
Билинейное ^-преобразование
chebyl
SP
Рекурсивный
Чебышева первого рода
Билинейное ^-преобразование
cheby2
SP
Рекурсивный
Чебышева второго рода
Билинейное ^-преобразование
ellip
SP
Рекурсивный
Кауэра (эллиптическая)
Билинейное ^-преобразование
bilinear
SP
Рекурсивный
Произвольный аналоговый прототип
Билинейное ^-преобразование
impinvar
SP
Рекурсивный
Произвольный аналоговый прототип
Инвариантное преобразование импульсной характеристики
yulewalk
SP
Рекурсивный
Кусочно-линейная
Авторегрессионный метод
invfreqz
SP
Рекурсивный
Произвольная
Минимизация разности между числителем функции передачи и произведением ее знаменателя и желаемой ЧХ
prony
SP
Рекурсивный
Синтез по заданной импульсной характеристике
Экспоненциальная аппроксимация Прони
firl
SP
Нерекурсивный
Многополосная
Обратное преобразование Фурье с использованием окон
fi r2
SP
Нерекурсивный
Кусочно-линейная
Обратное преобразование Фурье с использованием окон
fl r1s
SP
Нерекурсивный
Кусочно-линейная
с переходными полосами
Минимизация среднеквадратической ошибки
fircls
SP
Нерекурсивный
Кусочно-постоянная
Минимизация среднеквадратической ошибки с ограничением максимального отклонения
Функция
Пакет
Тип фильтра
АЧХ
Метод синтеза
firclsl
SP
Нерекурсивный
ФНЧ, ФВЧ
Минимизация среднеквадратической ошибки с ограничением максимального отклонения
f 1rrcos
SP
Нерекурсивный
ФНЧ
Косинусоидальное сглаживание
intfilt
SP
Нерекурсивный
ФНЧ
Минимаксная аппроксимация
remez
SP
Нерекурсивный
Кусочно-линейная с переходными полосами
Минимаксная аппроксимация
cremez
SP
Нерекурсивный (в том числе с нелинейной ФЧХ и комплексными коэффициентами)
Кусочно-линейная
с переходными полосами
Минимаксная аппроксимация
rcosfi r
Comm
Нерекурсивный
ФНЧ
Косинусоидальное сглаживание
rcosilr
Comm
Рекурсивный
ФНЧ
Разложение по сингулярным числам матрицы Ганкеля, заполненной отсчетами импульсной характеристики
hi1 birr
Comm
Рекурсивный
Фильтр Гильберта
Разложение по сингулярным числам матрицы Ганкеля, заполненной отсчетами импульсной характеристики
gremez
ED
Нерекурсивный
Кусочно-линейная
с переходными полосами
Минимаксная аппроксимация
fi rl pnorm
FD
Нерекурсивный
Кусочно-линейная с переходными полосами
Минимизация р-нормы ошибки
1i rgrpdelay
FD
Рекурсивный
Синтез по заданной групповой задержке
Минимизация р-нормы ошибки
ii rlpnorm
FD
Рекурсивный
Кусочно-линейная
с переходными полосами
Минимизация р-нормы ошибки
i 1 rl pnormc
FD
Рекурсивный
Кусочно-л ин ей ная с переходными полосами
Минимизация р-нормы ошибки с ограничением модулей полюсов фильтра
Параметры wO и type используются совместно для задания типа фильтра и значений его частот среза (нормированных к частоте Найквиста):
ФНЧ: wO — скаляр, параметр type отсутствует;
ФВЧ: wO — скаляр, type-'high’;
полосовой фильтр: wO — двухэлементный вектор частот среза [wl w2], параметр type отсутствует;
режекторный фильтр: wO — двухэлементный вектор частот среза [wl w2], type»'stop'.
В зависимости от того, сколько выходных параметров указано при вызове, функции могут возвращать результаты расчета в виде коэффициентов полиномов числителя и знаменателя функции передачи (два выходных параметра), нулей и полюсов (три выходных параметра) либо параметров пространства состояний (четыре выходных параметра):
[а. Ь] =
[z. р. к] = ...
[А. В, С. D] = ...
С учетом всего сказанного перечислим действия, выполняемые функциями при расчете дискретных фильтров:
Производится расчет фильтра-прототипа с заданными параметрами АЧХ.
Полученные нули и полюсы преобразуются в параметры пространства состояний.
Производится преобразование фильтра-прототипа к требуемому типу с заданными частотами среза (частоты среза при этом корректируются по формуле (6-3)).
С помощью функции bilinear аналоговый фильтр преобразуется в дискретный.
Выполняется преобразование описания фильтра к виду, заданному при вызове функции.
Функции выбора порядка фильтров
Рассмотренные выше функции расчета фильтров требуют задания в качестве входных параметров порядка фильтра и его частоты среза. При этом понятие частоты среза для фильтров разных типов определяется по-разному. Однако исходными данными при разработке фильтров, как правило, являются другие параметры: частотные границы полос пропускания и задерживания, а также допустимая неравномерность АЧХ в полосе пропускания и минимально необходимое затухание в полосе задерживания (см. рис. 2.12 в разделе «Выбор порядка фильтра» главы 2).
Выбрать минимально необходимый порядок фильтра позволяют следующие однотипные функции пакета Signal Processing:
[n. Wn] = buttord(Wp, Ws, Rp, Rs)
[n, Wn] = cheblord(Wp. Ws, Rp, Rs)
[n. Wn] ■ cheb2ord(Wp, Ws. Rp, Rs)
[n. Wn] ■ el!1pord(Wp, Ws, Rp, Rs)
ЗАМЕЧАНИЕ ;
Данные функции позволяют выбирать порядок как для дискретных, так и для аналоговых фильтров. Признаком дискретного расчета является отсутствие строки 's' в конце списка входных параметров. Использование этих функций для определения требуемого порядка аналоговых фильтров обсуждалось в разделе «Выбор порядка фильтра» главы 2.
Входной параметр Rp — допустимый уровень пульсаций в полосе пропускания (в децибелах), Rs — минимально необходимое затухание в полосе задерживания (в децибелах). Параметры Wp и Ws задают границы полос пропускания и задерживания (нормированные к частоте Найквиста), способ задания этих параметров зависит от типа проектируемого фильтра:
ФНЧ: Wp и Ws — числа, при этом должно выполняться неравенство Wp < Ws;
ФВЧ: Wp и Ws — числа, при этом должно выполняться неравенство Wp > Ws;
полосовой фильтр: Wp и Ws — двухэлементные векторы, при этом должны выполняться неравенства Ws(l) < Wp(l) < Wp(2) < Ws(2);
режекторный фильтр: Wp и Ws — двухэлементные векторы, при этом должны выполняться неравенства Wp(l) < Ws(l) < Ws(2) < Wp(2).
Выходными параметрами являются минимально необходимый для выполнения заданных требований порядок фильтра п и частота среза фильтра Wn (нормированная к частоте Найквиста). Эти параметры должны затем использоваться при вызове функции расчета фильтра. Возврат значения Wn избавляет пользователя от забот, связанных с тем, что при расчете разных фильтров понятие частоты среза имеет разный смысл.
Поскольку порядок фильтра — величина целочисленная, то обычно оказывается, что фильтр минимально необходимого порядка обеспечивает некоторый запас по исходным параметрам. Функции выбора порядка фильтра при дискретном варианте расчета используют этот запас точно так же, как в аналоговом случае (см. раздел «Выбор порядка фильтра» главы 2): для фильтров Баттерворта и Чебышева первого рода будет увеличиваться затухание в полосе задерживания, для фильтров Чебышева второго рода — уменьшаться пульсации в полосе пропускания, а для эллиптических фильтров — расширяться полоса задерживания.
В качестве примера зададим очень жесткие требования к АЧХ фильтра нижних частот — узкую переходную полосу, малые пульсации в полосе пропускания и большое затухание в полосе задерживания — и посмотрим, каким окажется минимальный порядок для фильтров четырех стандартных типов:
» Wp-0.2:Xконец полосы пропускания
» Ws-0.21:Xначало полосы задерживания
» Rp-1:Xпульсации АЧХ в полосе пропускания(дБ)
» Rs-60:Xзатухание в полосе задерживания(дБ)
» [п. Wn] - buttord(Wp, Ws, Rp, Rs) n -
145
Wn -
0.2009
» [n, Wn] - cheblorcKWp, Ws. Rp, Rs)
n -
26
Wn -
0.2000
» [n. Wn] - cheb2ord(Wp, Ws, Rp, Rs)
n -
26
Wn ■
0.2095
» [n, Wn] - ell1pord(Wp, Ws, Rp. Rs) n -
10
Wn =
0.2000
Результаты показывают, что для фильтра Баттерворта требуется очень большой порядок, порядок фильтров Чебышева обоих типов более чем в пять раз меньше и, наконец, минимальный порядок требуется при синтезе эллиптического фильтра.
Функция bilinear
Функция bilinear предназначена для синтеза дискретных фильтров по произвольным аналоговым прототипам методом билинейного 2-преобразования. Она может преобразовывать заданные различными способами аналоговые описания систем в дискретные и поэтому имеет три варианта синтаксиса:
[bz, az] - bilinear(b. a, Fs, Fp)
[zz. pz, kz] - bilinear(z, p. k. Fs. Fp)
[Az. Bz, Cz, Dz] = bilinear(A, В, C, D, Fs, Fp)
Здесь b и a — коэффициенты полиномов числителя и знаменателя функции передачи аналогового прототипа, z, р и к — нули, полюсы и коэффициент усиления аналогового прототипа, А, В, С и D — параметры пространства состояний для аналогового прототипа. Аналогичные идентификаторы с буквой z в конце обозначают соответствующие параметры синтезированной дискретной системы.
Функция различает способы задания описания аналогового прототипа по размеру переданных параметров. Если два первых входных параметра — векторы-строки, они считаются коэффициентами полиномов числителя и знаменателя функции передачи. Если два первых входных параметра — векторы-столбцы, они считаются нулями и полюсами функции передачи. Если первый входной параметр — матрица, значит, аналоговый прототип задан в пространстве состояний.
ВНИМАНИЕ
Аналоговый прототип при использовании функции bilinear должен быть физически реализуемым, то есть степень полинома числителя функции передачи не должна превышать степень полинома ее знаменателя.
Параметр Fs задает частоту дискретизации в герцах. Последний входной параметр — Ер — является необязательным. При его отсутствии билинейное г-преоб- разование выполняется по формуле (6.1), а трансформация частотной оси описывается соотношением (6.2) (см. ранее в этой главе раздел «Метод билинейного z-преобразования»).
Если при вызове использован параметр Ер, то он задает частоту (в герцах), на которой комплексные коэффициенты передачи аналоговой и дискретной систем будут совпадать. Для этого производится предварительное масштабирование частотной оси в s-области, в результате чего используемая при билинейном г-преобразовании подстановка принимает вид
ss2F.2F.1-Z-*1 + 2"1 ‘1-Z-*1 + 2"1 ‘
s
s
2F.
2F.
1-Z-*
1 + 2"1 ‘
1-Z-*
1 + 2"1 ‘
Трансформация частотной оси при этом выглядит следующим образом:
FI f= —arctg ^tg71ИрFI f= —arctg ^tg71Ир
FI f
= —arctg ^tg
71Ир
FI f
= —arctg ^tg
71Ир
то есть комплексный коэффициент передачи аналоговой системы на частоте /а будет совпадать с комплексным коэффициентом передачи дискретной системы на частоте /д. Из формул видно, что если /а - Fp, то и /д - Fp. На низких частотах /а и /д связаны приблизительно линейно:
л
/а * Л —ТАИ ПРИ ^ ^ Fp ‘
tg
F
Функция impinvar
Функция impinvar предназначена для синтеза дискретных фильтров по произвольным аналоговым прототипам методом инвариантной импульсной характеристики. Синтаксис вызова функции следующий:
[bz, az] = 1mp1nvar(b. a. Fs, to])
Входные параметры b и а — коэффициенты числителя и знаменателя функции передачи аналогового прототипа, Fs — частота дискретизации (по умолчанию ее значение равно 1 Гц).
Параметр tol задает относительный порог обнаружения кратных полюсов, Два близко расположенных полюса считаются совпадающими, если расстояние между ними, деленное на больший из их модулей, меньше tol.
Выходные параметры bz и az — коэффициенты числителя и знаменателя функции передачи для синтезированного дискретного фильтра.
В соответствии с теорией, изложенной ранее в этой главе в разделе «Метод инвариантной импульсной характеристики», функция 1mp1 nvar при синтезе фильтра производит следующие действия:
Функция передачи аналогового прототипа представляется в виде суммы простых дробей.
Найденные полюсы р трансформируются в exp(p/Fs).
Функция передачи из суммы простейших дробей преобразуется обратно в дробно-рациональный вид.
Функции прямого синтеза рекурсивных фильтров
В этом разделе будут рассмотрены функции yulewalk, invfreqz и prony, реализующие алгоритмы прямого синтеза рекурсивных фильтров, перечисленные ранее в разделе «Субоптимальные методы».
Функция yulewalk
Функция yulewalk предназначена для синтеза рекурсивных фильтров по заданной кусочно-линейной АЧХ. При этом производится минимизация среднеквадратической ошибки во временной области. Синтаксис вызова функции следующий:
[b, а] - yu1ewalk(n, f, m)
Здесь n — порядок рассчитываемого фильтра (возвращаемые векторы Ь и а будут иметь длину и + 1).
Параметры Гит должны быть векторами одинаковой длины, они совместно определяют желаемую АЧХ синтезируемого фильтра. Вектор Г содержит значения частот, нормированные к частоте Найквиста, а вектор m — соответствующие этим частотам значения АЧХ. В промежутках между заданными точками АЧХ интерполируется по линейному закону. Частоты в векторе Г должны образовывать неубывающую последовательность, кроме того, должны выполняться равенства Г(1) - 0 и f(end) - 1. Вывести график синтезируемой АЧХ можно командой plot(f, m).
ВНИМАНИЕ
Частоты в векторе f могут дублироваться, что дает возможность задать скачкообразное изменение АЧХ. Однако задавать такие скачки при синтезе рекурсивных фильтров не рекомендуется.
Результатами работы функции являются векторы Ь и а коэффициентов полиномов числителя и знаменателя функции передачи рекурсивного фильтра. Длина этих векторов равна и + 1.
Расчет фильтра выполняется следующим образом. Сначала определяется полином знаменателя, при этом числитель функции передачи считается равным единице и задача оптимизации сводится к решению модифицированной системы уравнений Юла—Уолкера (отсчеты корреляционной функции определяются путем обратного ДПФ от квадрата модуля АЧХ). Затем оптимизируется полином числителя, чтобы улучшить приближение к заданным характеристикам.
Функция Invfreqz
Функция Invfreqz, как следует из ее названия, является обратной по отношению к функции freqz (см. раздел «Расчет частотной характеристики» главы 4). Это значит, что она позволяет получить коэффициенты полиномов числителя и знаменателя функции передачи рекурсивного дискретного фильтра по значениям его комплексного коэффициента передачи. Таким образом, функция invfreqz может использоваться для синтеза рекурсивных фильтров, причем, в отличие от многих других функций синтеза, здесь в качестве желаемого результата задается не АЧХ, а комплексная частотная характеристика (то есть АЧХ вместе с ФЧХ). Синтаксис вызова функции следующий:
[b, а] - 1nvfreqz(h, w, nb. па, wt, iter, to!, 'trace')
Здесь w — вектор частот, ah — вектор соответствующих им значений комплексного коэффициента передачи. Параметры w и h должны быть векторами одинаковой длины. Частоты в векторе w должны лежать в диапазоне от 0 до л, значение л соответствует частоте Найквиста.
ВНИМАНИЕ
Нормировка частот, используемая в функции invfreqz, отличается от варианта, принятого почти во всех других функциях обработки сигналов, поэтому стоит повторить еще раз: частота Найквиста в данном случае равна л, а не единице.
Частотная характеристика синтезируемого фильтра сравнивается с заданной только в указанных дискретных частотных точках; никакой интерполяции не производится.
При указанном выше способе вызова частотная характеристика считается симметричной и рассчитывается фильтр с вещественными коэффициентами. Чтобы синтезировать фильтр с комплексными коэффициентами, необходимо после параметра w поставить дополнительный параметр в виде строки 'complex':
[b, а] - 1nvfreqz(h, w, 'complex'. ...)
В этом случае элементы вектора w могут лежать в диапазоне от -л до л.
Параметры nb и па задают степени полиномов числителя и знаменателя функции передачи фильтра.
Остальные параметры функции являются необязательными и имеют значения по умолчанию. Вектор wt должен иметь такой же размер, как векторы h и w,
Он задает весовые коэффициенты для расчета ошибки. По умолчанию все частотные точки имеют одинаковый вес.
Оставшиеся три входных параметра имеют отношение лишь к одному из двух возможных алгоритмов расчета, так что само их наличие или отсутствие управляет выбором алгоритма.■
Если параметры Iter, tol и 'trace' отсутствуют, то функция минимизирует ошибку, рассчитываемую следующим образом: .
e = ^wt(A)|A(A)A(ey(A))-B(iy(^))| .(6.13)
Здесь N — количество элементов в векторах w, h и wt, а А(к0)) и B(w(k")) — спектры векторов, составленных из коэффициентов полиномов числителя и знаменателя функции передачи фильтра, вычисленные на А-й частоте из вектора w:
А(ю(А)) = ^а^е^""'^» К™^ = ЗДК1”(6.14)
п-1п»1
Подстановка (6.14) в (6.13) и приравнивание к нулю частных производных по 6(и) и а(п) дает систему линейных уравнений относительно коэффициентов фильтра. Эта система решается соответствующими средствами MATLAB (оператор \). Разумеется, критерий (6.13) не минимизирует отклонение частотной характеристики фильтра от заданной. Однако он приводит к несложной задаче решения системы линейных уравнений и дает точное решение, если векторы h и w действительно описывают фильтр, имеющий nb нулей и па полюсов.
Другой алгоритм — это «честный» поиск фильтра, дающего минимальную взвешенную квадратическую ошибку воспроизведения заданной частотной характеристики. Минимизируемая ошибка рассчитывается при этом следующим образом:
22ее= £wt(6) Цк')-^—— •ыА^= £wt(6) Цк')-^—— •ыА^(6.15)(6.15)
2
2
е
е
= £wt(6) Цк')-^—— •ыА^
= £wt(6) Цк')-^—— •ыА^
(6.15)
(6.15)
В данном случае дифференцирование критерия е по коэффициентам фильтра дает систему нелинейных уравнений, поэтому найти аналитическое решение не удается и оптимизация производится численным итерационным методом.
Признаком расчета по второму алгоритму является наличие входного параметра iter, задающего число итераций. Необходимое количество итераций зависит от параметров синтезируемого фильтра. Можно начать со значения 20, увеличивая его, если заданная точность не будет достигнута.
Параметр tol задает критерий остановки итерационного алгоритма. Если величина нормы градиента целевой функции (6.15) становится меньше tol, решение считается найденным. По умолчанию значение tol равно 0,01.
Наконец, при указании параметра 'trace' функция выводит информацию о ходе итерационной оптимизации.
Результатом работы функции являются векторы b и а коэффициентов полиномов числителя и знаменателя функции передачи синтезированного рекурсивного фильтра. Размеры этих векторов составляют nb + 1 и па + 1 соответственно.
Функция ргопу
Функция ргопу позволяет синтезировать рекурсивный фильтр по заданной импульсной характеристике. Синтаксис вызова функции следующий:
[b, а] ■ prony(h, nb, па)
Здесь h — вектор отсчетов синтезируемой импульсной характеристики, nb и па — порядки полиномов числителя и знаменателя функции передачи рекурсивного фильтра соответственно.
Возвращаемые результаты — векторы b и а коэффициентов полиномов числителя и знаменателя функции передачи синтезированного рекурсивного фильтра. Длина вектора b равна nb+1, длина вектора а — па+1.
Расчет фильтра производится следующим образом. Сначала определяется знаменатель функции передачи с помощью ковариационного метода анализа авторегрессионных моделей. Затем находится такой полином числителя, чтобы первые nb+1 отсчетов импульсной характеристики получившегося фильтра в точности совпадали с соответствующим фрагментом вектора h. Устойчивость рассчитанного фильтра не гарантируется, однако данный метод может дать точные результаты, если отсчеты в векторе h действительно представляют собой начало импульсной характеристики рекурсивного фильтра с числителем и знаменателем порядков nb и па.
В качестве примера попытаемся синтезировать рекурсивный фильтр 5-го порядка с конечной импульсной характеристикой треугольного вида. Чтобы уменьшить «хвост* после окончания заданного фрагмента, дополним задаваемую импульсную характеристику некоторым количеством нулей. Результат синтеза (импульсная характеристика полученного фильтра) показан на рис. 6.9.
» h - [1 2 3 4 5 4 3 2 1 zerosCl. 9)];
» [b, а] - prony(h, 5, 5): » impz(b, a)
5
4
3
2
1
0
-1
Рис. 6.9. Результаты аппроксимации треугольной импульсной характеристикив рекурсивном виде с помощью функции ргопу
Из графика видно, что результаты получены весьма неплохие — затухающий «хвост» оказался небольшим.
ЗАМЕЧАНИЕ
Если при вызове функции ргопу указать порядок числителя, на единицу меньший числа ненулевых отсчетов заданной импульсной характеристики (в нашем примере — 8) или превышающий это значение, будет синтезирован нерекурсивный фильтр, точно воспроизводящий заданную импульсную характеристику.
Функции синтеза с использованием окон
Общая идея синтеза нерекурсивных фильтров с использованием окон была рассмотрена ранее, в разделе «Субоптимальный синтез нерекурсивных фильтров». В пакете Signal Processing имеется две функции, реализующие данный метод. Различия между ними состоят в типе аппроксимируемой АЧХ — функция f1rl предназначена для синтеза многополосных фильтров, АЧХ которых в заданных частотных точках скачкообразно меняется, принимая значения 0 или 1, а функция f1r2 допускает задание произвольной кусочно-линейной АЧХ. Кроме того, в том же пакете Signal Processing имеется функция kaiserord, предназначенная для выбора порядка фильтра, который при синтезе с применением окна Кайзера будет удовлетворять заданным требованиям.
Функция fir1
Функция f1rl позволяет рассчитывать нерекурсивные полосно-пропускающие фильтры с линейной ФЧХ, в том числе многополосные (multiband), методом обратного преобразования Фурье с использованием окон. Синтаксис вызова функции следующий:
b - firKn. Wn, 'ftype', window, 'normalization')
Здесь n — порядок рассчитываемого фильтра (его импульсная характеристика будет содержать и + 1 ненулевых отсчетов).
Параметры Wn и 'ftype' (который может отсутствовать) совместно определяют тип синтезируемого фильтра и его частоту (частоты) среза. Частоты среза задаются нормированными к частоте Найквиста (то есть их значения должны лежать в диапазоне 0...1, величина 1 соответствует половине частоты дискретизации). Значения этих параметров зависят от типа фильтра:
ФНЧ: Wn — частота среза, параметр 'ftype' отсутствует;
ФВЧ: Wn — частота среза, 'ftype' - 'high';
полосовой фильтр: Wn - [wl w2], где wl и w2 — границы полосы пропускания, параметр 'ftype' отсутствует;
режекторный фильтр: Wn - [wl w2], где wl и w2 — границы полосы задерживания, 'ftype' - 'stop';
многополосный фильтр, пропускающий низкие частоты: Wn - [wl w2 ... wn], где w1 — границы полос пропускания, упорядоченные по возрастанию, ' ftype' - - ' DC- Г. Такой фильтр будет иметь полосы пропускания O...wl, w2...w3 и т. д.;
многополосный фильтр, задерживающий низкие частоты: Wn = [wl w2 ... wn], где wi — границы полос пропускания, упорядоченные по возрастанию, 'ftype' - = 'DC-О'. Такой фильтр будет иметь полосы пропускания wl...w2, w3...w4 и т. д.
ЗАМЕЧАНИЕ
Обозначения 'DC-О' и 'DC-Г расшифровываются следующим образом: DC обозначает постоянный ток (direct current), то есть нулевую частоту, а 0 или 1 — коэффициент передачи синтезируемого фильтра на нулевой частоте.
Для ФВЧ и режекторных фильтров, а также многополосных фильтров с ненулевым коэффициентом передачи на частоте Найквиста возможен только четный порядок. Если задать нечетное п, будет рассчитан фильтр на единицу большего порядка.
Параметр window задает используемое при синтезе окно. Это должен быть вектор- столбец, содержащий п + 1 элементов. По умолчанию используется окно Хэмминга, рассчитываемое путем вызова функции hamming(n+l).
Строковый параметр 'normalization' управляет нормировкой (масштабированием) рассчитанной импульсной характеристики фильтра. По умолчанию используется значение 'scale', при котором импульсная характеристика нормируется так, чтобы обеспечить единичное значение (0 дБ) коэффициента передачи в центре полосы пропускания (для многополосных фильтров — в центре самой низкочастотной полосы пропускания). Второе возможное значение параметра — ’noscale', в этом случае нормировка не производится.
Результатом работы функции является вектор b коэффициентов нерекурсивного фильтра. Рассчитанный фильтр имеет линейную ФЧХ и вносит групповую задержку, независимо от частоты равную и/2 отсчетов. Расчет фильтра выполняется следующим образом: обратное преобразование Фурье от заданной идеальной АЧХ дает бесконечный набор отсчетов импульсной характеристики. Этот набор симметрично усекается до и + 1 отсчетов и для ослабления эффектов усечения умножается на используемое окно. Если задана нормировка, определяется модуль коэффициента передачи получившегося фильтра в центре полосы пропускания, и коэффициенты фильтра делятся на это значение.
Функция fir2
Функция fir2, так же как и firl, предназначена для синтеза нерекурсивных фильтров с линейной ФЧХ методом обратного преобразования Фурье с использованием окон. Отличие заключается в том, что при синтезе можно задать произвольную кусочно-линейную АЧХ. Синтаксис вызова функций следующий:
b = f1r2(n. f, m, Npt, lap. window)
Здесь n — порядок рассчитываемого фильтра (его импульсная характеристика будет содержать и + 1 ненулевых отсчетов).
Параметры f и m должны быть векторами одинаковой длины, они совместно определяют желаемую АЧХ синтезируемого фильтра. Вектор f содержит значения частот, нормированные к частоте Найквиста, а вектор m — соответствующие этим частотам значения АЧХ. В промежутках между заданными точками АЧХ интер-
полируется по линейному закону. Частоты в векторе f должны образовывать неубывающую последовательность, кроме того, должны выполняться равенства f(l) = 0 и f (end) = 1. Частоты могут дублироваться, что дает возможность задать скачкообразное изменение АЧХ. Вывести график синтезируемой АЧХ можно командой plot(f, m).
Для фильтров, коэффициент передачи которых на частоте Найквиста не равен нулю, возможен только четный порядок. Если задать нечетное п, будет рассчитан фильтр на единицу большего порядка.
Остальные параметры функции являются необязательными. Параметр Npt задает число точек, используемое при интерполяции заданной АЧХ. По умолчанию его значение равно 512.
Параметр 1 ар задает ширину переходных эон вокруг скачков. При интерполяции АЧХ в этих зонах вместо скачка будет сформирован линейный переход. Ширина зон измеряется в точках интерполяции и по умолчанию равна 25.
Параметр window задает используемое при синтезе окно. Это должен быть вектор- столбец, содержащий и + 1 элементов. По умолчанию используется окно Хэмминга, рассчитываемое путем вызова функции hamming (п+1).
Результатом работы функции является вектор b коэффициентов нерекурсивного фильтра. Рассчитанный фильтр имеет линейную ФЧХ и вносит групповую задержку, независимо от частоты равную и/2 отсчетов. Расчет фильтра выполняется следующим образом: заданная АЧХ кусочно-линейно интерполируется на равномерную сетку из Npt точек, обратное ДПФ дает импульсную характеристику, она симметрично усекается до и + 1 отсчетов и для ослабления эффектов усечения умножается на используемое окно.
ЗАМЕЧАНИЕ
Число точек интерполяции должно быть не меньше длины синтезируемого фильтра. Поэтому при расчете фильтров порядка 512 и более значение параметра Npt, принятое по умолчанию, оказывается недостаточным и его необходимо задать явно.
Функция kaiserord
Функция kaiserord предназначена для определения порядка фильтра, удовлетворяющего заданным требованиям, при синтезе функцией firl с использованием окна Кайзера. Функция имеет два варианта синтаксиса:
[n. wn. beta, ftype] = kaiserord(f. a. dev. Fs) c - kaiserord(f, a’ dev. Fs. 'cell')
Во втором варианте синтаксиса возвращаемый массив ячеек с содержит полный набор параметров для вызова функции f 1 rl.
Параметры f и а совместно задают кусочно-постоянную АЧХ. В векторе f должна содержаться возрастающая последовательность значений частот. Вектор а задает постоянные значения АЧХ для полос, ограниченных парами частот из вектора f, при этом первая полоса начинается от нулевой частоты, а последняя заканчивается на частоте Найквиста:
□ в полосе от нуля до f(l) АЧХ равна а(1);
□ в полосе от f(l) до f(2) АЧХ не определена;
□ в полосе от f (2) до f(3) АЧХ равна а(2);
в полосе от f(3) до f(4) АЧХ не определена;
так продолжается до конца векторов f и а;
в полосе от f(end-l) до f(end) АЧХ не определена;
в полосе от f(end) до Fs/2 АЧХ равна a (end).
Таким образом, длина вектора f должна быть равна length(a)*2-2.
Поскольку функция формирует исходные данные для функции f 1 rl, в векторе а могут содержаться только значения 0 и 1.
Параметр dev должен быть вектором той же длины, что и а, содержащим вещественные положительные числа. Он задает максимально допустимую ошибку воспроизведения кусочно-постоянной АЧХ для отдельных частотных полос. Ошибка задается как абсолютная погрешность АЧХ.
Параметр Fs задает частоту дискретизации и является необязательным. При его использовании следует указывать в векторе f не нормированные, а исходные значения частот в тех же единицах, что и Fs. По умолчанию частота дискретизации считается равной двум, так что частота Найквиста равна единице.
Результатами работы функции являются порядок фильтра п, вектор нормированных частот среза wn, параметр окна Кайзера beta и указатель типа фильтра ftype. Эти параметры затем должны использоваться при вызове функции firl следующим образом:
b = firl(n, wn, kaiser(n+l, beta), ftype, 'noscale')
Если использован второй вариант вызова функции kaiserord, вызывать функцию firl следует так:
b - firl(c(l}, с{2}, с{3}. с{4}. с{5})
Функция kaiserord использует эмпирические формулы для расчета параметров. Так, параметр окна Кайзера beta определяется по формуле (6.8) (см. ранее в этой главе раздел «Синтез с использованием окон»). Порядок фильтра п оценивается по следующей формуле:
а-7,95 п =:—.
2,285 Дю
Здесь а — степень подавления боковых лепестков АЧХ в децибелах, а До — нормированная ширина самой узкой переходной полосы с неопределенной АЧХ.
Функция основана на простых прикидочных формулах и поэтому может давать неточные результаты, особенно если в заданной АЧХ имеются частоты среза, близкие к нулю или частоте Найквиста, или если задано слишком слабое подавление боковых лепестков (в векторе dev есть элементы, превышающие 0,1). Поэтому после синтеза фильтра функцией fi rl следует проверить его АЧХ с помощью функции f reqz и при необходимости попробовать точнее подобрать порядок фильтра вручную.
Функции расчета ФНЧ с косинусоидальным сглаживанием
Функции для расчета ФНЧ с косинусоидальным сглаживанием АЧХ имеются в двух пакетах расширения MATLAB — Signal Processing (функция firrcos) и Communications (функция rcosine и две вызываемые ею функции более низкого уровня rcosfir и rcosiir). Сравнивая их, следует отметить, что функция firrcos из пакета Signal Processing имеет более общий характер, тогда как функции пакета Communications приспособлены для решения конкретной задачи — интерполяции сигнала с целью формирования спектра при квадратурной манипуляции. Этим обусловлен ряд ограничений на параметры фильтра (на каждый лёпесток импульсной характеристики должно приходиться целое число интервалов дискретизации, на длине нерекурсивного фильтра должно укладываться целое число лепестков и т. п.). В функции firrcos ограничения такого рода отсутствуют. Зато пакет Communications дает возможность аппроксимировать данный фильтр в рекурсивном виде (функция rcosiir).
Еще одно различие между функцией firrcos и функциями rcosfir и rcosiir заключается в используемой нормировке. Функция firrcos рассчитывает фильтр, коэффициент передачи которого в полосе пропускания равен единице, а функции пакета Communications делают равной единице высоту пика импульсной характеристики.
Подводя итог, скажем, что выбор функции для расчета фильтра в конкретной ситуации следует производить из соображений удобства задания параметров.
А теперь перейдем к описанию конкретных функций.
Функция firrcos
Функция firrcos (пакет Signal Processing) предназначена для расчета нерекурсивного ФНЧ с косинусоидальным сглаживанием АЧХ. Синтаксис ее вызова следующий:
b = firrcos(n, FO, df, Fs, 'transition', 'type', delay, window),
Здесь n — порядок рассчитываемого фильтра (его импульсная характеристика будет содержать и + 1 ненулевых отсчетов), F0 — частота среза, FS — частота дискретизации (F0 и Fs должны быть заданы в одних и тех же единицах).
Параметр df задает ширину переходной зоны между полосами пропускания и задерживания. Это может делаться двумя способами в зависимости от значения параметра 'transition':'
при 'transition' = 'bandwidth' параметр df задает ширину переходной зоны в единицах частоты (при этом должны выполняться неравенства df < 2*F0 и F0+df/2 < Fs/2). Этот вариант принят по умолчанию;
при 'transition' = 'rolloff' параметр df задает коэффициент сглаживания АЧХ, обозначенный в формулах (6.9) и (6.11) как а. Значение параметра df в этом случае должно лежать в диапазоне 0...1.
Входные параметры, начиная с Fs, являются необязательными и имеют значения по умолчанию, которые используются, если при вызове в качестве параметра
указана пустая матрица ([]) или если несколько последних параметров опущено. Частота дискретизации Fs по умолчанию считается равной двум, так что частота Найквиста равна единице.
Строковый параметр ' type' задает тип синтезируемого фильтра. При принятом по умолчанию варианте 'normal' рассчитывается обычный ФНЧ с косинусоидальным сглаживанием по формуле (6.11). Если 'type' - 'sqrt', рассчитывается SQRT-вариант данного фильтра по формуле (6.12).
Параметр delay задает вносимую фильтром задержку (то есть место расположения пика импульсной характеристики). Задержка измеряется в отсчетах и должна быть целым числом в диапазоне от нуля до п + 1. По умолчанию принято значение floor((n + 1) / 2).
Параметр w1 ndow позволяет использовать при синтезе фильтра дополнительную весовую функцию (см. ранее раздел этой главы «Синтез с использованием окон»). Это должен быть вектор-столбец длиной и + 1. По умолчанию весовая функция не используется (то есть применяется прямоугольное окно).
Результатом работы функции является вектор b коэффициентов нерекурсивного фильтра.
Функция rcosine
Функция rcosine пакета Communications позволяет рассчитывать ФНЧ с косинусоидальным сглаживанием АЧХ в нерекурсивном и рекурсивном виде. Для этого она вызывает две другие функции более низкого уровня — rcosfir и rcosiir, которые мы рассмотрим далее. Синтаксис вызова функции следующий:
[b, а] - rcosine(Fd. Fs, 'type', г. delay, tol)
Обязательными параметрами здесь являются только Fs и Fd. Использованная в этой функции система задания параметров отражает основное назначение данных фильтров, которые в системах связи широко используются для интерполяции сигнала при цифровой модуляции. Параметр Fd — это символьная скорость (то есть частота дискретизации до интерполяции), a Fs — частота дискретизации выходного сигнала. Отношение Fs/Fd должно быть положительным целым числом. Оно равно числу отсчетов, приходящихся на один лепесток импульсной характеристики фильтра.
Остальные входные параметры являются необязательными и имеют значения по умолчанию, которые используются, если при вызове в качестве параметра указана пустая матрица ([]) или если несколько последних параметров опущено.
Строковый параметр 'type' задает тип рассчитываемого фильтра. Возможны следующие варианты:
'default' или 'fir/normal' — рассчитывается нерекурсивный ФНЧ с косинусоидальным сглаживанием. Этот вариант принят по умолчанию;
'11г' или '11r/normal' — рассчитывается рекурсивный ФНЧ, аппроксимирующий АЧХ с косинусоидальным сглаживанием;
'sqrt' или 'fir/sqrt' — рассчитывается SQRT-вариант нерекурсивного ФНЧ с косинусоидальным сглаживанием;
'11 r/sqrt' — рассчитывается SQRT-вариант рекурсивного ФНЧ с косинусоидальным сглаживанием.
Параметр г задает коэффициент сглаживания АЧХ. По умолчанию используется значение 0,5.
Параметр delay задает вносимую фильтром задержку, то есть положение пика импульсной характеристики. Величина задержки измеряется в символьных тактах (то есть в лепестках импульсной характеристики) и должна быть целым положительным числом. По умолчанию задержка равна трем тактам (в секундах — 3/Fd).
Порядок нерекурсивного фильтра определяется требованием линейности ФЧХ и, следовательно, симметрии импульсной характеристики. Таким образом, пик импульсной характеристики должен находиться в ее середине, и длительность импульсной характеристики составляет 2*delay символьных тактов. Порядок фильтра получается равным 2*del ay*Fs/Fd.
В случае рекурсивного фильтра его порядок можно задать явно с помощью параметра tol, указав для него целое положительное значение. Если tol меньше единицы, этот параметр задает относительную погрешность синтеза рекурсивного фильтра, а порядок фильтра при этом выбирается автоматически. По умолчанию используется значение 0,01. При расчете нерекурсивных фильтров параметр tol игнорируется.
Возвращаемыми результатами являются векторы коэффициентов полиномов числителя b и знаменателя а функции передачи рассчитанного фильтра. Если рассчитывался нерекурсивный фильтр, знаменатель а содержит один элемент, равный единице.
Функция rcosfir
Функция rcosfir вызывается функцией rcosine для расчета нерекурсивного фильтра с косинусоидальным сглаживанием АЧХ. Синтаксис вызова функции следующий:
[b, Ts] = rcosf1r(R, n_T, rate. T. 'type')
Здесь R — коэффициент сглаживания АЧХ. Это единственный обязательный параметр функции.
Остальные входные параметры являются необязательными и имеют значения по умолчанию, которые используются, если при вызове в качестве параметра указана пустая матрица ([]) или если несколько последних параметров .опущено.
Параметр п_Т задает протяженность импульсной характеристики и вносимую фильтром задержку. Он может быть числом или двухэлементным вектором. Элементы вектора указывают число символьных тактов до и после пика. Если п_Т — число, оно задает одинаковое количество символьных тактов до и после пика импульсной характеристики. По умолчанию этот параметр равен трем.
Параметр rate задает коэффициент интерполяции, то есть число отсчетов импульсной характеристики, приходящееся на один ее лепесток (с параметрами, используемыми в функции rcosi ne, это соотносится следующим образом: rate = Fs/Fd).
Этот параметр должен быть целым положительным числом. По умолчанию коэффициент интерполяции равен 5.
ЗАМЕЧАНИЕ
Первый элемент вектора П_Т может быть положительным или отрицательным. Его знак не влияет на расчет, а число лепестков импульсной характеристики слева от пика определяется модулем этого элемента.
Параметр Т, по умолчанию равный единице, задает длительность символьного такта (эта величина является обратной по отношению к используемому в функции rcosine параметру Fd). Значение этого параметра не влияет на рассчитываемую импульсную характеристику, от него зависит только возвращаемая величина Is. Строковый параметр 'type' определяет тип рассчитываемого фильтра. По умолчанию используется вариант ' normal', соответствующий обычному косинусоидальному сглаживанию. Чтобы рассчитать SQRT-вариант фильтра, необходимо задать для этого параметра значение ' sqrt'.
Результатами расчета являются вектор коэффициентов импульсной характеристики фильтра b и величина периода дискретизации выходного сигнала фильтра Is. Порядок фильтра равен rate*(n_T(2)+abs(n_T(l))); длина вектора b на единицу больше. Период дискретизации выходного сигнала равен T/rate.
При отсутствии выходных параметров функция выводит графики импульсной характеристики и АЧХ рассчитанного фильтра. При этом с помощью дополнительного строкового параметра 'color' можно задать цвет и тип линии, аналогично тому, как это делается в функции plot (см. раздел «Настройка внешнего вида графиков» приложения А):
rcosfir(R, n_T, rate, Т. 'type', 'color')
Параметр ' col or' обязательно должен быть шестым по счету, так что опускать предыдущие параметры нельзя; для использования значений по умолчанию следует задавать пустые матрицы ([]).
Для расчета фильтра функция rcosf 1 г вызывает функцию f 1 rrcos, предварительно преобразовав значения входных параметров к нужному виду.
Функция rcosiir
Функция rcosl 1 г вызывается функцией rcosi ne для расчета рекурсивного фильтра с косинусоидальным сглаживанием АЧХ. Синтаксис вызова функции следующий:
[b. a, Ts] - rcos11r(R. delay, rate, T, tol, 'type')
Здесь R — коэффициент сглаживания АЧХ. Это единственный обязательный параметр функции.
Остальные входные параметры являются необязательными и имеют значения по умолчанию, которые используются, если при вызове в качестве параметра указана пустая матрица ([]) или если несколько последних параметров опущено.
Параметр del ay задает вносимую фильтром задержку, то есть положение пика импульсной характеристики. Величина задержки измеряется в символьных так-
тах (то есть в лепестках импульсной характеристики) и должна быть целым положительным числом. По умолчанию задержка равна трем тактам (3*Т секунд).
Параметр rate задает коэффициент интерполяции, то есть число отсчетов импульсной характеристики, приходящееся на один ее лепесток (с параметрами, используемыми в функции rcosine, это соотносится следующим образом: rate = Fs/Fd). Этот параметр должен быть целым положительным числом. По умолчанию коэффициент интерполяции равен 5.
Параметр Т, по умолчанию равный единице, задает длительность символьного такта (эта величина является обратной по отношению к используемому в функции rcosine параметру Fd). Значение этого параметра не влияет на рассчитываемую импульсную характеристику, оно используется только при расчете возвращаемой величины Ts и выводе графиков (см. далее).
Параметр tol определяет порядок синтезируемого фильтра. Указав целое положительное число, можно задать порядок фильтра в явном виде. Если в качестве tol указано значение, меньшее единицы, оно задает относительную погрешность аппроксимации. При этом чем меньше tol, тем больше порядок фильтра.
Строковый параметр ' type' определяет тип рассчитываемого фильтра. По умолчанию используется вариант ' normal1, соответствующий обычному косинусоидальному сглаживанию. Чтобы рассчитать SQRT-вариант фильтра, необходимо задать для этого параметра значение ' sqrt'.
Результатами расчета являются векторы коэффициентов полиномов числителя b и знаменателя а функции передачи фильтра, а также величина периода дискретизации выходного сигнала фильтра Ts. Этот период равен T/rate.
При отсутствии выходных параметров функция выводит графики импульсной характеристики и АЧХ рассчитанного фильтра. При этом с помощью дополнительного строкового параметра 'color' можно задать цвет и тип линии, аналогично тому, как это делается в функции plot (см. раздел «Настройка внешнего вида графиков» приложения А):
rcos11r(R, delay, rate. Т, tol, 'type', 'color')
Параметр 'color' обязательно должен быть седьмым по счету, так что опускать предыдущие параметры нельзя; для использования значений по умолчанию следует задавать пустые матрицы ([]).
Полученный в результате расчета рекурсивный фильтр приближенно аппроксимирует импульсную характеристику, соответствующую косинусоидальному сглаживанию АЧХ. Точность аппроксимации возрастает при увеличении вносимой фильтром задержки (параметр delay). ,
Функция расчета рекурсивного фильтра Гильберта
Расчет рекурсивного фильтра, аппроксимирующего преобразование Гильберта, можно выполнить с помощью входящей в состав пакета Communications функции hi 1Ы1 г, имеющей следующий синтаксис вызова:
[num. den] = h1lb11r(ts, dly, bandwidth, tol):
Все входные параметры функции являются необязательными и имеют значения по умолчанию. Параметр ts задает интервал дискретизации входного сигнала фильтра. По умолчанию используется значение 2/7 с.
Параметр dly задает вносимую фильтром групповую задержку. Ее значение должно как минимум в несколько раз превышать величину периода дискретизации ts. Рекомендуется также выбирать соотношение между этими двумя параметрами так, чтобы значение dly было равно полуцелому числу интервалов ts (то есть rem(dly,ts) = ts/2). Например, можно взять ts равным 2*dly/N, где N — положительное нечетное целое число. По умолчанию групповая задержка равна ts*7/2.
Параметр bandwidth задает предполагаемую полосу частот входного сигнала, позволяя функции использовать дополнительный фильтр-компенсатор, чтобы в полосе частот сигнала приблизить коэффициент передачи синтезированного фильтра к идеальному. Если значение bandwidth равно нулю или превосходит l/(2*ts), то компенсатор не используется.
Если параметр tol превышает единицу, он задает порядок рассчитываемого фильтра (по умолчанию — 4). Если tol < 1, значение этого параметра задает допуск, используемый при синтезе фильтра методом разложения по сингулярным числам. По умолчанию этот допуск равен 0,05.
Результатами работы являются векторы коэффициентов числителя num и знаменателя den функции передачи рекурсивного фильтра. Функцию можно вызвать с четырьмя выходными параметрами, тогда будут возвращены параметры фильтра в пространстве состояний:
[А. В. С. D] = hilbiirC..);
При отсутствии выходных параметров функция строит графики импульсных характеристик синтезированного и идеального фильтров Гильберта.
Расчет фильтра производится следующим образом. Сначала рассчитывается импульсная характеристика идеального фильтра Гильберта с заданной групповой задержкой. Затем выполняется аппроксимация этой импульсной характеристики методом разложения соответствующей матрицы Ганкеля по сингулярным числам.
Функции минимизации среднеквадратической ошибки
В пакете Signal Processing имеется три функции, реализующие синтез нерекурсивных фильтров по критерию минимального квадратического отклонения АЧХ от заданной. Функция firls аппроксимирует произвольную кусочно-линейную АЧХ с переходными (незаданными) полосами. Остальные две функции выполняют оптимизацию с ограничением максимального абсолютного отклонения АЧХ от заданной. Функция fi rd s реализует произвольную кусочно-постоянную АЧХ, а функция firclsl предназначена для синтеза ФНЧ и ФВЧ.
Функция firls
Функция f 1 rl s предназначена для синтеза нерекурсивных фильтров с линейной ФЧХ по критерию минимальной среднеквадратической ошибки воспроизведе-
ния заданной АЧХ в заданном наборе частотных полос. При этом ошибка в разных частотных полосах может учитываться с разными весовыми коэффициентами. Синтаксис вызова функции следующий:
b = firls(n, f, a, w, 'ftype')
Здесь п — порядок рассчитываемого фильтра (его импульсная характеристика будет содержать и + 1 ненулевых отсчетов)."
Параметры f и а должны быть векторами одинаковой четной длины, они совместно определяют желаемую АЧХ синтезируемого фильтра. Вектор f содержит значения частот, нормированные к частоте Найквиста, а вектор а — соответствующие этим частотам значения АЧХ. В промежутках между заданными точками АЧХ интерполируется по линейному закону. Частоты в векторе f должны образовывать неубывающую последовательность, однако, в отличие от функций f 1 г2 и yulewalk, ограничений на первый и последний элементы вектора f не накладывается.
Синтезируемая АЧХ определяется с помощью векторов f и а следующим образом:
в полосах частот от/(2А - 1) до/(2&) АЧХ линейно меняется от а(2к - 1) до я(2&). Здесь к — целые числа от единицы до половины длины векторов f и а;
в полосах частот от /(2к) до f(2k + 1) АЧХ считается не заданной и в процессе синтеза может оказаться произвольной..
Вывести график синтезируемой АЧХ можно следующей командой:
» plot(reshape(f.2.1ength(f)/2), reshaped,2,length(a)/2). 'b')
ЗАМЕЧАНИЕ
Если не задать синий цвет линий принудительно с помощью строки Ъ’, отдельные линейные фрагменты будут выводиться разными цветами.
Для фильтров, коэффициент передачи которых на частоте Найквиста не равен нулю, возможен только четный порядок. Если задать нечетное п, будет рассчитан фильтр на единицу большего порядка.
Остальные параметры функции являются необязательными. Параметр w задает весовые коэффициенты для оптимизируемых частотных полос. Этот параметр должен быть вектором, длина которого вдвое меньше, чем длина векторов f и а, и содержать неотрицательные вещественные числа. В тех частотных полосах, которым приписаны большие весовые коэффициенты, будет обеспечена меньшая ошибка воспроизведения заданной АЧХ. По умолчанию все весовые коэффициенты считаются одинаковыми.
При отсутствии параметра 'ftype' производится расчет фильтров с симметричной импульсной характеристикой, для которой Ь(к) = Ь(п + 2 - к). Если использовать параметр ' ftype', становится возможным синтезировать фильтры с антисимметричной импульсной характеристикой, когда Ь(к) = -Ь(п + 2 - к). Данный параметр может принимать одно из двух строковых значений:
' hi 1 bert' — синтезируется фильтр с антисимметричной импульсной характеристикой. Название данного режима объясняется тем, что такую характери-
стику, в частности, должен иметь фильтр, реализующий преобразование Гильберта (см. раздел «Дискретное преобразование Гильберта» главы 4);
’differentiator’ — синтезируется фильтр с антисимметричной импульсной характеристикой и, кроме того, при расчете взвешенной ошибки дополнительно используется весовой множитель I//2. В результате ошибка воспроизведения АЧХ на низких частотах будет намного меньше, чем на высоких. При синтезе дифференцирующего фильтра, АЧХ которого пропорциональна частоте (см. раздел «Свойства преобразования Фурье» главы 1), это означает минимизацию относительной ошибки воспроизведения заданной АЧХ.
Результатом работы функции является вектор b коэффициентов нерекурсивного фильтра. Рассчитанный фильтр имеет линейную ФЧХ и вносит групповую задержку, независимо от частоты равную и/2 отсчетов.
Расчет фильтра производится следующим образом. Минимизация взвешенной среднеквадратической ошибки воспроизведения заданной АЧХ приводит к системе линейных уравнений относительно коэффициентов фильтра. Порядок системы с учетом симметрии коэффициентов составляет примерно и/2. Составленная система решается с помощью оператора левого матричного деления \. В процессе решения возможна выдача предупреждения «Matrix is close to singular or badly scaled» (матрица близка к сингулярной или плохо масштабирована). Это, как правило, означает неудачное сочетание порядка фильтра и заданной АЧХ. Возвращаемые результаты могут быть ненадежными, поэтому необходимо проверить их, рассчитав частотную характеристику с помощью функции freqz (впрочем, это полезно сделать в любом случае).
Рис. 6.10. АЧХ ФНЧ, синтезированного путем минимизации .среднеквадратической ошибки с помощью функции firls
В качестве примера синтезируем данным методом ФНЧ 32-го порядка с нормированной частотой среза, равной 0,2, и началом полосы задерживания на нормированной частоте 0,25. График АЧХ полученного фильтра приведен на рис. 6.10.
» f = [0 0.2 0.25 1]:
» а - [1 1 0 0]:
» b- firls(32, f. а);
» [h, w] = freqz(b):
» plot(w/p1, abs(h)) % график АЧХ
» grid on-
» yllm([0 1.1])
На рисунке хорошо видны проявления эффекта Гиббса, неизбежно возниг го при минимизации среднеквадратической ошибки — амплитуда максимг выбросов АЧХ составляет примерно 0,05. Далее мы синтезируем фильтр ( ми же исходными данными еще несколькими методами, чтобы оценить pi результатов синтеза.
Функция fircls
Функция fircls предназначена для синтеза нерекурсивных фильтров с . ной ФЧХ путем минимизации среднеквадратической ошибки воспроизв! заданной кусочно-постоянной АЧХ с ограничением предельно допустим клонений от нее (constrained least square). Синтаксис вызова функции с; щий:
b = ficrls(n, f. amp. up, lo. 'des1gn_f1ag’)
Здесь n — порядок рассчитываемого фильтра (его импульсная характер; будет содержать п + 1 ненулевых отсчетов).
Векторы f и amp совместно определяют желаемую АЧХ синтезируемого фр Вектор f содержит значения частот, нормированные к частоте Найквист частоты должны образовывать возрастающую последовательность, кром должны выполняться равенства f(1) = 0 и f(end) = 1. Длина вектора amp д быть на единицу меньше, чем длина вектора f. Элементы вектора amp зада сочно-постоянную АЧХ (в диапазоне частот от f(k) до f(k + 1) постоянш чение АЧХ равно amp(k)). Вывести график синтезируемой АЧХ можно cj щей командой:
» stairs(f, [amp(:);amp(end)])
Для фильтров, коэффициент передачи которых на частоте Найквиста не нулю, возможен только четный порядок. Если задать нечетное п, будет рас< фильтр на единицу большего порядка.
Векторы up и 1 о задают верхнюю и нижнюю допустимые границы для знг АЧХ синтезируемого фильтра. Эти векторы должны иметь такой же разм< и вектор amp. Используемый критерий оптимизации можно сформулирова' дующим образом: ищутся коэффициенты фильтра заданного порядка, кс дают АЧХ, лежащую между 1о и up и имеющую при этом минимальное с квадратическое отклонение от amp.
Строковый параметр 'design_flag' является необязательным, он позволяет лять выводом информации о ходе поиска решения (по умолчанию эта инс] ция не выводится). Возможны три значения данного параметра:
'trace' — текстовый вывод величины ошибки для каждой итерации;
'plots' — на каждой итерации выводится набор графиков: общий вид АЧХ и крупным планом все отдельные полосы частот;
' both ’ — одновременный вывод текста и графиков.
Результатом работы функции является вектор b коэффициентов нерекурсивного фильтра. Рассчитанный фильтр имеет линейную ФЧХ и вносит групповую задержку, независимо от частоты равную и/2 отсчетов.
Расчет фильтра осуществляется численным итерационным методом оптимизации с ограничениями.
В качестве примера синтезируем ФНЧ с теми же параметрами, что и в примере для функции firls (см. рис. 6.10), задав ограничение отклонения АЧХ от желаемой, равное 0,02 (напомним, что амплитуда максимальных выбросов АЧХ при минимизации среднеквадратической ошибки без ограничений составила примерно 0,05). Функция fircls осуществляет аппроксимацию кусочно-постоянной АЧХ, не позволяя задавать переходные полосы, поэтому зададим для границы между полосами пропускания и задерживания значение 0,225, равное середине переходной полосы из примера для функции firls. График АЧХ полученного фильтра приведен на рис. 6.11:
» f = [О 0.225 11:
» а = [1 0]:
» 1о = [0.98 -0.02]: % минимальный коэффициент передачи
» up = [1.02 0.02]; X максимальный коэффициент передачи
» b = f1rcls(32. f. a. up. Io):
» [h, w] = freqz(b);
» plot(w/p1. abs(h)) % график АЧХ
» grid on
» ylim([0 1.1])
Рис. 6.11. АЧХ ФНЧ, синтезированного путем минимизации среднеквадратической ошибки с ограничением минимального отклонения с помощью функции fircls
Сравнение АЧХ на рис. 6.10 и 6.11 показывает, что во втором случае амплитуда пульсаций действительно уменьшилась до заданного уровня 0,02, но при этом расширилась переходная полоса, ширину которой функция f 1 rcl s выбирает автоматически.
Функция firclsl
Функция f 1 rcl si — это специализированная версия функции f 1 rcl s, предназначенная для синтеза ФНЧ и ФВЧ с линейной ФЧХ путем минимизации среднеквадратической ошибки воспроизведения идеальной частотной характеристики с ограничением предельно допустимых отклонений от нее (constrained least square). Кроме того, функция дает возможность более гибкого задания допустимых отклонений АЧХ в полосах пропускания и задерживания, а также учета ошибки в этих полосах с разным весом. Синтаксис вызова функции следующий:
b- ficrlsKn. wO. dp, ds. 'ftype')
Здесь n — порядок рассчитываемого фильтра (его импульсная характеристика будет содержать и + 1 ненулевых отсчетов).
Параметр wO задает частоту среза, как обычно, нормированную к частоте Найквиста. Параметры dp и ds задают допустимые абсолютные уровни пульсаций в полосах пропускания (passband) и задерживания (stopband) соответственно. В полосе пропускания фильтр должен иметь коэффициент передачи, лежащий в пределах 1 ± dp, а в полосе задерживания — в пределах ±ds (здесь имеется в виду не АЧХ, а вещественная частотная характеристика, получающаяся после компенсации вносимой фильтром задержки, поэтому возможны и отрицательные значения).
При отсутствии параметра 'ftype' синтезируется ФНЧ, при 'ftype' = 'high' — ФВЧ. Для ФВЧ, поскольку их коэффициент передачи на частоте Найквиста не равен нулю, возможен только четный порядок. Если задать нечетное п, будет рассчитан фильтр на единицу большего порядка.
Между ds и 'ftype' могут находиться дополнительные параметры, причем их назначение меняется в зависимости от их количества, поэтому данные варианты синтаксиса мы рассматриваем отдельно. Первый такой вариант выглядит следующим образом:
b = ficrlsKn, wO, dp, ds, wt, 'ftype')
Появившийся здесь параметр wt указывает нормированную частоту, за которой должно удовлетворяться ограничение dp или ds, Это облегчает работу функции, позволяя образовать переходную зону между полосами пропускания и задерживания. Как именно формируется переходная зона, зависит от соотношения между wt и wO и от типа синтезируемого фильтра:
если синтезируется ФНЧ:.
О wt <wO: коэффициент передачилежитвпределах 1 ± dp при 0 < со < wt;
О wt >wO: коэффициент передачилежитвпределах ids при wt < со < 1;
если синтезируется ФВЧ:-:. .
О wt <wO: коэффициент передачилежитвпределах ±ds при 0 < со < wt;
О wt >wO: коэффициент передачилежитвпределах 1 ± dp при wt < со <1.
Следующий вариант синтаксиса содержит три дополнительных параметра:
b = flrclslCn. wO. dp, ds, wp. ws, k, 'ftype')
В этом случае можно задать соотношение между ошибками воспроизведения АЧХ в полосах пропускания и задерживания. Это соотношение задается параметром к, а параметры wp и ws указывают границы полос пропускания и задерживания для расчета соотношения ошибок:
□ при синтезе ФНЧ должны выполняться неравенства wp < wO < ws, а к рассчитывается по формуле
J| А(со)-1|2 б/со
*=Л;
J| А(со)|2 (/со
□ при синтезе ФВЧ должны выполняться неравенства ws < wO < wp, а к рассчитывается по формуле
J| Л(со) —1|2 dm
J| A(cd)|2 do о
Здесь А(со) — АЧХ синтезированного фильтра, а частоты считаются нормированными к частоте Найквиста.
Наконец, в любом варианте синтаксиса в конец списка параметров можно добавить строковый параметр ’design_flад':
b = ficrlsK.... 'des1gn_flад’)
Этот параметр позволяет управлять выводом информации о ходе поиска решения (по умолчанию эта информация не выводится). Возможны три значения данного параметра:
'trace' — текстовый вывод величины ошибки для каждой итерации;
'plots' — на каждой итерации выводится набор графиков: общий вид АЧХ и крупным планом все отдельные полосы частот;
' both' — одновременный вывод текста и графиков.
Результатом работы функции является вектор b коэффициентов нерекурсивного фильтра. Рассчитанный фильтр имеет линейную ФЧХ и вносит групповую задержку, независимо от частоты равную п/2 отсчетов.
Расчет фильтра осуществляется численным итерационным методом оптимизации с ограничениями.
Реализация метода Ремеза
Как говорилось ранее в разделе «Прямые Методы синтеза», метод Ремеза предназначен для синтеза нерекурсивных фильтров путем минимаксной аппроксима-
ции заданной АЧХ. В настоящее время в MATLAB имеется три функции, реализующие данный метод и несколько различающиеся по своим возможностям. Две из них, remez и cremez, находятся в пакете Signal Processing, а третья, gremez (она является наиболее обобщенным вариантом), — в пакете Filter Design. Кроме того, в пакете Signal Processing имеется функция remezord, предназначенная для оценки порядка фильтра, который при синтезе методом Ремеза будет удовлетворять заданным требованиям.
Функция remez
Функция remez предназначена для синтеза нерекурсивных фильтров с линейной ФЧХ и кусочно-линейной АЧХ с возможными зонами неопределенности. Возможно также задание произвольной формы АЧХ с помощью функции пользователя (см. далее). Синтаксис вызова функции следующий:
[b, delta, opt] = remez(n, f. a. w. 'ftype', {Igrid})
Здесь n — порядок рассчитываемого фильтра (его импульсная характеристика будет содержать и + 1 ненулевых отсчетов).
Параметры f и а должны быть векторами одинаковой четной длины, они совместно определяют желаемую АЧХ синтезируемого фильтра. Вектор f содержит значения частот, нормированные к частоте Найквиста, а вектор а — соответствующие этим частотам значения АЧХ. В промежутках между заданными точками АЧХ интерполируется по линейному закону. Частоты в векторе f должны образовывать строго возрастающую последовательность (повторяющиеся элементы не допускаются).
Синтезируемая АЧХ определяется с помощью векторов Тиа следующим образом:
в полосах частот от /(2^ - 1) до /(2/г) АЧХ линейно меняется от а(2к - 1) до а(2к). Здесь к — целые числа от единицы до половины длины векторов f и а;
в полосах частот от /(2/г) до /(2/г + 1) АЧХ считается не заданной и в процессе синтеза может оказаться произвольной.
Вывести график синтезируемой АЧХ можно следующей командой:
» plot(reshape(f, 2. length(f)/2). reshaped. 2, length(a)/2), 'b')
ЗАМЕЧАНИЕ
Если не задать синий цвет линий принудительно с помощью строки Ъ', отдельные линейные фрагменты будут выводиться разными цветами.
Для фильтров, коэффициент передачи которых на частоте Найквиста не равен нулю, возможен только четный порядок. Если задать нечетное п, будет рассчитан фильтр на единицу большего порядка.
Остальные параметры функции являются необязательными. Параметр w задает весовые коэффициенты для оптимизируемых частотных полос. Этот параметр должен быть вектором, длина которого вдвое меньше, чем длина векторов f и а, и содержать неотрицательные вещественные числа. В тех частотных полосах,
которым приписаны большие весовые коэффициенты, будет обеспечена меньшая ошибка воспроизведения заданной АЧХ. По умолчанию все весовые коэффициенты считаются одинаковыми.
При отсутствии параметра 'ftype' производится расчет фильтров с симметричной импульсной характеристикой, для которой 6(6) - Ь(п + 2 - k). Если использовать параметр 'ftype', становится возможным синтезировать фильтры с антисимметричной импульсной характеристикой, когда Ь^ = -Ь(п + 2 - к\ Данный параметр может принимать одно из двух строковых значений:
'hilbert' — синтезируется фильтр с антисимметричной импульсной характеристикой. Название данного режима объясняется тем, что такую характеристику, в частности, должен иметь фильтр, реализующий преобразование Гильберта (см. раздел «Дискретное преобразование Гильберта» главы 4);
' di fferenti ator' — синтезируется фильтр с антисимметричной импульсной характеристикой и, кроме того, при расчете взвешенной ошибки дополнительно используется весовой множитель 1//. В результате ошибка воспроизведения АЧХ на низких частотах будет намного меньше, чем на высоких. При синтезе дифференцирующего фильтра, АЧХ которого пропорциональна частоте (см. раздел «Свойства преобразования Фурье» главы 1), это означает минимизацию относительной ошибки воспроизведения заданной АЧХ.
ЗАМЕЧАНИЕ
Обратите внимание на то, что в режиме 'differentiator' функциями remez и firls используются разные дополнительные весовые функции — 1//и I//2 соответственно. Это объясняется различием используемых критериев оптимизации — функция remez минимизирует максимальное отклонение АЧХ от заданной (ошибка линейно связана с АЧХ), а функция firls минимизирует ошибку, связь которой с АЧХ является квадратичной.
Параметр {1 grid}, хотя и является целым положительным числом, должен быть задан в виде одноэлементного массива ячеек (то есть в фигурных скобках). Этот параметр регулирует плотность сетки частот, которая используется при расчете АЧХ фильтра с целью измерения величины пульсаций. Число точек сетки приблизительно равно lgrid*n/(2*bw), где bw — суммарная полоса пропускания фильтра, нормированная к частоте Найквиста. Увеличение параметра Igrid может сделать пульсации более равномерными, но приведет к увеличению времени расчета. По умолчанию значение параметра Igrid равно 16.
Главным результатом работы функции является вектор b коэффициентов нерекурсивного фильтра. Рассчитанный фильтр имеет линейную ФЧХ и вносит групповую задержку, независимо от частоты равную п/2 отсчетов. Кроме того, можно получить дополнительную информацию о результатах синтеза с помощью параметров del ta и opt.
Выходной параметр delta содержит величину пульсаций АЧХ полученного фильтра (то есть значение максимального отклонения АЧХ от заданной).
Выходной параметр opt представляет собой структуру со следующими полями:
opt.fgrid — вектор сетки частот, использованной при синтезе;
opt.des — значения заданной АЧХ для частот из opt.fgrid;
opt.wt — весовые коэффициенты для частот из opt.fgrid;
opt.H — получившаяся комплексная частотная характеристика фильтра для частот из opt.fgrid;
opt. error — ошибка воспроизведения заданной частотной характеристики для частот из opt.fgrid;
opt.iextr — номера элементов вектора opt.fgrid, соответствующих экстремальным частотам (частотам, на которых отклонение АЧХ от заданной максимально);
opt. fextr — вектор значений экстремальных частот.
Основная часть алгоритма синтеза реализована в машинных кодах (в виде DLL- файла) на основе FORTRAN-программы, листинг которой приведен, например, в [8].
В процессе расчета может быть выдано сообщение о том, что алгоритм не сходится (возможно, из-за ошибок округления):
-- Failure to Converge --
Probable cause 1s machine rounding error.
В этом случае следует обязательно проверить результаты синтеза, рассчитав АЧХ полученного фильтра с помощью функции freqz. Впрочем, такой контроль полезен всегда.
Задание пользовательской функции расчета АЧХ
Если АЧХ, которую необходимо синтезировать, не является кусочно-линейной, можно воспользоваться другим вариантом синтаксиса функции remez:
[b, delta, opt] = remez(n, f. 'fresp', w, 'ftype'. {Igrid})
Здесь 'fresp' — имя функции, рассчитывающей желаемую АЧХ. Остальные параметры имеют то же назначение, что и ранее. Функция fresp должна вызываться следующим образом:
[dh, dw] - fresp(n, f, gf, w)
Входные параметры n, f и w здесь те же, что используются при вызове функции remez, а вектор gf — сетка частот, сформированная функцией remez исходя из значений параметров n, f и 1 grid.
Функция fresp должна вычислить значения АЧХ dh и весовых коэффициентов dw для частот из вектора gf. Остальные входные параметры (n, f и w) в принципе при расчете могут не использоваться. Их передача в функцию fresp позволяет реализовать дополнительную гибкость.
При необходимости можно организовать передачу в функцию fresp дополнительных параметров. Для этого при вызове функции remez необходимо взять имя функции расчета АЧХ вместе с ее дополнительными параметрами в фигурные скобки:
... = remez(n, f. {'fresp', pl. p2 ...}, w, 'ftype'. {Igrid})
Функция fresp при этом будет вызвана так:
[dh. dw] = fresp(n, f. gf. w. pl, p2 ...)
В каталоге toolbox\signal\signal\private (содержимое данного каталога доступно только функциям пакета Signal Processing) имеется несколько готовых функций расчета АЧХ, которые можно использовать в качестве параметров при вызове remez и cremez. Так, функция remezfrf реализует кусочно-линейную интерполяцию АЧХ и используется по умолчанию функцией remez. Данная функция вызывается следующим образом: {'remezfrf, а}. Здесь а — вектор значений АЧХ, соответствующих частотам из вектора f. Таким образом, приведенный ранее первый вариант синтаксиса вызова функции remez на самом деле трансформируется так:
... = remez(n, f, {'remezfrf, a}, w, 'ftype', {Igrid})
Другие функции этого семейства имеют следующие имена: all pass, lowpass, highpass, bandpass, bandstop, multiband, invsinc, hilbfilt, differentiator. Справку об их использовании можно получить в командной строке MATLAB, введя команду
» help рг1уаЬе/имя_функции
Текст перечисленных функций можно использовать в качестве образца при написании собственных функций расчета АЧХ.
Пример использования
В качестве примера синтезируем методом Ремеза ФНЧ с теми же параметрами, что и при демонстрации использования функций firls и fircls (см. рис. 6.10 и 6.11). График АЧХ полученного фильтра представлен на рис. 6.12.
» f - [О 0.2 0.25 1]: .
» а = [1 1 0 0]:
» b - remez(32, f. а);
» [h. w] - freqz(b):
» plot(w/pi, abs(h)) % график АЧХ
» grid on
» ylim([0 1.11)
Рис. 6.12. АЧХ ФНЧ, синтезированного путем минимаксной аппроксимации с помощью функции remez
Сравнение АЧХ на рис. 6.10-6.12 показывает, что пульсации АЧХ получились больше, чем при минимизации среднеквадратической ошибки (их амплитуда составляет примерно 0,085). Однако фильтр, синтезированный методом Ремеза, дает минимальную ширину переходной полосы (равномерный характер пульсаций в полосах пропускания и задерживания строго выдержан, тогда как при минимизации среднеквадратической ошибки АЧХ далеко отходит от заданных значений при приближении к переходной зоне). Если задать границы переходной зоны такими, какими они оказались в действительности при использовании функции fircls (примерно от 0,175 до 0,275, см. рис. 6.11), синтез методом Ремеза даст такие же или меньшие пульсации. Убедимся в этом, не выводя график АЧХ, а проверив значение второго выходного параметра функции remez:
» f = [0 0.175 0.275 1]:
» а = [1 1 0 0];
» [b. d] = remez(32. f. а);
» disp(d) % вывод амплитуды пульсаций 0.0176
Как видите, в данном случае пульсации действительно оказались несколько меньше, чем при минимизации среднеквадратической ошибки с ограничением максимального отклонения.
Функция cremez■
Функция cremez является расширенным вариантом функции remez, имеющим следующие отличия:
ФЧХ фильтра не обязательно должна быть линейной;
можно синтезировать фильтры с комплексными коэффициентами;
тип симметрии импульсной характеристики задается в явном виде, а не косвенно;
в алгоритм расчета добавлена вторая стадия, уточняющая решение, найденное методом Ремеза;
имеется некоторое количество предопределенных функций расчета АЧХ.
Синтаксис вызова функции следующий:
[b. delta, opt] = cremez(n, f, a, w, {Igrid}, ...
'sym'. 'skip_stage2'. 'debug')
или
[b, delta, opt] - cremez(n, f, {'fresp', pl, p2 ...}, ...
w. {Igrid}. 'sym', 'skip_stage2', 'debug')
Выходные и почти все входные параметры совпадают с параметрами функции remez, рассмотренной ранее. Поэтому остановимся только на имеющихся различиях.
Частоты в векторе f должны лежать в диапазоне -1...1'. Возможность задавать поведение АЧХ в области отрицательных частот позволяет рассчитывать фильтры с комплексными коэффициентами.'
Число точек частотной сетки, регулируемое параметром {1 gri d}, ориентировочно равно 2*nextpow2(lgrid*n). По умолчанию значение 1 grid равно 25.
Строковый параметр 'sym' позволяет управлять симметрией импульсной характеристики. Возможны следующие четыре значения:
'попе' — ограничений симметрии не накладывается;
'even' — четная симметрия импульсной характеристики: 6(6) - Ь(п + 2 - к);
'odd' — нечетная симметрия импульсной характеристики: Ь(к) —Ь(п + 2 - к);
' real' — комплексно-сопряженная симметрия импульсной характеристики: b(k) = b (п + 2 - к) (этот вариант позволяет получить фильтр с линейной ФЧХ и несимметричной относительно нулевой частоты АЧХ).
Использование отрицательных частот в векторе f возможно только при 'sym' - = 'none' или 'real'.
При указании в списке параметров строки ' ski p_stage2' отключается вторая стадия алгоритма (она выполняется, если оптимальное решение не найдено стандартным методом Ремеза). Это может повысить скорость расчетов за счет уменьшения точности.
Последний входной параметр ' debug' управляет выдачей сообщений о ходе оптимизации. Возможны следующие строковые значения:
' off — сообщения не выводятся (этот вариант используется по умолчанию);
' trace' — выводятся текстовые сообщения;
' pl ots' — выводятся графики;
' both' — выводятся текстовые сообщения и графики.
Функция remezord
Функция remezord предназначена для оценки требуемого при синтезе методом Ремеза порядка многополосного нерекурсивного фильтра с заданной величиной пульсаций АЧХ. Синтаксис вызова функции следующий:
[п, fo, ао, w] = remezord(f, a. dev, Fs)
Параметры f и а совместно задают кусочно-постоянную АЧХ. В векторе f должна содержаться возрастающая последовательность значений частот. Вектор а задает постоянные значения АЧХ для полос, ограниченных парами частот из вектора f, при этом первая полоса начинается от нулевой частоты, а последняя заканчивается на частоте Найквиста:
□ в полосе частот от нуля до f(l) АЧХ равна а(1);
в полосе частот от f(l) до f(2) АЧХ не определена;
в полосе частот от f(2) до f(3) АЧХ равна а(2);
в полосе частот от f(3) до f(4) АЧХ не определена;
так продолжается до конца векторов f и а;
в полосе частот от f(end-l) до f(end) АЧХ не определена;
в полосе частот от f(end) до Fs/2 АЧХ равна a (end).
Таким образом, длина вектора f должна быть равна length(a)*2-2.
Параметр dev должен быть вектором той же длины, что и а, содержащим вещественные положительные числа. Он задает максимально допустимую ошибку воспроизведения кусочно-постоянной АЧХ для отдельных частотных полос. Ошибка задается как абсолютная погрешность АЧХ.
Параметр Fs задает частоту дискретизации и является необязательным. При его использовании следует указывать в векторе f не нормированные, а исходные значения частот в тех же единицах, что и Fs. По умолчанию частота дискретизации считается равной двум, так что частота Найквиста равна единице.
Результатами работы функции являются порядок фильтра п и векторы fo, ао и w, которые предназначены для использования при вызове функции remez:
b = remez(n, fo. ао. w)
Результаты работы функции могут быть неточными, если у заданной АЧХ имеются частоты среза, близкие к нулю или частоте Найквиста. Кроме того, в любом случае оценка порядка фильтра, производимая функцией remezord, является приближенной, поэтому если синтезированный фильтр не удовлетворяет заданным требованиям, необходимо более точно подобрать порядок фильтра вручную.
ЗАМЕЧАНИЕ
Механизм автоматического подбора минимально необходимого порядка фильтра встроен в функцию gremez пакета Filter Design (см. далее).
Функции пакета Filter Design
Пакет Filter Design содержит пять функций, предназначенных для синтеза дискретных фильтров. Это функция gremez, представляющая собой еще один расширенный вариант метода Ремеза, и четыре функции, минимизирующие р-норму ошибки при произвольном р.
Функция gremez
Функция gremez, входящая в пакет Filter Design, обладает расширенными возможностями по сравнению с функциями remez и cremez. Основными из этих расширений являются следующие:
возможность автоматического подбора порядка фильтра;
возможность задания ограничений величины пульсаций для отдельных частотных полос;
возможность описания особых точек АЧХ;
большее количество информации, возвращаемой в структуре opt;
возможность группировки частотных полос для расчета нескольких отдельных ошибок аппроксимации.
Новые поля структуры opt
В простейшем варианте синтаксис вызова функции gremez такой же, как у функции remez:
[b, error,opt]- gremez(n,f,a,w)
[b, error,opt]= gremez(n,f.a,'hilbert')
[b, error,opt]= gremez(n,f,a.'differentiator')
При таком способе вызова работа функции ничем не отличается от того, что делает функция remez, разве что в информационной структуре opt присутствует ряд дополнительных полей:
opt. order — порядок синтезированного фильтра;
opt.edgeCheck — результаты проверки аномалий в переходных зонах (см. далее). Это вектор, содержащий по одному элементу на каждую частотную полосу. Возможны следующие значения элементов вектора: 1 — все в порядке, О — обнаружена аномалия, -1 — проверка не выполнялась;
opt.iterations — число выполненных итераций;
opt. eval s — число вычислений целевой функции.
Поддерживается и вариант синтаксиса с задаваемой пользователем функцией расчета АЧХ:
[b. error, opt] - gremez(n, f. {'fresp'. pl, p2 ...}, w)
По умолчанию в качестве fresp используется функция remezfrf2, расположенная в каталоге toolbox\filterdesign\filterdesign\private и реализующая расчет кусочнолинейной АЧХ.
Подбор порядка фильтра .
Для реализации автоматического подбора порядка фильтра при заданной величине пульсаций АЧХ функция gremez вызывается следующим образом:
[b. error, opt] - gremezUm', f, a. r)
Вместо порядка фильтра указывается строковый параметр 'т', который может принимать одно из трех следующих значений:
'minorder' — подбирается минимальный порядок фильтра, при котором отклонения АЧХ от заданной лежат в допустимых пределах;
'mineven' — подбирается минимально возможный четный порядок фильтра, при котором отклонения АЧХ от.заданной лежат в допустимых пределах;
'minodd' — подбирается минимально возможный нечетный порядок фильтра, при котором отклонения АЧХ от заданной лежат в допустимых пределах.
Параметр г — вектор допустимых абсолютных значений пульсаций АЧХ для отдельных частотных полос. Его длина должна быть в два раза меньше длины вектора f.
Начальное приближение ni для подбора порядка фильтра можно указать следующим образом:
[b, error, opt] - gremez(('m'. ni}, f, a, r)
Такое указание начального значения порядка фильтра является обязательным в тех случаях, когда нельзя использовать функцию remezord (например, при расчете дифференцирующих фильтров и преобразователей Гильберта).
Принудительное ограничение величины пульсаций
Чтобы задать ограничения величины пульсаций АЧХ в некоторых полосах частот, функцию gremez нужно вызывать следующим образом:
[b. error, opt] = gremez(n, f, a, w, c)
Сами ограничения пульсаций задаются в векторе весовых коэффициентов w, а параметр с определяет, какие из элементов вектора w являются весами, а какие — ограничениями. Параметр с должен представлять собой массив ячеек с числом элементов, равным длине вектора w. Каждый элемент с{к} может принимать одно из двух строковых значений:
' с1 — ^-й элемент вектора w трактуется как предельно допустимая величина (constraint) пульсаций АЧХ для ^-й полосы частот;
'w' — ^-й элемент вектора w трактуется как весовой коэффициент (weight) для ^-й полосы частот.
Необходимо, чтобы хотя бы одна частотная полоса не имела ограничения на величину пульсаций. Поэтому массив ячеек с должен содержать хотя бы один элемент, равный 'w'.
Использование независимых ошибок аппроксимации
Чтобы независимо минимизировать величину пульсаций АЧХ в разных полосах частот, функция gremez вызывается следующим образом:
[b. error, opt] = gremez(n, f, a. w, e)
Параметр e определяет, как группируются частотные полосы для расчета независимых ошибок аппроксимации. Этот параметр представляет собой массив ячеек с числом элементов, равным длине вектора w. Каждый элемент е{к} должен быть строкой вида 'е#', где # — целое положительное число. Это означает, что к-я полоса частот принимает участие в расчете ошибки аппроксимации с номером #.
В данном режиме функция gremez пытается независимо минимизировать отклонение АЧХ от заданной в нескольких полосах частот. В результате получается фильтр, пульсации АЧХ которого равномерны в каждой группе частотных полос, формирующих общую ошибку аппроксимации, но для разных групп полос пульсации будут разными. Таким образом можно, например, синтезировать фильтр, в полосе пропускания которого пульсации АЧХ будут меньше, чем в полосе задерживания. В результате иногда могут получаться фильтры, имеющие очень узкие переходные зоны между полосами пропускания и задерживания.
По умолчанию параметр е имеет значение {' еГ , 'еГ, 'еГ, ...}, то есть все частотные полосы формируют одну общую ошибку аппроксимации АЧХ.
Описание особых точек АЧХ
Для описания особых точек АЧХ фильтра используется массив ячеек s, число элементов в котором должно быть равно длине векторов f и а:
[b. error, opt] - gremez(n. f, a. s)
Элементами массива s являются односимвольные строки, имеющие следующее значение:
' п' — обычная точка АЧХ (normal point);
's' — «точечная» полоса (single-point band);
'f — коэффициент передачи синтезированного фильтра на дайной частоте должен быть точно равен заданному (forced frequency point);
' Г — коэффициент передачи па данной частоте не определен (indeterminate frequency point; такую точку можно использовать на границе вплотную примыкающих друг к другу частотных полос).
Указание дополнительных свойств синтезируемого фильтра
Для синтеза фильтра, обладающего некоторыми дополнительными свойствами, в конце списка параметров функции gremez могут использоваться следующие строковые значения:
' 1', '2', "3* или '4' — синтезируется фильтр соответствующего типа (см. табл. 4.1 в разделе «Симметричные фильтры» главы 4);
'minphase' или 'maxphase' — синтезируется соответственно минимально-фазовый фильтр (все нули функции передачи лежат на z-плоскости внутри единичной окружности или на ней) или максимально-фазовый фильтр (все нули функции передачи лежат на z-плоскости снаружи единичной окружности или на ней);
' check' — выполняется проверка наличия аномалий в переходных зонах и при их обнаружении выдается соответствующее предупреждение. Информация об обнаруженных аномалиях возвращается также в поле edgeCheck структуры opt (см. выше).
Функции, использующие р-норму ошибки
Перечисленные ниже функции выполняют прямой синтез фильтров путем минимизации р-нормы ошибки воспроизведения заданной характеристики (АЧХ или групповой задержки):
f 1 rl pnorm — расчет нерекурсивного фильтра по заданной АЧХ:
[b, err] = fтrlpnorm(n.f.edges.a.w.p,dens,bO)
11 rl pnorm — расчет рекурсивного фильтра по заданной АЧХ:
[b, a. err] - 11rlpnorm(n,d,f,edges,a,w,p,dens,ЬО.аО)
i i rl pnormc — расчет рекурсивного фильтра по заданной АЧХ с ограничением модуля полюсов:
[b.a.err] - iirlpnormc(n,d,f,edges,a.w,radius,p,dens,ЬО.аО)
11rgrpdel ay — расчет всепропускающего (см. раздел «Нули и полюсы» главы 4) рекурсивного фильтра по заданной зависимости групповой задержки от частоты:
[b,а.tau]-11rgrpdelay(n,f,edges,gd.w,rad1us.p.dens.aO.tau)
Параметры всех этих функций задаются одинаково и имеют следующий смысл:
п — порядок числителя функции передачи фильтра;
d — порядок знаменателя функции передачи фильтра;
f — вектор частот для задания частотной характеристики фильтра (вектор должен содержать возрастающую последовательность значений, нормированных к частоте Найквиста, причем должны выполняться равенства f(l) - 0 и f(end) - 1);
а — вектор значений АЧХ для частот из вектора f (используется кусочно-линейная интерполяция);
gd — вектор значений групповой задержки, измеряемой в отсчетах, для частот из вектора f (используется кусочно-линейная интерполяция);
edges — вектор четной длины, задающий границы частотных полос, в промежутках между которыми АЧХ считается незаданной. Таким образом, АЧХ считается заданной в полосах edges(l)...edges(2), edges(3)...edges(4) и т. д. и неопределенной в полосах O...edges(l), edges(2)...edges(3) и т. д. Вектор edges должен содержать значения частот, имеющиеся в векторе f.
Приведенное ниже параметры являются необязательными и имеют значения по умолчанию:
w — вектор весовых коэффициентов. Он должен иметь такой же размер, как векторы f, а и gd, и содержать неотрицательные вещественные числа. По умолчанию все элементы этого вектора равны единице;
radius — предельно допустимая величина модулей полюсов синтезируемого фильтра. По умолчанию используется значение 0,999999;
р — двухэлементный вектор вида [pmin ртах], указывающий границы для параметра р используемой при расчете нормы ошибки. Элементы вектора должны быть целыми положительными четными числами. По умолчанию используется значение [2 128], что дает результаты, близкие к минимаксной оптимизации. Возможно также значение 'inspect', при этом оптимизация не производится и функция выдает используемое ею начальное приближение;
dens — плотность частотной сетки, используемой функцией для расчета ошибок. Число точек сетки равно dens*(n+l). По умолчанию используется значение dens = 20;
Ь0 — начальное приближение для числителя функции передачи фильтра;
аО — начальное приближение для знаменателя функции передачи фильтра;
tau — дополнительное смещение групповой задержки, используемое функцией 11 rgrpdel ау для того, чтобы сделать заданную групповую задержку неотрицательной на всех частотах (всепропускающие фильтры могут иметь только положительную групповую задержку). По умолчанию tau - max(gd).
Результатами работы функций являются векторы b и а коэффициентов полиномов числителя и знаменателя функции передачи фильтра, а также достигнутое минимальное значение 72-нормы ошибки егг. Функция llrgrpdelay может также возвращать дополнительное смещение групповой задержки tau, использованное при синтезе.
Графическая среда для синтеза и анализа фильтров
В пакете Signal Processing имеется две графических среды, позволяющих рассчитывать и анализировать дискретные фильтры. Это новая среда FDATool (Filter Design & Analysis Tool) и блок работы с фильтрами, входящий в более старую универсальную среду SPTool. В программе FDATool поддерживается больше методов синтеза; пожалуй, единственная возможность, имеющаяся в SPTool и отсутствующая в FDATool, — это ручное графическое редактирование расположения нулей и полюсов функции передачи фильтра.
Далее в этой главе описываются возможности графического интерфейса FDATool. Краткий обзор средств программы SPTool будет приведен в приложении Г.
Для запуска программы расчета фильтров необходимо набрать ее имя в командной строке MATLAB:
» fdatool
После этого появится окно программы, показанное на рис. 6.13.
Рис. 6.13. Интерфейс программы fdatool
Большая часть команд меню программы fdatool дублирует действия, выполняемые с помощью элементов графического интерфейса, поэтому отдельно обсуждать структуру меню мы не будем. Однако следует отметить, что многим операциям сопоставлены клавиатурные комбинации, узнать которые можно, заглянув именно в меню.
Расчет фильтра
Расчет фильтра начинается с задания требуемых параметров на вкладке Design Filter (см. рис. 6.13). Тип синтезируемой АЧХ выбирается с помощью переключателя Filter Туре. Возможны следующие варианты: Lowpass (ФНЧ), Highpass (ФВЧ), Bandpass (полосовой фильтр), Bandstop (режекторный фильтр). Выбор пятого, самого нижнего, положения переключателя позволяет использовать раскрывающийся список, в котором перечислены более сложные варианты: Differentiator (дифференцирующий фильтр), Hilbert Transformer (преобразователь Гильберта), Multiband (многополосный фильтр), Arbitrary Magnitude (произвольная АЧХ) и Arbitrary Group Delay (произвольная групповая задержка).
Выбрав категорию синтезируемой АЧХ, следует выбрать тип синтезируемого фильтра, установив переключатель, расположенный в разделе Design Method, в положение IIR (рекурсивный) или FIR (нерекурсивный). Каждому положению переключателя соответствует список возможных методов синтеза. Состав этого списка меняется в зависимости от выбранного типа АЧХ. Например, при синтезе фильтра с произвольной зависимостью групповой задержки от частоты (Arbitrary Group Delay) переключатель автоматически установится в положение IIR, а в списке будет доступен всего один метод — метод минимизации р-нормы ошибки (Constrained Least Pth Norm). В случае синтеза АЧХ четырех простейших типов набор возможных методов синтеза значительно шире:
нерекурсивные фильтры (FIR). Здесь доступны следующие методы:
О Equiripple — синтез фильтров с равномерными пульсациями АЧХ методом Ремеза;
О Least-Squares — минимизация среднеквадратического отклонения АЧХ от заданной;
О Window — синтез с использованием весовых функций (окон);
рекурсивные фильтры (UR). Здесь доступны четыре варианта синтеза по различным аналоговым прототипам методом билинейного ^-преобразования:
О Butterworth — синтез фильтра Баттерворта;
О Chebyshev Type I — синтез фильтра Чебышева первого рода;
О Chebyshev Type II — синтез фильтра Чебышева второго рода;
О Elliptic — синтез эллиптического фильтра.
ЗАМЕЧАНИЕ
Набор доступных методов синтеза зависит от того, установлен ли пакет Filter Design.
Далее необходимо выбрать порядок фильтра в разделе Filter Order. Во многих случаях помимо явного указания порядка в поле ввода Specify order возможен
автоматический выбор порядка путем установки переключателя в положение Minimum order.
Наконец, необходимо задать числовые параметры этой АЧХ в разделах Frequency Specifications и Magnitude Specifications (при выборе типа АЧХ из дополнительного раскрывающегося списка эти два раздела объединяются под общим названием Frequency and Magnitude Specifications). Содержимое этих областей окна меняется в зависимости от выбранного типа АЧХ. На рис. 6.13 показаны поля ввода параметров, соответствующие синтезу ФНЧ. При заполнении полей ввода можно ссылаться на переменные, существующие в данный момент в рабочей области памяти MATLAB.
ЗАМЕЧАНИЕ :
Подробное описание способов задания разнообразных АЧХ вы можете найти в разделах этой главы, посвященных функциям синтеза фильтров. Параметры, задаваемые в fdatool, как правило, передаются в функцию, реализующую выбранный метод синтеза, без дополнительных преобразований.'
Числовые параметры, которые необходимо задать, иллюстрируются графиком, выводимым в разделе Filter Specifications. Вид этого графика также меняется в зависимости от выбранного типа АЧХ, на рис. 6.13 он соответствует синтезу ФНЧ. Выбрав метод синтеза и задав характеристики фильтра, щелкните на расположенной в нижней части окна кнопке Design Filter. Программа fdatool вызовет нужную функцию синтеза, передав ей указанные вами спецификации фильтра.
ЗАМЕЧАНИЕ
Если установлен пакет Filter Design, в программе fdatool можно установить флажок Turn quantization on, чтобы сделать доступной вкладку Set Quantization Parameters, позволяющую задавать параметры квантования коэффициентов фильтра. Об эффектах квантования и об использовании этой вкладки речь пойдет далее, в главе 7.
Просмотр характеристик фильтра
После выполнения расчета фильтра в разделе Current Filter Information окна программы fdatool появится информация о завершении вычислений (Source: Designed). Теперь можно просматривать характеристики получившегося фильтра, чтобы проверить, соответствует ли он нашим требованиям.
Выбор графика для просмотра производится с помощью кнопок панели инструментов, показанных на рис. 6.14, или следующих команд меню Analysis:
Filter Specifications — вывод графика, поясняющего задание параметров АЧХ;
Magnitude Response — вывод графика АЧХ;
Phase Response — вывод графика ФЧХ;
Magnitude and Phase — одновременный вывод графиков АЧХ и ФЧХ;
Group Delay — вывод графика частотной зависимости групповой задержки;
Impulse Response — вывод графика импульсной характеристики;
Step Response — вывод графика переходной характеристики;
Pole/Zero Plot — вывод графика расположения нулей и полюсов на 2-плоскости;
View Filter Coefficients — просмотр коэффициентов фильтра. Выводимое здесь представление фильтра зависит от выбранной формы реализации (см. далее).
Magnitude Response Group Delay Pole/Zero Plot
Filter SpecificationsFilter Coefficients
Phase Response || Step Response
Magnitude and Phase Response Impulse Response
Рис. 6.14. Панель инструментов программы fdatool
Когда на экран выведен какой-либо из графиков, можно использовать кнопки Zoom In и Zoom Out панели инструментов для управления масштабом отображения. Щелкнув на кнопке Zoom In, нужно затем щелкнуть в той точке графика, которая должна оказаться в центре увеличенного изображения. При включенном режиме Zoom Out щелчок на точке графика аналогичным образом уменьшает масштаб отображения. Правая кнопка мыши в этих двух режимах выполняет противоположное действие (в режиме Zoom In уменьшает масштаб, в режиме Zoom Out — увеличивает).
Сохранение результатов работы
Чтобы сохранить результаты текущего сеанса работы с программой fdatool, щелкните на кнопке Save session панели инструментов или воспользуйтесь одноименной командой меню File. В этом меню есть также команда Save session As, позволяющая сохранить сеанс под новым именем. Файлы сохраненных сеансов работы имеют расширение fda.
Загрузить сохраненный сеанс можно с помощью кнопки Open Session панели инструментов или одноименной команды меню File.
Разумеется, ценность программы fdatool была бы невелика, если бы в ней не было средств экспорта коэффициентов рассчитанного фильтра для использования в MATLAB или других программах. Экспорт описания фильтра производится с помощью команды Export меню File или комбинации клавиш Ctrl+E. После выбора команды появляется окно экспорта, показанное на рис. 6.15.
Раскрывающийся список Export То позволяет выбрать способ экспорта:
Workspace — данные передаются непосредственно в рабочую область памяти MATLAB;
Text-file — коэффициенты фильтра записываются в текстовый файл. Формат этого файла совпадает с форматом представления информации о коэффициентах фильтра в окне программы fdatool;
MAT-file — информация о фильтре сохраняется в виде МАТ-файла, который затем можно будет загрузить в MATLAB командой 1 oad.
—Export То
I tWorkspace j
Рис. 6.15. Окно экспорта описания фильтра
В разделе Variable Names задаются имена переменных для хранения векторов и матриц, описывающих фильтр. Состав полей ввода зависит от формы реализации фильтра (см. далее). При записи информации в текстовый файл эти поля ввода недоступны.
При экспорте в рабочую область памяти MATLAB доступен также флажок Overwrite existing variables. Если он установлен, то при наличии в памяти MATLAB переменных, имена которых совпадают с теми, что указаны в окне экспорта, их значения будут заменены новыми. Если флажок снят, то попытка экспортировать данные в уже существующую переменную вызовет появление сообщения об ошибке.
Задав все необходимые параметры, щелкните на кнопке ОК для выполнения экспорта данных. При экспорте в файл будет запрошено имя создаваемого файла.
Импорт описания фильтра
Программу fdatool можно использовать не только для расчета фильтров с заданными параметрами, но и для анализа характеристик уже рассчитанных фильтров. Для этого используется режим импорта описания фильтра, выбираемый с помощью команды Import Filter меню Filter. При включении этого режима вкладка Design Filter заменяется на вкладку Import Filter, показанную на рис. 6.16.
Под импортом в программе fdatool подразумевается получение готовых векторов и матриц, описывающих фильтр. Можно ввести эти векторы и матрицы вручную (используя синтаксис MATLAB) или сослаться на идентификаторы переменных, существующих в данный момент в рабочей области памяти MATLAB и хранящих описание фильтра. Эти векторы или имена переменных задаются в полях ввода, состав которых зависит от выбранной формы описания фильтра (форма выбирается с помощью раскрывающегося списка Filter Structure). На рис. 6.16 выбрана прямая форма реализации фильтра, поэтому предлагается ввести векторы коэффициентов полиномов числителя (поле Numerator) и знаменателя (поле Denominator) функции передачи.
В разделе Sampling Frequency задается частота дискретизации — она используется для оцифровки частотных осей графиков. Единица измерения частоты выби-
рается из списка Units, а само значение вводится в поле Fs. По умолчанию выбраны нормированные частоты, при этом частота Найквиста равна единице.
Задав каким-либо способом описание фильтра, щелкните на кнопке Import Filter, расположенной в нижней части окна программы, и выводимый в данный момент график будет перерисован в соответствии с результатами анализа импортированного фильтра.
Теперь можно просматривать графики характеристик импортированного фильтра, как было описано выше. Для возврата в режим расчета фильтров используйте команду Design Filter меню Filter.
ГЛАВА 7 Эффекты квантования в цифровых системах
В разделе «Аналоговые, дискретные и цифровые сигналы» главы 3 мы обсуждали разницу между дискретными и цифровыми сигналами. До сих пор, строго говоря, речь шла о дискретных сигналах и системах, поскольку отсчеты сигналов и коэффициенты фильтров считались представленными точно (без погрешностей). В данной главе мы займемся именно цифровыми сигналами и системами, рассмотрев эффекты, возникающие вследствие конечной точности представления отсчетов сигналов и параметров систем в вычислительных устройствах.
Теоретический анализ вопросов, связанных с конечной точностью представления чисел в цифровых системах, весьма непрост. В данной главе мы лишь рассмотрим основные источники погрешностей и познакомимся со средствами MATLAB, позволяющими производить квантование сигналов и анализировать эффекты квантования в алгоритмах цифровой обработки сигналов. Читатель, которого заинтересуют более подробные теоретические построения, может обратиться к фундаментальному труду [8].
Эффекты, связанные с конечной разрядностью представления чисел, можно разделить на следующие категории:
шум квантования, возникающий при аналого-цифровом преобразовании;
искажения характеристик, происходящие при квантовании коэффициентов цифровых фильтров;
переполнение разрядной сетки в процессе вычислений;
округление промежуточных результатов вычислений.
Далее мы рассмотрим эти категории подробнее. Но сначала поговорим о способах представления чисел в вычислительных устройствах.
Форматы представления чисел
Форматы представления дробных чисел в вычислительных устройствах можно разделить на две группы: форматы с фиксированной запятой (fixed point) и форматы с плавающей запятой (floating point). В дополнение к этому существует несколько способов представления отрицательных чисел.
Представление отрицательных чисел
Для представления знака числа обычно используется старший двоичный разряд, при этом возможно несколько способов:
прямой код: 0 в старшем разряде соответствует положительным числам, 1 — отрицательным. Остальные разряды представляют модуль числа. В таком коде удобно осуществлять операции умножения (модули чисел перемножаются, а знаковые разряды складываются по модулю два), но неудобно реализовывать сложение. Кроме того, некоторые проблемы создает наличие двух представлений нуля — «положительного» и «отрицательного»;
дополнительный код: 0 в старшем разряде соответствует положительным числам, 1 — отрицательным. Неотрицательные числа представляются без каких-либо особенностей, а для превращения положительного числа в равное ему по модулю отрицательное необходимо инвертировать все разряды двоичного представления (включая знаковый) и к получившемуся двоичному числу прибавить единицу. В дополнительном коде удобно выполнять операции сложения (числа со знаком складываются точно так же, как беззнаковые);
обратный код: 0 в старшем разряде соответствует положительным числам, 1 — отрицательным. Неотрицательные числа представляются без каких-либо особенностей, а превращение положительного числа в равное ему по модулю отрицательное производится путем простой инверсии всех разрядов двоичного представления (включая знаковый);
смешанный код: трактовка знакового разряда здесь противоположна предыдущим вариантам — 1 означает положительное число, а 0 — отрицательное. Представления чисел получаются путем прибавления к ним константы 2У - 1, где N — число двоичных разрядов (не считая знакового).
В табл. 7.1 описанные варианты поясняются на примере 8-разрядных целых чисел.
Наибольшее распространение для представления целых чисел и чисел с фиксированной запятой получил дополнительный код. Прямой код используется для представления мантиссы, а смещенный код — для представления порядка чисел в формате с плавающей запятой (см. далее).
Таблица 7.1. Способы представления чисел со знаком
Беззнаковое значение
Двоичное представление
Значение со знаком
Прямой код
Дополнительный код
Обратный код
Смещенный код
0
00000000
0
0
0
-127
1
00000001
1
1
1
-126
126
ошшо
126
126
126
-1
127
01111111
127
127
127
0
128
10000000
-0
-128
-127
1
129
10000001
-1
-127
-126
2
254
11111110
-126
-2
-1
127
255
11111111
-127
-1
-0
128
Формат с фиксированной запятой 5
Название «формат с фиксированной запятой» означает, что в двоичном представлении дробного числа для хранения его целой и дробной частей отведено фиксированное число разрядов. Иными словами, запятая, разделяющая целую и дробную части в двоичном представлении числа, находится на фиксированном месте.
Часто формат с фиксированной запятой обозначают парой целых чисел: M.N. В большинстве случаев (об одном из исключений будет сказано далее) М обозначает число разрядов целой части числа (включая знак), a N — число разрядов дробной части. Этот способ обозначения широко распространен в литературе по цифровой обработке сигналов.
В качестве примера рассмотрим формат 1.15, часто применяемый для представления чисел в цифровых сигнальных процессорах. Как следует из обозначения, целая часть числа содержит только один разряд — знаковый. Поэтому числа, которые можно представить в этом формате, по модулю це превосходят единицы. Пятнадцать разрядов после запятой обеспечивают дискретность представления, равную 2~15 = 1/32768 * 3- НГ5. Для представления отрицательных чисел используется дополнительный код (см. ранее раздел «Представление отрицательных чисел»). Более детально данный формат иллюстрируется в табл. 7.2.
Приведенная таблица наглядно демонстрирует два важных факта, характеризующих форматы с фиксированной запятой. Во-первых, сравнение столбцов «Целое число в дополнительном коде» и «Число в формате 1.15» показывает, что формат с фиксированной запятой, по сути дела, означает просто договоренность
делить целые числа на постоянный коэффициент, равный 2W (N — число разрядов дробной части). В нашем примере этот коэффициент равен 32 768.
Таблица 7.2. Формат с фиксированной запятой 1.15
Двоичное представление
Шестнадцатеричное представление
Целое число а дополнительном коде
Число в формате 1.15
0000 0000 0000 0000
0000
0
о
0000 0000 0000 0001
0001
1
.1
32768
0000 0000 0000 0010
0002
2
2
32768
0111 1111 1111 1110
7FFE
32 766
32766
32768
0111 1111 1111 1111
7FFF
32 767
32767
32768
1000 0000 0000 0000
8000
-32768
-1
1000 0000 0000 0001
8001
-32767
32767
32768
1111 1111 1111 1110
FFFE
-2
2
32768
1111 1111 1111 1111
FFFF
-1
1 32768
Во-вторых, из таблицы видно, что значение -1 в данном формате представить можно, а +1 — нет (максимальное положительное число равно 32767/32768 « « 0,9999695). Это общее свойство форматов с фиксированной запятой — максимальное по модулю отрицательное число равно -2м" \ а максимальное положительное «не дотягивает» до 2м”1 на 2~N.
ВНИМАНИЕ
В языках программирования высокого уровня часто применяется другая трактовка первого из пары чисел M.N, обозначающих формат с фиксированной запятой, — М обозначает не число разрядов целой части, а общее число двоичных разрядов, используемое для представления чисел. Такой подход используется и в MATLAB. В частности, в объектах-квантователях, создаваемых средствами пакета Filter Design (о них пойдет речь далее в этой главе), рассмотренный формат 1.15 задается с помощью двухэлементного вектора [16 15].
Достоинствами формата с фиксированной запятой являются равномерность квантования и простота реализации арифметических операций; главный недостаток —
ограниченный динамический диапазон. Динамическим диапазоном называют отношение между самым большим и самым малым по модулю (но отличным от нуля) числами, которые можно представить с помощью данного формата. Для формата с фиксированной запятой это отношение равно 2м"1 - 1.
Формат с плавающей запятой
Числа в формате с плавающей запятой (иногда его называют еще экспоненциальным форматом или научной нотацией') представляются в виде
x = F,
где / — мантисса (mantissa), а е — порядок (exponent). Обычно мантисса представляется в формате с фиксированной запятой, а порядок является целым числом.
Поскольку в экспоненциальной форме записи числа присутствуют два параметра, такое представление оказывается неоднозначным. Приведем простой пример:
2=2-2° =1-2* = --22 =...
2
Чтобы устранить эту неоднозначность, принято ограничивать диапазон допустимых значений мантиссы, например, так: 0,5 < |/| < 1, или так: 1 < |/| < 2 (этот вариант используется наиболее часто). Процедура приведения мантиссы к допустимому диапазону называется нормализацией, а экспоненциальная запись числа, удовлетворяющая указанным ограничениям, — нормализованной экспоненциальной формой.
Нормализация мантиссы позволяет сэкономить один разряд в ее двоичном представлении. Действительно, если нормализованная мантисса лежит в диапазоне [0,5, 1[, то ее двоичная запись имеет вид «0,1...», а если для нормализации используется диапазон [1, 2[, двоичная запись будет выглядеть как «1,...». В обоих случаях заранее известно, что первый значащий разряд равен единице, поэтому его можно не хранить. Иногда это называется использованием неявного старшего бита.
Для представления отрицательных чисел необходимо обеспечить возможность представления отрицательных значений мантиссы. Как правило, для этого используется прямой код (см. ранее раздел «Представление отрицательных чисел»), то есть модуль мантиссы и знаковый бит хранятся независимо.
Использование строго нормализованной мантиссы делает невозможным представление пулевого значения в формате с плавающей запятой. Поэтому используется специальное соглашение о том, что число, содержащее нули во всех разрядах мантиссы и порядка, считается нулем. Знаковый разряд при этом может иметь любое значение. Таким образом, имеется два представления нуля — «положительный нуль» и «отрицательный нуль». Об этом уже говорилось ранее в разделе «Представление отрицательных чисел».
Чтобы использование данного соглашения для представления нуля не привело к возникновению «дырки» в наборе представимых чисел, нулевое представление порядка должно соответствовать не нулевому, а минимально возможному
(то есть отрицательному) его значению. Поэтому для представления порядка чисел с плавающей запятой используется смещенный код (см. ранее раздел «Представление отрицательных чисел»).
ЗАМЕН АН ИЕ
Если бы порядок хранился, например, в дополнительном коде, число, имеющие нули во всех разрядах мантиссы и порядка, формально равнялось бы единице, и замена его на нуль привела бы к невозможности представления единичного значения, что явно неприемлемо.
Итак, для представления нулевого значения в формате с плавающей запятой мантисса неминуемо должна быть денормализованной. Однако если использовать деиормализованную мантиссу только для представления нуля, малые по модулю числа, представимые в данном формате, оказываются расположены неравномерно — вокруг нуля появляется «мертвая зона», размер которой существенно превышает расстояние между ближайшими к нулю представимыми числами.
Чтобы решить эту проблему и сделать расположение представимых чисел вблизи, нуля равномерным, применяют следующее соглашение о денормализации; если все разряды порядка имеют нулевые значения, то величина порядка увеличивается на единицу, а мантисса считается денормализованной, то есть содержащей в неявном старшем бите нуль, а не единицу. Это позволяет расширить возможности представления малых по модулю чисел. Фактически в данном случае мы увеличиваем диапазон возможных отрицательных порядков за счет сокращения числа значащих цифр мантиссы.
Поясним сказанное на примере, рассмотрев 6-битовый формат с плавающей запятой, в котором отведено 2 бита для хранения порядка и 3 — для хранения мантиссы. Биты двоичного представления числа, таким образом, имеют следующее назначение:
seemmm
Здесь s — знаковый бит, е — биты порядка, m — биты мантиссы. Рассчитаем и покажем на графике (рис. 7.1) все числа, которые можно представить в данном формате без использования и с использованием денормализации мантиссы для малых чисел. Соответствующие вычисления можно осуществить с помощью следующей MATLAB-программы:
% первый вариант - денормализациЯ только длЯ нуля
for k = 0:63
% перебор всех возможных представлений
s = 1 - 2 * bitgeKk. 6):
% знаковый множитель
e = b12de(bitget(k. 4:5))-l:
% порЯдок
m = 1 + bitand(k, 7) / 8: If ~bitand(k, 31)
X мантисса
f(k+l)=O: else
f(k+l)=s*m*(2Ae):
% нуль - особый случай
end
end subplot(2. 1, 1)
plot(f, f*0, '.')
% второй вариант - денормализациЯ длЯ малых по модулю чисел
for к-0:63%перебор всех возможныхпредставлений
s=l-2* bitget(k, 6):%знаковый множитель
е=b12de(bitget(k, 4:5)):%смещенный порЯдок
if е
X обычный случай - нормализуем мантиссу
. е - е-1:% истинный порЯдок
m - 1 + bitand(k, 7) / 8:% нормализованная мантисса
else
% нули в поле порядка - не нормализуем мантиссу
m - bitancKk, 7) / 8:% денормализованнаЯ мантисса
end
f(k+l)=s*m*(2*e):
end
subplot(2, 1. 2)
plot(f, f*0. '.')
Рис. 7.1. Числа, представимые в 6-битовом формате с плавающей запятой без использования (сверху) и с использованием (снизу) соглашения о денормализации мантиссы для малых чисел
Сравнение двух графиков рис. 7.1 наглядно демонстрирует, как денормализация мантиссы влияет на возможности представления малых по модулю чисел.
ЗАМЕЧАНИЕ
В приведенном листинге использованы следующие функции MATLAB: bitget — возвращает биты с заданными номерами из двоичного представления целого неотрицательного числа; bitand — выполняет побитовую логическую операцию «И» над неотрицательными целыми числами; b12de — преобразует вектор, состоящий из нулей и единиц, трактуя его как запись числа в двоичной системе счисления.
В заключение данного разделе приведем сведения о форматах с плавающей запятой, поддерживаемых процессорами персональных компьютеров:
формат с одинарной точностью (single в языке Pascal, float в языке С) — 32 бита, включающие знаковый разряд, 8 бит порядка и 23 бита мантиссы;
формат с двойной точностью (double в языках Pascal и С) — 64 бита, включающие знаковый разряд, 11 бит порядка и 52 бита мантиссы. Это основной формат хранения данных в MATLAB;
формат с расширенной точностью (extended в языке Pascal, 1 ong doubl е в языке С) — 80 бит, включающих знаковый разряд, 15 бит порядка и 64 бита мантиссы. В отличие от двух предыдущих форматов, здесь не используется неявный старший бит мантиссы.
Формат с плавающей запятой за счет экспоненциального представления чисел обладает существенно большим динамическим диапазоном, чем формат с фиксированной запятой при той же длине слова. Однако платой за это является неравномерность квантования и повышенная сложность реализации арифметических операций.
Процесс квантования
Как уже отмечалось в главе 3, квантованием называется процесс преобразования истинных значений отсчетов сигнала в двоичные числа, имеющие конечное число разрядов. Там же было введено понятие шума квантования. В данном разделе мы обсудим шум квантования несколько подробнее, а также рассмотрим идею неравномерного квантования.
Шум квантования
Как былЬ отмечено в разделе. «Аналоговые, дискретные и цифровые сигналы» главы 3, при представлении отсчетов дискретного сигнала в виде чисел с ограниченной разрядностью происходит их округление. Разность между исходным и округленным значениями называется шумом квантования.
Анализ вопросов, связанных с шумами квантования и ошибками округления в цифровых системах обработки сигналов, весьма сложен (см., например, [8]). В данном разделе будет представлено лишь несколько положений общего характера.
В качестве иллюстрации процесса квантования на рис. 7.2 показаны (без дискретизации по времени) гармонический сигнал s(t), результат его квантования sK(t) и возникающий при этом шум e(t) = s(t) - sK(t). Очевидно, что значения шума квантования лежат в следующих пределах:
— < e(t) < —, 22
где Д — расстояние между соседними уровнями квантования, то есть разность между ближайшими возможными значениями квантованного сигнала.
В большинстве случаев можно считать e(t) случайным процессом, имеющим равномерное распределение вероятности в указанных пределах. Такой случайный процесс имеет нулевое среднее значение и дисперсию, равную Д2/12.
После дискретизации шум квантования представляет собой последовательность чисел е^Т), образующую дискретный случайный процесс (см. раздел «Дискретные случайные сигналы» главы 3). Во многих случаях отсчеты этой последовательности можно считать некоррелированными друг с другом.
ЗАМЕЧАНИЕ
На рис. 7.2 предполагалось, что при квантовании производится округление значений уровня сигнала. В реальных АЦП вместо этого может использоваться усечение, то есть округление в сторону меньшего значения. В этом случае шум квантования лежит в диапазоне 0...Д, его среднее значение равно Д/2, а дисперсия, как и в случае округления, составляет Д2/12.
В качестве примера рассчитаем отношение сигпал/шум (signal-to-noise ratio, SNR) при квантовании гармонического сигнала. Пусть квантованию подвергается гармонический сигнал с амплитудой А. Определим отношение сигнал/шум, разделив эту амплитуду на средпеквадратическое значение шума квантования:
Va2/12 . △
где N = 2А/Д — число уровней квантования, укладывающихся в размахе сигнала.
АЦП, имеющий q двоичных разрядов, обеспечивает N = 2? уровней квантования. Если размах сигнала соответствует полному рабочему диапазону АЦП, то отношение сигпал/шум равно
С/Ш = 2"Тз.
Если выразить этот результат в децибелах, получится простая формула, показывающая связь между числом двоичных разрядов, используемых для представления отсчетов сигналов, и максимально достижимым в этом случае отношением сигнал/шум:
С/ШлБ = 20 lg(2’ 73) = 20 gig 2 + 101g 3 « 6д + 4,77 дБ.
Неравномерное квантование
Равномерное квантование, о котором шла речь до сих пор, гарантирует, что размах шума квантования не будет превосходить величины шага квантования (за исключением тех случаев, когда значение входного сигнала выходит за допустимые пределы). Однако если потребовать минимизации среднеквадратического значения шума квантования, оптимальный набор уровней квантования будет зависеть от статистических свойств сигнала, а именно от плотности вероятности его мгновенных значений.
В этом случае интуитивно ясно, что уровни квантования должны располагаться плотнее друг к другу в областях тех значений, которые сигнал принимает с большей вероятностью.
Идея неравномерного квантования в общем случае формулируется следующим образом: диапазон возможных значений сигнала делится на N зон квантования а0... ai, av... а^,..., aN_ р.. aN. Зонам квантования сопоставлены квантованные значения bk е [ак_ 1, ак]. Если входной сигнал попадает в диапазон ak_ р.. ак, его квантованное значение принимается равным bk.
Итак, пусть сигнал имеет плотность вероятности р^х) и мы хотим осуществить его N-уровневое квантование так, чтобы сделать нулевым среднее значение и минимизировать дисперсию шума квантования. Среднее значение ошибки квантования е будет равно
N "4_ N «4N
e = Y JO' ~bk)p{x)dx — х -^b, \p(x)dx=x-^bkPk, k=,«k-l4 = 1 ak_!*=*
где x — математическое ожидание сигнала х, а Рк — вероятность попадания сигнала в /?-ю зону квантования.
Средний квадрат ошибки рассчитывается как
У ДГOfcДГ
е2 = 22 f(x ~bk )2 p{x)dx = х2 -222^ jxp(x)dx + 22 bk jp(x)dx.
4=1 «6-1*=|«4-14=1«4-1
Приравнивание к нулю частных производных этого выражения по ак и Ьк дает следующие соотношения для оптимальных параметров квантования:
(7.1)(7.1)^xp(x)dx _bk_l+bk
(7.1)
(7.1)
f"1 p^x^dx *«4-1
Данные формулы при известной плотности вероятности р(х) дают систему нелинейных уравнений относительно ак и Ьк. Аналитическое решение этой системы даже для несложных функций р^х) оказывается весьма непростым и его в большинстве случаев приходится искать численными методами.
ЗАМЕЧАНИЕ ;
Выполнение условий (7.1) автоматически обеспечивает и нулевое среднее значение шума квантования.
Если формула для плотности вероятности сигнала неизвестна, но имеется «типичный» набор его отсчетов, можно произвести оптимизацию параметров квантования по этому тестовому набору. Поиск оптимальных значений аки Ькв этом случае производится численным итерационным методом (см. далее в этой главе описание функций MATLAB quantiz и lloyds).
Неравномерное квантование применяется, например, в современных цифровых телефонных сетях. Малые значения речевого сигнала более вероятны, чем большие, поэтому используется нелинейное преобразование сигнала, когда диапазон значений, при равномерном квантовании представляемый 12 двоичными разрядами (4096 уровней), квантуется на 256 (8 двоичных разрядов) неравномерно расположенных уровней согласно Рекомендации ITU-T G.711. Зависимость уровня квантования от его номера представляет собой кусочно-линейную аппроксимацию экспоненциального закона. В цифровых каналах связи передаются 8-раз- рядные номера уровней квантования, а при цифро-аналоговом преобразовании они конвертируются в 12-разрядные значения соответствующих им уровней сигнала.
Эффекты квантования в цифровых фильтрах
Шум квантования — не единственная проблема, связанная с конечной разрядностью используемых чисел. Так, неизбежное округление разнообразных коэффициентов, используемых в алгоритмах цифровой обработки сигналов, приводит к тому, что параметры фильтров и других устройств отличаются от желаемых, причем возможны ситуации, когда эти отличия весьма существенны. Кроме того, из-за округления промежуточных результатов может происходить накопление вычислительных погрешностей, также искажающих конечный результат. Эти эффекты будут рассмотрены в данном разделе.
Квантование коэффициентов цифровых фильтров
До сих пор, рассматривая характеристики дискретных фильтров, мы получали коэффициенты фильтров некоторыми расчетными методами и считали, что они представлены точно. Однако при практической реализации фильтров почти неизбежно возникает необходимость округления их коэффициентов. При использовании цифровых сигнальных процессоров это связано с поддерживаемыми ими форматами представления чисел, при создании программ обработки сигналов для персональных компьютеров — со стремлением повысить быстродействие.
Из-за округления коэффициентов характеристики фильтра претерпевают искажения, величина которых зависит не только от погрешности представления коэффициентов, но и от исходных параметров фильтра и формы его построения (см. раздел «Формы реализации дискретных фильтров» главы 4).
В нерекурсивных фильтрах коэффициенты равны отсчетам импульсной характеристики и линейно связаны с комплексным коэффициентом передачи. Поэтом) малые искажения коэффициентов приводят к малым искажениям частотных характеристик и проблемы, связанные с округлением коэффициентов, проявляются редко. Однако, если фильтр должен иметь очень крутой спад АЧХ между полосами пропускания и задерживания, округление коэффициентов все же может привести к заметным искажениям частотных характеристик.
Убедимся в этом на простом примере. Синтезируем методом Ремеза ФНЧ 256-гс порядка с полосой пропускания, простирающейся до 0,2, и полосой задерживания, начинающейся от 0,21 (указаны частоты, нормированные к частоте Найквиста). Затем округлим коэффициенты фильтра с точностью до 1/256, оставив г них 8 двоичных разрядов после запятой, и построим графики АЧХ до и после округления (рис. 7:3):
» U = remez(256, [0 0.2 0.21 1]. [1 1 0 0]):
» bq = round(b*256)/256; % округление
» [h / f] = freqz(b);
» hq = freqz(bq);
» subplotCl, 2. 1)
» plot(f/pi, abs(h))
» subplotCl, 2. 2)
» plot(f/p1, abs(hq))
Рис. 7.3. АЧХ нерекурсивного ФНЧ до (слева) и после (справа) округления коэффициентов
Как видите, ничего особенно страшного не произошло — лишь увеличился раз мах пульсаций АЧХ. Естественно, в любом случае следует обязательно про контролировать параметры фильтра после округления коэффициентов, чтобь проверить, удовлетворяет ли квантованный фильтр предъявляемым к нему тре бованиям.
Значительно серьезнее сказывается округление коэффициентов на характера стиках рекурсивных фильтров, поскольку коэффициенты знаменателя функциг передачи связаны с импульсной и частотными характеристиками нелинейно. Каг правило, наибольшие искажения происходят в тех случаях, когда АЧХ фильтр;
имеет крутые скаты в переходных зонах между полосами пропускания и задерживания.
Приведем пример, иллюстрирующий сказанное. Рассчитаем эллиптический ФНЧ 6-го порядка, имеющий частоту среза, составляющую 0,2 от частоты Найквиста, пульсации в полосе пропускания, равные 1 дБ, и уровень пульсаций в полосе задерживания, равный -40 дБ. Напомним, что из всех фильтров, синтезируемых по аналоговым прототипам, именно эллиптические фильтры дают максимальную крутизну спада АЧХ при переходе от полосы пропускания к полосе задерживания. Далее округляем коэффициенты фильтра точно так же, как это делалось в предыдущем примере, и строим графики АЧХ фильтра до и после округления (рис. 7.4):
» [b. а] = eHip(6, 1, 40, 0.2): %исходный фильтр
» bq = round(b*256)/256:%округление числителя
» aq = round(a*256)/256:%округление знаменателя
» [h, f] = freqz(b, а):КЧХ исходного фильтра
» hq = freqz(bq, aq):ZЧХ округленного фильтра
»plot(f/p1. abs(h), f/pi, abs(hq), '--')
Рис. 7.4. АЧХ рекурсивного фильтра до<сплошная линия) и после (пунктирная линия) округления коэффициентов
В данном случае АЧХ изменилась просто катастрофически: в несколько раз увеличилась амплитуда пульсаций коэффициента передачи в полосе пропускания, скат АЧХ стал заметно более пологим, в полосе задерживания исчезли две точки с нулевым коэффициентом передачи.
Теперь посмотрим, что изменится, если мы представим исходный фильтр по- другому — в виде трех последовательно включенных секций второго порядка. В данном случае разница между АЧХ исходного и квантованного фильтра настолько мала, что визуально она не проявляется. Поэтому вместо графиков самих АЧХ построим график их разности (рис. 7.5):
» sos = tf2sos(b. а):% секции 2-го порядка
» sos_q = round(sos*256)/256: % округление коэффициентов
» [b_sos_q, a_sos_q] = sos2tf(sos):
» [h, f] - freqz(b, a);
» h_sos_q - freqz(b_sos_q, a_sos_q);
» plot(f/p1. abs(h)-abs(h_sos_q))
Рис. 7.5. Разность двух АЧХ, полученных до и после округления коэффициентов рекурсивного фильтра, представленного в виде секций 2-го порядка
Рисунок 7.5 показывает, что отклонение АЧХ квантованного фильтра от исходной не превосходит 3-10-12, то есть весьма невелико. Таким образом, при представлении фильтра в виде последовательно включенных секций второго порядка округление коэффициентов влияет на характеристики фильтра значительно слабее, чем при прямой форме реализации.
Данный пример демонстрирует общую закономерность, впервые установленную Кайзером [8]: параметры любого фильтра с резким изменением частотной характеристики в переходной полосе, реализованного в прямой форме, крайне чувствительны к значениям коэффициентов фильтра.
Существует два основных подхода к анализу и синтезу фильтров с квантованными коэффициентами. Можно рассматривать погрешности представления коэффициентов как случайные величины и, задав статистическое описание этих погрешностей, оценить среднеквадратическое отклонение частотной характеристики от исходной. Второй подход заключается в использовании прямой оптимизации квантованных коэффициентов с целью достижения минимального (в смысле среднеквадратической ошибки или максимального модуля разности) отклонения АЧХ от заданной. Более подробную информацию об этом можно найти в [8].
Масштабирование коэффициентов цифровых фильтров
При разработке систем, работающих в реальном масштабе времени, для ускорения вычислений часто используется формат с фиксированной запятой. В этом
случае может оказаться, что значения некоторых коэффициентов фильтров выходят за пределы диапазона, представимого в выбранном формате. Для решения данной проблемы прибегают к масштабированию фильтров. Наиболее часто коэффициенты приводят к диапазону [-1, 1].
Рассмотрим сущность масштабирования на несложном примере. Рассчитаем эллиптический ФНЧ 4-го порядка с частотой среза, равной 20 % от частоты Найквиста, пульсациями в полосе пропускания 1 дБ и подавлением сигнала в полосе задерживания 60 дБ:
» [b. а] = е111р(4, 1. 60. 0.2) b =
0.00590.00530.00960.00530.0059
а =
1.0000 -3.04773.8240 -2.29260.5523
Как видите, максимальное (по модулю) значение коэффициентов фильтра составляет 3,824. Запишем для данного фильтра алгоритм фильтрации (см. формулу (4.1) в разделе «Сущность линейной дискретной обработки» главы 4), а затем разделим и умножим правую часть формулы на 4 (в качестве коэффициента масштабирования удобно выбирать степень двойки):
у^ = 0,0059х(6) + 0,0053х(6 -1)+ 0,0096.1^ -2) + 0,ОО53.г(А -3) +
+ 0,0059х(^ - 4) + 30477 у(к -1) -38240y(k -2) +
+ 2,2926у(к - 3) -0,5523г/(А - 4) =
= 4(0,0015х(^) + 0,0013х(^-1) + 0,0024х(^-2)+ '
+ 0,0013.г(А - 3) + 0,0015 х(к - 4) + 0,7619у(к -1) -
-0,9560у(к -2) + 0,5131у(к - 3) -0,1381 у(к -4)).
В полученной формуле алгоритма фильтрации значения коэффициентов по модулю не превышают единицы, а для сохранения результата неизменным понадобилось умножение выходного сигнала на коэффициент масштабирования. Исходный и масштабированный варианты структурной схемы показаны на рис. 7.6. Итак, при масштабировании цифрового фильтра все его коэффициенты делятся на одну и ту же константу, и на нее же умножается рассчитанный выходной сигнал. В качестве масштабирующего множителя удобно выбирать степень двойки, поскольку умножение на степень двойки в формате с фиксированной запятой сводится к поразрядному сдвигу двоичного представления числа влево.
Если фильтр высокого порядка реализуется «целиком» (без разделения его на последовательно включенные секции), диапазон абсолютных значений коэффициентов фильтра может быть весьма широк. При представлении коэффициентов в формате с фиксированной запятой оказывается, что самые маленькие (по модулю) коэффициенты могут из-за округления потерять несколько значащих цифр. Это приводит к искажению характеристик фильтра, порой весьма существенному, особенно в рекурсивных фильтрах. Данный эффект мы уже обсуждали в предыдущем разделе. Там же мы видели, что реализации фильтра в виде последовательно включенных секций второго порядка значительно ослабляет эти Искажения. Это происходит из-за того, что в каждой отдельно взятой секции второго порядка разброс абсолютных значений коэффициентов оказывается значитель-
но меньше, чем у фильтра в целом, особенно если при разбиении на секции группировать ближайшие друг к другу пары нулей и полюсов.
Рис. 7.6. Фильтр 4-го порядка (сверху) подвергается масштабированию с коэффициентом 4 (снизу) '
Переполнение разрядной сетки в процессе вычислений.
В процессе вычисления выходного сигнала фильтра производится множество операций умножения и сложения. При этом промежуточные результаты вычис-
лений могут значительно превосходить окончательное значение и вызвать переполнение разрядной сетки вычислительного устройства.
В качестве примера посмотрим, каких значений достигают промежуточные результаты вычислений при обработке синусоидального сигнала фильтром нижних частот Баттерворта 4-го порядка, реализованным в прямой форме (см. рис. 4.4 в главе 4). Чтобы получить доступ к промежуточным результатам вычислений, нам придется вместо использования функции filter реализовать фильтр вручную. Приведенная ниже MATLAB-программа рассчитывает фильтр методом билинейного с-преобразования, а затем пропускает через него синусоидальный сигнал, сохраняя при этом в массиве state всю историю работы единственного сумматора, имеющегося в данной схеме фильтра:
Fs = 8еЗ;
X частота дискретизации
t = 0:l/Fs:0.01:
X дискретное время
FO = 1еЗ:
X частота сигнала
s = sin(2*pi*F0*t);
X входной сигнал
N = 4;
X порядок фильтра
[b, а] = butter(N, F0/Fs*2); % частота среза равна частоте сигнала dx = zerosd, N+l): % линия задержки длЯ входного сигнала dy = zerosd. N+l); % линия задержки длЯ выходного сигнала m = 1;
state = zerosd, 2*N*length(s)):
у - zerosd, length(t)):
for k = l:length(t)% цикл по отсчетам входного сигнала
y(k) = 0:% начальное состояние сумматора
dx = [s(k) dxd:N)]:% новое состояние линии задержки
for n = l:N+1% цикл по нерекурсивной ветви
y(k) = у(к) + b(n) * dx(n):
state(m) - у(к):% текущее состояние сумматора
m •= m + 1;
end
for n = 2:N+lX цикл по рекурсивной ветви
y(k) - y(k) - a(n) * dy(n):
state(m) = y(k):X текущее состояние сумматора
m = m + 1;
end
dy(2:N+l) = [y(k) dy(2:N)]; X новое состояние линии задержки end
plot(t, s. t, у, '--') X входной и выходной сигналы figure plot(state)X промежуточные состояния сумматора
Входной и выходной сигналы фильтра показаны на рис. 7.7 сверху, а промежуточные результаты суммирования — снизу. Из графиков видно, что промежуточные значения достигают ±1,3 и превосходят амплитуду как входного, так и .выходного сигналов. Это может привести к переполнениям в арифметическом устройстве и искажениям в выходном сиИШё. '. > » . г о
При реализации фильтра в канонической форме (см. рис. 4.6 в главе 4) вычисления выполняются сначала в рекурсивной ветви, а затем в нерекурсивной.
При этом уровень сигнала, отсчеты которого хранятся в единственной линии задержки фильтра, может значительно превышать амплитуды входного и выходного сигналов. 1
Рис. 7.7. Входной и выходной сигналы ФНЧ Баттерворта (сверху) и промежуточные результаты суммирования (снизу)
Продемонстрируем это, рассмотрев тот же фильтр Баттерворта 4-го порядка, который использовался в предыдущем примере, Сигнал, хранящийся в линии задержки при канонической реализации фильтра, получается в результате обработки входного сигнала «чисто рекурсивным» фильтром, в нерекурсивной ветви которого не используется задержанных отсчетов. Для оценки уровня этого сигнала достаточно рассчитать АЧХ рекурсивной части фильтра (рис. 7.8):
» [b. а] = butter(4. 1/4):% расчет фильтра
» [h, f] = freqz(l. а. []. 2): % АЧХ рекурсивной ветви
X график АЧХX график АЧХ» plot(f. abs(h))
X график АЧХ
X график АЧХ
» grid on
В данном случае для возникновения переполнений оказывается еще больше возможностей, чем в предыдущем, — как видно из графика, коэффициент передачи рекурсивной части фильтра может достигать семи. Это означает, что промежуточные результаты вычислений для канонической формы реализации фильтра могут в семь раз превосходить амплитуду входного сигнала!
Приведенные примеры показывают, что переполнения в процессе вычислений могут стать серьезной проблемой при реализации алгоритмов цифровой обработки сигналов. Уменьшить вероятность переполнений можно, используя для хранения чисел формат с плавающей запятой, обладающий большим динамическим диапазоном, однако в этом случае возрастает сложность реализации арифметических операций. В любом случае разработанная система обработки сигналов должна тщательно тестироваться для обнаружения потенциальных проблем, связанных с конечной точностью вычислений. Такое тестирование можно реализовать, например, с помощью средств пакета Filter Design, рассматриваемых далее в этой главе.
Округление промежуточных результатов вычислений
При реализации различных алгоритмов обработки сигналов в процессе вычислений формируется множество промежуточных результатов. Формат хранения этих результатов зачастую вынуждает округлять их, что приводит к появлению дополнительных погрешностей. Операции, при которых появляются эти погрешности, зависят от способа представления чисел, используемого в вычислительном устройстве.
При использовании арифметики с фиксированной запятой операции сложения и вычитания не приводят к необходимости округления результатов — они могут вызвать лишь переполнение. Действительно, ведь количество знаков после запятой у результата сложения двух чисел, представленных в формате с фиксированной запятой, такое же, как было у слагаемых (слева суммируемые числа записаны в двоичной системе счисления, справа — в десятичной):
10,11002,75,
01,01011,3125
100.0001 4,0625 '
В данном примере суммируемые числа имели по 4 двоичных разряда после запятой и столько же разрядов после запятой необходимо для представления их суммы. ■
А вот для представления целой части суммы нужно три разряда, тогда как для слагаемых было достаточно двух. Поэтому, если для представления целой части чисел используется два разряда, в данном случае возникнет переполнение.
В отличие от сложения умножение чисел с фиксированной запятой приводит к увеличению числа значащих цифр результата (по сравнению с сомножителями) и, следовательно, к необходимости округления. Перемножим те же два числа, которые использовались в примере сложения:
10,1100
01,0101
2,75
1.3125
10 1100
1011 00
10 1100
3.609375
11.1001 1100
Результат умножения в данном примере имеет 6 значащих цифр после запятой. Если для представления результата используется тот же формат, что и для сомножителей, придется производить округление:
11,10011100 « 11.1010 3.609375 « 3.625
Если для представления чисел используется формат с плавающей запятой, все сказанное об умножении сохраняет силу. Впрочем, если результат умножения по модулю не превосходит единицы, использование формата с плавающей запятой даст большую точность, поскольку не будут зря тратиться разряды для представления незначащих нулей слева.
Однако операции сложения в формате с плавающей запятой тоже могут приводить к потере точности. Пусть рассматриваемые нами, два числа представлены в формате с плавающей запятой, использующем 6 разрядов для хранения дробной части нормализованной мантиссы (мантисса и порядок записаны в двойчной системе счисления): .
10,1100 = 0.101100 ■ 210
01.0101 = 0,101010 ■ 201
Представим результат сложения тоже в экспоненциальном формате:
0,101100 . 210 + 0.101010 ■ 201 - 0.10 0 0 0 01 ■ 211
Как видите, для точного представления результата шести значащих цифр мантиссы оказалось мало, а значит, придется выполнять округление. В данном случае, когда погрешность округления в обе стороны одинакова, возможно использование различных подходов. Выберем, например, округление в большую сторону:
0,1000001 ■ 211 « 0,100001 • 2114,0625 « 4,125
В результате при сложении чисел с плавающей запятой может не выполняться свойство ассоциативности — результат суммирования нескольких чисел может зависеть от последовательности выполнения сложений. При обучении программированию обычно дается рекомендация складывать числа, начиная с меньших (по модулю) и заканчивая самыми большими. Однако при реализации алгоритмов цифровой обработки сигналов мы, как правило, лишены возможности произвольно менять последовательность суммирования (хотя бы потому, что для сортировки слагаемых потребуется дополнительное время).
Для статистического анализа ошибок округления в структурную схему фильтра вводятся эквивалентные источники шума, добавляемого к результатам умножения и (при использовании арифметики с плавающей запятой) сложения. Более подробную информацию об этом можно найти в [8].
Примеры моделирования ошибок округления в цифровом фильтре и при расчете БПФ будут приведены далее в этой главе, при описании функций qfilt и qfft пакета Filter Design.
Предельные циклы
Ошибки округления при вычислениях в цифровых фильтрах могут приводить к еще одной очень серьезной неприятности — появлению так называемых предельных циклов (limit cycle), когда вроде бы устойчивый фильтр начинает демонстрировать неустойчивое поведение.
Поясним это явление на простейшем примере, взятом из [8]. Пусть имеется рекурсивный фильтр первого порядка, описываемый разностным уравнением
y(k) = х^ + 0,95 y(k - 1).
Единственный полюс функции передачи данного фильтра, равный 0,95, находится внутри единичной окружности, что свидетельствует об устойчивости фильтра. Пусть входной сигнал отсутствует (x(k) - 0), а внутреннее состояние фильтра, которое в данном случае представляется единственным числом г/(0), равно 13. При точных вычислениях сигнал на выходе фильтра экспоненциально затухает:
у( 1) = 0,95 г/(0) - 0,95 • 13 = 12,35, г/(2) = 0,95 г/(1) - 0,95 • 12,35 - 11,7325, 2/(3) = 0,95 г/(2) - 0,95 • 11,7325 - 11,145875,
2/(4) = 0,95 2/(3) = 0,95 • 11,145875 = 10,58858125,
г/(5) - 0,95 2/(4) - 0,95 • 10,58858125 = 10,0591521875,
А теперь будем считать, что в ячейке памяти фильтра значение хранится в целочисленном формате и после выполнения умножения используется округление (будем обозначать его квадратными скобками). Выходной сигнал радикально изменится:
г/(1) = [0,95г/(0)] = [0,95 ■ 13] = [12,35] - 12,
г/(2) - [0,95 2/(1)]=[0,95 •12]=[11,4] = 11,
2/(3) = [0,95 г/(2)]=[0,95 •И]-[10,45] = 10,
2/(4) = [0,95 г/(3)]=[0,95 •10]=[9,5] = 10,
2/(5) = [0,95 г/(4)]=[0,95 ■10]=[9,5] = 10,
Итак, выходной сигнал фильтра «залипает» на значении 10 и далее не меняется. Это и есть простейший случай предельного цикла (с периодом, равным единице). Если в разностном уравнении фильтра изменить знак у коэффициента 0,95, мы получим предельный цикл с периодом, равным двум, в виде чередования значений 10 и -10. В фильтрах более высокого порядка могут возникать предельные циклы с разным периодом.
Различают две разновидности предельных циклов:
«зернистые» (granular) предельные циклы возникают, когда значения внутреннего состояния фильтра при отсутствии входного сигнала затухают, но из- за ошибок округления не доходят до нуля. Именно такой цикл наблюдается в приведенном примере;
«переполняющие» (overflow) предельные циклы имеют место в том случае, когда из-за вычислительных погрешностей значения внутреннего состояния фильтра при отсутствии входного сигнала не затухают, а возрастают, вызывая переполнение.
Для анализа возможностей возникновения предельных циклов используется понятие эффективных значений коэффициентов знаменателя функции передачи фильтра. Под эффективным значением коэффициента понимается отношение округленного результата умножения к использованному в качестве множителя значению внутреннего состояния фильтра. Эффективное значение коэффициента будет разным для разных значений состояния. Если для какого-то внутреннего состояния фильтра набор эффективных значений коэффициентов дает полюс функции передачи, расположенный на единичной окружности, это означает, что данное внутреннее состояние при отсутствии входного сигнала дает предельный цикл. В нашем примере эффективное значение единственного коэффициента фильтра равно■. ,
№95^-1)]
Эфф У(к-^ '
Построим график значений аЭ(М) для целочисленных значений г/(^ - 1), лежащих в диапазоне от -20 до 20 (рис. 7.9):
» у ■= -20:20;
» y(f1nd(-y))=[]; X удаляем нулевое значение
» a_eff = round(0.95*у)./у:
» plot(у. a_eff, '.')
» yl1m([0.9 1.1])
» xlabel('y(k-l)')
» ylabel('a_[eff}')
1.11.081.061.041.02 t 10.980.960.940.921.11.081.061.041.02 t 10.980.960.940.92y(k-1)y(k-1)Рис. 7.9. Зависимость эффективного значения коэффициента рекурсивного фильтра первого порядка от внутреннего состояния фильтраРис. 7.9. Зависимость эффективного значения коэффициента рекурсивного фильтра первого порядка от внутреннего состояния фильтра
1.1
1.08
1.06
1.04
1.02 t 1
0.98
0.96
0.94
0.92
1.1
1.08
1.06
1.04
1.02 t 1
0.98
0.96
0.94
0.92
y(k-1)
y(k-1)
Рис. 7.9. Зависимость эффективного значения коэффициента рекурсивного фильтра первого порядка от внутреннего состояния фильтра
Рис. 7.9. Зависимость эффективного значения коэффициента рекурсивного фильтра первого порядка от внутреннего состояния фильтра
Как видите, если у(к - 1) лежит в диапазоне от -10 до 10, значение аЭ(М, становится равным единице, а фильтр оказывается на границе устойчивости (полюс функции передачи лежит на единичной окружности), что и приводит к появлению предельного цикла.
В приведенном примере анализ предельных циклов оказывается очень простым, поскольку внутреннее состояние фильтра описывается единственным числом. Для фильтров, степень знаменателя функции передачи которых превышает единицу, анализ базируется на тех же принципах, но оказывается более сложным. Для выполнения такого анализа в пакете Filter Design имеется специальная функция limitcycle, которую мы рассмотрим далее в этой главе.
Учет эффектов конечной точности вычислений в MATLAB
В пакетах расширения MATLAB имеется ряд средств для учета эффектов, связанных с конечной точностью представления чисел в вычислительных системах. К таким средствам относятся функции, реализующие равномерное и неравно-
мерное квантование, а также объекты квантователей, квантованных фильтров и квантованных БПФ.
Функции квантования
Функции квантования имеются в двух пакетах расширения MATLAB. В пакете Signal Processing содержатся функции uencode и udecode, осуществляющие равномерное (буква «и» в именах функций означает «uniform» — равномерный) квантование и восстановление сигнала. Пакет Communications предоставляет в распоряжение пользователя более гибкую функцию неравномерного квантования quantiz, а также функцию lloyds, предназначенную для оптимизации параметров неравномерного квантования по тестовому набору данных.
Функция uencode
Функция uencode осувхествляет равномерное квантование входного сигнала. Синтаксис вызова функции следующий:
у = uencode(x. n. v. 'signflag')
Здесь х — массив неквантованных отсчетов входного сигнала (числа с плавающей запятой), п — число двоичных разрядов, используемое для представления квантованных значений, которое может лежать в диапазоне от 2 до 32.
Остальные входные параметры являются необязательными. Параметр v задает предельное абсолютное значение квантуемого сигнала. По умолчанию этот параметр равен 1, так что уровни квантования перекрывают диапазон -1...1.
Результатом работы функции является массив у, содержащий целые числа — номера уровней квантования, соответствующих отсчетам из массива х. Размеры массивов х и у совпадают.
Способ нумерации уровней квантования определяется последним входным параметром 'signflag', который может принимать одно из двух строковых значений:
'unsigned' — в массиве у содержатся целые числа от 0 до 2" - 1 (этот вариант принят по умолчанию);
'signed' — в массиве у содержатся целые числа от -2""1 до 2”"1 - 1.
MATLAB хранит выходной массив у в одном из целочисленных форматов данных согласно следующей таблице.
Число разрядов п
Тип выходных данных
’signflag' = 'unsigned'
’signflag' = 'signed'
2...8
uint8
int8
9...16
uint!6
int!6
17...32
uint32
1nt32
Если значения входного сигнала выходят за пределы диапазона -и.„и, происходит насыщение (saturation): значениям, меньшим -у, соответствует минимально возможное значение у (0 или -2”"1), а значениям, превышающим и, — максимально возможное (2" - 1 или 2И~1 - 1).
Обратное преобразование номеров уровней квантования в квантованные значения производится рассматриваемой далее функцией udecode.
Функция udecode
Функция udecode является обратной по отношению к uencode — она превращает номера уровней квантования в соответствующие квантованные значения. Синтаксис вызова функции следующий:
х - udecode(y. n, v, 'saturatemode')
Смысл параметров х, у, п и v здесь тот же, что и для функции uencode.
Строковый параметр ' saturatemode' определяет поведение функции в случае, если в массиве у обнаруживаются значения, представленные большим числом двоичных разрядов, чем указано в параметре п:
' saturate' (насыщение; этот вариант принят по умолчанию) — при выходе значений у из допустимого диапазона для их представления в массиве х используются крайние (минимальный и максимальный) уровни квантования;
'wrap' (перенос) — при выходе значений у из допустимого диапазона «лишние» старшие разряды просто игнорируются, что эквивалентно смещению номеров уровней квантования на 2” (возможно, неоднократному).
Рис. 7.10. Квантованный сигнал, восстановленный при недостаточном числе уровней квантования: слева — режим насыщения, справа — режим переносаРис. 7.10. Квантованный сигнал, восстановленный при недостаточном числе уровней квантования: слева — режим насыщения, справа — режим переноса
Рис. 7.10. Квантованный сигнал, восстановленный при недостаточном числе уровней квантования: слева — режим насыщения, справа — режим переноса
Рис. 7.10. Квантованный сигнал, восстановленный при недостаточном числе уровней квантования: слева — режим насыщения, справа — режим переноса
В качестве примера использования функций, uencode и udecode произведем квантование синусоидального сигнала, а затем при восстановлении квантованных значений уменьшим число двоичных разрядов, чтобы продемонстрировать влияние параметра'saturatemode' (рис. 7.10):
» t - 0:0.1:20:
» s - 0.75 * cos(t):
» у - uencode(s. 5, 1. 'signed'); % 32 уровня квантования
» % при восстановлении используем 16 уровней квантования
» xl - udecode(y, 4, 1. 'saturate'): X режим насыщения
» х2 - udecode(y. 4, 1. 'wrap'):% режим переноса
» subplotd, 2, 1)
» plot(t, xl)
» subplotd, 2. 2)
» plot(t, x2)
Функция quantiz
Функция quantiz реализует неравномерное квантование сигнала, описанное в этой главе ранее. Синтаксис вызова функции следующий:
[index, quants, distor] = quantiz(sig, partition, codebook)
Здесь sig — вектор отсчетов сигнала, partition — вектор границ зон квантования (в разделе «Неравномерное квантование» для этих границ использовалось обозначение аД codebook — вектор уровней квантования. Длина этого вектора должна на единицу превосходить длину вектора partition.
Выходные параметры 1 ndex и quants имеют такие же размеры, как и вектор сигнала, и содержат соответственно индексы и значения квантованного сигнала. Результат index определяется следующим образом:
если sig(k) < partitiond), то index(k) - 0;
если partition(m) < sig(k) < partition(nH-l), то index(k) = m;
если sig(k) > partition(end), то index(k) - length(partition).
Результат quants содержит квантованные значения входного сигнала и рассчитывается как codebook (index+1). Таким образом, величина codebook d) задает уровень квантования для всех значений сигнала, меньших, чем partitiond), величина codebook(m) соответствует зоне квантования partition(m-l)...partition(m), а последнее значение codebook(end) будет использоваться в качестве уровня квантования для всех значений сигнала, превышающих partition(end).
Третий выходной параметр distor содержит значение среднего квадрата ошибки квантования.
Если выходные параметры quants и distor не используются, входной параметр codebook при вызове функции можно опустить.
Функция lloyds
Функция lloyds осуществляет оптимизацию параметров неравномерного квантования, основываясь на тестовом сигнале, являющемся «типичным представителем» тех данных, которые будут затем подвергаться квантованию. Синтаксис вызова функции следующий:
[partition, codebook, distor] = ...
lloyds(x. initcodebook, tol. plotflag)
Здесь x — тестовый сигнал, который должен быть достаточно длинным, чтобы по нему можно было оценить плотность вероятности отсчетов, initcodebook — на-
чальное приближение для набора уровней квантования. Этот параметр может также быть не вектором, а числом, в таком случае он задает лишь количество уровней квантования, а начальное приближение выбирается автоматически.
Оставшиеся два входных параметра являются необязательными и при вызове могут быть опущены.
Параметр tol позволяет управлять критерием завершения итерационного алгоритма поиска оптимального решения. Если относительное изменение среднего квадрата ошибки на очередной итерации оказывается меньше tol, решение считается найденным. По умолчанию значение параметра tol равно 10"7.
При использовании параметра pl otf 1 ад функция выводит график тестового сигнала, показывая горизонтальными линиями зеленого цвета подобранные уровни квантования, а линиями красного цвета — границы зон квантования. Значение параметра plotflag может быть любым — важен лишь факт его наличия или отсутствия.
Результаты работы функции — выходные параметры partition, codebook и distor — имеют тот же смысл, что и для функции quantiz. '
Функции пакета расширения Filter Design
В пакете расширения Filter Design реализованы квантователи, а также алгоритмы фильтрации и БПФ, использующие представление чисел (в том числе и промежуточных результатов вычислений) в заданных форматах. Прежде чем переходить к описанию конкретных функций, необходимо сказать несколько общих слов об их устройстве.
Дело в том, что квантователи, фильтры и блоки вычисления БПФ реализованы в пакете Filter Design в виде объектов, имеющих некоторый набор свойств, а обычные функции f 11 ter, fft и некоторые другие расширены таким образом, что они могут принимать такие объекты в качестве одного из параметров.
Упомянутые объекты сначала нужно создать. Это делается с помощью функции- конструктора. Например, для квантованного фильтра роль конструктора выполняет функция qf 111. В простейшем варианте конструктор может вызываться без параметров:
» hq - qfilt;
При этом будет создан объект квантованного фильтра с именем hq, все свойства которого принимают значения по умолчанию. Для установки нужных значений свойств используется функция set:
» set(hq. 'name'. value);
Здесь hq — идентификатор объекта, 'name' — строка с именем свойства, value — задаваемое для него значение..
Считать значение свойства можно с помощью функции get:
» value = get(hq, 'name')
Смысл параметров hq и 'name' здесь тот же, что и для функции set, а результат val ue содержит текущее значение запрашиваемого свойства.
Свойства объектов доступны также через синтаксис обращения к полям структуры:
hq.name - value; % присваивание значения
value - hq.name: И считывание значения
Конструктор объекта может вызываться с параметрами, задающими значения свойств сразу же при создании объекта. Подробнее речь об этом пойдет при описании конкретных функций и объектов.
ЗАМЕЧАНИЕ
Имена свойств нечувствительны к регистру символов. Более того, при обращении к ним можно использовать лишь несколько начальных символов имени — необходимо только, чтобы этот начальный фрагмент однозначно идентифицировал свойство. Так, обратиться к свойству Quantizedcoefficients объекта квантованного фильтра можно, указав строку 'quantizedcoefficients' или всего одну букву 'q' (других свойств на эту букву данный объект не имеет).
После создания объекта и настройки его свойств объект можно использовать, указывая его в качестве параметров различных функций. Например, для выполнения обработки сигнала квантованным фильтром уже знакомая нам функция filter используется следующим образом:
у = filter(hq. х)
Как видите, вместо двух векторов коэффициентов в списке параметров фигурирует объект квантованного фильтра.
В пакете Filter Design имеется множество функций, предназначенных для работы с объектами. Некоторые из них просто позволяют получать значения отдельных свойств более удобным путем, чем с помощью функции get, другие производят более специфические действия. Например, с помощью функции qreport можно получить статистическую информацию, накопленную объектом, — число выполненных операций, количество возникших переполнений и т. п.
Далее перейдем к рассмотрению конкретных функций и объектов.
Квантователи
Для создания объекта квантователя служит функция quantizer. У данного объекта немного свойств, причем числовым является только одно из них, а все строковые свойства имеют уникальные значения. Это позволяет вызывать конструктор объекта, указывая только значения свойств и опуская их имена:
q - quantizer(valuel, value2, ...)
При этом не обязательно перечислять значения всех свойств — те из них, которые не заданы при вызове функции, сохранят значения, принятые по умол
чанию.
Разумеется, возможен и полный вариант вызова, когда указываются и имена, и значения свойств:-■
q - quantizer('namel'. valuel, 'name2', value2, ...)
Здесь 'namel', 'name2' и т. д. — имена свойств, a valuel, value2 ит.д. - соответствующие значения.
Список свойств квантованного фильтра приведен в табл. 7.3. Как уже говорилось, считывать и задавать значения этих свойств можно с помощью функций get и set соответственно.
Таблица 7.3. Свойства объекта квантователя
Имя свойства
Описание
Мах
Максимальное значение входного (неквантованного) сигнала, зафиксированное за время работы квантователя (только для чтения)
Min
Минимальное значение входного (неквантоваиного) сигнала, зафиксированное за время работы квантователя (только для чтения)
Mode
Тип квантователя:
'double' — квантователь с плавающей запятой, стандартный 64-битовый формат doubl е. Все остальные параметры в данном случае игнорируются;
' fl oat' — квантователь с плавающей запятой;
'fixed' — квантователь с фиксированной запятой (этот вариант принят по умолчанию);
' si ngl е' — квантователь с плавающей запятой, стандартный 32-битовый формат single. Все остальные параметры в данном случае игнорируются;
'ufixed' — беззнаковый квантователь с фиксированной запятой
Noperations
Количество выполненных операций квантования (только для чтения)
Noverflows
Число переполнений, зафиксированное за время работы квантователя (только для чтения)
Nunderflows
Число случаев потери значимости (когда ненулевой входной сигнал в результате квантования округляется до нуля; используется также термин «антипереполнение»), зафиксированное за время работы квантователя (только для чтения)
RoundMode
Режим округления:
'ceil'— округление вверх;'
' convergent' — округление к ближайшему целому значению, в случае равенства расстояний выбирается четное значение;.
'fix' — округление к нулю;■
'floor' — округление вниз (этот вариант принят по умолчанию);
'round' — округление к ближайшему целому значению, в случае равенства расстояний выбирается значение, большее по модулю
Продолжение ^
Таблица 7.3 (продолжение)
Имя свойства
Описание
OverflowMode
Реакция на переполнение (только для формата с фиксированной запятой):
'saturate' — при переполнении происходит насыщение (этот вариант принят по умолчанию);
'wrap' — при переполнении игнорируются «лишние» старшие разряды
Format
Двухэлементный вектор, первый элемент которого задает общее число двоичных разрядов, используемое для представления квантованных чисел. Второй элемент вектора для квантователей с фиксированной запятой (Mode ■ 'fixed' или 'ufixed') указывает число разрядов дробной части, а для квантователей с плавающей запятой (Mode ■ ' fl oat') — число разрядов, используемое для представления порядка. Значение по умолчанию равно [16 15]
Значения свойств Max, M1n, Noperatlons, Noverflows и Nunderflows, предоставляющих статистическую информацию и доступных только для чтения, обновляются при каждом выполнении операции квантования (функция quantize, см. далее) и обнуляются при выполнении функции reset.
Операция квантования выполняется с помощью функции quant 1 ze. Синтаксис ее вызова следующий:
у - quantized, х)
Здесь q — объект квантователя, ах — массив значений входного сигнала. Результатом работы является массив квантованных значений у. Размеры массивов х и у одинаковы.
Можно вызывать функцию quantize для квантования нескольких переменных одновременно:
[yl. у2. ...] - quantizetq, xl. х2, ...)
Здесь yl — результат квантования xl, у2 — результат квантования х2 и т. д.
Как отмечалось в разделе «Формат с фиксированной запятой», диапазон представимых в таком формате чисел является несимметричным. В частности, если целая часть содержит единственный знаковый разряд, оказывается невозможным точно представить значение +1. Для решения этой проблемы в пакете Filter Design имеются функция unitquantlze и объект unitquantizer.
Функция unitquantlze вызывается точно так же, как и функция quantize:
у - unitquantize(q. х)
[yl, у2. ...] - unitquantize(q, xl. x2. ...)
Работа этой функции отличается от функции quantize лишь в одном аспекте: значения, близкие к единице (точнее, отстоящие от нее не более чем на eps, где eps — точность представления чисел в квантователе, см. далее), при квантовании становятся равными единице.
Чтобы пояснить разницу между функциями quantize и unitquantize, приведём простой пример. Создадим квантователь с фиксированной запятой, использующий один разряд для целой части и 7 — для дробной:
» q - quantizerС fixed'. [8 7]);
Теперь произведем квантование единичного значения с помощью данного квантователя и функций quantize и unitquantize:х
» quant1ze(q, 1)
Warning: 1 overflow.
> In ...design\quantizat1on\@quantizer\quantize.m at line 88 ans -
0.9922
» unitquant1ze(q, 1) ans -
1
При использовании функции quantize было выдано предупреждение о произошедшем переполнении (строка с длинным путем к М-файлу функции quantize в приведенном листинге сокращена), а квантованное значение оказалось меньше единицы (оно равно максимальному числу, представимому в используемом нами формате 1.7). При использовании же функции unitquantize переполнения не происходит, а результат квантования оказывается равен единице.
Той же цели — обеспечению точного представления единичных значений — служит и объект unitquantizer. Он полностью аналогичен объекту quantizer, ио для него не нужно явно вызывать функцию unitquantize — это будет сделано автоматически при обычном квантовании.
ВНИМАНИЕ
Перечисленные трюки с квантованием единичных значений становятся возможны исключительно благодаря тому, что MATLAB использует для представления всех дробных чисел (как неквантованных, так и квантованных) формат с плавающей запятой double. При реализации алгоритмов обработки сигнала «в железе» или на языках высокого уровня с использованием целочисленной арифметики точно представить непредставимые значения, естественно, не удастся. Зачем же тогда пакет Filter Design содержит такие средства? Дело в том, что объекты квантователей предназначены прежде всего для использования в составе квантованных фильтров и БПФ, которые будут рассматриваться далее. При реальной обработке сигналов этими устройствами проблему с единичными значениями можно обойти, проигнорировав операции умножения отсчетов сигнала на коэффициенты, равные единице. В MATLAB же при установке режима оптимизации умножений (свойство OptimizeUnityGains, см. далее) для коэффициентов фильтров и БПФ используются квантователи типа unitquantizer. Это позволяет не модифицировать общий алгоритм вычислений.
Для иллюстрации сказанного создадим объект unitquantizer с теми же параметрами, как у квантователя в предыдущем примере, и выполним квантование единичного значения:
» uq = un1tquantizer('fixed'. [8 7]):
» quantize(uq, 1) ans =
1
Как видите, переполнения не произошло, а результат равен единице.
Помимо функций quantize и unitquantize с объектами квантователей могут работать следующие функции:
ql • copyobj(q) — создает независимую копию объекта квантователя с теми же значениями свойств, что у исходного объекта q;
ВНИМАНИЕ
Программная реализация обычной операции присваивания объектов в MATLAB (ql - q) сводится к копированию указателя, так что в результате оба идентификатора ссылаются на одну и ту же область памяти. Функция же copyobj создает новый объект и копирует в него все значения свойств оригинала.
х = denormalmax(q) — для квантователей с плавающей запятой возвращает значение наибольшего денормализоваиного положительного квантованного числа. Для квантователей с фиксированной запятой возвращает eps(q);
х = denormalmin(q) — для квантователей с плавающей запятой возвращает значение наименьшего денормализованного положительного квантованного числа. Для квантователей с фиксированной запятой возвращает eps(q);
disp(q) — выводит на экран свойства объекта;
е - eps(q) — возвращает относительную точность представления чисел в квантователе q. Под точностью представления подразумевается минимальное число, при добавлении которого к единице результат квантования будет отличаться от единицы;
b = exponentbias(q) — возвращает смещение, используемое в квантователе с плавающей запятой при представлении порядка квантованных чисел. В случае формата с фиксированной запятой результат всегда равен нулю;
е = exponentlength(q) — возвращает число двоичных разрядов, используемое в квантователе с плавающей запятой для представления порядка квантованных чисел. В случае формата с фиксированной запятой результат всегда равен нулю;
emax » exponentmax(q) — если в квантователе используется формат с плавающей запятой, возвращает максимальное значение порядка квантованных чисел. В случае формата с фиксированной запятой результат всегда равен нулю;
emin ■ exponentmin(q) — если в квантователе используется формат с плавающей запятой, возвращает минимальное значение порядка квантованных чисел. В случае формата с фиксированной запятой результат всегда равен нулю;
f - fractionlength(q) — возвращает количество разрядов дробной части квантованных чисел;
х - hex2num(q, h) — преобразование строки h, трактуемой как шестнадцатеричная запись внутреннего представления квантованного числа в квантователе q, в число х;
х = max(q) — возвращает значение свойства Мах;
х = min(q) — возвращает значение свойства Min;
n = noperations(q) — возвращает значение свойства Noperations;
n = noverflows(q) — возвращает значение свойства Noverflows;
h = num2hex(q, х) — преобразование числа х в строку h, представляющую собой шестнадцатеричную запись квантованного числа, в соответствии с форматом, используемым квантователем q;
n = nunderflows(q) — возвращает значение свойства Nunderflows;
qreport(q) — выводит на экран статистическую информацию о работе квантователя (максимальное и минимальное значения входного сигнала, число переполнений и случаев потери значимости, а также количество выполненных квантований);
s - qreport(q) — возвращает ту же информацию в полях структуры s;
г = range(q) — возвращает двухэлементный вектор, содержащий минимальное и максимальное значения выходного квантованного сигнала для квантователя q;
[a, b] = range(q) — возвращает минимальное и максимальное значения выходного квантованного сигнала для квантователя q в виде двух отдельных переменных а (минимальное значение) и b (максимальное значение);
х = realmax(q) — возвращает наибольшее положительное квантованное число;
х = realmin(q) — возвращает наименьшее положительное нормализованное квантованное число;
reset(q) — сбрасывает в исходное состояние значения свойств квантователя q, связанных со сбором статистической информации (Max, Min, Noperations, Noverflows и Nunderflows);
s = tostring(q) — возвращает строку вызова функции quantizer, в результате выполнения которой будет создан объект, совпадающий с объектом q;
w - wordlength(q) — возвращает общее число двоичных разрядов, используемое квантователем для представления квантованных чисел.
В качестве примера использования функций quantizer и quantize создадим объекты квантователей с фиксированной и плавающей запятой, а затем построим для них графики характеристик квантования, то есть зависимости выходного (квантованного) сигнала от входного (неквантованного).
Чтобы на этих графиках был хорошо виден ступенчатый характер зависимостей, число уровней квантования должно быть небольшим, поэтому будем использовать длину слова, равную шести двоичным разрядам.
В квантователе с фиксированной запятой дробная часть будет содержать пять разрядов. Для обработки переполнений зададим режим насыщения, а всем остальным свойствам оставим значения по умолчанию:
» q_fixed = quantized'fixed', [6' 5]. 'saturate')
q_fixed =
Mode - fixed
RoundMode = floor OverflowMode = saturate Format =[65]
Max = reset Min - reset NOverflows = 0 NUnderflows = 0 NOperations = 0
Построим график характеристики квантования (рис. 7.11 сверху), выбрав такой диапазон значений входного сигнала, чтобы вызвать переполнение квантователя. Для автоматического определения этого диапазона используем функцию real max:
» x_max=2*realmax(q_fixed):
» х - linspace(-x_max. x_max, 1000):
» у - quant!ze(q_fixed, x):
Warning: 484 overflows.
In ...design\quantization\@quantizer\quantize.m at line 88
> plot(x. y)
Теперь изменим режим обработки переполнения, чтобы вместо насыщения происходило отбрасывание «лишних» старших разрядов. Затем снова построим характеристику квантования (рис. 7.11 снизу):
» <)_f1 xed. overfl owmode = ' wrap':
» у - quantize(q_fixed. x):
Warning: 484 overflows.
In ...design\quantization\@quantizer\quantize.m at line 88
» plot(x, y)
Графики на рис. 7.11 наглядно иллюстрируют сущность различий между режимами обработки переполнений 'saturate' и 'wrap'.
В квантователе с плавающей запятой используем три разряда для хранения порядка. Значения остальных свойств оставим установленными по умолчанию:
» q_float = quantizer!'float', [6 3])
q_float =
Mode = float.
RoundMode = floor Format =[63]
Max = reset Min = reset NOverflows = 0 NUnderflows = 0 NOperations = 0
Рис. 7.11. Характеристика квантования для квантователя с фиксированной запятой: сверху — при переполнении происходит насыщение, снизу — при переполнении отбрасываются старшие разряды
Теперь строим характеристику квантования так же, как и раньше (рис. 7.12):
» x_max-1.2*realmax(q_float):
» х - linspace(-x_max. x_max. 1000):-
» у - quantize(q_float, х):
Warning: 168 overflows.
In ...des1gn\quant1zat1on\@quant1zer\quantize.m at line 88
» plot(x, y)
Рис. 7.12. Характеристика квантования для квантователя с плавающей запятой
Сравнение характеристик квантования на рис. 7.11 и 7.12 наглядно демонстрирует особенности квантователей с фиксированной и плавающей запятой.
Квантованные фильтры
Для создания объекта квантованного фильтра служит функция qfllt. В простейшем случае она может вызываться без входных параметров, но для фильтра это не имеет особого смысла — ведь нам в любом случае необходимо задать форму реализации и коэффициенты. Поэтому основным вариантом синтаксиса является следующий:
hq = qfilt('structure'. {coef})
Здесь 'structure' — строковый параметр, задающий форму реализации фильтра, a {coef} — массив ячеек, содержащий исходные (некваптованиые) коэффициенты фильтра. Способ задания коэффициентов зависит от выбранной формы реализации фильтра, соответствующая информация сведена в табл. 7.4.
ЗАМЕЧАНИЕ
Возможны также следующие варианты для параметра 'structure', соответствующие решетчатым фильтрам, не рассматриваемым в данной книге: 'latticear', 'latticema', 'latti- cearma’, 'latticeca' и 'latticecapc'. Ознакомиться co способами задания коэффициентов фильтра для этих форм реализации можно ио документации пакета Filter Design.
Для задания свойств объекта (их список будет приведен ниже) можно указывать при вызове функции qf 111 дополнительные параметры в виде пар «имя свойства — значение свойства»:
hq = qfilt( 'structure',‘ {coeff}, 'namel'. valuel. 'name2'. value2, ...)
Здесь ’namel', ’name2’ и т. д. — имена свойств, a valuel, value2 и т. д. — соответст
вующие значения.
Таблица 7.4. Возможные формы реализации квантованных фильтров и способы задания коэффициентов для них
Значение параметра 'structure'
Форма реализации фильтра
Способ задания коэффициентов
'dfl'
Direct Form I (прямая форма, см. рис, 4.4)
{coef} = {b, а), то есть параметр {coef} должен быть массивом ячеек, содержащим два вектора, задающие коэффициенты полиномов числителя и знаменателя функции передачи фильтра
'dflf
Direct Form I Transposed (транспонированная форма, см. рис. 4.9)
То же, что для 'dfl'
'df2'
Direct Form II (каноническая форма, см. рис. 4.6)
То же, что для 'dfl'
'df2t'
Direct Form II Transposed (транспонированная форма, см. рис. 4.8)
То же, что для 'dfl'
'fir'
FIR (прямая форма нерекурсивного фильтра, см. рис. 4.3)
{coef} = {b}, то есть параметр {coef} должен быть массивом ячеек, содержащим единственный вектор b отсчетов импульсной характеристики фильтра
'firt'
FIR Transposed (транспонированная форма нерекурсивного фильтра)
То же, что для 'fir'
'synmetricfir'
Symmetric FIR (нерекурсивный фильтр с четной симметрией, см. табл. 4.1, типы I и II)
То же, что для 'fir', но вектор b должен удовлетворять условиям четной симметрии: b(k) = b(1ength(b)+l-k)
'antisynmetricfir'
Antisymmetric FIR (нерекурсивный фильтр с нечетной симметрией, см. табл. 4.1, типы III и IV)
То же, что для 'fir', но вектор b должен удовлетворять условиям нечетной симметрии: b(k) = -b(length(b)+l-k).
Если длина вектора нечетная, то средний элемент должен быть нулевым: b((length(b)+D/2) = 0
■statespace'
Реализация в пространстве состояний
{coef} = {А, В, С, D}, то есть параметр {coef} должен содержать четыре ячейки с параметрами описания фильтра в пространстве состояний (см. раздел «Пространство состояний» главы 4)
Особо отметим еще один вариант вызова, позволяющий задать общий формат квантования для всех величин в фильтре. Для этого в списке параметров нужно задать значение свойства 'quantizer':(
hq = qfiltC... 'quantizer', [M N], ...)
В результате для всех величин будет использован формат с фиксированной запятой с длиной слова М бит и N битами после запятой.
Список свойств квантованного фильтра приведен в табл. 7.5. Как уже говорилось, считывать и задавать значения этих свойств можно с помощью функций get и set соответственно.
Обработка сигнала квантованным фильтром осуществляется, как уже было сказано, с помощью функции f 11 ter:
[у, zo. s, z, v] = filter(hq. х, zi)
Здесь hq — объект квантованного фильтра, х — входной сигнал, zi — начальное состояние фильтра (этот параметр является необязательным).
Результатами работы функции являются выходной сигнал у, конечное внутреннее состояние фильтра zo и три параметра, позволяющие получить информацию о «внутренней жизни» фильтра в процессе работы:
s — структура, содержащая информацию о работе квантователей (она создается функцией qreport, см. далее);
z — массив ячеек, содержащий историю изменений внутренних состояний для всех секций фильтра. Ячейка к соответствует ^-й секции фильтра, а содержимое ячейки представляет собой матрицу, каждый столбец которой дает внутреннее состояние /г-й секции в соответствующий момент времени. Так, начальное состояние к-й секции равно z{k}(: ,1), а конечное — z{k}(: .end);
v — массив ячеек, содержащий количество переполнений, произошедших в каждой секции фильтра на каждом временном шаге. Ячейка к соответствует к-й секции фильтра и содержит вектор, значения которого показывают количество переполнений в данной секции на разных временных тактах.
Помимо функции filter пакет Filter Design расширяет реализации функций freqz, impz и zplane, так что они тоже могут вместо двух векторов а и b принимать на входе объект квантованного фильтра для расчета или отображения его соответствующих характеристик:
freqz(hq, ...)
impz(hq. ...)
zplane(hq, ...)
Кроме перечисленных функций с объектами квантованных фильтров могут работать следующие функции:
hql = convert(hq, 'newstruct') — производит преобразование формы реализации квантованного фильтра. Новая форма задается параметром 'newstruct';
hql = copyobj(hq) — создает независимую копию объекта квантованного фильтра с теми же значениями свойств, что у исходного объекта hq (см. приведенный ранее комментарий к одноименной функции для объектов квантователей);
Таблица 7.5. Свойства объекта квантованного фильтра
Имя свойства
Описание
CoefficientFormat
Объект quantizer, задающий формат квантования коэффициентов фильтра
Filterstructure
Форма реализации фильтра (см. табл. 7.4)
InputFormat
Объект quantizer, задающий формат квантования входного сигнала
NumberOfSections
Число каскадно включенных секций фильтра (только для чтения)
MultiplicandFormat
Объект quantizer, задающий формат квантования чисел, умножаемых на коэффициенты фильтра
OptimizeUnityGains
Это свойство не отображается в явном виде при выводе информации об объекте на экран, поскольку ему не соответствует поле структуры объекта. Однако значение этого свойства можно считывать и задавать (возможные варианты — 'on' и принятое по умолчанию 'off'). Если установлено состояние 'on', при вычислениях будут исключены умножения на коэффициенты, равные единице. Кроме того, при этом для квантования коэффициентов фильтра вместо объекта quantizer будет использован объект unitquantizer, что позволяет точно представлять единичные значения
OutputFormat
Объект quantizer, задающий формат квантования выходного сигнала
ProductFormat
Объект quantizer, задающий формат квантования результатов операций умножения
Quanti zedCoeff1ci ents
Коэффициенты фильтра после квантования (только для чтения)
ReferenceCoeff1cients
Исходные (до квантования) коэффициенты фильтра
Seal eValues
Коэффициенты масштабирования входных и выходных сигналов секций фильтра. Это свойство может быть скаляром (тогда на заданный коэффициент умножается только входной сигнал фильтра) либо вектором с числом элементов, на единицу превышающим число секций фильтра. В последнем случае первый элемент вектора задает коэффициент масштабирования для входного сигнала, последующие значения используются для масштабирования сигнала между секциями, а последний коэффициент применяется к выходному сигналу фильтра
StatesPerSection
Число элементов памяти (задержек) в каждой секции фильтра (только для чтения)
SumFororat
Объект quantizer, задающий формат квантования результатов операций сложения
di sp( hq) — выводит на экран свойства объекта;■ ‘
eps(hq) — выводит на экран относительную точность представления чисел в квантованном фильтре;
flag = 1 sail pass(hq) — возвращает 1, если фильтр hq имеет всепропускающие секции, и 0 в противном случае;
flag = isallpass(hq, k) — возвращает 1, если к-я секция фильтра hq является всепропускающей, и 0 в противном случае;
flag = 1sf1r(hq) — возвращает 1, если фильтр hq является нерекурсивным, и 0 в противном случае;
flag = isfir(hq, k) — возвращает 1, если к-я секция фильтра hq является нерекурсивной, и 0 в противном случае;
flag = islinphase(hq) — возвращает 1, если фильтр hq имеет хотя бы одну секцию с линейной ФЧХ, и 0 в противном случае;
flag = islinphase(hq, k) — возвращает 1, если к-я секция фильтра hq имеет линейную ФЧХ, и 0 в противном случае;
flag = ismaxphase(hq) — возвращает 1, если фильтр hq имеет хотя бы одну максимально-фазовую секцию (все нули функции передачи которой лежат на комплексной плоскости вне единичной окружности или на ней), и 0 в противном случае;
flag = ismaxphase(hq, k) — возвращает 1, если к-я секция фильтра hq является максимально-фазовой, и 0 в противном случае;
flag = 1sm1 nphase(hq) — возвращает 1, если фильтр hq имеет хотя бы одну минимально-фазовую секцию (все нули функции передачи которой лежат на комплексной плоскости внутри единичной окружности или на ней), и 0 в противном случае;
flag = isminphase(hq, k) — возвращает 1, есЛи к-я секция фильтра hq является минимально-фазовой, и 0 в противном случае;
flag = isreal(hq) — возвращает 1, если все исходные коэффициенты фильтра hq являются вещественными, и 0 в противном случае;
flag = issos(hq) — возвращает 1, если фильтр hq составлен из секций второго порядка, то есть если порядок любой его секции не превосходит двух, и О в противном случае;
flag = isstable(hq) — возвращает 1, если фильтр hq является устойчивым, и О в противном случае;
flag = isstable(hq, k) — возвращает 1, если к-я секция фильтра hq является устойчивой, и 0 в противном случае;
limitcycle — функция анализа предельных циклов в квантованных фильтрах. Она будет подробно рассмотрена далее;
nlm — функция оценки частотной характеристики квантованного фильтра шумовым методом (noise loading method, NLM). Рассмотрение этого метода выходит за рамки тематики данной Книги; х
noperations(hq) — выводит на экран сведения о числе операций квантования, выполненных различными квантователями квантованного фильтра hq;
hql = normal ize(hq) — нормализация коэффициентов квантованного фильтра. Возвращаемый объект квантованного фильтра hql имеет коэффициенты, по модулю не превосходящие единицу. Нормализация производится путем деления всех коэффициентов на одно и то же число, равное степени двойки. Если фильтр составлен из последовательно включенных секций, нормализация для каждой секции выполняется независимо. Нормализации не могут подвергаться фильтры, реализованные в пространстве состояний (state-space), и решетчатые (lattice) фильтры;
noverflows(hq) — выводит на экран сведения о числе переполнений, возникших при выполнении операций квантования различными квантователями квантованного фильтра hq;
num2bin(hq) — отображает квантованные коэффициенты фильтра в виде двоичных строк (то есть строк, содержащих символы 'О' и ' 1');
с = num2bin(hq) — возвращает массив ячеек, содержащий значения квантованных коэффициентов фильтра в виде двоичных строк;
num2hex(hq) — отображает квантованные коэффициенты фильтра в виде шестнадцатеричных строк (то есть строк, содержащих символы 'О’...'9' и 'A'...'F');
с = num2hex(hq) — возвращает массив ячеек, содержащий значения квантованных коэффициентов фильтра в виде шестнадцатеричных строк;
num2int(hq) — отображает квантованные коэффициенты фильтра в виде целых чисел;
с = num2int(hq) — возвращает массив ячеек, содержащий значения квантованных коэффициентов фильтра в виде целых чисел;
О ns = numberofsections(hq) — возвращает число секций квантованного фильтра hq;
opt = optimizeunitygains(hq) — возвращает значение свойства OptimizeUnityGains;
n = order(hq) — возвращает порядок фильтра;
n = order(hq, к) — возвращает порядок к-й секции фильтра;
[bq, aq, br, ar] = qfilt2tf(hq) — расчет функции передачи квантованного фильтра. Выходные параметры bq и aq содержат значения коэффициентов полиномов числителя и знаменателя функции передачи квантованного фильтра, а br и аг — аналогичные коэффициенты для исходного фильтра;
[cq, cr] = qfilt2tf(hq, ’sections') — возвращает массивы ячеек, содержащие функции передачи отдельных секций квантованного (cq) и исходного (сг) фильтров. Поясним структуру возвращаемых массивов ячеек на примере массива cq: cq = {[bql.aql], {bq2,aq2},...}, где bql и aql — коэффициенты полиномов числителя и знаменателя функции передачи первой секции фильтра, bq2 и aq2 — то же для второй секции и т. д.;
qreport(q) — выводит на экран статистическую информацию о работе квантователей, входящих в состав фильтра (максимальное и минимальное значения входного сигнала, число переполнений и случаев потери значимости, а также количество выполненных квантований);
Os- qreport(q) — возвращает ту же информацию в полях структуры s;
range (hq) — отображает сведения о минимальных и максимальных значениях выходного квантованного сигнала для квантователей, входящих в состав объекта квантованного фильтра hq;
[RI. R2. ...] = range(hq, 11, Т2. ...) — возвращает двухэлементные векторы RI, R2 и т. д., содержащие минимальные и максимальные значения выходного квантованного сигнала для квантователей, входящих в состав объекта квантованного фильтра hq и указанных входными строковыми параметрами Т1, Т2 и т. д. Возможные значения этих параметров — 'coefficient', 'input', 'output', 'multiplicand', 'product' и 'sum';
reset(hq) — сбрасывает в исходное состояние значения свойств, связанных со сбором статистической информации (Max, Min, Noperations, Noverflows и Nunder- flows), для всех квантователей, входящих в состав квантованного фильтра hq;
s = scalevalues(hq) — возвращает значение свойства ScaleValues;
hql = setbits(hq, format) — задает значение свойства Format для всех квантователей, входящих в состав квантованного фильтра hq;
hql = sos(hq, order, scale) — преобразование квантованного фильтра hq в набор последовательно включенных секций второго порядка (объект hql). Смысл необязательных параметров order и scale тот же, что и для функции tf2sos (см. раздел «Преобразование способов описания дискретных фильтров» главы 4);
s = tostring(hq) — возвращает строку вызова функции qfilt, в результате выполнения которой будет создан объект, совпадающий с объектом hq.
В качестве примера рассчитаем эллиптический ФНЧ 5-го порядка, создадим для него объект квантованного фильтра и произведем с помощью этого фильтра обработку последовательности прямоугольных импульсов.
Пусть ФНЧ имеет частоту среза, равную 20 % от частоты Найквиста, пульсации АЧХ в полосе пропускания 1 дБ и ослабление в полосе задерживания 40 дБ:
» [b. а] = е!11р(5, 1. 40. 0.2) b -
0.0153-0.02210.01540.0154-0.02210.0153
а =
1.0000-3.90436.5819-5.89402.7935-0.5599
Как видите, ряд коэффициентов фильтра по модулю превышает единицу. Чтобы использовать параметры квантователей по умолчанию, коэффициенты фильтра необходимо привести к диапазону [-1, 1]. Поэтому при создании объекта квантованного фильтра мы разделим векторы b и а на 8:
» hq = qfilt('df2t'. {b/8, а/8})
hq =
Quantized Direct form II transposed filter
Numerator
QuantizedCoefficients{l} ReferenceCoefficients{l}
0.0019226074218750.001915044555875759
-0.002746582031250 -0.002760232429165185
(3)
0.001922607421875
■ 0.001923857337327012 ■
(4)
0.001922607421875
0.001923857337327022
(5)
-0.002746582031250
-0.002760232429165193
(6)
0.001922607421875
0.001915044555875762 •
Denominator
Quant1zedCoeffiс1ents(2}
ReferenceCoeffic1ents{2}
(1)
0.125000000000000
0.125000000000000000
(2)
-0.488037109375000
-0.488037284420594630
(3)
0.822753906250000
0.822741734035389300
(4)
-0.736755371093750
-0.736744248400267980
(5)
0.349182128906250
0.349188852654597430
(6)
-0.069976806640625
-0.069991714941048944
Fil terStructure = df2t
ScaleValues - [1],.
NumberOfSections - 1’‘ " 1 11
StatesPerSectlon - [5]
CoefficientFormat -quantizer('fixed','round','saturate',[1615])
InputFormat -quantizer!'fixed','floor','saturate',[1615])
OutputFormat -quantizer!'fixed','floor','saturate',[1615])
MuitiplicandFormat -quantizer('fixed','floor','saturate',[1615])
ProductFormat -quantizer! 'fixed','floor','saturate',[3230])
SumFormat - quantizer!'fixed', 'floor', 'saturate', [32 30])
Мы использовали стандартную для MATLAB форму реализации фильтра — Direct Form II Transposed (см. рис. 4.8 в главе 4).
Теперь построим графики АЧХ и ФЧХ квантованного фильтра. Для этого воспользуемся функцией freqz (рис. 7.13):
» freqz(hq)
Рис. 7.13. АЧХ и ФЧХ квантованного эллиптического ФНЧ 5-го порядка
На графиках зеленым цветом выводятся характеристики исходного фильтра, а синим — квантованного. Однако в данном случае благодаря выполненному нами масштабированию коэффициентов (делению их на 8) и довольно высокой (15 двоичных разрядов после запятой) точности их квантованного представления разница характеристик практически незаметна.
Далее создаем входной сигнал в виде нескольких двуполярных прямоугольных импульсов с амплитудой 0,8:
» х = 0.8 * [ones(l.lOO) -ones(l.lOO) ones(1,100)]:
Чтобы пропустить этот сигнал через исходный (неквантованный) фильтр, воспользуемся функцией f 11 ter:
» у = filter(b. а. х);
Та же функция используется и для обработки сигнала квантованным фильтром:
» y_q = f11 ter(hq. x):
Warning: 173 overflows in QFILT/FILTER.
> In ...\f1lterdesign\quantization\@qfilt\filter.m at line 241
Max
Min
NOverflows
NUnderflows
NOperations
Coefficient
0.8227
-0.7367
0
0
12
Input
0.8
-0.8
0
0
300
Output
1
-1
0
0
300
Multiplicand
2
-2
1056
- 0
4200
Product
6.498
-6.515
173
0
4200
Sum
1.194
-1.303
0
0
3300
Наконец, строим графики выходного сигнала для исходного (рис. 7.14 сверху) и квантованного (рис. 7.14 снизу) фильтров:
» plot(y)
» figure
» plot(y_q)
Сравнение верхнего и нижнего графиков на рис. 7.14 показывает, что, хотя абсолютные значения сигнала на выходе исходного фильтра не превосходят единицы, выходной сигнал квантованного фильтра похож на исходный только в течение первой половины периода, а после этого квантованный фильтр, как говорится, «идет вразнос». Это происходит из-за того, что при промежуточных вычислениях (а точнее, как свидетельствует выдаваемая статистическая информация, при квантовании результатов умножения) происходит большое число переполнений. Таким образом, предельная амплитуда правильно обрабатываемой последовательности прямоугольных импульсов должна быть ощутимо меньше единицы (в данном конкретном примере переполнения исчезают при амплитуде прямоугольных импульсов, равной 0,78). Альтернативой уменьшению уровня входного сигнала является использование квантователей с более высокой верхней границей диапазона представимых чисел.
Рис. 7.14. Выходной сигнал неквантованного (сверху) и квантованного (снизу) фильтров
Анализ предельных циклов
Для проверки возможности возникновения предельных циклов в квантованном фильтре служит функция limitcycle. Синтаксис ее вызова следующий:
[LCtype, Z1. Period, Seq, Ovf, Trial, Section] = ...
limitcycle(hq, N. L, Stop. Disp)
Единственным обязательным входным параметром здесь является hq — объект квантованного фильтра. Остальные входные параметры имеют значения по умолчанию..
Сущность работы функции 11 mi tcycle состоит в задании случайных начальных состояний фильтра и анализе его поведения при нулевом входном сигнале. Число испытаний задается параметром N и по умолчанию равно 20.
Параметр L задает продолжительность анализа (длительность нулевого входного сигнала). По умолчанию поведение фильтра анализируется в течение 100 отсчетов.
Строковый параметр Stop позволяет управлять критерием остановки работы функции. Возможны следующие значения:
'попе' — независимо от обнаружения предельных циклов выполняются все N испытаний;
1 granul аг1 — остановка работы производится при обнаружении «зернистого» предельного цикла;
'overflow' — остановка работы производится при обнаружении «переполняющего» предельного цикла;
'either' — остановка работы производится при обнаружении предельного цикла любого типа (этот вариант используется по умолчанию).
Наконец, если параметр D1sp не равен нулю, в процессе работы после каждого испытания выводятся текстовые сообщения о результатах. При обнаружении предельного цикла и отсутствии выходных параметров сообщение выводится в любом случае, вне зависимости от значения параметра Di sp.
Функция может возвращать большое количество выходных параметров, содержащих информацию о результатах анализа:
LCtype — строка, показывающая тип обнаруженного предельного цикла и равная 'granular', 'overflow* или 'none';
Z1 — вектор начального состояния фильтра, вызвавшего предельный цикл;
Period — период предельного цикла;
Seq — последовательность внутренних состояний фильтра в предельном цикле. Каждый столбец матрицы Seq соответствует внутреннему состоянию фильтра в очередной момент времени;
Ovf — массив ячеек, в котором ячейка {к} содержит целочисленный вектор, показывающий число переполнений, произошедших в ^-й секции фильтра на всех тактах предельного цикла;
Trial — номер испытания, на котором обнаружен предельный цикл;
Section — номер секции фильтра, в которой обнаружен предельный цикл.
Если в процессе работы функции было найдено несколько предельных циклов, возвращаются сведения о последнем из них. Если циклов не обнаружено, возвращаются просто параметры последнего испытания.
Расширение программы fdatool
Пакет Filter Design расширяет графическую среду расчета и анализа фильтров fdatool, добавляя в нее возможность описания и анализа квантованных фильтров.
Для выполнения квантования фильтра необходимо установить флажок Turn quantization on и перейти на вкладку Set Quantization Parameters, показанную на рис. 7.15.
В левой части вкладки расположена кнопка Show filter structures. Щелчок на ней открывает окно, показанное на рис. 7.16. Оно содержит раскрывающийся список возможных форм реализации квантованного фильтра (см. табл. 7.4) и блок-схему, которая меняется в соответствии с выбранной формой.
т
•<л.'
Re'rtnct — Quintized ‘V , • ^ I Fr*qBwe»fe)
7^FT^
ИШ1ВД1ИШВа1В5^^ № Fjte । J*.. ^ih jtfrd№ hw>_
^CwwtFifVliA
3 r**^3 iioti
'Ste, iiwd Siti dipor Йп
Рис. 7.15. Вкладка задания параметров квантования фильтра
Необходимо подчеркнуть, что в данном окне лишь демонстрируются блок-схемы для возможных форм реализации фильтров. Реальный выбор формы реализации производится в окне, появляющемся после щелчка на кнопке Convert structure.
В левой верхней части вкладки Set Quantization Parameters находится кнопка Scale transfer-fcn coeffs <= 1. Щелчок на этой кнопке производит автоматическое масштабирование коэффициентов фильтра так, чтобы их абсолютные значения не превышали единицы (см. ранее в этой главе раздел * Масштабирование коэффициентов цифровых фильтров», а также описание функции normalize). При этом синхронно меняется и содержимое расположенного ниже поля ввода Input/ output scaling. В этом поле задаются коэффициенты масштабирования сигналов в квантованном фильтре (см. выше описание свойства Seal eValues в табл. 7.5).
Большую часть вкладки занимают шесть групп элементов настройки параметров квантователей. Подписи к группам очевидным образом соответствуют именам свойств объекта квантованного фильтра (см. табл. 7.5). Каждая группа содержит следующие элементы управления (подробные комментарии о смысле задаваемых ими параметров квантователей были приведены в табл. 7.3, где перечислены свойства объектов квантователей):
раскрывающийся список Quantizer type позволяет задать класс объекта квантователя — quantizer или unitquantizer;
раскрывающийся список Mode позволяет задавать тип квантователя — с фиксированной (fixed) или плавающей (float) запятой. Есть также два предопределенных варианта квантователей с плавающей запятой — double и single;
раскрывающийся список Round mode позволяет задавать режим округления при квантовании — cell, convergent, fix, floor или round;
раскрывающийся список Overflow mode позволяет задавать режим обработки переполнений при квантовании — saturate или wrap;
поле ввода Format предназначено для указания двухэлементного вектора, задающего общее число двоичных разрядов квантованных значений и число разрядов дробной части (в случае фиксированной запятой) или число разрядов порядка (для квантователей с плавающей запятой).
После задания всех параметров квантования необходимо щелкнуть на кнопке Apply, в результате будут рассчитаны характеристики квантованного фильтра. На графиках характеристики исходного фильтра выводятся синим цветом, а квантованного — зеленым.
ЗАМЕЧАНИЕ
На рассчитываемые частотные и временные характеристики фильтра влияет только формат квантования коэффициентов (Coefficient Format). Остальные параметры квантования имеет смысл настраивать только в том случае, если квантованный фильтр планируется экспортировать из программы fdatool.
Квантованный фильтр можно экспортировать из программы fdatool обычным способом — с помощью команды Export меню File. Данные экспортируются в виде объекта квантованного фильтра, описанного ранее. Таким образом, среда fdatool предоставляет графический интерфейс для настройки свойств объекта квантованного фильтра.
Квантованное БПФ
Для создания объекта квантованного БПФ служит функция qfft. В простейшем случае она может вызываться без входных параметров, но поскольку обычно требуется выполнять БПФ заданной размерности, удобнее всего задавать размерность БПФ сразу же при создании объекта. Для этого нужно использовать в качестве параметров функции-конструктора строку 'length' и значение размерности:
f - qfft('length', N)
Здесь N — размерность БПФ.
Для задания свойств объекта (их список будет приведен ниже) можно указывать при вызове функции qfft параметры в виде пар «имя свойства — значение свойства»:
f = qfft СпашеГ, valuel, 'name2'. value2, ...)
Здесь ' namel', ' name2' и т. д. — имена свойств, a val uel, val ue2 и т. д. — соответствующие значения.
Особо отметим еще один вариант вызова, позволяющий задать общий формат квантования для всех величин при вычислении БПФ. Для этого в списке параметров нужно задать значение свойства 'quantizer':
f = qfft(..., 'quantizer', [M N], ...)
В результате для всех величин будет использован формат с фиксированной запятой с длиной слова М бит и N битами после запятой.
Список свойств квантованного БПФ приведен в табл. 7.6. Как уже говорилось, считывать и задавать значения этих свойств можно с помощью функций get и set соответственно.
Вычисление квантованного БПФ осуществляется с помощью функций fft (прямое БПФ) и if ft (обратное БПФ). Отличие от обычного варианта использования этих функций состоит в том, что в начало списка параметров добавляется объект квантованного БПФ:
у - fft(f, X)
х - 1fft(f, у)
Здесь f — объект квантованного БПФ, х — сигнал во временной области, у — сигнал в частотной области.
Если размерность неквантованного БПФ в MATLAB подстраивается под длину сигнала, то в случае квантованного БПФ все наоборот — сигнал дополняется нулями или усекается, чтобы его длина стала равна размерности БПФ.
Имя свойства
Описание
CoefficientFormat
Объект quantizer, задающий формат квантования коэффициентов (twiddle factors), используемых при вычислении БПФ
InputFormat
Объект quantizer, задающий формат квантования входного сигнала
Length
Размерность БПФ. Она должна являться степенью основания БПФ (см. ниже описание свойства Radix). Значение по умолчанию равно 16
NumberOfSections
Число ступеней БПФ, равное log2(Length)/Log2(Radix) (только для чтения)
Muit i p! icandFormat
Объект quantizer, задающий формат квантования чисел, умножаемых на коэффициенты БПФ
Opti mizeUnityGains
Это свойство не отображается в явном виде при выводе информации об объекте на экран, поскольку ему не соответствует поле структуры объекта. Однако значение этого свойства можно считывать и задавать (возможные варианты — 'on' и принятое по умолчанию ’off). Если установлено состояние ' on', при вычислениях будут исключены умножения на коэффициенты, равные единице. Кроме того, при этом для квантования коэффициентов вместо объекта quantizer будет использован объект unitquantizer, что позволяет точно представлять единичные значения
OutputFormat
Объект quantizer, задающий формат квантования выходного сигнала
ProductFormat
Объект quantizer, задающий формат квантования результатов операций умножения
Radix
Основание БПФ, которое может быть равно 2 (по умолчанию) или 4
ScaleValues
Коэффициенты масштабирования сигналов. Значение этого свойства может быть либо числом (масштабируется только входной сигнал), либо вектором длиной NumberOfSections (масштабируется входной сигнал каждой ступени БПФ)
SumFormat
Объект quantizer, задающий формат квантования результатов операций сложения
Помимо функций fft и if ft с объектами квантованных БПФ могут работать следующие функции:
fl - copyobj(f) — создает независимую копию объекта квантованного БПФ с теми же значениями свойств, что у исходного объекта f (см. приведенный ранее комментарий к одноименной функции для объектов квантователей);
disp(f) — выводит на экран свойства объекта;
eps(f) — выводит на экран относительную точность представления чисел в объекте квантованного БПФ;
n - length(f) — возвращает размерность БПФ (значение свойства Length);
noperations(f) — выводит на экран сведения о числе операций квантования, выполненных различными квантователями объекта квантованного БПФ f;
noverfl ows(f) — выводит на экран сведения о числе переполнений, возникших при выполнении операций квантования различными квантователями объекта квантованного БПФ f;
opt = optimizeunitygains(f) — возвращает значение свойства Opti mi zeUnityGai ns;
qreport(f) — выводит на экран статистическую информацию о работе квантователей, входящих в состав объекта квантованного БПФ (максимальное и минимальное значения входного сигнала, число переполнений и случаев потери значимости, а также количество выполненных квантований);
s = qreport(f) — возвращает ту же информацию в полях структуры s;
г = radix(f) — возвращает основание БПФ (значение свойства Radix);
range(f) — отображает сведения о минимальных и максимальных значениях выходного квантованного сигнала для квантователей, входящих в состав объекта квантованного БПФ f;
[RI, R2, ...] = range(f, Tl, Т2, ...) — возвращает двухэлементные векторы RI, R2 и т. д., содержащие минимальные и максимальные значения выходного квантованного сигнала для квантователей, входящих в состав объекта квантованного БПФ f и указанных входными строковыми параметрами Tl, Т2 и т. д. Возможные значения этих параметров — 'coefficient', 'input', 'output', 'multiplicand', 'product' и 'sum';
reset(hq) — сбрасывает в исходное состояние значения свойств, связанных со сбором статистической информации (Max, Min, Noperations, Noverflows и Nunder- flows), для всех квантователей, входящих в состав объекта квантованного БПФ f;
s - tostring(f) — возвращает строку вызова функции qfft, в результате выполнения которой будет создан объект, совпадающий с объектом f;
w = twiddles(f) — возвращает квантованные значения коэффициентов (комплексных экспонент), используемых объектом f при вычислении БПФ.
В качестве примера создадим объект квантованного БПФ размерности 256 и затем вычислим спектр синусоидального сигнала с помощью обычной функции fft и с помощью квантованного объекта.
При создании объекта необходимо задать только размерность БПФ, для всех остальных свойств мы оставляем значения по умолчанию:
» f - qfft!'length', 256) f -
Radix = 2
Length = 256
CoefficientFormat - quantizer!'fixed',
'round',
'saturate', [16
15])
InputFormat - quantizer!'fixed',
'floor',
'saturate', [16
15])
OutputFormat = quantizer!'fixed'.
'floor',
'saturate', [16
15])
MultiplicandFormat - quantizer!'fixed'.
'floor',
'saturate', [16
15])
ProductFormat = quantizer!'fixed',
'floor'.
'saturate', [32
30])
SumFormat = quantizer!'fixed',
'floor'.
'saturate', [32
30])
NumberOfSections = 8
ScaleValues - [1]
Пусть обрабатываемый сигнал имеет такую частоту, что анализируемый фрагмент (256 отсчетов) содержит нецелое число периодов:
» t - 0:255; % дискретное время
» % период сигнала равен 7
» S - l/32*COS(2*pi*t/7);
Теперь рассчитываем два варианта спектра: с помощью обычного (вектор sp) и квантованного (вектор sp_q) БПФ и выводим графики их модулей (рис. 7.17):
» sp - fft(s); % обычное БПФ
» % квантованное БПФ
» sp_q - fft(f, s);
Warning: 14 overflows in quantized fft.
> In ...\quantization\@qfft\private\privfft.m at line 132
In ...\f1lterdesign\quant1zation\@qfft\fft.m at line 31
Max
Min
NOverflows NUnderflows NOperations
Coefficient
1
-1
87510
Input
0.03125 ■
■0.02816
00256
Output
2
-2
40512
Multiplicand
1.408
-1.408
6298192
Product
0.7433
-0.7883
004096
Sum 2.174 » plot(t, abs(sp)): » figure » plot(t, abs(sp_q))
-2.174
4010240
Сравнение верхнего и нижнего графиков на рис. 7.17 показывает, что переполнения, о которых сообщил при вычислениях объект f, весьма существенно исказили результаты расчета — в спектре появились ложные составляющие. Это свидетельствует о необходимости либо уменьшить уровень входного сигнала (в данном случае, чтобы избавиться от переполнений, необходимо уменьшить амплитуду гармонического сигнала с 1/32 до 1/128), либо использовать в объекте f квантователи с большей верхней границей диапазона представимых чисел. •
Рис. 7.17. Результаты вычисления спектра синусоидального сигнала с помощью обычного (сверху) и квантованного (снизу) БПФ
ГЛАВА 8 Модуляция и демодуляция
При создании систем передачи информации в большинстве случаев оказывается, что спектр исходного сигнала, подлежащего передаче, сосредоточен отнюдь не на тех частотах, которые эффективно пропускает имеющийся канал связи. Кроме того, очень часто необходимо в одном и том же канале связи передавать несколько сигналов одновременно. Одним из способов решения этой задачи является использование частотного разделения каналов, при котором разные сигналы занимают неперекрывающиеся полосы частот.
Далее, во многих случаях требуется, чтобы передаваемый сигнал был узкополосным. Это означает, что эффективная ширина спектра намного меньше его центральной частоты:
Д/«/о.
Перечисленные причины приводят к необходимости такой трансформации исходного сигнала, чтобы требования, предъявляемые к занимаемой сигналом полосе частот, были выполнены, а сам исходный сигнал можно было восстановить.
Решение указанной проблемы достигается при использовании модуляции (modulation), сущность которой заключается в следующем. Формируется некоторое колебание (чаще всего гармоническое), называемое несущим колебанием или просто несущей (carrier), и какой-либо из параметров этого колебания изменяется во времени пропорционально исходному сигналу. Исходный сигнал называют модулирующим (modulating signal), а результирующее колебание с изменяющимися во времени параметрами — модулированным сигналом (modulated signal). Обратный процесс — выделение модулирующего сигнала из модулированного колебания — называется демодуляцией (demodulation).
Запишем (в очередной раз) гармонический сигнал общего вида:
s(t) - A cos(co01 + сро).
У данного сигнала есть три параметра: амплитуда А, частота соо и начальная фаза ф0. Каждый из них можно связать с модулирующим сигналом, получив таким образом три основных вида модуляции: амплитудную, частотную и фазовую. Как мы увидим далее, частотная и фазовая модуляция очень тесно взаимосвязаны,
поскольку обе они влияют на аргумент функции cos. Поэтому эти. два вида модуляции имеют общее название — угловая модуляция.
В современных системах передачи цифровой информации также получила распространение квадратурная модуляция, при которой одновременно изменяются амплитуда и фаза сигнала.
Все упомянутые виды модуляции будут более подробно рассмотрены в следующих разделах.
В MATLAB функции, реализующие процедуры модуляции и демодуляции, имеются в двух пакетах расширения — Signal Processing и Communications. Возможности этих пакетов несколько различаются — как по набору реализованных методов модуляции/демодуляции, так и по степени контроля над параметрами модулированного сигнала.
В процессе изложения теоретического материала демонстрационные примеры будут реализовываться с помощью базовых функций MATLAB, без использования специальных средств модуляции/демодуляции из упомянутых пакетов. Это позволит читателю лучше понять сущность рассматриваемых методов и алгоритмов.
Амплитудная модуляция
Как явствует из названия, при амплитудной модуляции (АМ; английский термин — amplitude modulation, АМ) в соответствии с модулирующим сигналом изменяется амплитуда несущего колебания:
«ам(0 “ A(t) cos(co0t + сро).
Однако если амплитуду A(t) просто сделать прямо пропорциональной модулирующему сигналу, возможно возникновение следующей проблемы. Как правило, модулирующий сигнал является двуполярным (знакопеременным). Рассмотрим, например, такой сигнал (рис. 8.1, сверху):
$м(0 = 3 cos(2n t) - sin(6n t + л/4).
Если мы непосредственно используем его в качестве амплитудной функции A(t), получится следующее (рис. 8.1, снизу):
» t - -1:0.01:1:
» S_M = 3 * cos(2*pi*t) - s1n(6*pi*t+pi/4);
» Fc = 10; % несущая частота
» s_AM - s_M .* cos(2*p1*Fc*t):
» subplot(2, 1. 1)
» plot(t. s_M)
» grid on.
» subplot(2, 1, 2)
» plot(t. s_AM, t, abs(s_M), '--')'
» grid on-
Рис. 8.1. Умножение двуполярного модулирующего сигнала (сверху) на несущее колебание дает неправильную амплитудную огибающую (снизу)
Из нижнего графика на рис. 8.1 видно, что амплитудная огибающая, которая будет выделена в процессе демодуляции, в данном случае оказывается неправильной — она соответствует модулю исходного сигнала.
Поэтому при реализации АМ к модулирующему сигналу предварительно добавляют постоянную составляющую, чтобы сделать его однополярным:
А(0 - Ao + fc$M(t),
Для нашего примера достаточно будет постоянной составляющей, равной четырем (рис. 8.2):
» s_AM - (4 + s_M) .* cos(2*p1*Fc*t):
» plot(t, s_AM, t, 4+s_M, '--')
» grid on
Рис. 8.2. Добавление постоянной составляющей делает модулирующий сигнал однополярным
Теперь форма амплитудной огибающей соответствует модулирующему сигналу с точностью до постоянной составляющей, которая легко может быть удалена после демодуляции.
(8-1)(8-1)Итак, окончательно можно записать AM-сигнал в следующем виде:
(8-1)
(8-1)
$Ам(0 “ (А0 + ^Sm(O) COs(to0t + фо).
Однотональная АМ
Для понимания сути амплитудной модуляции и спектральной структуры АМ- сигнала полезно подробнее рассмотреть частный случай, когда модулирующий сигнал является гармоническим:
$м(0 - Ам cos(fi t + Фо).
$ам(0 - (Ao + Ам cos(fi t + Фо)) cos(co0t + фо).(8.2)
Отношение между амплитудами модулирующего сигнала Ам и несущего колебания Ао называется коэффициентом модуляции или глубиной модуляции:
т=А.-
Aq
С учетом этого можно записать
Sam(0 “ Ао(1 + т cos(Q t + Фо)) cos(a>ot + Фо).
На рис. 8.3 показан вид однотонального AM-сигнала при разных значениях коэффициента модуляции.
» Fs - 100;
X частота дискретизации
» t - -10:l/Fs:10;
X дискретное время
» omegaO - 10:
% несущая частота
» OMEGA - 1;
X частота модулирующего сигнала
» s_AM_0 - cos(omegaO * t):
» s AM 50 - (l+0.5*cos(0MEGA*t)) .* cos(omegaO * t)
» s_AM_100 - (1+
cos(OMEGA*t)) .* cos(omegaO * t)
» subplotO, 1, 1)
» plot(t, s_AM_0)
% модуляция отсутствует
» subplotO, 1. 2)
» plot(t. s_AM_50)
% глубина модуляции 50^
» subplotO. 1. 3)
» plot(t. s_AM_100)
X глубина модуляции 100%
Очевидно, что максимальное значение огибающей однотонального АМ-сигнала достигается тогда, когда оба косинуса равны 1:
Ащах “ А (1 + ?П).
Минимальное значение огибающей соответствует тем моментам, когда косинус модулирующего сигнала равен -1:.
Amin “ А (1?П).
Рис. 8.3. Однотональный AM-сигнал: сверху — m = О (немодулированная несущая), в центре — т = 0,5, снизу — m = 1
Отсюда следует формула, позволяющая вычислить коэффициент модуляции т по результатам измерения (например, с помощью осциллографа) максимальной и минимальной амплитуд сигнала:
= ^max ^min А I А ^max ~ ^min
Обычно коэффициент модуляции должен лежать в диапазоне 0...1. При т > 1 имеет место перелюдуляция; подстановка таких значений в приведенную формулу дает результат, показанный на рис. 8.4.
» А_АМ_150 - 1 + 1.5 * cos(OMEGA*t);
» s_AM_150 - А АМ_150 .* cos(omegaO * t):
» pTot(t. s_AMJ50, t. abs(A_AM_150), '--')
Рис. 8.4. Однотональный AM-сигнал в случае перемодуляции (m = 1,5)
Как уже указывалось, амплитудная огибающая при перемодуляции искажается. Однако, как мы увидим далее, и этот режим может быть полезен на практике.
Теперь займемся анализом спектрального состава такого колебания. Для этого сначала раскроем скобки в выражении для однотонального АМ-сигнала, а затем выполним тригонометрические преобразования:
(8.3)(8.3)sAm (О = Ао cos(o0t+ ф0) + A0mcos(Q£ + Фо )cos(o>0£ + Фо) = = A COS(co0Z: + (р0)+ ^cos((co0 + Q)t + <p0 + Ф0) + + -—-cos((to0 -^Х + <Ро ~фо/
(8.3)
(8.3)
Результат преобразования показывает, что однотональный AM-сигнал состоит из трех гармонических составляющих, одна из которых представляет собой несущее колебание с частотой <в0, а две оставшихся (их называют боковыми частотами) отстоят от него вверх и вниз по частоте на величину Q. Амплитуда несущего колебания равна Ао и не зависит от уровня модулирующего сигнала. Амплитуды боковых частот, равные Аот/2, напротив, пропорциональны коэффициенту модуляции.
Для верхней боковой частоты начальные фазы несущей и модулирующего сигнала складываются, а для нижней — вычитаются.
Амплитудный и фазовый спектры однотонального АМ-сигнала показаны на рис. 8.5.
б
Рис. 8.5. Амплитудный (а) и фазовый (б) спектры однотонального АМ-сигнала
ЗАМЕЧАНИЕ
Следует подчеркнуть, что в общем случае полученное представление однотонального АМ- сигнала не является его разложением в ряд Фурье. Такое представление в виде суммы гармонических функций может рассматриваться как ряд Фурье только в том случае, когда для всех трех частот спектральных составляющих существует общий делитель. Это возможно, если отношение сод/О является рациональной дробью.
Из графиков видно, что ширина спектра однотонального АМ-сигнала в два раза превышает частоту модулирующего сигнала: Део - 2Q.
Чтобы понять, как из трех гармонических составляющих с постоянной амплитудой складывается сигнал с меняющейся амплитудой, создадим векторную диаграмму. Для этого представим каждое из трех гармонических колебаний как вещественную часть комплексной экспоненты:
sAM(t)=Re еМлое^sAM(t)=Re еМлое^+ ^Ш+ АД? ej(-nt->-<po-4>o)
sAM(t)=Re еМлое^
sAM(t)=Re еМлое^
22
Построим векторную диаграмму, демонстрирующую суммирование этих составляющих (рис. 8.6).
Рис. 8.6. Векторная диаграмма формирования однотонального АМ-сигналаРис. 8.6. Векторная диаграмма формирования однотонального АМ-сигнала
Рис. 8.6. Векторная диаграмма формирования однотонального АМ-сигнала
Рис. 8.6. Векторная диаграмма формирования однотонального АМ-сигнала
При сложении колебаний с разными частотами постоянно меняются их взаимные фазовые соотношения. Векторы боковых частот вращаются в разные стороны с угловой скоростью Q относительно вектора несущего колебания. В результате колебания боковых частот оказываются то синфазными с несущим колебанием, увеличивая его амплитуду, то противофазными с ним (тогда амплитуда сигнала уменьшается). Наконец, вектор несущей частоты вращается с угловой скоростью <в0. Значение АМ-сигнала определяется проекцией результирующего вектора на вещественную (горизонтальную) ось.
АМ-сигнал в общем случае
Формула, связывающая спектр АМ-сигнала со спектром модулирующего сигнала, нами уже была получена (см. в главе 1 свойство преобразования Фурье (1.18), касающееся умножения сигнала на гармоническую функцию). Действительно, ведь АМ-сигнал — это и есть результат умножения модулирующего сигнала (с добавленной постоянной составляющей) на гармоническое несущее колебание.
Повторим, слегка изменив обозначения, полученную ранее формулу (1.18):
5АМ(со) = 1^5А(Ю+Юо) + р^^(8.4)
Спектр огибающей A(t) при амплитудной модуляции сдвигается в область несущей частоты ±соо, «раздваиваясь» и уменьшаясь в два раза по уровню. Покажем это на графике, задав какую-нибудь функцию для спектра огибающей 5А (со) (рис. 8.7):
» w - -20:0.1:20:% значения частот длЯ расчета
» w0 - 10:% несущая частота
» S_A - l./(l+w.A2): X спектр модулирующего сигнала
» X спектр модулированного сигнала
» S_AM - 0.5./(l+(w+w0).*2) + 0.5./(l+(w-w0).*2):
» plot(w. S_A, w, S_AM)
Рис. 8.7. Спектры огибающей (пунктирная линия) и AM-сигнала (сплошная линия)
Итак, спектр AM-сигнала в общем случае содержит несущую частоту (уровень которой определяется постоянной составляющей огибающей), а также верхнюю и нижнюю боковые полосы.,
Из графиков видно, что ширина спектра AM-сигнала вдвое больше максимальной (граничной) частоты модулирующего сигнала: Асо - 2Qmax.
Вычислим значение спектральной функции AM-сигнала на несущей частоте:
-?ам (»о) = ^ е"™ 5А (0) +1 е* 5А (2(о0).
Первое слагаемое результата — как и положено, деленная пополам постоянная составляющая модулирующего сигнала. А вот второе слагаемое представляет собой «хвост» от второй «половинки» спектра, сконцентрированной в области отрицательных частот, в окрестностях частоты -о0. Следует иметь в виду, что, поскольку все реальные сигналы имеют конечную длительность (и, следовательно, бесконечно протяженный спектр), данное явление наложения «хвостов» всегда будет иметь место. В большинстве практических ситуаций, однако, несущая частота значительно превышает эффективную граничную частоту спектра огибающей, так что влияние данного эффекта пренебрежимо мало.
Графически проиллюстрируем наложение «хвостов» сдвинутых копий спектра, уменьшив в рассмотренном ранее примере несущую частоту (рис. 8.8):
» w - -,5:0.1:5:% значения частот длЯ расчета
» wO .-«2:X несущая частота
» S_A - l./(l+w.A2): % спектр модулирующего сигнала
» % спектр модулированного сигнала
» S_AM = 0.5./(l+(w+w0).A2) + 0.5./(l+(w-wO).А2):
» plot(w, S_A. w, S_AM)
Рис. 8.8. При недостаточно высокой несущей частоте спектр АМ-сигнала (сплошная линия) может быть существенно несимметричным относительно несущей частоты из-за наложения «хвостов»Рис. 8.8. При недостаточно высокой несущей частоте спектр АМ-сигнала (сплошная линия) может быть существенно несимметричным относительно несущей частоты из-за наложения «хвостов»
Рис. 8.8. При недостаточно высокой несущей частоте спектр АМ-сигнала (сплошная линия) может быть существенно несимметричным относительно несущей частоты из-за наложения «хвостов»
Рис. 8.8. При недостаточно высокой несущей частоте спектр АМ-сигнала (сплошная линия) может быть существенно несимметричным относительно несущей частоты из-за наложения «хвостов»
Энергетические соотношения в АМ-сигнале
В этом разделе нам вновь придется вернуться к рассмотрению однотонального АМ-сигнала (8.2), чтобы выяснить, как распределяется мощность в его спектре. Для начала определим пиковую мощность однотонального АМ-сигнала. Как указывалось ранее, его максимальная амплитуда равна Ао(1 + т\ следовательно, пиковая мощность составляет
Ртах - Ао2(1 + т)2.
Теперь займемся средней мощностью. Как говорилось ранее, AM-сигнал в общем случае не является периодическим, поэтому для расчета средней мощности необходимо применить предельный переход согласно формуле (1.4):
4 Г/2
Р„ = lim— [ $2(Г)б?Г = ср т-^т J v
4 Г/2= )™Г К^О-7'/24 Г/2= )™Г К^О-7'/21 -т/г
4 Г/2
= )™Г К^О
-7'/2
4 Г/2
= )™Г К^О
-7'/2
+ mcos(Qr + Фо ))соз(®0Г + ф0 ^ dt
^о | Ар/и224
ЗАМЕЧАНИЕ
Тот же результат можно получить и без вычисления интеграла. Достаточно вспомнить, что мощность гармонического колебания с амплитудой А равна А2/2 и что гармонические колебания разных частот являются некоррелированными, а потому их мощности можно складывать. Далее остается только применить все сказанное к представлению однотонального AM-сигнала в виде суммы гармонических составляющих (см. формулу (8.3) и рис. 8.5).
Первое слагаемое не зависит от коэффициента модуляции и представляет собой мощность немодулированной несущей. Полезная мощность, заключенная в боковых частотах, представлена вторым слагаемым.
Введем в рассмотрение коэффициент полезного действия (КПД) амплитудной модуляции, определив его как отношение мощности боковых частот к общей средней мощности сигнала:
т2 + 2
Построим график зависимости КПД от коэффициента модуляции т (рис. 8.9):
» m - 0:0.01:1;
» eta - m.*2./(m.*2+2):
» plot(m, eta)
» xlabeK'm')
» ylabel('\eta_{AM}')
Рис. 8.9. Зависимость КПД от коэффициента амплитудной модуляции
Результаты неутешительные — даже при максимально допустимом значении коэффициента модуляции (т = 1) КПД составляет лишь 33 %, то есть две трети
мощности тратится на передачу бесполезной в информационном отношении несущей.
Исторически АМ была первым практически освоенным видом модуляции. Однако низкий КПД и ширина спектра, вдвое превышающая ширину спектра модулирующего сигнала, привели к тому, что сфера применения АМ стала довольно узкой. В настоящее время АМ применяется для радиовещания на сравнительно низких частотах (в диапазонах длинных, средних и коротких волн) и для передачи изображения в телевизионном вещании.
Демодуляция АМ
Демодуляция АМ-сигнала может быть выполнена несколькими способами. Простейший путь — имитировать работу аналогового двухполупериодного детектора. Мы вычисляем модуль входного АМ-сигнала, а затем сглаживаем получившиеся однополярные косинусоидальные импульсы, пропуская их через ФНЧ (рис. 8.10):
» у -abs(s_AM_50):%модуль АМ-сигнала
» [b,а] - butter(5.2*0MEGA/p1/Fs):Жсглаживающий ФНЧ
» z -filtf1lt(b. а.у):Жфильтрация
» plot(t(l:1000). у(1:1000), '--'. t(l:1000). z(l:1000))
Рис. 8.10. Двухполупериодное детектирование АМ-сигнала: однополярные импульсы (пунктирная линия) и результат их сглаживания (сплошная линия)Рис. 8.10. Двухполупериодное детектирование АМ-сигнала: однополярные импульсы (пунктирная линия) и результат их сглаживания (сплошная линия)
Рис. 8.10. Двухполупериодное детектирование АМ-сигнала: однополярные импульсы (пунктирная линия) и результат их сглаживания (сплошная линия)
Рис. 8.10. Двухполупериодное детектирование АМ-сигнала: однополярные импульсы (пунктирная линия) и результат их сглаживания (сплошная линия)
Данный способ, очевидно, не будет работать правильно в случае перемодуляции. Следующий метод — так называемое синхронное детектирование, суть которого состоит в умножении частоты сигнала на опорное колебание с несущей частотой:
(8.5)(8.5)1/(0 = 5ам(Осо8(со0( + ф0) = A(t)cos2(co0t + Фо) - = |а(0 + |а(Г)со8(2сОоГ + 2фо).
(8.5)
(8.5)
Результат умножения содержит два слагаемых. Первое это искомая амплитудная функция, второе — AM-сигнал с несущей частотой 2со0. Этот высокочастотный сигнал легко удаляется путем пропускания сигнала через ФНЧ (рис. 8.11):
» X умножение на опорное колебание
» у - s_AM_50 .* cos(omega0*t);
» [b. a] - butter(5, 2*OMEGA/pl/Fs): X сглаживающий ФНЧ
» z - f1ltfnt(b, а. у);X фильтрация
» plOt(t(l:1000). y(l:1000).t(l:1000), z(l:1000))
Рис. 8.11. Синхронное детектирование AM-сигнала: результат умножения на опорное колебание (пунктирная линия) и выделенный низкочастотный сигнал (сплошная линия)
Однако в данном случае необходимо очень точное совпадение начальных фаз и частот опорного колебания демодулятора и несущего колебания АМ-сигнала. При совпадении частот, но несовпадении начальных фаз выходной низкочастотный сигнал оказывается умноженным на косинус фазовой ошибки:
y(t) = sAM(t)cos(co0t + ф) = A(t)COs(to0t + ф0)СО8((О0< + ф) =
11
= - А (Осоз(ф - ф0) + - A (0cos(2qo t + ф0 + ф).
Таким образом, при наличии фазовой ошибки уровень полезного сигнала на выходе демодулятора падает, а при ошибке, равной 90°, становится равным нулю. При наличии частотного сдвига'между несущим и опорным колебаниями ситуация становится еще хуже — выходной низкочастотный сигнал оказывается умноженным на гармоническое колебание с разностной частотой:
1/(0 = sam(Ocos((co0 + Aco)t) = A(t)cos(a>0t + фо )cos((co0 + Ato)t) = = ^А(Г)со8(Лй)Г-ф0) + ^А(Г)со8((2(В0 + До)< + ф0).
В результате выходной сигнал будет пульсировать с частотой Асо. Это явление называется биениями (beat), а разность частот Асо — частотой биений (beat frequency).
Для поддержания частотной и фазовой синхронизации между несущим и опорным колебаниями используются следящие системы фазовой автоподстройки частоты (ФАПЧ), рассмотрение которых выходит за рамки тематики данной книги.
Достоинством синхронного детектирования является то, что оно позволяет правильно демодулировать сигнал даже в случае перемодуляции (ведь формула (8.5) не перестает быть верной в случае знакопеременной функции A(t)).
Разновидности амплитудной модуляции
Попытки улучшить характеристики АМ привели к разработке нескольких ее модификаций, которые и будут рассмотрены в данном разделе.
АМ с подавленной несущей
Первое, что приходит в голову при размышлении на тему повышения КПД амплитудной модуляции, — это идея удалить бесполезное несущее колебание, все- таки отказавшись от добавления постоянной составляющей к модулирующему сигналу. Такой способ называется АМ с подавленной несущей (АМ-ПН, английский термин — amplitude modulation with suppressed carrier, AM-SC);
s(t) - sM(0 cos(cdo t + фо).
Рис. 8.12. Однотональная АМ с подавленной несущей
Построим график такого сигнала при однотональной модуляции (рис. 8.12).
».t = 0:0.01:10:% дискретное время
» omegaO = 20:% несущая частота
» OMEGA = 1:% частота модулирующего сигнала
» s_M - cos(OMEGA*t): % модулирующий сигнал
» s_AM_SC = s_M .* cos(omega0*t): % АМ-ПН сигнал
» plot(t. s_AM_SC)
Энергетический выигрыш при этом, конечно, велик (согласно введенному нами определению, КПД становится равным 100 %).
Ширина спектра AM-сигнала с подавленной несущей такая же, как в случае обычной АМ (ведь подавлена средняя (несущая) частота, а боковые частоты остались на месте).
Таким образом, АМ с подавленной несущей обладает определенными преимуществами по сравнению с обычной АМ. Однако этот способ модуляции не получил широкого распространения, и связано это с проблемами, возникающими при демодуляции сигнала.
Демодуляция АМ с подавленной несущей
Как было указано в разделе «Демодуляция АМ», формула (8.5) справедлива как для однополярной, так и для знакопеременной амплитудной функции A(t). Поэтому демодуляция АМ с подавленной несущей может выполняться путем синхронного детектирования. При этом сохраняет силу все сказанное о необходимости точного соответствия частот и начальных фаз несущего и опорного колебаний.
Для облегчения правильного восстановления несущей иногда применяют следующий прием. На передающей стороне несущее колебание подавляется не полностью. Его «остаток» с небольшой амплитудой (он называется пилот-сигналом) используют для синхронизации частоты и фазы несущего колебания на приемной стороне.
Однополосная модуляция
Рассмотренная в предыдущем разделе двухполосная АМ с подавленной несущей имеет преимущества перед обычной АМ только в энергетическом смысле — за счет устранения несущего колебания. Ширина же спектра при этом остается равной удвоенной частоте модулирующего сигнала.
Однако можно легко заметить, что спектры двух боковых полос AM-сигнала являются зеркальным отражением друг друга, то есть они несут одну и ту же информацию. Поэтому одну из боковых полос можно удалить. Получающаяся модуляция называется однополосной (английский термин — single side band, SSB). В зависимости от того, какая боковая полоса сохраняется, говорят об однополосной модуляции с использованием верхней или нижней боковой полосы. Формирование однополосного сигнала проще всего пояснить, приведя несколько спектральных графиков (рис. 8.13).
■>0)■>0)ввРис. 8.13. Однополосная модуляция: а — спектр модулирующего сигнала, б — спектр однополосного сигнала с верхней боковой полосой, а — то же с нижней боковой полосойРис. 8.13. Однополосная модуляция: а — спектр модулирующего сигнала, б — спектр однополосного сигнала с верхней боковой полосой, а — то же с нижней боковой полосой
■>
0)
■>
0)
в
в
Рис. 8.13. Однополосная модуляция: а — спектр модулирующего сигнала, б — спектр однополосного сигнала с верхней боковой полосой, а — то же с нижней боковой полосой
Рис. 8.13. Однополосная модуляция: а — спектр модулирующего сигнала, б — спектр однополосного сигнала с верхней боковой полосой, а — то же с нижней боковой полосой
По сути дела, при однополосной модуляции происходит просто сдвиг спектра сигнала в окрестности частоты несущего колебания. В отличие от АМ каждая «половинка» спектра смещается в своем направлении: область положительных частот — к cd0, а область отрицательных частот — к -а)0.
Очевидно, что ширина спектра однополосного сигнала равна ширине спектра модулирующего сигнала. Таким образом, спектр однополосного сигнала оказывается в два раза уже, чем при обычной АМ.
В отличие от предыдущих случаев здесь нам не удастся простыми средствами выразить связь между модулированным и модулирующим сигналами. Чтобы сделать это, придется воспользоваться преобразованием Гильберта и понятием аналитического сигнала (см. раздел «Комплексная огибающая» главы 1).
Итак, прежде всего мы формируем из модулирующего сигнала аналитический сигнал, имеющий односторонний спектр. Умножение этого сигнала на ехр (усооО сдвигает его односторонний спектр на со0 вправо (вверх по частоте), формируя односторонний спектр однополосного сигнала с верхней боковой полосой. Наконец, чтобы перейти от аналитического сигнала обратно к вещественному, нужно взять вещественную часть. Формирование сигнала с нижней боковой полосой описывается аналогично, только умножать аналитический сигнал нужно на exp (-jcoq t) (тогда его спектр сдвинется влево, в область отрицательных частот,
и займет положение нижней боковой полосы). Теперь осталось записать все сказанное математически:
sSsb(O = Re((r(0 + .;X(0)exp(±jcDoO) =<8 6)
= x(i)cos a>01Т ^(t)sinco0t.
Знак «минус» в окончательной формуле соответствует выделению верхней боковой полосы, «плюс» — нижней.
Итак, однополосный сигнал можно представить как сумму двух АМ-сигналов, несущие колебания которых имеют одну и ту же частоту, но сдвинуты по фазе друг относительно друга на 90°. Амплитудными функциями этих АМ-сигналов являются модулирующий сигнал и его квадратурное дополнение. В зависимости от того, складываются эти два AM-сигнала или вычитаются (а точнее, какая из двух несущих опережает другую по фазе), формируется однополосный сигнал с верхней или нижней боковой полосой.
Амплитудная огибающая однополосного сигнала нисколько не похожа на модулирующий низкочастотный сигнал. Проверим это на конкретном примере. Случай гармонической модуляции на сей раз рассматривать не будем — он слишком прост (синусоида с частотой Q при однополосной модуляции превратится в синусоиду с частотой со0 ± Q; выбор знака определяется тем, какая используется боковая полоса). Возьмем модулирующий сигнал, состоящий из двух гармоник (рис. 8.14):
» Fs = 1000: X частота дискретизации
» t - O:l/Fs:1: Ждискретное время
» Fc=25:%несущая частота
» fl=5:Жпервая частота модуляции
» f2=10:Жвторая частота модуляции
» % модулирующий сигнал
» s_M = cos(2*pi*fl*t) + cos(2*pi*f2*t):
» % SSB-сигнал с верхней боковой полосой
» s_SSB_U - cosO*pi*(Fc+fl)*t) + cos(2*pi*(Fc+f2)*t):
» % SSB-сигнал с нижней боковой полосой
» s_SSB_L - cos(2*pi*(Fc-fl)*t) + cos(2*pi*(Fc-f2)*t):
» subplotO. 1. 1)
» plot(t. s_M)
» ylabeH' s_{M} (t)')
» t1tle('Modulating Signal')
» subplotO. 1. 2)
» plot(t, s_SSB_U)
» ylabelCsJSSB U}(t)')
» tltleCSSB Signal with Upper Side Band’)
» subplotO, 1. 3),
» plot(t, s_SSB_L)
» ylabeK’sJSSB L}(t)')
» title('SSB Signal with Lower Side Band')
Modulating Signal
SSB Signal with Upper Side Band
00.10.20.30.40.60.60.70.60.91
SSB Signal with Lower Side Band
00.10.20.30.40.50.60.70.80.9
Рис. 8.14. Однополосная модуляция: сверху — модулирующий сигнал, в центре — сигнал с верхней боковой полосой, снизу — сигнал с нижней боковой полосой
Однополосная модуляция с различным уровнем несущего колебания — от полного подавления др полного сохранения — нашла широкое применение в технике профессиональной радиосвязи.
Демодуляция однополосного сигнала
Несмотря на то что визуально (на графике) однополосный сигнал сильно отличается от обычного AM-сигнала, его демодуляция возможна тем же методом синхронного детектирования — путем умножения на опорное колебание:
у^ = sSSB(0cos сооГ = (x(i)cos coot ± ^(OsincOg^cos со0Г =
111
= -х(Г) + -x(i)cos2co0r ± -^1(r)sin2cooA
Результат умножения (рис. 8.15, сверху) содержит два слагаемых. Первое — это модулирующий сигнал, второе — однополосный сигнал на удвоенной несущей 2соо. Остается лишь выделить модулирующий сигнал с помощью ФНЧ (рис. 8.15, снизу):
» % умножение на опорное колебание
» у = s_SSB_U Л cos(2*pi*Fc*t):
» [b, а] = butter(5. Fc/Fs*2): % сглаживающий ФНЧ
» z - f1ltfilt(b, а, у):% фильтрация
» subplot(2. 1. 1)
» plot(t, у)
» subp!ot(2, 1, 2)
» plot(t. z)
Рис. 8.15. Демодуляция однополосного сигнала, показанного на рис. 8.14: сверху — результат умножения на несущее колебание, снизу — отфильтрованный демодулированный сигнал
Эффекты, возникающие при наличии частотного или фазового сдвига у опорного колебания, в случае однополосного сигнала проявляются не так, как при демодуляции АМ. Сначала рассмотрим ситуацию, когда есть только фазовый сдвиг, а ошибка по частоте отсутствует:
z/(0 = ^ssbCOcosC^o^ + ф) = (x(Ocos aot + x1(t)smtoflf) cos(o)0i + ф) =
= x(0cos ®01 COS(to0t + ф)± X1(t)sinto0tcos(to0t + ф) =
11
= - (x(t) cos ф ± xjt)sin ф) + - (^(0 cos(2co0t + ф) ± x^t )sin(2coo t + ф)).
Низкочастотная составляющая в этом случае представляет собой линейную комбинацию модулирующего сигнала х(Г) и его квадратурного дополнения x^t). Со спектральной точки зрения это означает фазовый сдвиг всех частотных составляющих сигнала на ф. Форма сигнала, разумеется, при этом искажается. Приемлемы ли такие искажения, зависит от характера передаваемого сигнала. Если однополосная модуляция используется для передачи звукового сигнала, фазовые искажения несущественны, поскольку ухо человека нечувствительно к фазовым соотношениям в акустическом сигнале.
Пусть теперь опорное колебание имеет частоту ю0 + Асо. Чтобы получить результат умножения, достаточно подставить в предыдущую формулу значение ф = Acoi:
y(t) = sSSB(i)cos((co0 + Асо)^ = -(x(i)cos(Acof)±x1(f)sin(Acoi)) +
+ -(x(i)cos((2®0 + Aco)£) ix^Osin^cOo + Aco)t)).
Низкочастотная составляющая здесь фактически представляет собой о; лосный сигнал с несущей частотой Асо. С частотной точки зрения это оз сдвиг спектра модулирующего сигнала на Асо. Это, разумеется, значитель лее серьезные искажения, чем в предыдущем случае. Скажем, при переда зыки искажения такого рода совершенно неприемлемы. При передаче же р го сигнала (а профессиональная радиосвязь — это основная сфера приме однополосной модуляции) сдвиг спектра приводит к искажению тембра i но разборчивость речи сохраняется при величине сдвига до нескольких ков, а для опытного оператора — до нескольких сотен герц.
Полярная модуляция
То, что мы рассмотрим в этом разделе, не является отдельным видом моду. Это скорее демонстрация применения амплитудной модуляции для решени кретной технической задачи. Речь пойдет о том, как реализуется стереоф( ское радиовещание в УКВ-диапазоне.
Для осуществления стереовещания необходимо передавать два сигнала . s^t) (левого и правого каналов) одновременно. В то же время при разр системы такого вещания накладывается еще и требование совместимости имеющимися монофоническими приемниками. Поэтому для стереовещан дифицируется низкочастотный модулирующий сигнал, который поступ; вход модулятора передатчика (в передатчике используется угловая моду, которая будет рассмотрена далее). Низкочастотная составляющая модул щего сигнала, лежащая в звуковом диапазоне, для совместимости с моноф| скими приемниками должна представлять собой монофонический сиги есть сумму сигналов левого и правого каналов:
smono(O ” Sr(O + sR(t).
В области более высоких (ультразвуковых) частот модулирующего сигнал мощью амплитудной модуляции передается дополнительный сигнал, позе щий впоследствии выделить из полученной смеси сигналы s^t) и s^t) дельности. Поскольку монофонический сигнал — это сумма двух канало! дополнительным компонентом, позволяющим восстановить исходные cv двух каналов, естественно выбрать их разность:
SDIFp(t) - St(t) - SR(t ).
Рассмотрим конкретный пример, задав для правого и левого каналов гарм! ские сигналы разных частот:
sL(f) - Al cos(Q£t),
SrU) - Ar СО$(ПдО-
Графики сигналов 5д(О> s«(O> smono(O и sdiff(O Для данного случая пое на рис. 8.16.
» t -
0:0.01:20:
% дискретное время
» w_L
- 1:
Ж частота сигнала левого канала
» w_R
" 2;
% частота сигнала правого канала
» s L
- cos(w L4):
X сигнал левого канала
» s_R - cos(w_R*t); 8 сигнал правого канала
» s_mono - s_L + s_R: % монофонический сигнал
» s_diff - s_L - s_R; % разностный сигнал
» subplot(2. 2, 1)
» plot(t, s_L)
» titleCLeft channel')
» subplot(2, 2, 2)
» plot(t, s_R)
» tltle('Right channel')
» subplot(2, 2. 3)
» plot(t. s_mono)
» titleCSJMONO}')
» subplot(2. 2. 4)
» plot(t. s_d1ff)
» title('SJDIFF)')
Left channelRight channel
Рис. 8.16. Сверху: сигналы левого и правого каналов, снизу: суммарный и разностный сигналы
Складывая и вычитая сигналы SmonoCO и sdiff(O> можно восстановить сигналы левого и правого каналов:
О /А _ SMONo(O + SDIFf(O
О /А _ SMONo(O~SDIFf(O
s RV)•
Монофонический сигнал, как уже было сказано, для совместимости должен передаваться как есть, а разностный сигнал модулирует несущую частоту, расположенную несколько выше звукового диапазона частот (ее называют поднесущей (subcarrier), поскольку весь сигнал, о формировании которого идет речь, затем используется для угловой модуляции несущего колебания радиопередатчика):
s(O - smono(O + (Ло + Sdiff(O) cos(cooh).
Построим график получающегося сигнала (рис. 8Л7):
» wO -10; Ж поднесущая частота
» АО - 2; % смещение длЯ разностного сигнала
% композитный стереосигнал
s = s_mono + (АО + s_diff) * cos(wO*t):
plot(t,plot(t,s)s)Получающийся сигнал (его называют композитнъш. стереосигналом'), как bl из рисунка, благодаря наличию низкочастотной составляющей обладает инте ным свойством: его верхняя и нижняя (положительная и отрицательная) бающие не совпадают. Более того, каждая из них с точностью до постоянно! ставляющей соответствует сигналу одного из стереоканалов: верхняя (поле тельная) огибающая — это левый канал, а нижняя (отрицательная) — npai Такая структура сигнала позволяет легко выделить из него сигналы стере налов.
plot(t,
plot(t,
s)
s)
Однако в показанном на рис. 8.17 виде сигнал для передачи не используе Дело в том, что из-за наличия несущего колебания размах сигнала (разность жду его максимальным и минимальным значениями) сильно увеличиваете: сравнению с монофоническим сигналом, что нежелательно. Поэтому несу колебание частично или полностью подавляют, так что разностный сигнал п дается в режиме перемодуляции.
ЗАМЕЧАНИЕ
Отечественный стандарт, согласно которому ведется радиовещание в диапазоне 65-74 I предусматривает частичное подавление поднесущей частоты, равной 31,25 кГц. Зару ный стандарт, используемый в диапазоне 88-108 МГц, специфицирует полное нодавл поднесущей частоты, равной 38 кГц. При этом для обеспечения возможности правиль восстановления поднесущего колебания в стереодекодерс приемника в состав сигнала дится пилот-сигнал на половинной частоте поднесущей (19 кГц).
Изобразим композитный стереосигнал для случая полного подавления несущей (пилот-сигнал добавлять не будем) (рис. 8.18):
» s - s_mono + s_diff .* cos(wO*t):
» plot(t, s)
» hold on
Из графика видно, что благодаря подавлению поднесущей размах сигнала существенно (в два раза) уменьшился.
Угловая модуляция
В начале главы уже было сказано, что фазовая и частотная модуляция тесно связаны друг с другом, благодаря чему и получили общее название «угловая модуляция» (УМ; английский термин — angle modulation). Поэтому прежде всего в этом разделе нужно рассмотреть сходство и различие этих двух видов модуляции.
Фазовая и частотная модуляция
Названия двух рассматриваемых видов модуляции, как и в случае с АМ, указывают параметр несущего колебания, который линейно связан с модулирующим сигналом.
Фазовая модуляция
Пусть модулирующий сигнал определяет начальную фазу несущего колебания: ф(О - fcM(O-
Тогда мы получаем сигнал с фазовой модуляцией (ФМ; английский термин — phase modulation, PM):
(8-7)(8-7)5фм(0 - A cos(co0t + &SM(t)).
(8-7)
(8-7)
Весь аргумент функции cos, взятый целиком, называется полной фазой колебания:
Т(0 - coot + &м(О-
Круговая частота колебания по определению представляет собой скорость изменения начальной фазы. Подобно тому как в случае неравномерного движения вводится понятие мгновенной скорости (равной производной от координаты по времени), для колебаний с угловой модуляцией вводится понятие мгновенной частоты (instantaneous frequency), равной производной от полной фазы по времени:
... d4f,dsM■
co(t) = —= со0 +к-7Г- atat
Итак, в случае фазовой модуляции изменяется не только начальная фаза, но и мгновенная частота колебания.
Соответственно, полная фаза может быть найдена путем интегрирования мгновенной частоты:
Частотная модуляция
Теперь мы можем ввести понятие частотной модуляции (ЧМ; английский термин — frequency modulation, FM), при которой модулирующий сигнал линейно связан с мгновенной частотой колебания:
co(t) - coo + bs^t\
Добавка в виде константы ю0 необходима для того, чтобы сделать колебание высокочастотным.
Полная фаза находится, как уже говорилось, путем интегрирования:
4,(t) = toot + ^JsM(t')t/t'+vo.(8.8)
Здесь ф0 — произвольная постоянная интегрирования.
Наконец, сам ЧМ-сигнал имеет следующий вид:
5чм(О = ^cos (co0t + ^J sM(t' )dt' + ф0).
Как видим, начальная фаза колебания при частотной модуляции претерпевает изменения, пропорциональные интегралу от модулирующего сигнала:
ф(О = £рм(^)^' + Ф0.
Таким образом, частотная и фазовая модуляции оказываются взаимосвязанными: если изменяется начальная фаза колебания, изменяется и его мгновенная
частота, и наоборот. По этой причине два этих вида модуляции и объединяют под общим названием «угловая модуляция».
Из сказанного можно сделать несколько выводов:
По форме колебания с угловой модуляцией нельзя определить, ФМ это или ЧМ. Для этого необходимо знать еще и модулирующий сигнал.
Если пропустить модулирующий сигнал через идеальное дифференцирующее устройство, а затем подать его на частотный модулятор, получится фазовая модуляция (верхняя ветвь на рис. 8.19).
Если пропустить модулирующий сигнал через идеальное интегрирующее устройство, а затем подать его на фазовый модулятор, получится частотная модуляция (нижняя ветвь на рис. 8.19).
Рис. 8.19. Взаимосвязь фазовой и частотной модуляции
В заключение данного раздела приведем сводную таблицу, показывающую, как связаны с модулирующим сигналом различные характеристики модулированного колебания при фазовой и частотной модуляции.
Параметр
ФМ'
ЧМ
Начальная фаза
ф(О - ^м(Г)
ф(0 = ^5м(Г')^' + Фо
Полная фаза
Ф(Г) - coot + £sM(t)
Ф(Г) = co0t + ^J s^t'^dt* + ф0
Мгновенная частота
со(Г) = со0 + й— at
co(t) - too + ^M(t)
Гармоническая угловая модуляция
Аналогично тому, как мы это делали для амплитудной модуляции, рассмотрим случай гармонического модулирующего сигнала. Начальная фаза колебания изменяется при этом по гармоническому закону:
ф(?) = р sin(Qt).,
Коэффициент р называется индексом угловой модуляции (modulation index). Он определяет интенсивность колебаний начальной фазы.
Полная фаза получится путем добавления линейного слагаемого со01:
T(t) = coo? + Р sin(Q t).
Наконец, сам сигнал с гармонической УМ:.
s(t) - A cos(coq t + Р sin(Q t)).
Как уже говорилось, при изменении начальной фазы изменяется и мгновенная частота:
co(t) == со0 + pn cos(Q t).
at
В данном случае мгновенная частота меняется также по гармоническому закону. Как видно из полученной формулы, ее максимальное отклонение от среднего значения со0 составляет рп. Эта величина называется девиацией частоты (frequency deviation) и обозначается ®^. Таким образом, мы получили важную формулу, показывающую, что индекс угловой модуляции равен отношению девиации частоты к частоте модулирующего сигнала:
Итак, при гармонической УМ и начальная фаза, и мгновенная частота меняются по гармоническому закону. Различия между частотной и фазовой модуляцией начинают проявляться при изменении частоты модулирующего сигнала Q.
При ФМ индекс р является характеристическим параметром модуляции и от частоты модулирующего сигнала не зависит. Девиация частоты оказывается прямо пропорциональной Q:
р - const,
со d - р Q.
При ЧМ характеристическим параметром, не зависящим от частоты модулирующего сигнала, является девиация частоты corf. Индекс модуляции в этом случае оказывается обратно пропорциональным Q:
«>d - const,
Р = —■
Зависимости индекса модуляции и девиации частоты от частоты модулирующего сигнала в случае ФМ и ЧМ представлены на рис. 8.20.
Рис. 8.20. Зависимость индекса модуляции (слева) и девиации частоты (справа) от частоты гармонического модулирующего сигнала при ФМ и ЧМ
Спектр сигнала с гармонической угловой модуляцией'
В данном разделе мы сначала получим точное выражение для спектра радиосигнала с гармонической УМ, а затем рассмотрим его приближенный вариант, справедливый для малых индексов модуляции (р « 1).
Для расчета спектрального представления сигнала с гармонической УМ мы прежде всего представим сигнал в виде вещественной части комплексной экспоненты:
$ум(£) - Re (Л ехрОо^ + >фо + >Psin(Q t + ф0))) =
= Re (A exp(jaot + j ф0) ехр(; р sin(Q t + Фо))).
Теперь воспользуемся представлением выражения exp(/Psin х) в виде ряда Фурье:
expQpsinx) = ^/ДР)ехр(^х).(8.9)
Здесь Jt(P) — функция Бесселя 1-го рода порядка к от аргумента р.
Используя представление (8.9), можно записать
5ум(0 = Re^ exp(>ot + j ф0 )^ Jk (р)ехр(у k(Q t + Фо))
= л £л(Р)со8((со0 + £П)£ + ф0 + &Ф0).
Как видите, спектр сигнала содержит бесконечное количество составляющих с частотами со0 + к Q, к - 0, ±1, ±2, .... Амплитуда к-й составляющей равна A ^(Р), то есть пропорциональна функции Бесселя ^-го порядка, аргументом которой является индекс модуляции р.
Функции Бесселя имеют колебательный характер (графики нескольких из них приведены на рис. 8.21), поэтому спектр при удалении от несущей частоты со0 спадает немонотонно. Для примера на рис. 8.22 приведены спектрограммы, соответствующие р - 1, 10 и 100. На рисунке предполагается, что со0» Q, так что наличием «хвостов», заползающих из области отрицательных частот, можно пренебречь:•
» % построение графиков функций БесселЯ
» х - 0:0.01:10;
»• figure
» hold on
» for k = 0:5, plot(x, besselj(k, x)), end
» hold off
» grid on
» xlabel('x’)
» ylabel(’J_(k}(x)')
Рис. 8.21. Функции Бесселя
» Ж спектрограммы УМ-сигналов с разным индексом модуляции
» subplotO, 1, 1)
» к - -10:10:
» stem(k. abs(besselj(k, 1)), '.')
» subplotO, 1, 2)
» к - -20:20:
» stem(k, abs(bessel j(k, 10)). ’.’)
» subplotO, 1, 3)
» к ■ -150:150:
» stem(k, abs(besselj(k. 100)), ',')
Рис. 8.22. Амплитудный спектр сигнала с гармонической УМ при индексе модуляции, равном 1 (сверху), 10 (в центре) и 100 (снизу)
Теперь приближенно рассмотрим частный случай малого индекса модуляции (Р « 1). Начнем с того, что применим к сигналу с гармонической УМ тригонометрические преобразования, чтобы раскрыть косинус суммы:
$ум(£ ) = A cos(to0t + фо) cos(P sin(Q t + Фо» -
- A sin(coot + фо) sin(P sin(Q t + ф0)).
Поскольку мы считаем, что Р « 1, можно приближенно принять, что
cos(P sin(Q t + Фо)) « 1,
sin(P sin(Q t + Фо)) » P sin(Q t + Фо).
С учетом этого
5ум(0 * A cos(co0t + фо) - A sin(co0t + фо) P sin(Q t + Фо).
Остается представить последнее слагаемое в виде полуразности косинусов:
АР
SyM(O* ЛсО8((»0<+ф0)—^COs((to0 +П)( + ф0 +Ф0) +
+ ^.cos((co0 -П)« + ф0 -Фо).
Полученный результат сильно напоминает полученное ранее представление (8.3) для AM-сигнала с гармонической модуляцией — тоже три составляющих с теми же частотами, да и амплитуды их рассчитываются аналогично (только вместо коэффициента амплитудной модуляции т в формуле фигурирует индекс угловой модуляции Р). Однако есть не слишком бросающееся в глаза, но тем не менее принципиальное отличие, превращающее амплитудную модуляцию в угловую — знак «минус» перед одним из слагаемых, соответствующих боковым частотам. Почему этот знак оказывается столь важным, мы увидим чуть ниже, при создании векторной диаграммы, а пока отметим главное: чтобы превратить сигнал с гармонической АМ в сигнал с гармонической УМ, достаточно изменить на 180° начальную фазу одной из боковых частот.
ЗАМЕЧАНИЕ
Еще один способ превратить АМ в УМ — изменить фазу составляющей с несущей частотой на 90°. В том, почему это именно так, читателю предлагается разобраться самостоятельно.
Амплитудный и фазовый спектры сигнала с УМ при малом индексе модуляции (ее еще называют узкополосной УМ) показаны на рис. 8.23 (пунктирная линия демонстрирует фазу верхней боковой частоты для случая АМ).
Теперь построим векторную диаграмму аналогично тому, как мы делали это для гармонической АМ. Поскольку спектральные представления сигналов с гармонической АМ и УМ различаются лишь знаком перед одним из слагаемых, подробно комментировать построение иллюстрации, показанной на рис. 8.24, нет необходимости. Скажем только, что для большей наглядности при построении выбрано довольно большое значение индекса модуляции (₽ - 0,5),
СО() - О COq <Bq + О
СО0 - П СО0 tog + П О)
б
Рис. 8.23. Амплитудный и фазовый спектры сигнала с гармонической УМ при р « 1
Рис. 8.24. Векторная диаграмма сигнала с гармонической УМ
ЗАМЕЧАНИЕ
Из векторной диаграммы видно, что при показанном сложении векторов меняется не только начальная фаза, но и амплитуда результирующего вектора. Это связано с тем, что формула, по которой производится построение диаграммы, является приближенной. Заинтересованный читатель может выполнить точный расчет амплитудной огибающей и фазовой функции данного сигнала, воспользовавшись преобразованием Гильберта (см. раздел «Комплексная огибающая» главы 1).
Ширина спектра сигнала с гармонической УМ
При малом индексе модуляции, когда можно использовать только что рассмотренное приближенное спектральное представление, ширину спектра можно, очевидно, принять равной 2Q (то же имело место в случае AM-сигнала). Сложнее оценить эффективную ширину спектра в случае большого индекса модуляции р. (В случае УМ речь идет именно об эффективной ширине спектра, поскольку спектр, строго говоря, содержит бесконечное число составляющих.)
При фиксированном аргументе р функции Бесселя затухают с ростом (по модулю) их порядка к. Попробуем на глаз оценить, как соотносятся индекс модуляции р и номер функции Бесселя к, начиная с которого абсолютные величины функций Бесселя становятся пренебрежимо малыми. Для этого построим линии равного уровня для функций Бесселя в координатах (Р, ^) при изменении р и к от 0 до 40 (рис. 8.25):
» N = 40: % предельное значение beta и к
» for к = 0:N. х(к+1,:) = BesselJCk, 0:N); end
» contourf(0:N, 0:N, x, [-1:0.1:!])
» xlabel('\beta')
» ylabel(’к')
» colorbar
» colormap gray
Рис. 8.25. Зависимость функций Бесселя от аргумента р и порядка к
Из графика видно, что с ростом порядка к при фиксированном аргументе р функции Бесселя затухают. Обычно считают, и рисунок это подтверждает, что при оценке эффективной ширины спектра в случае р » 1 можно пренебречь составляющими с номерами, по абсолютной величине превосходящими индекс угловой модуляции р. Таким образом, остаются составляющие, для которых |&| < Р, и эффективная ширина спектра оказывается равной
АГозфф ” 2 ро.
С учетом приведенного выше соотношения, определяющего индекс угловой модуляции как отношение между девиацией частоты и частотой модулирующего
сигнала, эффективная ширина спектра оказывается равной удвоенной девиации частоты:
АСОдфф 2С0</ .
Итак, в зависимости от значения индекса модуляции р можно привести две формулы для расчета эффективной ширины спектра УМ-сигнала:
при р « 1 ширина спектра равна удвоенной частоте модулирующего сигнала: АсоЭфф 20,
при р » 1 ширина спектра равна удвоенной девиации частоты: ДсоЭфф = 2^.
В отличие от АМ, в случае угловой модуляции получить аналитическое выражение для спектра при произвольном модулирующем сигнале не удается. Даже попытка рассмотреть двухтональный модулирующий сигнал делает аналитические выкладки намного сложнее, чем при гармонической модуляции.
Демодуляция УМ
Как и в случае АМ, демодуляция УМ-сигнала может выполняться различными способами. Наиболее радикальный подход — вычислить аналитический сигнал (см. раздел «Комплексная огибающая» главы 1) и выделить его фазовую функцию. Дальнейшие действия зависят от вида угловой модуляции. Для демодуляции ФМ из фазовой функции вычитается линейное слагаемое coot, соответствующее немодулированной несущей. В случае ЧМ фазовая функция дифференцируется, а из результата вычитается константа соо (рис. 8.26):
» Fs - 100:X частота дискретизации
» t - O:l/Fs:3:% дискретное время
» % сигнал с гармонической УМ
» beta - р1:% индекс модуляции
» Fc - 10:% несущая частота
» F - 1:% частота модуляции
» $ - cos(2*pi*Fc*t + beta*sin(2*p1*F*t)):
» у - hilbert(s);% аналитический сигнал
» phi - unwrap(angle(y)):% фазовая функция
» z_pm - phi - 2*p1*Fc*t:% демодуляция ФМ
» z_fm - diff (phi)*Fs - 2*p1*Fc: % демодулЯциЯ ЧМ
» pTot(t, z_pm, t(l:end-l), z_fm, '--')
ЗАМЕЧАНИЕ
В приведенном коде вычисление производной от полной фазы по времени аппроксимируется конечными разностями — diff(phi)*Fs.
"' У " 1 111111
Недостатком данного метода является обработка всего входного сигнала сразу с использованием преобразования Гильберта. Для реализации демодуляции в реальном масштабе времени необходима последовательная обработка поступающих отсчетов входного сигнала. Это можно реализовать, используя для получения аналитического сигнала приближенную гильбертовскую фильтрацию во
временной области (синтез нерекурсивных и рекурсивных фильтров Гильберта был рассмотрен в главе 6).
Рис. 8.26. Результаты фазовой (сплошная линия) и частотной (пунктирная линия) демодуляции сигнала с гармонической УМ
Еще одной альтернативой, пригодной для реализации в реальном масштабе времени, является квадратурная обработка. При этом входной сигнал умножается на два опорных колебания, сдвиг по фазе между которыми составляет 90°:
^i(^) = •SyM(t)c°S(Bot = Acos(<B0t + <p(t))cos<B0t =
АА
= — со$ф(£) + — cos(2co0t + ф(<)), z/Q(t) = syM(i)sin<Boi = Acos(<B0t + <p(t))sin<Boi =
A A
= --8тф(О + -8т(2(о0г + ф(О).
Каждый из результатов умножения содержит два слагаемых. Одно из них — низкочастотное (косинус или синус начальной фазы), другое — высокочастотное (УМ-сигнал с несущей частотой 2соо). Низкочастотные составляющие выделяются с помощью ФНЧ:
у\ (t) = A/2 cosv(t),
У'а (t^-A/2 sinv(t).
Дальнейшие действия, так же как и раньше, зависят от вида угловой модуляции. Для демодуляции ФМ нам необходимо вычислить фазу полученной пары квадратурных составляющих:
^фм)(0 = ~аг8( Уг (О + УУо (О) =
= -arg ^ cos V(t) - j ^ sin ф (t/j = -arg ^ exp(-j ф(О)) = ф(О-
Для демодуляции ЧМ полученную фазовую функцию необходимо продифференцировать:
*чмО) = ^тг" = ~ arg ( у\ (t) + jy'Q (t)) = wU(* If
= arctg
dtу\(0 VvW + y'XW
Структурная схема получившегося демодулятора показана на рис. 8.27.
Рис. 8.27. Квадратурная обработка сигнала с угловой модуляцией
Достоинством данной схемы является то, что при высокой несущей частоте входные блоки (генератор опорного колебания и умножители) могут быть выполнены в аналоговом виде (см. раздел «Квадратурная дискретизация узкополосных сигналов» главы 3).
Еще одним способом демодуляции сигналов с УМ является использование следящих систем ФАПЧ. Рассмотрение таких систем выходит за рамки тематики данной книги.
Квадратурная модуляция
В предыдущих разделах мы рассмотрели случаи, когда амплитуда и начальная фаза гармонического колебания подвергались модуляции по отдельности. Однако можно изменять эти два параметра одновременно, получив за счет этого возможность передавать два сигнала сразу:
s(t) = A(t^ cos(coot + ф(Г)).
Такую модуляцию можно было бы назвать амплитудно-фазовой. Однако два модулирующих сигнала оказываются в данном случае «неравноправными», так как они модулируют существенно разные параметры несущего колебания. Можно сделать ситуацию более «симметричной», слегка преобразовав форму представления рассматриваемого сигнала. Для начала раскроем косинус суммы:
s(t) = A(t) cos(co00 c°s ф(О ~ A(t) sin(coot) sin ф(Г).
Теперь сигнал оказался представленным в виде суммы двух AM-колебаний. Их несущие — cos(a>0O и sin(coot) — сдвинуты по фазе на 90° друг относительно друга, а амплитудные функции равны A(t) cos ф(0 и -A(t) sin <p(t). Обозначим эти амплитудные функции как a(t) и b(t) и используем их в качестве новой пары модулирующих сигналов (вместо амплитуды и начальной фазы):
s(t) = a(t) cos(coo^) + b(t) sin(coo^).(8.10)
Такое представление рассматриваемого сигнала называется квадратурным (quadrature), а данный способ модуляции — квадратурной модуляцией (КАМ, английский термин — quadrature amplitude modulation, QAM). Модулирующие сигналы при этом оказываются совершенно равноправными.
ЗАМЕЧАНИЕ
Следует подчеркнуть, что квадратурная модуляция и амплитудно-фазовая модуляция — это разные представления одного и того же сигнала. Различие между ними состоит только в том, как пара модулирующих сигналов управляет параметрами результирующего колебания.
Спектр сигнала с квадратурной модуляцией
В случае амплитудно-фазового представления сигнала записать аналитическое выражение для спектра не представляется возможным. А вот для квадратурного представления получить спектральную функцию не составляет труда.
Поскольку КАМ-сигнал представляет собой сумму двух AM-сигналов, мы можем воспользоваться формулой (8.4) и сразу же записать
1 .1 .1 .1 .
5(со) = - А(со+ со0) + - А(со- со0)-~jB(a+ соо) + ~jB(a~ соо).
Итак, аналогично тому, что происходит при амплитудной модуляции, спектры модулирующих сигналов «раздваиваются» и «переезжают» в окрестности частоты несущей ±соо. Если спектры модулирующих сигналов a(t) и b(t) занимают одну и ту же полосу частот (как обычно и бывает), то они будут перекрываться и после сдвига в область несущей частоты. Однако при этом спектр, соответствующий синусной несущей, дополнительно умножается на ± j. Именно это дает возможность разделить квадратурные составляющие при приеме сигнала.
Демодуляция сигнала с квадратурной модуляцией
Как и другие разновидности АМ, квадратурно-модулированный сигнал может быть демодулирован путем умножения на опорное колебание. Однако поскольку КАМ-сигнал представляет собой сумму двух AM-сигналов, то и опорных колебаний должно быть два — со сдвигом фаз на 90°:
Уг(О = s^^t^cos toot = ^a^cos e>ot + b^ sincoot) cosco0t =
= -o(t) + -a(t)cos2o)0t + -Z>(t) sin2d)0t,
222(811)
y^W = skam(O sincDot =(a(t)cosco0t + b(t) sincoot) sincoot =
= ^Z>(t) + |a(t) sin2enor-^Z>(t) cos2co0t.
Результат каждого умножения содержит три слагаемых. Одно из них является низкочастотным и представляет собой модулирующую функцию о(р) или b(f) с уменьшенным вдвое уровнем. Остальные два слагаемых образуют КАМ-сигнал с несущей частотой 2соо. Поэтому полезные составляющие легко выделяются путем пропускания результатов умножения через ФНЧ. Структура демодулятора показана на рис. 8.28, а.
■^КАмМ■^КАмМj(a(t) +jb(tj)j(a(t) +jb(tj)ФНЧ .ФНЧ .exp(yeo0t)exp(yeo0t)
■^КАмМ
■^КАмМ
j(a(t) +jb(tj)
j(a(t) +jb(tj)
ФНЧ .
ФНЧ .
exp(yeo0t)
exp(yeo0t)
б
Рис. 8.28. Демодуляция КАМ-сигнала в вещественном (а) и комплексном (б) представлении
Если не ограничиваться вещественными сигналами, можно представить демодуляцию КАМ несколько проще. При этом требуется всего один канал, а опорным колебанием служит комплексная экспонента ехр(/соо£):
У (t) = sKam <<) ехр( A t) = (a (t) cos соо t + b (t )sin coo t) exp(>0t) =
= | (а (O + 7^ (O) + ^ (« (O - jb (t ^ ехр(;2ю0t).
Результат комплексного умножения содержит низкочастотное слагаемое, представляющее обе модулирующие функции, и высокочастотное комплексное слагаемое, содержащее множитель ехр(/2и0Г). Низкочастотное слагаемое, как обычно, выделяется с помощью ФНЧ. Структура комплексного варианта демодулятора показана на рис. 8.28, б. Вещественная и мнимая части комплексного выходного сигнала соответствуют двум выходным сигналам вещественного демодулятора.
При демодуляции очень важно точное соблюдение частоты и начальной фазы опорного колебания. При наличии фазовой ошибки Дер на выходах демодулятора будут получены линейные комбинации модулирующих функций:
Re((a(t) + jb(tY) ехр(]Дф)) = a(t) cos Дер - Ь(^ sin Дер, Im((a(t) + jb(t)) ехр(уДер)) = a(f) sin Дер + b(t) cos Дер.
При наличии ошибки по частоте фазовый сдвиг линейно меняется во времени, так что достаточно подставить в предыдущую формулу Дер - Acot:
Re((a(t) + jb(t)) exp(j'Acot)) - a(t) cos Acot - 6(t) sin Acot,
Im((o(t) + jb^t)) expQ'Acot)) - a(t) sin Acot + b(t) cos Acot.
Таким образом, выходные сигналы демодулятора оказываются промодулирова- ны по амплитуде частотой биений.
Способы модуляции, используемые при передаче цифровой информации
В настоящее время все большая часть информации, передаваемой по разнообразным каналам связи, существует в цифровом виде. Это означает, что передаче подлежит не непрерывный (аналоговый) модулирующий сигнал, а последовательность целых чисел n0, nt, и2,.... которые могут принимать значения из некоторого фиксированного конечного множества. Эти числа, называемые символами (symbol), поступают от источника информации с периодом Т, а частота, соответствующая этому периоду, называется символьной скоростью (symbol rate): /г - 1/Т.
ЗАМЕЧАНИЕ
Часто используемым на практике вариантом является двоичная (binary) последовательность символов, когда каждое из чисел т может принимать одно из двух значений — 0 или 1.
Последовательность передаваемых символов является, очевидно, дискретным сигналом. Поскольку символы принимают значения из конечного множества, этот сигнал фактически является и квантованным, то есть, согласно определениям, введенным в разделе «Аналоговые, дискретные и цифровые сигналы» главы 3, его можно назвать цифровым сигналом. Далее в этой главе будут рассматриваться вопросы, связанные с преобразованием этого цифрового сигнала в аналоговый модулированный сигнал.
Типичный подход при осуществлении передачи дискретной последовательности символов состоит в следующем. Каждому из возможных значений символа сопоставляется некоторый набор параметров несущего колебания. Эти параметры поддерживаются постоянными в течение интервала Т, то есть до прихода следующего символа. Фактически это означает преобразование последовательности чисел {п^ в ступенчатый сигнал s„(t) с использованием кусочно-постоянной интерполяции:
$n(t) " /(я*), ЬТ<. t < (k + 1)Т.
Здесь / — некоторая функция преобразования. Полученный сигнал s„(t) далее используется в качестве модулирующего сигнала обычным способом.
Такой способ модуляции, когда параметры несущего колебания меняются скачкообразно, называется манипуляцией (keying). В зависимости от того, какие именно параметры изменяются, различают амплитудную (АМн), фазовую (ФМн), частотную (ЧМн) и квадратурную (КАМн) манипуляцию. Кроме того, при передаче
цифровой информации может использоваться несущее колебание, отличное по форме от гармонического. Так, при использовании в качестве несущего колебания последовательности прямоугольных импульсов возможны амплитудно-импульсная (АИМ), широтно-импульсная (ШИМ) и время-импульсная (ВИМ) модуляция.
Частотная манипуляция
При частотной манипуляции (ЧМн; английский термин — frequency shift keying, FSK) каждому возможному значению передаваемого символа сопоставляется своя частота. В течение каждого символьного интервала передается гармоническое колебание с частотой, соответствующей текущему символу.
В качестве примера сформируем 2-позиционный (бинарный) ЧМн-сигнал, в котором возможным значениям символов 0 и 1 соответствуют частоты 1000 и 1400 Гц. Символьная скорость будет равна 400 символам в секунду, а частота дискретизации — 8 кГц (рис. 8.29):
» bits -[01001 rand1nt(l. 95)]; % цифровое сообщение
» N - length(bits): % длина сообщения
» Fd - 400;% символьная скорость
» FsFd -20:% отношение Fs/Fd
» Fs - Fd * FsFd:% частота дискретизации
» f - [1000 1400]:% частоты манипуляции
» t - (0:FsFd-l)/Fs: X дискретное время для одной посылки
» s0 = cos(2*p1*t'*f);% столбцы - отсчеты посылок 0 и 1
» s_fsk = s0(:. b1ts+l): % каждый столбец - один символ
» s_fsk - s_fsk(:):% "растягиваем" сигнал в один столбец
» td = (O:N*FsFd-l)/FsFd; % время длЯ графика - в символах
» Ng = 5:% число символов, выводимых на график
» plot(td(l:Ng*FsFd+l). s_fsk(l:Ng*FsFd+D)
» xlabeK'Symbols')
» ylabeH'sJFSK}')
» yl1m([-l.l 1.1])
Symbols
Рис. 8.29. Частотно-манипулированный сигнал
ЗАМЕЧАНИЕ
Первые пять бит сообщения задаются принудительно, чтобы на выводимом фрагменте графика обязательно были представлены и нулевые, и единичные биты. Полный же сигнал должен быть достаточно длинным и случайным — это необходимо для последующего спектрального анализа. Поэтому остаток 100-битового сообщения формируется с помощью функции randint из пакета Communications, генерирующей случайные целые числа.
Поскольку мы формировали каждую посылку независимо, сформированный сигнал содержит скачки — это хорошо видно на графике, В разделе «Примеры разложения сигналов в ряд Фурье» главы 1 было показано, что чем более гладким является сигнал, тем быстрее убывает его спектр. Поэтому можно попытаться сделать спектр ЧМн-сигнала компактнее, изменив способ формирования так, чтобы устранить скачки.
Такой способ формирования сигнала называется частотной манипуляцией с непрерывной фазовой функцией (continuous phase frequency shift keying, CPFSK). При этом формируется линейно меняющаяся полная фаза колебания, а передаваемые символы управляют скоростью ее изменения. (Можно сказать и так: передаваемые символы переключают значение мгновенной частоты; эта частота интегрируется, давая непрерывную фазовую функцию; косинус такой полной фазы тоже будет непрерывной функцией.) Сформируем указанным способом ЧМн-сигнал с темц же параметрами, что и в предыдущем примере (рис. 8.30):
» pps - 2*pi*f/Fs:% сдвиг фазы на один отсчет
» si ■ repmat(pps, FsFd, 1):% столбцы - сдвиги длЯ 0 и 1
» d_cpfsk ■ sl(:, bits+1):% каждый столбец - один символ
» d_cpfsk ■ d_cpfsk(:):% "растягиваем" в один столбец
» phi_cpfsk - cumsum(d_cpfsk): % интегрируем фазовые сдвиги
» s_cpfsk ■ cos(phi_cpfsk);% ЧМн-сигнал
» plot(td(l:Ng*FsFd-l), s_cpfsk(l:Ng*FsFd-D)
» xlabel('Symbols’)
» ylabelCsJCPFSK}')
» ylim([-l.l 1.1])
Symbols
Рис. 8.30. ЧМн-сигнал с непрерывной фазовой функцией
Как видите, скачки исчезли. Теперь сравним спектры мощности при двух вариантах формирования ЧМн-сигнала (рис. 8.31):
» per1odogram(s_fsk, [], [], Fs)
» ylim([-100 0])
» figure
» periodogram(s_cpfsk. []. [], Fs)
» yl1m([-l00 0])
Сравнение верхнего и нижнего графиков рис. 8.31 показывает, что при наличии скачков фазы в спектре присутствуют ярко выраженные пики на частотах, кратных символьной скорости 400 Гц. У сигнала с непрерывной фазовой функцией
Рис. 8.31. Спектры мощности ЧМн-сигнала при наличии (сверху) и отсутствии (снизу) разрывов у фазовой функции
Прием ЧМн-сигнала, как правило, осуществляется корреляционным методом. Сущность его состоит в вычислении взаимной корреляции (см. раздел «Корреляционный анализ» главы 1) между принимаемым сигналом и колебаниями-образцами (опорными сигналами), представляющими собой гармонические колебания с используемыми для манипуляции частотами. В качестве выходного символа выбирается тот, частота которого оказывается максимально коррелиро- вана со входным сигналом.
Корреляционный прием может быть когерентным или некогерентным. Когерентный алгоритм может использоваться, если известна начальная фаза колебания. Опорными сигналами при этом служат вещественные синусоиды с нужными частотами и начальными фазами. Для принятия решения о принятом символе сравниваются вещественные результаты вычисления корреляционных сумм.
На практике, однако, начальная фаза, как правило, неизвестна. В таких случаях применяют некогерентный корреляционный прием, при котором опорные сигналы представляют собой комплексные экспоненты с нужными частотами. Для принятия решения о принятом символе сравниваются модули комплексных результатов вычисления корреляционных сумм. Модуль комплексной ВКФ не зависит от начальных фаз сигналов, однако помехоустойчивость такого алгоритма несколько хуже, чем в случае когерентного приема.
Реализуем когерентную демодуляцию для первого варианта формирования ЧМн- сигнала (с разрывами начальной фазы). В этом случае начальные фазы всех посылок одинаковы, что сильно упрощает когерентную демодуляцию (хотя это не означает, что для ЧМн-сигнала с непрерывной начальной фазой когерентная демодуляция невозможна — просто она реализуется сложнее):
% каждый столбец - один символ% 1-Я строка - корреляции с "О". 2-Я - с "1"% решения о принятых символах% число ошибок приема% каждый столбец - один символ% 1-Я строка - корреляции с "О". 2-Я - с "1"% решения о принятых символах% число ошибок приема» у - reshape(s_fsk, FsFd, N):
% каждый столбец - один символ
% 1-Я строка - корреляции с "О". 2-Я - с "1"
% решения о принятых символах
% число ошибок приема
% каждый столбец - один символ
% 1-Я строка - корреляции с "О". 2-Я - с "1"
% решения о принятых символах
% число ошибок приема
» z - sO' * у:
» x - z(2.:) > z(l,:):
» symerr(bits, x) ans -■
0
В этом коде использованы скалярные переменные и матрица опорных колебаний sO из примера формирования ЧМн-сигнала. Как видите, сигнал принят без ошибок.
Теперь демодулируем сигнал с непрерывной начальной фазой некогерентным методом:
» у - reshape(s_cpfsk, FsFd, N): % каждый столбец - символ
» sO_exp - exp(1*2*p1*t'*f);% столбцы - опорные сигналы
» z - sO_exp.' * у:% корреляции с "О" (строка 1) и с "1" (2)
» х - abs(z(2,:)) > abs(z(l,:)): % решения о принятых символах
» symerr(bits, х)% число ошибок приема
ans =■
О
Ошибок и в этом случае нет.
Минимальная частотная манипуляция
Для повышения помехоустойчивости ЧМн желательно, чтобы посылки, соответствующие разным символам, были некоррелированы (см. раздел «Корреляционный анализ» главы 1). Считая начальные фазы посылок нулевыми, ЧМн-сигна- лы для символов 0 и 1 можно записать так:
So(t) - A cos coot, 0 <. t <- Т,
si(t) - A cos coit, O^t^T
Их ВКФ при нулевом временном сдвиге равна
г , , , . гA2 sin(to, +юп)Т A2 sin(to.-ю0)Т
Soi(O) = f s0(t)s!(t)dt = A2 f cos aotcos co^ dt = —-—1—+ —-—1—-2—.
оо2(toj + coo) 2(со1-о)0)
Если (cot + соо)?» 1, то первое слагаемое значительно меньше второго и им можно пренебречь:
.„,£*3)7
Это значение равно нулю при (coj - соо)Г - л&, где к — целое число, не равное нулю. Таким образом, минимальное значение расстояния между частотами манипуляции, при котором посылки, соответствующие разным символам, оказываются некоррелированными, составляет
Acomin=^, Д/т|п=А=А,(8.12)
где /г — символьная скорость.
Двухпозиционная (бинарная) ЧМн, частоты которой выбраны согласно (8.12), получила название минимальной частотной манипуляции (МЧМн, английский термин — minimum shift keying, MSK).
Амплитудная манипуляция
Как будет показано далее, амплитудная манипуляция (АМн; английский термин — amplitude shift keying, ASK), при которой скачкообразно меняется амплитуда несущего колебания, является частным случаем квадратурной манипуляции. Поэтому здесь мы только построим в качестве примера график АМн-сигнала (рис. 8.32).
Рис. 8.32. Сигнал с амплитудной манипуляциейРис. 8.32. Сигнал с амплитудной манипуляцией
Рис. 8.32. Сигнал с амплитудной манипуляцией
Рис. 8.32. Сигнал с амплитудной манипуляцией
» sy = » Fd = » Fc = » FsFd» sy = » Fd = » Fc = » FsFd[1 3 2 4 1]:1:4;= 40:[1 3 2 4 1]:1:4;= 40:% передаваемые символы
» sy = » Fd = » Fc = » FsFd
» sy = » Fd = » Fc = » FsFd
[1 3 2 4 1]:
1:
4;
= 40:
[1 3 2 4 1]:
1:
4;
= 40:
% символьная скорость
% несущая частота
% отношение Fs/Fd
» Fs = Fd * FsFd;% частота дискретизации
» t - (0:1ength(sy)*FsFd-1)/Fs: % дискретное время
» X формируем АМн-сигнал
» s_ask = sy(floor(Fd*t)+l) .* cos(2*pi*Fc*t):
» p7ot(t, s_ask)
Фазовая манипуляция
Фазовая манипуляция (ФМн; английский термин — phase shift keying, PSK), при которой скачкообразно меняется фаза несущего колебания, тоже является частным случаем квадратурной манипуляции.
На практике фазовая манипуляция используется при небольшом числе возможных значений начальной фазы — как правило, 2,4 или 8. Кроме того, при приеме сигнала сложно измерить абсолютное значение начальной фазы; значительно проще определить относительный фазовый сдвиг между двумя соседними символами. Поэтому обычно используется фазоразностная манипуляция (синонимы — дифференциальная фазовая манипуляция, относительная фазовая манипуляция; английский термин — differential phase shift keying, DPSK).
Построим график сигнала с 4-позиционной фазовой манипуляцией (рис. 8.33):
% % % % %% % % % %передаваемые символы символьная скорость несущая частота отношение Fs/Fd частота дискретизации дискретное времяпередаваемые символы символьная скорость несущая частота отношение Fs/Fd частота дискретизации дискретное времяsy - [0 2 1 3 0]:
% % % % %
% % % % %
передаваемые символы символьная скорость несущая частота отношение Fs/Fd частота дискретизации дискретное время
передаваемые символы символьная скорость несущая частота отношение Fs/Fd частота дискретизации дискретное время
Fd - 1:
Fc - 4:
FsFd - 40:
Fs = Fd * FsFd:
t = (0:1ength(sy)*FsFd-l)/Fs: %
% формируем ФМн-сигнал
s_psk = cos(2*pi*Fc*t + pi/2*sy(floor(Fd*t)+D):
plot(t, s_psk)
xlabeK 'Symbols')
ylabeK'sJPSK}')
ylim([-l.l 1.1])
SymbolsSymbolsРис. 8.33. Сигнал с 4-позиционной фазовой манипуляциейРис. 8.33. Сигнал с 4-позиционной фазовой манипуляцией
Symbols
Symbols
Рис. 8.33. Сигнал с 4-позиционной фазовой манипуляцией
Рис. 8.33. Сигнал с 4-позиционной фазовой манипуляцией
Квадратурная манипуляция
При квадратурной манипуляции (КАМн; английский термин — quadrature amplitude shift keying, QASK) каждому из возможных значений дискретного символа С^ ставится в соответствие пара величин — амплитуды синфазной и квадра-
турной составляющих либо, что эквивалентно, амплитуда и начальная фаза несущего колебания:
Ск-*(ак,Ьь)> s(t) - Qk cos coot + bk sin toot,kT £ t < (к + 1)T
или
Ск-* (Ак, ц>к), s(t) - Ак cos(to0t + ф^), кТ <. t < (к + V)T.
Параметры аналогового колебания, сопоставленные дискретному символу Q, удобно представлять в виде комплексного числа в алгебраической (ак + jbk) или экспоненциальной (Ак ехрО'ф^)) форме. Совокупность этих комплексных чисел для всех возможных значений дискретного символа называется сигнальным созвездием (constellation).
ЗАМЕЧАНИЕ
В литературных источниках также используются термины «сигнальная конструкция» (signal structure) и «пространственная диаграмма» (signal space diagram). В данной книге сделан выбор в пользу более выразительного и запоминающегося слова «созвездие».
При представлении дискретного символа комплексным числом Ck сигнал с квадратурной манипуляцией можно записать следующим образом:
s(t) = Re(Ct exp(-jmot)^, кТ 5 t < (к + 1)7.
На практике используются созвездия, содержащие от четырех точек до нескольких тысяч. На рис. 8.34 показаны некоторые созвездия, используемые модемами, предназначенными для передачи данных по телефонным линиям.
Рис. 8.34. Примеры созвездий, используемых при квадратурной манипуляции:а — 16 точек (протокол V.32, скорость 9600 бит/с), 6—128 точек(протокол V.32bis, скорость 14 400 бит/с), а — 640 точек(протокол V.34, скорость 28 800 бит/с)
График сигнала с квадратурной манипуляцией оказывается не очень наглядным из-за смешанного (амплитудно-фазового) характера модуляции. Изменения амплитуды и фазы при переходе от символа к символу могут быть небольшими и плохо заметными на графике.
Построим тем не менее график сигнала, сформированного с использованием 16точечного «квадратного» созвездия, показанного выше на рис. 8.34, а. Поскольку нас сейчас не интересует конкретный способ связи дискретных символов и точек созвездия, мы просто создадим векторы амплитуд синфазной и квадратурной составляющих, значения которых случайно выбраны из набора {-3, -1, 1, 3} (рис. 8.35): .
» N = 1000:% число символов1
» аа = randlntd, N, 4): X случайные целые числа 0...3
» bb = randlntd, N. 4);
» al = 2*аа-3:% преобразуем к требуемому набору
» bl=2*bb-3;.
» Fd=2400:%символьная скорость
» Fc=1800:Xнесущая частота
» FsFd= 4;Xчисло отсчетов на один символ
» Fs=Fd * FsFd:Xчастота дискретизации
» X дублируем каждый отсчет FsFd раз
» al = repmat(al. FsFd, 1): .
» al - al(:):
» bl = repmat(bl, FsFd, 1);
» bl = bl(:):
» X формируем аналоговый сигнал
» t = (O:N*FsFd-l)/Fs; X дискретное время
» t = t':,^ X превращаем строку в столбец
» s_qask!6 = al .* cos(2*p1*Fc*t) + M .* sin(2*pi*Fc*t);
» plot(t(l:100), s_qaskl6(1:100))
Рис. 8.35. Сигнал с 16-позиционной квадратурной манипуляцией
Параметры сформированного сигнала (структура созвездия, значения символьной скорости и несущей частоты) соответствуют модему, передающему данные со скоростью 9600 бит/с в соответствии с Рекомендацией ITU-T V.32. Прослушаем
сигнал, используя для этого функцию soundsc, чтобы не заботиться о приведении сигнала к диапазону уровней -1...1:
» soundsc(repmat(s_qaskl6, 10, 1), Fs)
ЗАМЕЧАНИЕ
Функция repmat использована здесь, чтобы повторить сформированный сигнал десять раз — иначе звук окажется слишком коротким.
Если вы когда-нибудь слышали шуршащий звук модема, то должны заметить, что в сформированном нами сигнале что-то не так. Действительно, на практике при осуществлении квадратурной манипуляции выполняется еще одна операция, которую мы пока пропустили. Речь о ней пойдет далее, в разделе «Формирование спектра».
При квадратурной манипуляции могут меняться и амплитуда, и начальная фаза несущего колебания, поэтому амплитудная и фазовая манипуляция являются частными случаями квадратурной — нужно лишь использовать соответствующие созвездия. Выведем графики этих созвездий с помощью функции modmap (она будет рассмотрена далее, в разделе «Преобразование цифрового сигнала в аналоговые параметры модуляции»). Результат показан на рис. 8.36.
» subplotQ, 2, 1) » modmap('ask', 8) » subplot(l, 2, 2) » modmap('psk', 8)
ASK constellation 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1
"1 "°in-phase component 1' ASK/PSK Constellation
Рис. 8.36. Созвездия, соответствующие 8-позиционной амплитудной (слева)и фазовой (справа) манипуляции
ЗАМЕЧАНИЕ
Функции цифровой модуляции пакета Communications при реализации амплитудной манипуляции используют как положительные, так и отрицательные амплитудные множители, допуская, таким образом, скачки фазы несущей на 180°. Это видно из графика созвездия амплитудной манипуляции, приведенного на рис. 8.36 слева.
Помехоустойчивость .
За счет использования двумерного характера гармонического несущего колебания (под двумерностью здесь понимается наличие двух параметров, которые можно независимо изменять) квадратурная манипуляция обеспечивает большую помехоустойчивость (то есть меньшую вероятность ошибки), чем АМн и ФМн. Не вдаваясь в подробности, скажем, что помехоустойчивость тем выше, чем больше расстояние d между ближайшими точками созвездия на комплексной плоскости. При этом для корректности сравнения разных созвездий у них должны быть одинаковыми, помимо числа точек, среднеквадратические амплитуды:
a = J-ZI^|2.■
Сравним для примера помехоустойчивость 16-позиционных амплитудной, фазовой и квадратурной манипуляций (рис. 8.37).
Рис. 8.37. Сравнение помехоустойчивости 16-позиционной амплитудной (слева), фазовой (в центре) и квадратурной (справа) манипуляции
Результаты расчетов минимального расстояния между точками, среднеквадратического уровня сигналов, а также межточечного расстояния, нормированного к этому уровню, сведены в табл. 8.1.
Таблица 8.1. Сравнение помехоустойчивости разных видов манипуляции
Вид манипуляции
Минимальное межточечное расстояние, dmln
Среднеквадратический уровень сигнала, а
Нормированное расстояние, dmln/a
АМн
2
— =0,1333
15
— «0,6146 15
2
-==« 0,2169 V85
ФМн
2 sinf—1 «0,39
1
2 sin[ — ] «0,39
КАМн
— * 0,47 3
— «0,745 3
* 0,63 V5
Анализ данных из таблицы показывает, что квадратурная манипуляция обеспечивает максимальное межточечное расстояние, нормированное к среднеквадратическому уровню сигнала.
Демодуляция
Демодулируется сигнал с квадратурной манипуляцией так же, как и в случае аналоговой квадратурной модуляции — сигнал умножается на два несущих колебания, сдвинутых по фазе друг относительно друга на 90°, а результаты умножения пропускаются через ФНЧ (см. ранее рис. 8.28 в разделе «Демодуляция сигнала с квадратурной модуляцией»). На выходе этих ФНЧ будут получены аналоговые сигналы синфазной и квадратурной составляющих. Далее эти сигналы дискретизируются с частотой, равной символьной скорости. Пары отсчетов синфазной и квадратурной составляющих образуют комплексное число, и ближайшая к этому числу точка используемого созвездия (а точнее — соответствующий этой точке информационный символ) выдается в качестве выходного результата.
Реализуем описанный алгоритм демодуляции для сформированного ранее сигнала s_qaskl6. Приведенный ниже код реализует квадратурную демодуляцию, дискретизацию полученного сигнала с символьной частотой (для этого из вектора у выбираются элементы с шагом Fs/Fd), вывод графика расположения принятых точек на комплексной плоскости (такой график называется диаграммой рассеяния — scatter plot, рис. 8.38), выбор ближайших координат точек из использованного созвездия и сравнение полученных синфазных а2 и квадратурных Ь2 амплитуд с исходными амплитудами аа и bb:
» % умножение на комплексное опорное колебание
» у = s_qaskl6 .* exp(j*2*pi*Fc*t) * 2;
» [b,а] = butter(2,Fd*2/Fs); %сглаживающий ФНЧ
» у =f1ltf1lt(b, а,у);Xфильтрация
» z =y(3:FsFd:end);Xдискретизация ссимвольной частотой
» plot(z, '.')Xвывод диаграммырассеЯниЯ
» axis square
» а2 = round((real(z)+3)/2); X оценка синфазной амплитуды
» a2(f1nd(a2<0)) = 0;
» a2(find(a2>3)) = 3;
» Ь2 = round((1mag(z)+3)/2); X оценка квадратурной амплитуды
» b2(find(b2<0)) = 0;
» b2(find(b2>3)) = 3;
» symerr(aa', а2)X число ошибок по синфазной амплитуде
ans =
0
» symerr(bb', Ь2)X число ошибок по квадратурной амплитуде
ans =
0
Функция округления round в этом коде применена для поиска точки используемого созвездия, наиболее близкой к принятому отсчету сигнала. Такое решение
возможно благодаря простой структуре использованного нами созвездия. В более общем случае для этого необходимо воспользоваться функцией demodmap (см. далее раздел «Преобразование аналогового сигнала в цифровое сообщение»). Функция symerr подсчитывает число неправильно принятых символов (она возвращает число различающихся элементов двух векторов одинаковой длины). Как видите, сигнал принят без ошибок.
Рис. 8.38. Диаграмма рассеяния при приеме сигнала с квадратурной манипуляцией
Формирование спектра
Если параметры модуляции аналогового сигнала поддерживаются постоянными в течение символьного такта и в начале нового такта изменяются скачкообразно, это приводит к появлению скачков и в сформированном сигнале. Как было показано при обсуждении свойств спектров сигналов (см. раздел «Примеры разложения сигналов в ряд Фурье» главы 1), спектр сигнала, содержащего скачки, затухает с ростом частоты медленно — пропорционально 1/со. Чтобы сделать спектр более компактным, необходимо обеспечить гладкость сигнала, а это, в свою очередь, означает гладкость модулирующей функции. Следовательно, вместо скачкообразного изменения параметров модуляции нам необходимо выполнить интерполяцию между точками созвездия, соответствующими последовательным символам.
Согласно теореме Котельникова, мы можем соединить отсчеты, следующие с символьной скоростью Fd) плавной функцией, занимающей полосу частот от нуля до Fd/2. В этом случае квадратурно-манипулированный сигнал будет занимать полосу частот шириной Fd. Однако медленное затухание функций sine, составляющих базис Котельникова, делает неудобной интерполяцию на их основе. Наибольшее распространение при интерполяции отсчетов для цифровой модуляции получил SQRT-вариант фильтра с косинусоидальным сглаживанием АЧХ (square root raised-cosine filter; расчет таких фильтров обсуждался в главе 6).
Фильтр, используемый для интерполяции, определяет форму спектра КАМн- сигнала, поэтому его называют формируюгцим фильтром (shaping filter), а сам процесс интерполяции — формированием спектра (spectral shaping).
Скачкообразное изменение параметров модуляции можно рассматривать как использование формирующего фильтра с прямоугольной импульсной характеристикой, длительность которой равна символьному интервалу.
Повторим формирование 16-позиционного квадратурно-манипулированного сигнала (см. рис. 8.35), используя на сей раз формирующий фильтр с косинусоидальным сглаживанием АЧХ (рис. 8.39):
» % используем сформированные ранее векторы амплитуд аа и bb
» als = 2*аа-3:» als = 2*аа-3:% преобразуем к требуемому набору
» als = 2*аа-3:
» als = 2*аа-3:
» bls = 2*bb-3;
» als = rcosflt(als, Fd. Fs. 'sqrt'):
» bls = rcosfitlbls, Fd. Fs. 'sqrt');
» % формируем сигнал с квадратурной манипуляцией
» t = (0:1ength(als)-1)/Fs:% дискретное время
» t = t’:% превращаем строку в столбец
» s_qaskl6s = als .* cos(2*pi*Fc*t) + bls .* sin(2*pi*Fc*t);
» plot(t(l:100). s_qask!6s(l:100))
Рис. 8.39. Сигнал с 16-позиционной квадратурной манипуляцией при использовании формирования спектраРис. 8.39. Сигнал с 16-позиционной квадратурной манипуляцией при использовании формирования спектра
Рис. 8.39. Сигнал с 16-позиционной квадратурной манипуляцией при использовании формирования спектра
Рис. 8.39. Сигнал с 16-позиционной квадратурной манипуляцией при использовании формирования спектра
Прослушаем и этот сигнал, снова используя функцию soundsc:
» soundsc(repmat(s_qaskl6s, 10. 1), Fs)
Звук стал больше похож на тот, что производится модемом, — все дело именно в формировании спектра.
Сравним спектры мощности сигналов s_qaskl6 и s_qaskl6s, чтобы наглядно показать влияние формирующего фильтра (рис. 8.40).
» [Pl. f] = pwelch(s_qaskl6. []. []. []. Fs);
» P2 = pwelch(s_qaskl6s, [],.[], []. Fs);
» psdplot(CPl Р2]. f. ’Hz')
Рис. 8.40. Спектры плотности мощности сигналов с квадратурной манипуляцией при отсутствии (верхний график) и наличии (нижний график) формирующего фильтра
Из графиков видно, что при использовании формирующего фильтра спектр сигнала оказывается значительно компактнее.
При приеме такого сигнала в качестве ФНЧ необходимо использовать такой же фильтр, как для формирования спектра. Последовательное использование двух SQRT-фильтров с косинусоидальным сглаживанием дает результирующую импульсную характеристику вида (6.6) (см. рис. 6.7), равную нулю в точках, сдвинутых на целое число символов относительно пика. Это позволяет при правильном выборе моментов взятия отсчетов устранить помехи от соседних символов (так называемую межсгшволъную интерференцию, МСИ; английский термин — intersymbol interference, ISI):
» % умножение на комплексное опорное колебание
» у = s_qaskl6s .* ехр(j*2*pi*Fc*t) * 2;
» b = rcosirie(Fd, Fs, 'sqrt'): % сглаживающий ФНЧ
» у = filter(b, 1. у);% фильтрация
» X подготовка данных длЯ глазковой диаграммы
» у_еуе = reshape(y. FsFd, length(y)/FsFd);
» у_еуе = [0 y_eye(end,l:end-l): у_еуе);
» Ж вывод глазковой диаграммы
» subplot(2, 1, 1)
» plot(0:FsFd. real(y_eye), 'b')
» title ('Eye diagram')
» subplot(2, 1, 2)
» plot(0:FsFd, imag(y_eye), 'b')
» xlabel('Offset (samples)')
» X выбор моментов взЯтиЯ отсчетов
» offset - 1;
» X дискретизация с символьной частотой
» z = у(offset:FsFd:end):
» z(l:6) = []:Ж удаление начального «хвоста»
» figure
» plot(z. '.'),% вывод диаграммы рассеЯниЯ
» axis square
» а2 = round((real(z)+3)/2); Ж оценка синфазной амплитуды
» a2(find(a2<0)) = 0:
» a2(find(a2>3)) = 3;
» Ь2 = round((imag(z)+3)/2); % оценка квадратурной амплитуды
» b2(find(b2<0)) = 0;
» b2(find(b2>3)) - 3;
» symerr(aa', а2)X число ошибок по синфазной амплитуде
ans =
0
» symerr(bb', Ь2)Ж число ошибок по квадратурной амплитуде
ans =
0
На рис. 8.41 сверху показана глазковая диаграмма (eye diagram) для данного сигнала. Глазковая диаграмма представляет собой «осциллограмму» сигнала, построенную при длительности «прямого хода развертки», равной одному символьному такту, и бесконечном «времени послесвечения экрана». В точках оптимальной дискретизации линии на такой диаграмме образуют узкие пучки, свободное пространство между которыми по форме напоминает раскрытый глаз. В данном случае видно, что выбирать элементы из вектора у нужно начиная с первого. Поскольку сигнал является комплексным, приведены отдельные графики для его вещественной и мнимой частей. На рис. 8.41 снизу приведена диаграмма рассеяния, полученная при приеме данного сигнала. Благодаря использованию согласованных друг с другом фильтров на передающей и приемной сторонах разброс точек оказывается значительнр меньше, чем на приведенном ранее рис. 8.38.
При прохождении сигнала через канал связи, обладающий частотной дисперсией, то есть вносящий разную групповую задержку на разных частотах, символы оказываются «размазанными» во времени и «наползают» друг на друга. В этом случае устранить межсимвольную интерференцию полностью не удается. Чтобы минимизировать ее, используют адаптивные фильтры, параметры которых автоматически подстраиваются под характеристики обрабатываемого сигнала. Рассмотрение таких фильтров выходит за рамки тематики данной книги. Информацию о них можно найти, например, в [18, 19], а также в документации последней (2.1) версии пакета Filter Design — в эту версию пакета добавлены функции, реализующие несколько распространенных алгоритмов адаптивной фильтрации.
4321 О -1-2-34321 О -1-2-3Рис. 8.41. Глазковая диаграмма (сверху) и диаграмма рассеяния (снизу), полученные при приеме сигнала с квадратурной манипуляциейРис. 8.41. Глазковая диаграмма (сверху) и диаграмма рассеяния (снизу), полученные при приеме сигнала с квадратурной манипуляцией
4
3
2
1 О -1
-2
-3
4
3
2
1 О -1
-2
-3
Рис. 8.41. Глазковая диаграмма (сверху) и диаграмма рассеяния (снизу), полученные при приеме сигнала с квадратурной манипуляцией
Рис. 8.41. Глазковая диаграмма (сверху) и диаграмма рассеяния (снизу), полученные при приеме сигнала с квадратурной манипуляцией
Широтно-импульсная модуляция
При широтно-импульсной модуляции (ШИМ; английский термин — pulse width modulation, PWM) в качестве несущего колебания используется периодическая последовательность прямоугольных импульсов, а информационным параметром, связанным с дискретным модулирующим сигналом, является длительность этих импульсов (рис. 8.42).
Периодическая последовательность прямоугольных импульсов одинаковой длительности имеет постоянную составляющую, обратно пропорциональную скважности импульсов, то есть прямо пропорциональную их длительности (см. раздел «Примеры разложения сигналов в ряд Фурье» главы 1). Пропустив импульсы через ФНЧ с частотой среза, значительно меньшей, чем частота следования импульсов, эту постоянную составляющую можно легко выделить, получив постоянное напряжение. Если длительность импульсов будет различной, ФНЧ выделит
медленно меняющееся напряжение, отслеживающее закон изменения длительности импульсов. Таким образом, с помощью ШИМ можно создать несложный ЦАП: значения отсчетов сигнала кодируются длительностью импульсов, а ФНЧ преобразует импульсную последовательность в плавно меняющийся сигнал.
ЗАМЕЧАНИЕ
Именно такие ЦАП используются, например, для реализации настройки на каналы, регулировок громкости, яркости и т. п. в большинстве современных телевизоров: команды от кнопок управления меняют скважность импульсов, вырабатываемых управляющим процессором, а сглаживающие цепи формируют из этих импульсов постоянные напряжения, управляющие аналоговыми цепями.
’mW А
О Г 2Г ЗГ 4Г 5ГtО Г 2Г ЗГ 4Г 5ГtРис. 8.42. Широтно-импульсная модуляцияРис. 8.42. Широтно-импульсная модуляция
О Г 2Г ЗГ 4Г 5Гt
О Г 2Г ЗГ 4Г 5Гt
Рис. 8.42. Широтно-импульсная модуляция
Рис. 8.42. Широтно-импульсная модуляция
Число уровней напряжения, формируемых таким ЦАП, определяется числом возможных длительностей импульсов. Если импульсы формируются в цифровом виде, шаг изменения длительности определяется частотой дискретизации импульсной последовательности. Отношение этой частоты к частоте дискретизации формируемого сигнала даст возможное число уровней.
Например, если мы захотим поэкспериментировать с ШИМ, используя звуковую карту компьютера, нам окажется доступно всего шесть уровней (максимальная частота дискретизации, обеспечиваемая звуковой картой, — 48 кГц; минимально приемлемая частота дискретизации звукового сигнала — 8 кГц; получаем 48/8 - 6 уровней). Для реальной работы, конечно, маловато, а для экспериментов подойдет.
Попробуем сформировать таким путем синусоиду:
» N = 6:» Fs = 8еЗ:» FsO = Fs * N:» fO = 1еЗ:» t = 0:1/Fs:l;» tO = (O:length(f)*N-l)/FsO:» N = 6:» Fs = 8еЗ:» FsO = Fs * N:» fO = 1еЗ:» t = 0:1/Fs:l;» tO = (O:length(f)*N-l)/FsO:X число уровнейX частота дискретизации сигнала% частота дискретизации импульсовX частота синусоиды% одна секунда дискретного времени% дискретное время импульсовX число уровнейX частота дискретизации сигнала% частота дискретизации импульсовX частота синусоиды% одна секунда дискретного времени% дискретное время импульсов
» N = 6:
» Fs = 8еЗ:
» FsO = Fs * N:
» fO = 1еЗ:
» t = 0:1/Fs:l;
» tO = (O:length(f)*N-l)/FsO:
» N = 6:
» Fs = 8еЗ:
» FsO = Fs * N:
» fO = 1еЗ:
» t = 0:1/Fs:l;
» tO = (O:length(f)*N-l)/FsO:
X число уровней
X частота дискретизации сигнала
% частота дискретизации импульсов
X частота синусоиды
% одна секунда дискретного времени
% дискретное время импульсов
X число уровней
X частота дискретизации сигнала
% частота дискретизации импульсов
X частота синусоиды
% одна секунда дискретного времени
% дискретное время импульсов
» s = sin(2*pi*f0*t):X отсчеты дискретной синусоиды
» sq = round((s+l)*N/2):X квантованные отсчеты
» s_pwm = zeros(N, length(t)); % заготовка длЯ ШИМ-сигнала
» for k=l:N, s_pwm(k, f1 nd(sq>=k)) = 1; end
» s_pwm = s_pwm(:):X "растягиваем" матрицу в один столбец
В приведенном коде следует обратить внимание на цикл for, с помощью которого формируется ШИМ-сигнал. Мы сначала создаем шестистрочную матрицу, заполненную нулями, а затем построчно формируем ее содержимое, в цикле сравнивая отсчеты сигнала с постепенно увеличивающимся порогом и записывая единицы в те столбцы, где отсчеты сигнала превышают порог или равны ему.
Посмотрим, как выглядят исходные отсчеты синусоиды и соответствующий ШИМ-сигнал (рис. 8.43):
» subplot(2, 1, 1)
» stem(t(l:33), sq(l:33))
» subplot(2, 1. 2)
» stairs(tO(1:193), s_pwm(1:193))
» ylim([-0.1 1.1])
1 0.8 0.6 0.4 0.201 0.8 0.6 0.4 0.2000.511.522.533.5,4x10’3Рис. 8.43. Отсчеты синусоиды (сверху) и соответствующий им ШИМ-сигнал (снизу)00.511.522.533.5,4x10’3Рис. 8.43. Отсчеты синусоиды (сверху) и соответствующий им ШИМ-сигнал (снизу)
1 0.8 0.6 0.4 0.2
0
1 0.8 0.6 0.4 0.2
0
00.511.522.533.5,4
x10’3
Рис. 8.43. Отсчеты синусоиды (сверху) и соответствующий им ШИМ-сигнал (снизу)
00.511.522.533.5,4
x10’3
Рис. 8.43. Отсчеты синусоиды (сверху) и соответствующий им ШИМ-сигнал (снизу)
Теперь взглянем на спектр ШИМ-сигнала (рис. 8.44):
» periodogram(s_pwm, [], [], FsO):
» ylim([-50 0])
Как видите, наиболее интенсивная спектральная составляющая (не считая составляющей с нулевой частотой) действительно имеет частоту исходной синусоиды — 1 кГц. Выделим ее, пропустив 1ЙИМ-сигнал через ФНЧ с частотой среза, равной частоте Найквиста, то есть 4 кГц (рис. 8.45):
» [Ь, а] = butter(5. Fs/FsO);
» s_filtered = filter(b, a, s_pwm):
» plot(tO(l:193). s_f1ltered(1:193))
» figure; periodogram(s_f11tered.[J.CJ,FsO):yl1m([-50 0])
Рис. 8.44. Спектр мощности синусоиды, представленной с помощью ШИМ
Рис. 8.45. Синусоида, полученная путем низкочастотной фильтрации ШИМ-сигнала (сверху) 1и ее спектр мощности (снизу)
Результат, как видите, действительно напоминает синусоиду, хотя оставшиеся искажения хорошо заметны на глаз — шести уровней квантования всс-таки явно маловато. Желающие могут послушать, как звучат ШИМ-сигнал и выделенная из него низкочастотная составляющая:
» wavplay(s_pwm. FsO) X ШИМ-сигнал
» wavplay(s_flItered. FsO) X восстановленная синусоида
Тональный сигнал хорошо прослушивается в обоих случаях, но в фильтрованном сигнале он, естественно, звучит значительно чище.
Функции модуляции и демодуляции пакета Signal Processing
В пакете Signal Processing модуляция и демодуляция реализуются с помощью всего двух функций — modulate и demod соответственно. Используемый вид модуляции указывается в качестве одного из входных параметров этих функций.
В общем виде синтаксис вызова функций modulate и demod выглядит так:
[у. t] - modulate(x, Fc. Fs. 'method', opt)
x - demod(y. Fc, Fs, 'method', opt)
Здесь x — вектор отсчетов модулирующего сигнала, у — вектор отсчетов модулированного сигнала, Fc — несущая частота, Fs — частота дискретизации, 'method' — вид модуляции. Назначение дополнительного параметра opt зависит от вида модуляции и для конкретных случаев будет рассмотрено ниже.
Второй выходной параметр t, возвращаемый функцией modulate, — это вектор моментов времени, использованный для расчетов. Он определяется следующим образом:
t = ((0:1ength(у)-1)/Fs)':
Обе функции могут обрабатывать многоканальные сигналы, в этом случае хну являются матрицами, обработка которых производится, как обычно, по столбцам.
Параметры opt и 'method' при вызове функций можно опускать. В качестве вида модуляции в случае отсутствия параметра 'method' подразумевается АМ с подавленной несущей. Используемое по умолчанию значение параметра opt зависит от вида модуляции.
ВНИМАНИЕ
Следует отметить, что функция демодуляции demod, входящая в пакет Signal Processing, носит демонстрационный характер и будет хорошо работать только с «чистым» сигналом (желательно — сформированным именно с помощью функции modulate). Причиной является упрощенный характер реализованных алгоритмов и невозможность управления их параметрами (например, начальной фазой опорного колебания при демодуляции различных видов АМ). В этом смысле более приспособленными к реальному миру являются функции демодуляции из пакета Communications.
Для получения хороших результатов следует выбирать достаточно высокое отношение Fs/Fc. Для аналоговых видов модуляции (все разновидности АМ и УМ, а также квадратурная модуляция) достаточным является Fs/Fc - 4. Для ШИМ и ВИМ это отношение определяет число представимых уровней сигнала и потому должно быть существенно больше.
А теперь перейдем к рассмотрению использования функций modulate и demod для реализации конкретных видов модуляции.
Амплитудная модуляция
Для реализации амплитудной модуляции параметр 'method' должен иметь значение 'amdsb-tc'. Расшифровка аббревиатуры следующая:
ат — амплитудная модуляция (amplitude modulation);
dsb — две боковые полосы (double side band);
tc — передача несущей (transmitted carrier).
Параметр opt задает уровень смодулированной несущей, поэтому дадим ему более осмысленное обозначение АО:
[у, t] = modulate(x, Fc, Fs, 'amdsb-tc', AO)
x = demod(y, Fc. Fs. 'amdsb-tc'. AO)
Модуляция реализуется почти по формуле (8.1):
у = (х - АО) .* cos(2*pi*Fc*t)
Значение по умолчанию для параметра АО равно min(min(x)). Это обеспечивает однополярность амплитудного множителя (х-АО). Двукратное применение функции min обеспечивает правильный выбор постоянного смещения в случае многоканального сигнала.
ВНИМАНИЕ ‘
Обратите внимание на то, что величина АО не прибавляется к модулирующему сигналу х, а вычитается из него. Поэтому при задании параметра АО вручную сто значение должно быть отрицательным, если модулирующий сигнал является двуполярным.
При демодуляции входной сигнал прежде всего умножается на опорное колебание:
х = у .* cos(2*pi*Fc*t):
Низкочастотная составляющая выделяется с помощью ФНЧ с частотой среза, равной несущей частоте. Чтобы фильтрация не вносила сдвига по времени, она осуществляется с помощью функции filtfilt (см. раздел «Компенсация фазового сдвига» главы 4). В качестве ФНЧ используется фильтр Баттерворта 5-го порядка:
[b. а] = butter(5. Fc*2/Fs):
х = f1ltf1lt(b, а. х);ы
Наконец, из демодулированного сигнала вычитается уровень несущей АО:
х - х - АО:
По умолчанию значение параметра АО в функции demod равно нулю.
ВНИМАНИЕ
Поскольку и при модуляции, и при демодуляции параметр АО фигурирует со знаком «минус», для правильного удаления постоянного смещения из демодулированпого сигнала уровни несущей, задаваемые при модуляции и демодуляции, должны иметь разные знаки и соотноситься друг с другом как соответственно АО и -А0/2. Деление на 2 необходимо из-за того, что после умножения на опорное колебание и низкочастотной фильтрации выделенный полезный сигнал имеет вдвое меньший уровень, чем исходный модулирующий сигнал (см. формулу (8.5)).
Если значение параметра АО при модуляции слишком велико (больше, чем min(min(x))), амплитудный множитель перестает быть однополярным, то есть возникает перемодуляция (см. рис. 8.4). Демодуляция такого сигнала осуществляется правильно.
Векторы (матрицы) х и у в случае АМ имеют одинаковые размеры.
АМ с подавленной несущей
Для реализации АМ с подавленной несущей параметр 'method' должен иметь значение 'amdsb-sc' или просто 'ат'. Это значение параметра 'method' принято по умолчанию. Первая часть аббревиатуры вида модуляции расшифровывается так же, как в случае обычной AM, a sc означает подавленную несущую (suppressed carrier):
[у. t] = modulate(x. Fc, Fs. 'amdsb-sc')
x = demod(y, Fc. Fs. 'amdsb-sc')
AM с подавленной несущей получается из обычной АМ, реализация которой была рассмотрена в предыдущем разделе, при АО = 0. Входной параметр opt в случае АМ с подавленной несущей не используется. Демодуляция осуществляется так же, как для обычной АМ (с учетом нулевого значения параметра АО).
Векторы (матрицы) х и у в случае АМ с подавленной несущей имеют одинаковые размеры.
Однополосная модуляция
Для реализации однополосной модуляции параметр 'method' должен иметь значение ' amssb'. В этой аббревиатуре ssb означает одну боковую полосу (single side band). Параметр opt для данного вида модуляции не используется:
[у, t] = modulate(x, Fc, Fs, 'amssb')
x - demod(y, Fc. Fs. 'amssb')
Формирование однополосного сигнала производится по формуле (8.6):
у = х .* cos(2*pi*Fc*t) + 1mag(h1Ibert(x)) .* sin(2*pi*Fc*t)
При этом результирующий сигнал содержит нижнюю боковую полосу. Формирование сигнала с верхней боковой полосой официально не предусмотрено, но функцию можно легко «обмануть», задав отрицательное значение для несущей
частоты Fc. Согласно формуле (8,6), благодаря нечетности функции sin это приведет к смене выделяемой боковой полосы.
Демодуляция однополосного сигнала производится функцией demod точно так же, как и демодуляция других разновидностей АМ — модулированный сигнал умножается на опорное колебание, а затем пропускается через ФНЧ.
Векторы (матрицы) х и у в случае однополосной модуляции имеют одинаковые размеры.
Фазовая модуляция
Для реализации фазовой модуляции параметр 'method' должен иметь значение 'pm'. Параметр opt задает интенсивность флуктуаций начальной фазы, поэтому дадим ему обозначение beta (буква р использовалась ранее для обозначения индекса угловой модуляции):
[у, t] == modulate(x. Fc. Fs. 'pm', beta)
x = demod(y. Fc. Fs, 'pm', beta)
Формирование сигнала с фазовой модуляцией производится по формуле (8.7):
у - cos(2*pi*Fc*t + beta*x)
По умолчанию величина параметра beta выбирается так, чтобы максимальное положительное отклонение фазы было равно л:
beta = pi/max(max(x))
Отклонение фазы в отрицательную сторону зависит от минимального значения модулирующего сигнала и может быть любым. Двукратное применение функции max обеспечивает правильный выбор интенсивности флуктуаций фазы в случае многоканального сигнала.
Демодуляция ФМ-сигнала производится путем формирования аналитического сигнала с помощью функции hilbert, сдвига его спектра в область нулевых частот путем умножения на ехр(-у2лДсГ) и выделения фазового угла. В завершение результат делится на параметр beta:
х = angle(hi1bert(у) .* exp(-1*2*pi*Fc*t)) / beta:
При демодуляции параметр beta по умолчанию равен единице.
Векторы (матрицы) х и у в случае фазовой модуляции имеют одинаковые размеры.
Частотная модуляция
Для реализации частотной модуляции параметр 'method' должен иметь значение 'fm'. Параметр opt задает интенсивность флуктуаций мгновенной частоты, поэтому дадим ему обозначение dw:
[у. t] = modulateCx. Fc, Fs, 'fm', dw)
x = demod(y, Fc. Fs. 'fm'. dw)
Начальная фаза при ЧМ пропорциональна интегралу от модулирующего сигнала (см. раздел «Фазовая и частотная модуляция» и формулу (8.8)). Интегриро-
вание производится с помощью функции cumsum (данная функция вычисляет частичные суммы элементов вектора; это соответствует численному интегрированию методом прямоугольников):
у = cos(2*pi*Fc*t + dw*cumsum(x))
По умолчанию величина параметра dw выбирается так, чтобы максимальное положительное отклонение мгновенной частоты было равно Ес: .
dw = Fc/Fs * 2*pi/max(max(x))
Отклонение мгновенной частоты в отрицательную сторону зависит от минимального значения модулирующего сигнала и может быть любым. Двукратное применение функции max обеспечивает правильный выбор интенсивности флуктуаций мгновенной частоты в случае многоканального сигнала.
Демодуляция ЧМ-сигнала производится путем формирования аналитического сигнала с помощью функции hilbert, сдвига его спектра в область пулевых частот путем умножения на ехр(-;2лД.Г) и выделения фазового угла. Далее фаза дифференцируется с помощью функции diff, а результат делится на параметр dw:
х = d1ff(unwrap(angle(hiibert.(y) .* exp(-1*2*pi*Fc*t)))) / dw;
При демодуляции параметр dw по умолчанию равен единице.
Векторы (матрицы) х и у в случае частотной модуляции имеют одинаковые размеры..
Квадратурная модуляция
Для реализации квадратурной модуляции параметр ' method1 должен иметь значение 'qam'. Параметр х в данном случае является синфазным модулирующим сигналом, а параметр opt — квадратурным. Дадим этим параметрам обозначения х_1 (синфазная составляющая, in-phase) и x_q (квадратурная составляющая, quadrature):
[у, t] - modulate(х_1, Fc, Fs, 'qam', x_q)
[x_1. x_q] = demod(y, Fc. Fs, 'qam')
Синтаксис вызова функции демодуляции является исключением из общего правила — используются два выходных параметра.
Формирование сигнала с квадратурной модуляцией производится по формуле (8.10):'
у - х_1 .* cos(2*pi*Fc*t) + x_q .* sin(2*pi*Fc*t)
Векторы (матрицы) x_i и x_q должны иметь одинаковые размеры. Тот же размер будет иметь и сформированный сигнал у.
Демодуляция сигнала с квадратурной модуляцией производится так же, как в случае АМ, только используются два опорных колебания, сдвинутых по фазе на 90° друг относительно друга:
х_1 = 2 * у .* cos(2*pi*Fc*t);
x_q = 2 * у .* sin(2*pi*Fc*t);
[b, а] = butter(5, Fc*2/Fs):
x_i = f11tfilt(b, а. х_1);
x_q = filtfilt(b. a. x_q):
Дополнительный параметр opt при демодуляции не используется.
Широтно-импульсная модуляция
Для реализации широтно-импульсной модуляции параметр 'method' должен иметь значение 'pwm'. При отсутствии дополнительного параметра opt формируемые импульсы выравниваются влево, то есть начало импульса совпадает с началом временного такта.
Под несущей частотой Ес в данном случае понимается частота следования импульсов, а параметр Fs представляет частоту дискретизации сформированного сигнала. Это отношение определяет возможное число уровней сигнала, представимое с помощью ШИМ (см. ранее раздел «Способы модуляции, используемые при передаче цифровой информации»):
[у. t] = modulate(x. Fc, Fs, 'pwm')
x = demod(y, Fc, Fs. 'pwm')
Выходной сигнал у содержит в Fs/Fc раз больше отсчетов, чем модулирующий сигнал х.
При использовании в качестве параметра opt текстовой строки 'centered' импульсы центрируются относительно начала временных тактов. Для демодуляции ШИМ-сигиала, сформированного в таком режиме, тоже нужно указать данный параметр:
[у, t] = modulatetx, Fc, Fs, 'pwm', 'centered')
x = demod(y, Fc, Fs, 'pwm', 'centered')
Отсчеты модулирующего сигнала в векторе х должны лежать в диапазоне 0...1, они задают длину формируемых импульсов в долях периода следования импульсов.
Время-импульсная модуляция
Время-импульсная модуляция (ВИМ; английский термин — pulse time modulation, РТМ) не рассматривалась в теоретическом разделе данной главы. Модулированный сигнал при использовании ВИМ представляет собой неравномерную последовательность импульсов фиксированной длительности. Смещения импульсов относительно моментов начала тактовых интервалов пропорциональны модулирующему сигналу. Таким образом, информационным параметром ВИМ- сигнала является временное положение импульсов в пределах тактовых интервалов.
Для реализации время-импульсной модуляции параметр 'method' должен иметь значение ’ ptm'. Под несущей частотой Fc в данном случае понимается величина, обратная длительности тактового интервала, а параметр Fs представляет частоту дискретизации сформированного сигнала. Это отношение определяет возможное число уровней сигнала, представимое с помощью ВИМ.
Параметр opt в данном случае задает длительность формируемых импульсов, нормированную к длительности тактового интервала. Дадим этому параметру обозначение tau:
[у. t] = modulate(x, Fc, Fs, ’ptm'. tau)
x = demod(y, Fc. Fs. 'ptm')
Выходной сигнал у содержит в Fs/Fc раз больше отсчетов, чем модулирующий сигнал х.
По умолчанию значение параметра tau равно 0,1. •
Отсчеты модулирующего сигнала в векторе х должны лежать в диапазоне 0...1, они задают относительно положение формируемых импульсов в пределах тактовых интервалов.
Для получения хороших результатов должно выполняться соотношение tau*Fs/Fc » 1, то есть длительность формируемых импульсов, измеренная в отсчетах, должна быть существенно больше единицы. В противном случае погрешности из-за округления положения импульсов оказываются слишком велики.
При демодуляции дополнительный параметр tau не используется. Для правильной демодуляции необходимо, чтобы соседние импульсы не перекрывались (перекрытие может возникнуть при модуляции, если за отсчетом модулирующего сигнала, близким к 1, следует отсчет, близкий к 0).
Функции модуляции и демодуляции пакета Communications
В пакете расширения Communications содержится ряд функций, относящихся к задачам модуляции и демодуляции. Они позволяют осуществлять аналоговую и цифровую модуляцию с использованием различных видов модуляции, давая результат в виде набора отсчетов вещественного модулирующего сигнала либо его комплексной огибающей. В документации пакета эти два варианта обозначаются соответственно терминами «passband» (полосовой сигнал) и «baseband» (низкочастотный сигнал).
Для осуществления собственно модуляции и демодуляции служат следующие функции (способ модуляции указывается при вызове в качестве одного из параметров):
amod — аналоговая модуляция (вещественный результат);
amodce — аналоговая модуляция (комплексная огибающая);
ademod — аналоговая демодуляция (вещественный входной сигнал);
ademodce — аналоговая демодуляция (вход — комплексная огибающая);
dmod — цифровая модуляция (вещественный результат);
dmodce — цифровая модуляция (комплексная огибающая);
ddemod — цифровая демодуляция (вещественный входной сигнал);
ddemodce — цифровая демодуляция (вход — комплексная огибающая).
Имена этих функций будет легко запомнить, если понять, как они формируются:
первая буква а или d обозначает соответственно аналоговую (analog) или цифровую (digital) модуляцию/демодуляцию;
далее следует mod для модуляции или demod для демодуляции;
буквы се в конце идентификатора обозначают, что функция возвращает (для модуляции) или принимает на входе (для демодуляции) комплексную огибающую сигнала (complex envelope).
Аналоговая модуляция
в пакете Communications
При описании синтаксиса вызова рассматриваемых ниже функций аналоговой модуляции и демодуляции используются следующие общие параметры:
х — модулирующий сигнал. Если х — вектор, он может быть как строкой, так ' и столбцом. Если х — матрица, каждый ее столбец обрабатывается независимо, что позволяет осуществлять многоканальную обработку сигнала. Несколько по-иному х задается в случае квадратурной модуляции, об этом будет сказано отдельно;
у — модулированный сигнал;
z — демодулированный сигнал;
Fs — частота дискретизации модулированного сигнала. При аналоговой модуляции она же является и частотой дискретизации модулирующего сигнала. Этот параметр может быть задан в виде двухэлементного вектора [Fs phase], в этом случае второй элемент задает начальную фазу несущего колебания (в радианах). По умолчанию начальная фаза равна нулю;
Fc — несущая частота. Для функций, работающих с комплексной огибающей, этот параметр не используется, поскольку комплексная огибающая вычисляется именно относительно несущей частоты;
num и den — соответственно числитель и знаменатель передаточной функции фильтра, используемого для фильтрации выходного сигнала в функциях демодуляции. Если не указывать эти параметры, в функции ademodce фильтрация просто не производится, а в функции ademod по умолчанию используется фильтр Баттерворта 5-го порядка с частотой среза, равной несущей частоте.
При рассмотрении теоретических основ различных видов модуляции было приведено достаточное количество временных зависимостей, поэтому при рассмотрении функций MATLAB мы будем приводить в основном спектрограммы сигналов, хорошо демонстрирующие разницу между различными способами модуляции.
Для рассматриваемых ниже примеров будем использовать частоту дискретизации 8 кГц и несущую частоту 2 кГц:
» Fs = 8еЗ:
» Fc = 2еЗ;
В качестве модулирующего используем сигнал длительностью 2 с, мгновенная частота которого линейно изменяется от нуля до 1 кГц. Такой сигнал генерируется функцией chirp:
» t = O:l/Fs:2;% вектор времени
» s_M = chirp(t, 0, 2, 1еЗ): % ЛЧМ-сигнал
Построим график начального фрагмента этого сигнала (при попытке изобразить весь сигнал точки на графике просто сольются — в сигнале содержится слишком много колебаний) (рис. 8.46, сверху):
» plot(t(l:2000), s_M(l:2000))
Мгновенная частота такого сигнала меняется достаточно медленно, что позволяет хорошо отслеживать эти изменения па спектрограмме (рис. 8.46, снизу):
» specgram(s_M. [], Fs)
» colormap gray
Рис. 8.46. Модулирующий ЛЧМ-сигнал (сверху) и его спектрограмма (снизу)
Амплитудная модуляция
Амплитудная модуляция производится перечисленными выше функциями при указании в них параметра типа модуляции 'amdsb-tc'. Здесь ат означает амплитудную модуляцию (amplitude modulation), dsb — наличие обеих боковых полос (double side band), tc — сохранение несущего колебания (transmitted carrier). Синтаксис вызова функций имеет следующий вид:
у = amod(x, Fc, Fs, ’amdsb-tc’, offset):
у = amodce(x, Fs, 'amdsb-tc', offset);
Необязательный параметр offset — постоянная составляющая, добавляемая к модулирующему сигналу перед умножением его на несущее колебание. По умолчанию значение этого параметра равно -min(min(x)), то есть выбирается минимально возможная одинаковая для всех каналов постоянная составляющая, обеспечивающая однополярность амплитудного множителя.
Если заданная величина параметра offset недостаточна для однополярности амплитудного множителя, формируется сигнал с перемодуляцией.
Реализуем амплитудную модуляцию для сформированного ранее модулирующего ЛЧМ-сигнала. Сразу же построим график начального фрагмента полученного AM-сигнала и спектрограмму этого сигнала (рис. 8.47):
» s_AM = amod(s_M. Fc, Fs, 'amdsb-tc'):
» pTot(t(l:2000), s_AM(l:2000))
» figure
» specgram(s_AM, [], Fs)
» colormap gray
На спектрограмме AM-сигнала хорошо видны несущее колебание и две боковые полосы.
При использовании функции amodce результирующая комплексная огибающая представляет собой модулирующий сигнал с добавлением смещения offset, умноженный затем на фазовый множитель ехр(-j*phase).
Демодуляция AM-сигнала производится с помощью функций ademod и ademodce:
z = ademod (у. Fc, Fs, 'amdsb-tc', offset, num, den):
z = ademod(y. Fc, Fs, 'amdsb-tc/costas', offset, num, den):
z = ademodce (y, Fs, 'amdsb-tc', offset, num, den):
z = ademodce(y, Fs, 'amdsb-tc/costas', offset, num, den):
Если метод демодуляции указан как 'amdsb-tc', входной сигнал у умножается на несущее колебание, при этом очень важна правильность фазы несущего колебания (о способе задания начальной фазы говорилось выше, при перечислении общих параметров функций модуляции/демодуляции). Если указан метод 'amdsb- tc/costas', применяется демодуляция с использованием системы фазовой автоподстройки частоты (ФАПЧ), правильная начальная фаза в этом случае устанавливается автоматически.
Оба способа демодуляции позволяют правильно обрабатывать и сигнал с перемодуляцией.
Параметр offset — это константа, вычитаемая из полученных значений амплитудной огибающей. По умолчанию он выбирается таким, чтобы постоянная составляющая демодулированного сигнала была равна нулю.
Рис. 8.47. AM-сигнал (сверху) и его спектрограмма (снизу)
АМ с подавленной несущей
АМ с подавленной несущей и ее демодуляция реализуются перечисленными выше функциями при указании в них режима 'amdsb-sc' (расшифровка аналогична предыдущему случаю, за исключением окончания sc, обозначающего подавленную несущую — suppressed carrier). Синтаксис вызова функций модуляции следующий:
у - amod(x, Fc, Fs. 'amdsb-sc');
у = amodce(x, Fs, 'amdsb-sc'):
Фактически АМ с подавленной несущей соответствует обычной АМ при значении параметра offset, равном нулю.
Реализуем АМ с подавленной несущей для сформированного ранее модулирующего ЛЧМ-сигнала. Сразу же построим график начального фрагмента полученного сигнала и спектрограмму этого сигнала (рис. 8.48):
» s_AM_SC = amod(s_M. Fc, Fs, 'amdsb-sc'):
» plot(t(l:2000), s_AM_SC(1:2000))
» figure
» specgram(s_AM_SC, [], Fs)
» colormap gray
Рис. 8.48. AM-сигнал с подавленной несущей (сверху) и его спектрограмма (снизу)
Из рис. 8.47 и 8.48 хорошо видно, что спектрограмма AM-сигнала с подавленной несущей отличается от спектрограммы обычного AM-сигнала только отсутствием несущего колебания.
При использовании функции amodce результирующая комплексная огибающая представляет собой модулирующий сигнал, умноженный на фазовый множитель ехр( - j*phase), представляющий начальную фазу несущего колебания.
Демодуляция AM-сигнала с подавленной несущей производится с помощью функций ademod и ademodce:
z = ademod(y, Fc, Fs, 'amdsb-sc', num, den);
z = ademod(y, Fc, Fs, 'amdsb-sc/costas', num, den):
z = ademodce(y, Fs, 'amdsb-sc', num, den):
z = ademodce(y, Fs. 'amdsb-sc/costas'. num, den):
Если метод демодуляции указан как 'amdsb-sc', входной сигнал у умножается на несущее колебание, при этом очень важна правильность фазы несущего колебания (о способе задания начальной фазы говорилось выше, при перечислении общих параметров функций модуляции/демодуляции). Если указан метод ' amdsbsc/ costas', применяется демодуляция с использованием системы фазовой автоподстройки частоты (ФАПЧ), правильная начальная фаза в этом случае устанавливается автоматически.
Однополосная модуляция
Однополосная модуляция производится перечисленными выше функциями при указании в них параметра типа модуляции 'amssb'. Здесь ат расшифровывается как и раньше, a ssb означает наличие только одной боковой полосы (single side band). Синтаксис вызова функций модуляции позволяет использовать несколько способов формирования однополосного сигнала. Кроме того, возможности функций amod и amodce, а также задание их параметров несколько различаются.
По умолчанию используется формирование сигнала с помощью преобразования Гильберта, выполняемого в частотной области:
у = amod(x, Fc, Fs, 'amssb');
у - amodce(x. Fs. 'amssb');
Можно выполнить формирование сигнала с помощью преобразования Гильберта, выполняемого во временной области с использованием стандартного фильтра Гильберта (этот фильтр рассчитывается с помощью функции hi 1Ы1 г следующим образом: [num, den]—hl 1Ы I г(1/Fs)):
у - amod(x. Fc, Fs, 'amssb', hilbertflag):
у - amodce(x, Fs, 'amssb/time'):
Параметр hilbertflag, используемый для функции amod, может принимать произвольное значение.
Наконец, пользователь может с помощью параметров num и den задать свой фильтр для выполнения преобразования Гильберта во временной области:
у - amod(x, Fc, Fs, 'amssb', num, den):
у - amodce(x, Fs, 'amssb/time', num, den);
Разработчики функций amod и amodce забыли компенсировать задержку, неизбежно возникающую при выполнении гильбертовской фильтрации во временной области. Из-за этого получить приемлемые результаты при формировании однополосного сигнала таким способом можно только в случае крайне низкой частоты модулирующего сигнала,
Реализуем однополосную модуляцию для сформированного ранее модулирующего ЛЧМ-сигнала. Сразу же построим график начального фрагмента полученного сигнала и спектрограмму этого сигнала (рис. 8.49):
» s_SSB = amod(s_M. Fc, Fs, 'amssb'):
» plot(t(l:2000)7 s_SSB(l:2000))
» figure
» specgram(s_SSB, []. Fs)
» colormap gray
Рис. 8.49. Однополосный сигнал с нижней боковой полосой (сверху) и его спектрограмма (снизу)
На спектрограмме однополосного сигнала хорошо видно отсутствие верхней боковой полосы; правда, наблюдаются и неподавленные остатки несущего колебания.
По умолчанию функции amod и amodce формируют сигнал с нижней боковой полосой. Для функции amodce формирование сигнала с верхней боковой полосой не предусмотрено. Согласно документации пакета Communications, функция amod должна давать сигнал с верхней боковой полосой при указании режима модуляции 'amssb/up'. Однако из-за ошибки в М-файле amod.m функция отказывается обрабатывать такое значение параметра (это относится по крайней мере к версиям 2.0 и 2.0.1 пакета Communications). Решить эту проблему можно, передав функции отрицательное значение несущей частоты (рис. 8.50):
» s_SSB_UP = amod(s_M, -Fc, Fs. 'amssb'):
» specgram(s_SSB_UP, []. Fs)
» colormap gray*
Рис. 8.50. Спектрограмма однополосного сигнала с верхней боковой полосой
Спектрограмма наглядно показывает, что в данном случае в сигнале действительно сохранена только верхняя боковая полоса.
Демодуляция однополосного сигнала производится с помощью функций ademod и ademodce:
z = ademocKy. Fc, Fs, 'amssb', num, den):
z = ademodce(y, Fs, 'amssb', num, den):
При демодуляции входной сигнал у умножается на несущее колебание, при этом фаза несущей, в отличие от случая АМ при наличии двух боковых полос, не влияет на уровень демодулированного сигнала, а определяет только его фазовый сдвиг.
Квадратурная модуляция
Квадратурная модуляция производится перечисленными выше функциями при указании в них параметра типа модуляции ' qam' (quadrature amplitude modulation). Синтаксис вызова функций имеет следующий вид:
у - amod(x, Fc, Fs. 'qam');
у - amodce(x. Fs, 'qam').•
В отличие от других видов модуляции, в данном случае входной сигнал х должен быть матрицей с четным числом столбцов. Столбцы с нечетными номерами задают амплитуды синфазных составляющих, столбцы с четными номерами — амплитуды квадратурных составляющих модулирующих сигналов. Модулированный сигнал у представляет собой матрицу с числом столбцов вдвое меньшим, чем у модулирующего сигнала х.
Демодуляция квадратурно-модулированпого сигнала производится с помощью функций ademod и ademodce:
z = ademod(y, Fc. Fs. 'qam', num, den);
z = ademodce(y, Fs, 'qam'. num. den);
Демодулироваиный сигнал,z представляет собой матрицу с числом столбцов вдвое большим, чем у входного модулированного сигнала у. Столбцы с нечетными номерами содержат амплитуды синфазных составляющих, столбцы с четными номерами — амплитуды квадратурных составляющих демодулированпых сигналов.
Фазовая модуляция
Фазовая модуляция производится перечисленными выше функциями при указании в них параметра типа модуляции ' pm' (phase modulation). Синтаксис вызова функций имеет следующий вид:
у - amod(x,Fc. Fs. 'pm', deviation):
у - amodceix. Fs, 'pm', devation):
Необязательный параметр deviation — константа, на которую умножается модулирующий сигнал перед использованием его в качестве начальной фазы несущего колебания. По умолчанию значение этого параметра равно единице.
Реализуем фазовую модуляцию для сформированного ранее модулирующего ЛЧМ-сигпала. Сразу же построим спектрограмму этого сигнала (рис. 8.51):
» s_PM - amod(s_M, Fc. Fs, 'pm'):
» specgram(s_PM. [], Fs)
» colormap gray
На спектрограмме ФМ-сигнала хорошо видны несущее колебание и множество боковых частот. Согласно формулам, приведенным ранее в разделе «Спектр сигнала с гармонической угловой модуляцией», амплитуды спектральных составляющих пропорциональны функциям Бесселя. «Отражения» спектральных линий от верхнего и нижнего краев спектрограммы связаны с появлением ложных частот (aliasing, подробнее см. разделы «Аналоговые, дискретные и цифровые сигналы» и «Спектр дискретного сигнала» главы 3).
4000
3500
3000
2500
1500
1000
500
0
Time
з 2000
Рис. 8.51. Спектрограмма ФМ-сигнала
При использовании функции amodce результирующая комплексная огибающая представляет собой комплексную экспоненту
exp(1*deviation*x + 1*phase)'
Демодуляция ФМ-сигнала производится с помощью функций ademod и ademodce:
z - ademod(y. Fc, Fs. 'pm', num. den, vcoconst):
z - ademodce(y. Fs, 'pm', num, den, vcoconst):
Демодуляция выполняется с использованием системы ФАПЧ, необязательный параметр vcoconst задает чувствительность генератора, управляемого напряжением (в герцах на вольт). По умолчанию значение этого параметра равно 1.
Частотная модуляция
Частотная модуляция производится перечисленными выше функциями при указании в них параметра типа модуляции ' fm' (frequency modulation). Синтаксис вызова функций имеет следующий вид:
у - amod(x, Fc, Fs, 'fm', deviation):
у - amodce(x. Fs, 'fm', devation);
Необязательный параметр deviation — константа, на которую умножается модулирующий сигнал перед использованием его в качестве отклонения мгновенной частоты от несущей частоты. По умолчанию значение этого параметра равно единице, ,
При формировании ЧМ-сигнала модулирующий сигнал приближенно интегрируется с помощью функции cumsum, а затем используется в качестве начальной фазы несущего колебания. Коэффициенты масштабирования выбраны так, что прй отсутствии параметра deviation модулирующий сигнал х задает отклонение мгновенной частоты сигнала в тех же единицах, в которых заданы параметры Fc и Fs.
Реализуем частотную модуляцию для сформированного ранее модулирующего ЛЧМ-сигнала, задав максимальное отклонение мгновенной частоты равным 500 Гц (поскольку амплитуда модулирующего сигнала равна единице, параметр deviation следует задать равным 500). Сразу же построим спектрограмму полученного сигнала (рис. 8.52):
» s_FM - amod(s_M, Fc, Fs. *fm'. 500):
» specgram(s_FM. [], Fs)
» colormap gray
Рис. 8.52. Спектрограмма ЧМ-сигнала
На спектрограмме ЧМ-сигнала, как и в случае ФМ (см. рис. 8.51), хорошо видны несущее колебание и множество боковых частот. Однако имеются и отличия: сначала, пока частота модулирующего сигнала низкая, индекс модуляции велик (напомним, что при ЧМ индекс угловой модуляции меняется обратно пропорционально частоте модулирующего сигнала), и мы наблюдаем большое количество боковых частот — белое пятно в левой части графика имеет значительно большую высоту, чем в случае ФМ. По мере роста частоты модулирующего сигнала индекс модуляции падает и количество значимых боковых частот уменьшается. В результате в правой части графика спектр визуально не отличается от случая ФМ.
При использовании функции amodce результирующая комплексная огибающая представляет собой комплексную экспоненту
exp(1*2*p1*dev1at1on*cumsum(x)/Fs + 1*phase)
Демодуляция ЧМ-сигнала производится с помощью функций ademod и ademodce:
z - ademod(у, Fc. Fs, 'fm', num, den. vcoconst);
z - ademodce(y, Fs, 'fm*. num, den. vcoconst):
Демодуляция выполняется с использованием системы ФАПЧ, необязательный параметр vcoconst задает чувствительность генератора, управляемого напряжением (в герцах на вольт). По умолчанию значение этого параметра равно 1.
Цифровая модуляция в пакете Communications
При описании синтаксиса вызова рассматриваемых ниже функций цифровой модуляции и демодуляции используются те же общие параметры Fs (частота дискретизации) и Ес (несущая частота), что были рассмотрены в начале раздела «Аналоговая модуляция в пакете Communications». Кроме того, используется специфичный для цифровой модуляции параметр Fd, представляющий частоту следования символов. Отношение Fs/Fd должно быть положительным целым числом. Параметр Fd может быть двухэлементным вектором, в этом случае собственно символьная скорость задается его первым элементом Fd(l), а второй элемент Fd(2) представляет собой смешение (offset), используемое при дискретизации сигнала после аналоговой демодуляции. По умолчанию величина этого смещения равна нулю. Более подробно об использовании параметра смещения см. далее в описании функции demodmap (раздел «Преобразование аналогового сигнала в цифровое сообщение»).
Амплитудная манипуляция
Для реализации амплитудной манипуляции параметр 'method' должен иметь значение 'ask':
у - dmod(x, Fc, Fd, Fs, 'ask', M)
у - dmodce(x. Fd, Fs. 'ask', M)
Здесь M — число уровней, используемых при манипуляции. Входной сигнал х должен содержать целые числа в диапазоне 0...М - 1. Этим числам сопоставляются амплитудные множители, равномерно распределенные в диапазоне -1...1, то есть разность между соседними значениями составляет 2/(М - 1). Входному символу 0 соответствует амплитудный множитель 1, символ (М - 1) отображается в амплитудный множитель, равный -1.
В качестве примера на рис. 8.53 показано сигнальное созвездие для 8-позицион- ной АМн:
» modmap('ask', 8)
Демодуляция по умолчанию производится путем умножения входного сигнала на опорное колебание:
z ■ ddemod(y, Fc, Fd, Fs, 'ask', M, num, den)
z - ddemodce(y, Fd, Fs. 'ask', M, num. den)
Если для параметра 'method' указать значение 'ask/costas', для демодуляции будет использован алгоритм Костаса (система ФАПЧ):
- ddemod(y. Fc, Fd, Fs, 'ask/costas', M. num, den)
= ddemodce(y, Fd. Fs. 'ask/costas '. M, num, den)
Чтобы использовать ФНЧ для выделения низкочастотной составляющей сигнала после аналогового демодулятора, следует задать коэффициенты полиномов числителя и знаменателя функции передачи фильтра в дополнительных входных параметрах num и den. По умолчанию ФНЧ не используется.
ASK constellationASK constellation-1-111-0.500.5In-phase component-0.500.5In-phase component
ASK constellation
ASK constellation
-1
-1
1
1
-0.500.5
In-phase component
-0.500.5
In-phase component
1 0.8 0.6 0.4 0.2
0 -0.2 -0.4 -0.8 -0.8
-1
Рис. 8.53. Сигнальное созвездие 8-позиционной амплитудной манипуляции
Квадратурная манипуляция
Функции пакета Communications позволяют осуществлять квадратурную манипуляцию с использованием созвездий различных типов. Мы подробно рассмотрим только наиболее гибкий вариант, когда созвездие задается пользователем и может быть произвольным (о других режимах см. замечание в конце раздела). В этом случае параметр 'method' должен иметь значение 'qask/arb'. Аббревиатура arb означает произвольное (arbitrary) созвездие. Оно задается с помощью двух векторов тар_1 и map_q:-
у = dmod(x, Fc. Fd, Fs. 'qask/arb', map_i, map_q)
у = dmodce(x, Fd. Fs. 'qask/arb'. map_1. map_q)
z = ddemod(y, Fc, Fd, Fs. 'qask/arb', map_i. map_q. num. den)
z = ddemodce(y. Fd. Fs. 'qask/arb', mapj, map_q, num, den)
Для ^-позиционной КАМн векторы map_i и map_q должны иметь длину M, Эти векторы задают синфазные и квадратурные амплитуды (вещественные и мнимые части) сигнальных посылок. Таким образом, ^-й отсчет входного сигнала отображается в точку на комплексной плоскости, равную
map_1(x(k)+l) + j*map_q(x(k)+l)
Отобразить используемое созвездие на экране можно с помощью функции plot: plot(map_1, map_q. '.')
или с помощью функции modmap (она дополнительно нанесет на график несколько поясняющих надписей):.
modmap('qask/arb', map_1, map_q)
Амплитуды и фазы посылок поддерживаются постоянными на протяжении тактовых интервалов и при переходе от такта к такту изменяются скачкообразно. Использование интерполирующих фильтров для формирования спектра не предусмотрено.
Решить проблему формирования спектра можно следующим образом. Сначала с помощью функции modmap производится отображение входных символов в син-
фазные и квадратурные амплитуды точек созвездия при одинаковых значениях Fd и Fs (чтобы не менялась частота дискретизации сигнала). Впрочем, для такого отображения использовать функцию modmap не обязательно — достаточно задать созвездие в виде вектора комплексных чисел шар и произвести следующее преобразование:
xjnapped = map(x+l)
Полученный сигнал (двухканальный вещественный или одноканальный комплексный) подвергается интерполяции с нужным коэффициентом Fs/Fd с помощью функций rcosflt или interp. Наконец, полученный интерполированный сигнал используется для аналоговой квадратурной модуляции.
Демодуляция в этом случае может осуществляться как обычно, однако необходим тщательный подбор (или автоподстройка) параметра offset, передаваемого в функцию demodmap.
Чтобы использовать ФНЧ для выделения низкочастотной составляющей сигнала после аналогового демодулятора, следует задать коэффициенты полиномов числителя и знаменателя функции передачи фильтра в дополнительных входных параметрах num и den. По умолчанию ФНЧ не используется.
ЗАМЕЧАНИЕ
Рассматриваемые функции пакета Communications поддерживают также квадратурную манипуляцию с «квадратными» (режим 'qask') и «концентрическими» (режим 'qask/cir') созвездиями. Эти варианты можно использовать в демонстрационных целях, но они плохо подходят для моделирования реальных систем — даже если требуемое созвездие является «квадратным» (а в «концентрическом» формате можно, в принципе, представить произвольное созвездие), функции не дают возможности задать нужное соответствие между символами и точками созвездия, тогда как в режиме 'qask/arb' это делается без труда. Если вы все-таки решите использовать эти созвездия, ознакомьтесь с их формированием но документации пакета Communications. Вывести эти созвездия на экран можно с помощью функций qaskenco(M) («квадратное») и apkconst(numsig, amp, phs, ’п’) («концентрическое»).
Фазовая манипуляция
Для реализации фазовой манипуляции параметр 'method' должен иметь значение 'psk':
у = dmod(x, Fc. Fd, Fs. 'psk', M)
у = dmodce(x, Fd, Fs, 'psk', M)
Здесь M — число градаций начальной фазы, используемых при манипуляции. Входной сигнал х должен содержать целые числа в диапазоне 0... М - 1. Этим числам сопоставляются начальные фазы, равномерно распределенные в диапазоне 0 ... 2л(Л/ - 1)/Л/, то есть разность между соседними значениями составляет 2л/М Входному символу 0 соответствует нулевая начальная фаза, символ (М - 1) отображается в начальную фазу, равную 2л(Л/ - 1)/Л/.
В качестве примера на рис. 8.54 показано сигнальное созвездие для 8-позицион- ной ФМн:
» modmap('psk', 8)
ASK/PSK Constellation
Рис. 8.54. Сигнальное созвездие 8-позиционной фазовой манипуляции
Демодуляция ФМн производится так же, как для квадратурной манипуляции, с использованием соответствующего созвездия. Синтаксис вызова функций демодуляции следующий:
z - ddemod(y. Fc, Fd. Fs. 'psk', M, num, den)
z - ddemodce(y, Fd. Fs. 'psk'. M, num. den)
Чтобы использовать ФНЧ для выделения низкочастотной составляющей сигнала после аналогового демодулятора, следует задать коэффициенты полиномов числителя и знаменателя функции передачи фильтра в дополнительных входных параметрах num и den. По умолчанию ФНЧ не используется.
Частотная манипуляция
Для реализации частотной манипуляции параметр ' method' должен иметь значение 'fsk':
у = dmod(x, Fc, Fd, Fs. 'fsk', M, tone)
у = dmodce(x, Fd, Fs. 'fsk', M, tone).
Здесь M — число частот, используемых при манипуляции. Входной сигнал х должен содержать целые числа в диапазоне 0... М - 1. Этим числам сопоставляются частоты, равномерно распределенные с шагом tone вокруг центральной частоты Fc. Таким образом, входному символу 0 соответствует частота Fc - (М-1 )*tone/2, символу (М - 1) — частота Fc + (M-l)*tone/2.
Входной параметр tone при вызове можно опускать, его значение по умолчанию равно Fd.
В качестве примера на рис. 8.55 показано сигнальное созвездие (при ЧМн под созвездием подразумевается набор частотных сдвигов относительно минимальной частоты) для 8-позиционной ЧМн при разносе соседних частот, равном 300 Гц:
» modmap('fsk'. 8. 300)
Рис. 8.55. Частотные сдвиги при 8-позиционной частотной манипуляции с разносом частот, равным 300 Гц
Демодуляция по умолчанию производится корреляционным когерентным методом:
z - ddemod(y, Fc, Fd, Fs. 'fsk', M, tone),
г - ddemodce(y, Fd. Fs. 'fsk', M, tone)
Если для параметра 'method' указать значение 'fsk/noncoherence', для демодуляции будет использован корреляционный некогерентпый (квадратурный) алгоритм:
z = ddemod(y, Fc. Fd. Fs. 'fsk/noncoherence', M. tone)
z = ddemodce(y. Fd. Fs. 'fsk/noncoherence', M, tone)
Минимальная частотная манипуляция
Для реализации минимальной частотной манипуляции (МЧМ) параметр 'method' должен иметь значение 'msk'. Дополнительные входные параметры в этом случае не используются:
у = dmod(x. Fc. Fd. Fs, 'msk')
у = dmodce(x, Fd. Fs, 'msk')
Минимальная частотная манипуляция — это ЧМи с разносом частот нуля и единицы, равным половине символьной скорости (Fd/2). Как говорилось в разделе «Способы модуляции, используемые при передаче цифровой информации», сигналы, соответствующие нулю и единице, при этом оказываются некоррелированными. Входному символу 0 соответствует частота Fc - Fd/4, символу 1 — частота Fc + Fd/4.
Таким образом, режим 'msk' эквивалентен ЧМи ('fsk') при М -2 и tone = Fd/2:
у = dmod(x, Fc. Fd. Fs. 'fsk', 2, Fd/2)
у = dmodce(x, Fd, Fs, 'fsk', 2. Fd/2)
z = ddemod(y, Fc. Fd. Fs. 'fsk', 2. Fd/2)
z = ddemodce(y. Fd, Fs, 'fsk', 2, Fd/2)
Демодуляция, как и в общем случае ЧМн, может производиться когерентным и некогерентным методом:
z = ddemod(y, Fc, Fd, Fs, 'msk')
z = ddemod(y, Fc. Fd. Fs, 'msk/noncoherence')
z = ddemodce(y. Fd. Fs. 'msk')
z = ddemodce(y, Fd, Fs. 'msk/noncoherence')
Преобразование цифрового сигнала в аналоговые параметры модуляции
В разделе «Способы модуляции, используемые при передаче цифровой информации» уже говорилось, что главная идея цифровой модуляции состоит в том, что каждому возможному значению передаваемого символа ставятся в соответствие некоторые параметры аналогового несущего колебания. Такое преобразование выполняется функцией modmap, которая к тому же повышает частоту дискретизации сигнала, повторяя каждую рассчитанную аналоговую точку Fs/Fd раз. Синтаксис вызова функции modmap следующий:
x_mapped = modmap(x, Fd. Fs, 'method', ...)'
Все параметры здесь имеют тот же смысл, что и в рассмотренных выше функциях цифровой модуляции/демодуляции.
Кроме собственно преобразования, функция modmap может выводить изображение используемого сигнального созвездия (используемые частотные сдвиги относительно несущей — для ЧМ и МЧМ, точки на комплексной плоскости — для остальных видов манипуляции). Синтаксис вызова функции при этом следующий:
■ modmap('method', ...)
Здесь 'method' — строка вида модуляции, на месте многоточия должны стоять те же параметры, что и при обычном вызове для данного метода. Исключением является МЧМ — для отображения частотных сдвигов необходимо указать символьную скорость:
modmap('msk'. Fd)
Мы уже использовали функцию modmap для отображения созвездий при рассмотрении функций цифровой модуляции.
Преобразование аналогового сигнала в цифровое сообщение
При приеме сигнала с цифровой модуляцией, за исключением режима ЧМн, производится сначала аналоговая демодуляция, а затем преобразование отсчетов аналогового демодулированного сигнала в цифровое сообщение. Такое преобразование производится функцией demodmap, имеющей следующий синтаксис вызова:
х = demodmap(y, [Fd offset], Fs, 'method', ...)
Здесь у — отсчеты входного аналогового сигнала, имеющего частоту дискретизации Fs, Fd- — символьная скорость (частота дискретизации цифрового сигнала; отношение Fs/Fd должно быть положительным целым числом), offset — смете-
ние отсчетных точек (см. ниже), 'method' — вид манипуляции. Возможные виды манипуляции и соответствующие им дополнительные параметры, которые должны стоять на месте многоточия, такие же, как для функций цифровой модуляции, рассмотренных выше.
Функция demodmap выполняет две отдельных операции — понижение частоты дискретизации в Fs/Fd раз и собственно преобразование отсчетов в цифровое сообщение.
Понижение частоты дискретизации производится просто путем выборки отсчетов с шагом Fs/Fd. Задержка моментов взятия отсчетов относительно начала такта задается с помощью параметра offset. Итак, прореживание осуществляется следующим образом:
у = y(offset : Fs/Fd : end):
Параметр offset при вызове может опускаться, тогда его значение считается равным нулю.
Далее для каждого отсчета прореженного сигнала ищется ближайшая точка используемого в данном режиме созвездия. Символы, соответствующие найденным точкам, возвращаются в векторе х.
Построение диаграммы рассеяния
Для построения диаграммы рассеяния (см. ранее рис. 8.38 и 8.41, а также комментарии к ним) предназначена функция scatterplot, имеющая следующий синтаксис вызова:
h = scatterplot(x, n, offset, plotstring, h):
Обязательным параметром является только входной сигнал х. Интерпретация массива х зависит от размера массива и наличия у него мнимой части:
если х — вещественная двухстолбцовая матрица, функция scatterplot интерпретирует первый столбец как синфазную, а второй — как квадратурную составляющую;
если х — комплексный вектор, функция scatterplot интерпретирует его вещественную часть как синфазную, а мнимую — как квадратурную составляющую;
если х — вещественный вектор, функция scatterplot интерпретирует его как вещественный сигнал (то есть в данном случае квадратурная составляющая равна нулю).
Остальные входные параметры являются необязательными и имеют значения по умолчанию. Параметр п задает число отсчетов на символьный такт (применительно к обозначениям, использованным ранее, оно равно Fs/Fd). При построении диаграммы используется только каждый n-й отсчет сигнала, то есть предварительно выполняется прореживание сигнала х с коэффициентом п. По умолчанию значение параметра п равно единице.
Параметр offset задает смещение, используемое при прореживании. При построении диаграммы используется каждый n-й отсчет сигнала х, начиная с отсчета с номером (offset+1). Значение параметра offset должно быть целым числом,
лежащим в диапазоне от 0 до п-1. По умолчанию значение параметра offset равно нулю.
Строковый параметр plotstring задает символы точек, тип линии и цвет для диаграммы. Формат и назначение элементов строки те же самые, что используются в функции plot (см. далее раздел «Настройка внешнего вида графиков» приложения А). По умолчанию диаграмма выводится точками синего цвета.
При указании входного параметра h вместо создания нового графического окна диаграмма выводится в существующем окне с дескриптором h. Параметр h должен быть дескриптором графического окна, ранее созданного функцией scatterplot. Имеющаяся в этом окне диаграмма стирается. Для вывода нескольких сигналов в одном окне можно использовать команду hold on.
Выходным параметром h является дескриптор графического окна, содержащего диаграмму. .
В случае вещественной двухстолбцовой матрицы х диаграмма рассеяния формируется функцией scatterpl ot следующим образом:
plot(x(offset+l:n:end.l). x(offset+l:n:end,2). plotstring)
Если х — комплексный вектор, формирование диаграммы рассеяния описывается так:
plot(real(x(offset+l:n:end)). 1mag(x(offset+l:n:end)). plotstring)
Наконец, в случае вещественного вектора х диаграмма строится так: plot(x(offset+l:n:end). O*x(offset+l:n:end), plotstring)
Использование диаграмм рассеяния иллюстрируется демонстрационной программой scattereyedemo, имеющейся в составе пакета Communications.
Построение глазковой диаграммы
Для построения глазковой диаграммы (см. ранее рис. 8.41 и комментарии к нему) предназначена функция eyedi agram, имеющая следующий синтаксис вызова:
h = eyediagram(x, n, period, offset, plotstring, h):
Обязательными параметрами являются входной сигнал х и число отсчетов на символьный такт п (применительно к обозначениям, использованным ранее, оно равно Fs/Fd). Интерпретация массива х и число выводимых диаграмм зависят от размера массива и наличия у него мнимой части:
если х — вещественная двухстолбцовая матрица, функция eyediagram интерпретирует первый столбец как синфазную, а второй — как квадратурную составляющую. Диаграммы для двух составляющих выводятся в отдельных системах координат в общем графическом окне;
если х — комплексный вектор, функция eyediagram интерпретирует его вещественную часть как синфазную, а мнимую — как квадратурную составляющую. Диаграммы для двух составляющих выводятся в отдельных системах координат в общем графическом окне;
если х — вещественный вектор, функция eyedi agram интерпретирует его как вещественный сигнал. Графическое окно в данном случае содержит единственную диаграмму.
Остальные входные параметры являются необязательными и имеют значения по умолчанию. Параметр period задает длительность символьного такта. Это значение используется для оцифровки горизонтальной оси, крайние значения которой считаются равными -period/2 и period/2. По умолчанию значение параметра period равно единице.
Параметр offset задает горизонтальное смещение графика. Функция предполагает, что значениям времени, кратным длительности символьного такта period, соответствуют отсчет сигнала с номером offset+1 и следующие за ним с шагом п. Значение параметра offset должно быть неотрицательным целым числом, лежащим в диапазоне от 0 до п-1. По умолчанию значение параметра offset равно нулю.
Строковый параметр plotstring задает символы точек, тип линии и цвет для графика. Формат и назначение элементов строки те же самые, что используются в функции plot (см. далее раздел «Настройка.внещнего вида графиков» приложения А). По умолчанию, как обычно, графики выводятся сплошными линиями синего цвета.
При указании входного параметра h вместо создания нового графического окна график выводится в существующем окне с дескриптором h. Параметр h должен быть дескриптором графического окна, ранее созданного функцией eyediagram.
ВНИМАНИЕ
Вывод диаграмм для нескольких сигналов в одном окне нельзя реализовать с помощью команды hold on.
Выходным параметром h является дескриптор графического окна, содержащего диаграмму.
Использование глазковых диаграмм иллюстрируется демонстрационной программой scattereyedemo, имеющейся в составе пакета Communications.
Приложение А Основы работы с MATLAB
Система MATLAB (сокращение от MATrix LABoratory — матричная лаборатория) появилась в 1984 г. и за прошедшие более чем пятнадцать лет стала мировым стандартом в области научных и технических расчетов. Основная причина этой популярности, вероятно, кроется в том, что MATLAB дал инженерам и ученым именно то, что им было нужно, — возможность с непревзойденной легкостью применять к произвольным данным, представленным в виде векторов и матриц, разнообразнейшие численные алгоритмы. Удобный язык программирования, в котором благодаря матричной ориентации системы значительно уменьшилась необходимость в циклах, еще больше расширил сферу применения MATLAB.
В данном приложении приведены основные сведения о работе с MATLAB. Этой информации достаточно для того, чтобы познакомиться с системой и затем продолжить осваивать ее самостоятельно. За более подробными сведениями обращайтесь к книгам, целиком посвященным MATLAB (таким как [12]), а также, разумеется, к справочной системе и документации. Надеюсь также, что некоторую помощь в освоении MATLAB окажут многочисленные примеры расчетов, имеющиеся во всех удавах книги.
Информация, приводимая в данном приложении, соответствует версии MATLAB 6.0.
Установка
Прежде всего следует сказать несколько слов о системных требованиях. В целом можно сказать, что если на вашем компьютере работает система Windows 95/98/ ME/NT/2000, то должен работать и MATLAB. Тип процессора и объем оперативной памяти влияют только на быстродействие. Размер необходимого дискового пространства сильно варьируется в зависимости от состава устанавливаемых компонентов — от 138 Мбайт (только ядро MATLAB без документации) до 817 Мбайт (полная установка с документацией). Комплект, минимально необходимый для работы с данной книгой (MATLAB плюс три пакета расширения), требует 212 Мбайт с документацией или 150 Мбайт без нее.
ВНИМАНИЕ
Версии MATLAB до 6.0 включительно не работают па компьютерах с процессором Intel Pentium 4. Эта проблема ретена в версии 6.1. В то же время с процессорами фирмы AMD (К5, Кб, Athlon, Duron и т. д.) MATLAB работает нормально.
Кроме того, имеются сообщения о проблемах, возникающих при попытках использования предыдущих версий MATLAB (до 5.3 включительно) с последними версиями операционной системы (Windows 2000 и ХР).
Если вам приходилось устанавливать программное обеспечение в системе Windows, установка MATLAB не должна вызвать сложностей. Прокомментируем лишь один этап, связанный с выбором устанавливаемых компонентов (рис. АЛ).
Рис. А.1. Выбор устанавливаемых компонентов MATLAB
В первом из четырех разделов, этого окна предлагается выбрать папку для установки MATLAB. Дополнительных комментариев этот раздел не требует.
Трехпозиционный переключатель в разделе 2 управляет установкой HTML-документации (она занимает весь второй диск дистрибутива MATLAB). При выборе варианта Install products and documentation документация устанавливается па жесткий диск компьютера. Если переключатель установлен в положение Install products only, документация устанавливаться не будет. При этом в среде MATLAB будет по-прежнему доступна справочная информация, встроенная в функции и вызываемая из командной строки, а для просмотра HTML-документации придется вставить CD-ROM (документация на нем хранится в несжатом виде). Третий вариант, Install documentation only, предлагает установить только документацию и в большинстве случаев не представляет интереса.
gXHlVW OH>IO 0OH8BI/J egeV *OHd
SSHU'U^SSHU'U^bc=Ut Clbc=Ut Clz.i«fr'v twit гz.i«fr'v twit годздотдодздотдApe^bApe^b
SSHU'U^
SSHU'U^
bc=Ut Cl
bc=Ut Cl
z.i«fr'v twit г
z.i«fr'v twit г
одздотд
одздотд
Ape^b
Ape^b
L ЧбПОЯЦЧ T SUWniQDL ЧбПОЯЦЧ T SUWniQD
L ЧбПОЯЦЧ T SUWniQD
L ЧбПОЯЦЧ T SUWniQD
(x)dxa(x)dxaОТОТ66cc0000'S0000'S6 46П03436 46П03430000'*0000'*OOOS'COOOS'C0000'60000'6OOOS'ZOOOS'Z0000'20000'2OOtlS'TOOtlS'TL Ч^пояцоL Ч^пояцо(x)dxa «(x)dxa «ггDOOS'*DOOS'*6 suenioo6 suenioo0000'I0000'IT еиептозT еиептозC06CTC06CT•nuae dT®H ®43•nuae dT®H ®43«оз; adT»H«оз; adT»H(T(T+ г,(гт/Т<>еоо)з1Ье ..+ г,(гт/Т<>еоо)з1Ье ..ЯП1¥И« зэ®т»б 'рэззазе зэй oiЯП1¥И« зэ®т»б 'рэззазе зэй oix/(x)dxa (x)dxax/(x)dxa (x)dxa(I + 2v(2T/Td)so3)^3be(I + 2v(2T/Td)so3)^3beapo dT»4apo dT»4| з4м/о4 ^fx '['r| з4м/о4 ^fx '['rзэсчэота сиотзеэттттгоэ'^ чицпетб Ц хочтоох зэтэладф. хочтоох иотавэт^тзиэр! eaosAg^зэсчэота сиотзеэттттгоэ'^ чицпетб Ц хочтоох зэтэладф. хочтоох иотавэт^тзиэр! eaosAg^4141$$xoqiooi Аитбвээолд leufijg^ wxoqiooi Аитбвээолд leufijg^ wxoqToox uoT3«2T«T3do^ ЗТЯ s.aadoiaAaa jgq «тояозон^ хочтоох ийтеац заатт/^*' xoqiooi иотзтбтпЬэу >3>a^ xoqiooi suotseoTimmroo ^.SVTIVH^xoqToox uoT3«2T«T3do^ ЗТЯ s.aadoiaAaa jgq «тояозон^ хочтоох ийтеац заатт/^*' xoqiooi иотзтбтпЬэу >3>a^ xoqiooi suotseoTimmroo ^.SVTIVH^#j 4 4 4 •4 -A#j 4 4 4 •4 -A
(x)dxa
(x)dxa
ОТ
ОТ
6
6
c
c
0000'S
0000'S
6 46П0343
6 46П0343
0000'*
0000'*
OOOS'C
OOOS'C
0000'6
0000'6
OOOS'Z
OOOS'Z
0000'2
0000'2
OOtlS'T
OOtlS'T
L Ч^пояцо
L Ч^пояцо
(x)dxa «
(x)dxa «
г
г
DOOS'*
DOOS'*
6 suenioo
6 suenioo
0000'I
0000'I
T еиептоз
T еиептоз
C06CT
C06CT
•nuae dT®H ®43
•nuae dT®H ®43
«оз; adT»H
«оз; adT»H
(T
(T
+ г,(гт/Т<>еоо)з1Ье ..
+ г,(гт/Т<>еоо)з1Ье ..
ЯП1¥И« зэ®т»б 'рэззазе зэй oi
ЯП1¥И« зэ®т»б 'рэззазе зэй oi
x/(x)dxa (x)dxa
x/(x)dxa (x)dxa
(I + 2v(2T/Td)so3)^3be
(I + 2v(2T/Td)so3)^3be
apo dT»4
apo dT»4
| з4м/о4 ^fx '['r
| з4м/о4 ^fx '['r
зэсчэота сиотзеэттттгоэ'^ чицпетб Ц хочтоох зэтэладф. хочтоох иотавэт^тзиэр! eaosAg^
зэсчэота сиотзеэттттгоэ'^ чицпетб Ц хочтоох зэтэладф. хочтоох иотавэт^тзиэр! eaosAg^
41
41
$
$
xoqiooi Аитбвээолд leufijg^ w
xoqiooi Аитбвээолд leufijg^ w
xoqToox uoT3«2T«T3do^ ЗТЯ s.aadoiaAaa jgq «тояозон^ хочтоох ийтеац заатт/^*' xoqiooi иотзтбтпЬэу >3>a^ xoqiooi suotseoTimmroo ^.
SVTIVH^
xoqToox uoT3«2T«T3do^ ЗТЯ s.aadoiaAaa jgq «тояозон^ хочтоох ийтеац заатт/^*' xoqiooi иотзтбтпЬэу >3>a^ xoqiooi suotseoTimmroo ^.
SVTIVH^
#j 4 4 4 •4 -A
#j 4 4 4 •4 -A
irAcpUwi puewu
JpOM^v^^$ ЦJpOM^v^^$ Ц£3 □£3 □янияниiivuvH ЛiivuvH Л
JpOM^v^^$ Ц
JpOM^v^^$ Ц
£3 □
£3 □
яни
яни
iivuvH Л
iivuvH Л
•морим рившшоэ — wouxo wmiQiivwon кэывнмевн qioeirgo Big •aoiBiqirXead bVohmh и Vubwom в!Гоян kW внэьвневнУэйи вино ojoh -ЯВИ ЭЭ 410Bh KBniqifOg XWOIGOU *ВМЭ1ЭИЭ КВЯОЛО1ГВИ1Г KBHHHlMBdaiHH — gvilVW •^'V ‘and eh эонивевмоц ‘оияо кэхиякон dHEdMC eh QVIIVIX ^яэЛнве эгэоц
е1Л1ижеб iAioH3Mi>ied9iHM g eioged
g иинэжoIfиdu я HateHHdn кииэнвневн хи иикинвэино имия -iEd>i янэьо э яо1нэноииоя яоэиид ‘эяэик ен В1ээи олонКодояэ моиэчдо и HWBoad -алии HwiqnqEEHoH33o4>odn итлиянпэялэдоэ яэвЛяю^ояояЛс! 'хи qiBdngiqn элэжои oih Mei ‘кэ1кдо1Гвнон эн иолиня э 3.iogBd ndn шнэноииюя aiqnqifBiSQ •xoqjooj, u§iS9Q лэцтд и xoqjoo^ диорвзшпшшоэ ‘xoqjoo^ Зирвэзолд {bu8i§ — KHHadumoBd ЕлаяЕц олэ nd.i эжяех в ‘gvilVW онпэялздоэ яшяонвлэЛ оми1гохдоэн Hwudawndu элинх я iiniqwoBHHdiEwssEd о iqiogBd keJ/ -(xoqjoo)) Knugdrimaod еошэхои оялзэь -игоя эотягод ввьопгая ‘имэлзиз тнэиоииом iqiiaironhadau ^ airaCCBd я ‘паиоявц
■кинвмина qiBlnBdgo эн этдооя онжом £ ifdVeEd вн ‘эяиек иоязнопк ви gvilVJN о1ИПвхнэмЛяо1Г ялияонвлзЛ яюонжом -eos i9X33d9inHEe ив VKdn иэвэлвяоеявоц xnxoHHoood ояюпишявод Лиявохэоц
Попробуем вычислить значение какого-нибудь выражения:
» sqrt(cos(pi/12)A2 + 1) ans -
1.3903
Итак, MATLAB может работать как очень большой и мощный калькулятор, вычисляя значения математических выражений. При этом арифметические операции записываются традиционно, для возведения в степень используется знак А, порядком вычислений можно управлять с помощью круглых скобок, и в круглых же скобках записываются аргументы вызываемых функций (в данном примере используются функции косинуса cos и квадратного корня sqrt).
На рис. А.2 показано, как выглядят вводимые команды и выводимые результаты в окне MATLAB. При представлении результатов в книге пустые строки удалены для экономии места.
Поскольку мы не присвоили результат вычислений никакой * переменной, MATLAB автоматически создал для него переменную с именем ans и показал ее значение.
Однако главная ценность MATLAB состоит в возможности одновременно оперировать несколькими значениями. Введем следующую команду:
» х - 1:0.5:5
х =
Columns 1 through 7
1.00001.50002.00002.50003.00003.50004.0000
Columns 8 through 9
4.50005.0000
Мы создали переменную х, которая представляет собой вектор-строку, содержащую 9 элементов. Стоящее справа от знака равенства выражение генерирует арифметическую прогрессию, первый член которой равен 1, разность между соседними элементами равна 0,5, а последний член не превосходит 5.
ЗАМЕЧАНИЕ
Имена переменных MATLAB чувствительны к регистру символов, так что х и X — это две разные переменные. Однако имена функций к регистру не чувствительны, поскольку фактически являются именами файлов (см. далее раздел «Создание функций»).
Над полученным вектором можно выполнять математические операции: » х * 2 ans =
2345678910
Можно применять к векторам математические функции:
» ехр(х) ans -
Columns 1 through 7
2.71834.48177.3891 12.1825 20.0855 33.1155 54.5982
Columns 8 through 9
90.0171 148.4132
Но вычисление следующего выражения дает неожиданный результат:
» ехр(х)/х ans. =
16.6289
А этот пример вообще вызовет появление сообщения об ошибке:
» х * х
??? Error using ==> *
Inner matrix dimensions must agree.
Дело в том, что операции умножения, деления и возведения в степень в MATLAB выполняются не поэлементно, а по правилам матричных операций. Матричные правила запрещают умножение строки на строку, поэтому выдано сообщение о несовместимости размеров перемножаемых матриц.
ЗАМЕЧАНИЕ
Несовместимость размеров матриц — вероятно, одна из наиболее часто встречающихся ошибок. Есть две главных причины ее возникновения. Во-первых, может оказаться неправильной ориентация какого-нибудь из используемых в выражении массивов (пример — попытка сложить вектор-строку и вектор-столбец). Во-вторых, какой-нибудь из промежуточных результатов, с вашей точки зрения являющийся числом (скаляром), может па самом деле оказаться матрицей — скажем, из-за ускользнувших от вашего внимания топкостей работы вызываемой функции или из-за каких-то особенностей обрабатываемых данных.
Чтобы произвести поэлементные действия, к знаку операции необходимо добавить точку спереди (.*, ./ или .*). Теперь мы можем получить желаемые результаты, переписав два последних примера:
» ехр(х) ./ х ans =
Columns 1 through 7
2.71832.98783.69454.87306.69529.4616 13.6495
Columns 8 through 9■
20.0038 29.6826
» x .* x
ans =
Columns 1 through 7
1.00002.25004.00006.25009.000012.250016.0000
Columns 8 through 9,
20.2500 25.0000
Чтобы продемонстрировать именно матричное умножение, создадим второй вектор, причем не строку, а столбец:
» У = X'
У =
1.0000
1.5000
2.0000
2.5000
3.0000
3.5000
4.0000
4.5000
5.0000
Апостроф в MATLAB обозначает эрмитово сопряжение — сочетание транспонирования с комплексным сопряжением. В данном случае вектор х вещественный, поэтому комплексное сопряжение ничего не меняет. Для выполнения транспонирования без комплексного сопряжения к апострофу необходимо добавить точку (•')•
Теперь у нас есть вектор-строка х и вектор-столбец у, размерности которых позволяют перемножать их, причем в любом порядке:
» х * у ans =
96 » у * х ans =
Columns 1 through 7
1.0000
1.5000
2.0000
2.5000
3.0000
3.5000
4.0000
1.5000
2.2500
3.0000
' 3.7500
4.5000
5.2500
6.0000
2.0000
3.0000
4.0000
5.0000
6.0000
7.0000
8.0000
2.5000
3.7500
5.0000
6.2500
7.5000
8.7500
10.0000
3.0000
4.5000
.6.0000
7.5000
9.0000
10.5000
12.0000
3.5000
5.2500
'7.0000
8.7500
10.5000
12.2500
14.0000
4.0000
6.0000
8.0000
10.0000
12.0000
14.0000
16.0000
4.5000
6.7500
9.0000
11.2500
13.5000
15.7500
18.0000
5.0000
7.5000
10.0000
12.5000
15.0000
17.5000
20.0000
Columns 8 through 9 4.50005.0000
6.75007.5000
9.0000 10.0000
11.2500 12.5000
13.5000 15.0000
15.750017.5000
18.0000 20.0000 20.25.00 22.5000 22.5000 25.0000
В соответствии с правилами матричных операций при умножении строки на столбец получилось число, а при умножении столбца на строку,— квадратная матрица.
Векторы и матрицы можно формировать и из отдельных элементов, при этом элементы в строке разделяются пробелами или запятыми, между строками ставится точка с запятой, а все в целом ограничивается квадратными скобками:
» М - [1 2:3,4]
М -
12
34
Точка с запятой имеет и еще одно важное применение — размещенная в конце строки, она подавляет вывод результата вычислений на экран:
» М2 = М * М:
Узнать значение переменной можно, просто введя ее имя:
» М2
М2 =
10
1522
И в заключение первого знакомства приведем несложный пример, связанный с тематикой книги — обработкой сигналов. Для начала зададим частоту дискретизации Fs равной 8 кГц:
» Fs = 8еЗ;
Теперь сформируем вектор значений времени, охватывающих с этой частотой дискретизаций интервал длиной в одну секунду:
» t = 0:1/Fs:l;
Рассчитаем для этих моментов времени значения периодической последовательности двуполярных прямоугольных импульсов с частотой следования f0, равной 50 Гц. Для этого вычислим значения синусоиды нужной частоты и применим к ним знаковую функцию sign:
» f0 = 50:
» s = sign(sin(2*p1*f0*t)):
Теперь подготовим фильтр для обработки нашего сигнала. Пусть это будет ФНЧ Баттерворта 4-го порядка с частотой среза fl, равной 200 Гц. Такой фильтр рассчитывается с помощью функции butter из пакета расширения Signal Processing:
» fl = 200:
» [b, a] = butter(4, fl*2/Fs) b =
1.0e-003 *
0.03120.12500.18740.12500.0312
a =
1.0000-3.58974.8513 -2.92410.6630
Здесь мы впервые сталкиваемся с интересной особенностью MATLAB: в отличие от большинства языков программирования, функции MATLAB могут возвращать несколько результатов (в данном примере это векторы b и а — коэффициенты полиномов числителя и знаменателя функции передачи рассчитанного фильтра).
ЗАМЕЧАНИЕ
Выходные параметры функции перечисляются через запятую в квадратных скобках. При использовании такой функции в составе математического выражения значением функции является первый из списка возвращаемых сю результатов.
Теперь можно обработать сигнал s фильтром, описываемым векторами b и а. Для этого предназначена функция filter:
» s2 = fl Iter(b. a. s):
Наконец, взглянем на полученные результаты, выведя графики первых 200 значений входного и выходного сигналов с помощью функции pl ot:
» plot(t(l:200). 5(1:200), t(l:200), s2(l:200), ':')
Результирующий график, который выводится в отдельном окне, называемом графическим окном (figure window), показан на рис. А.З. Подробнее о функции plot будет рассказано далее, в разделе «Графика» данного приложения.
• I щше No 1FirUKi
и ^ а @ и a z / л £ ~ iiiiliil^^^^^
0.5
-0.5
llllllll
Рис. А.З. Графики входного (сплошная линия) и выходного (пунктирная линия) сигналовдискретного фильтра
Справочная система
В MATLAB имеется два уровня справочной системы: встроенная справка и НТМ L-документация.
Встроенная справка доступна всегда, даже в том случае, если вы отказались от установки документации (см. ранее раздел «Установка»), поскольку ее текст рас-
положен непосредственно в файлах функций MATLAB. Для получения справки о конкретной функции необходимо ввести команду help имя_функции, например:
» help 1од2
L0G2 Base 2 logarithm and dissect floating point number.
Y - L0G2(X) is the base 2 logarithm of the elements of X.
[F.E] - L0G2(X) for each element of the real array X, returns an
array F of real numbers, usually in the range 0.5 <= abs(F) < 1.
and an array E of integers, so that X = F .* 2.AE. Any zeros in X produce F = 0 and E = 0. This corresponds to the ANSI 0 function frexpO and the IEEE floating point standard function logb().
See also LOG. L0G10, POW2. NEXTPOW2. REALMAX. REALMIN.
Для просмотра HTML-документации выберите одну из первых четырех команд меню Help (Full Product Family Help, MATLAB Help, Using the Desktop или Using the Command Window) или введите команду hel pdesk. Появится окно, показанное на рис. А.4.
'LI PMjCt'LI PMjCtSyntaxSyntaxDescriptionDescriptionlog2 (X) computes the base 2 logarithm of the elements of x.log2 (X) computes the base 2 logarithm of the elements of x.RemarksRemarksExamplesExamples№№№№MATUeMATUeThis function corresponds to the ANSI C function f rexp () and the IEEE floating-point standard function iogb(). Anyzeros in xproduce г ■ oand E - 0.This function corresponds to the ANSI C function f rexp () and the IEEE floating-point standard function iogb(). Anyzeros in xproduce г ■ oand E - 0.Y ■ log2(X) [F,E] • log2(X)Y ■ log2(X) [F,E] • log2(X)[F,E] ■ log2(X) returns arrays rand E. Argument F is an array of real values usually in the range 0.5^ abs(F) < l.Forreal X. г satisfies the equation: X F. *2. AE. Argument E is an array of integers that, for real x, satisfy the equation: F. *2.*E.[F,E] ■ log2(X) returns arrays rand E. Argument F is an array of real values usually in the range 0.5^ abs(F) < l.Forreal X. г satisfies the equation: X F. *2. AE. Argument E is an array of integers that, for real x, satisfy the equation: F. *2.*E.MATLAB Function Reference Iog2MATLAB Function Reference iog2MATLAB Function Reference Iog2MATLAB Function Reference iog2MaioF^naaMaioF^naaBase 2 logarithm and dissect floating-point numbers into exponent and mantissaBase 2 logarithm and dissect floating-point numbers into exponent and mantissalogarithm base ten base two complex [11 complex [2) matrix (natural) naturalof beta function (natural) %f gamma function (na... plottinglogarithm analysis with a... logarithmically spaced ve.. logfile startup option LogFileName Loggingdata to memorylogarithm base ten base two complex [11 complex [2) matrix (natural) naturalof beta function (natural) %f gamma function (na... plottinglogarithm analysis with a... logarithmically spaced ve.. logfile startup option LogFileName Loggingdata to memoryMATLAB - R( MATLAB• R( MATLAB• Ri MATLAB - MATLAB- MATLAB- MATLAB •F MATLAB■R MATLAB■ R MATLAB Ri MATLAB•M MATLAB - Ri MATLAB -1 Data Acqui DataAcqui Data AcquMATLAB - R( MATLAB• R( MATLAB• Ri MATLAB - MATLAB- MATLAB- MATLAB •F MATLAB■R MATLAB■ R MATLAB Ri MATLAB•M MATLAB - Ri MATLAB -1 Data Acqui DataAcqui Data Acqu
'LI PMjCt
'LI PMjCt
Syntax
Syntax
Description
Description
log2 (X) computes the base 2 logarithm of the elements of x.
log2 (X) computes the base 2 logarithm of the elements of x.
Remarks
Remarks
Examples
Examples
№№
№№
MATUe
MATUe
This function corresponds to the ANSI C function f rexp () and the IEEE floating-point standard function iogb(). Anyzeros in xproduce г ■ oand E - 0.
This function corresponds to the ANSI C function f rexp () and the IEEE floating-point standard function iogb(). Anyzeros in xproduce г ■ oand E - 0.
Y ■ log2(X) [F,E] • log2(X)
Y ■ log2(X) [F,E] • log2(X)
[F,E] ■ log2(X) returns arrays rand E. Argument F is an array of real values usually in the range 0.5^ abs(F) < l.Forreal X. г satisfies the equation: X F. *2. AE. Argument E is an array of integers that, for real x, satisfy the equation: F. *2.*E.
[F,E] ■ log2(X) returns arrays rand E. Argument F is an array of real values usually in the range 0.5^ abs(F) < l.Forreal X. г satisfies the equation: X F. *2. AE. Argument E is an array of integers that, for real x, satisfy the equation: F. *2.*E.
MATLAB Function Reference Iog2
MATLAB Function Reference iog2
MATLAB Function Reference Iog2
MATLAB Function Reference iog2
MaioF^naa
MaioF^naa
Base 2 logarithm and dissect floating-point numbers into exponent and mantissa
Base 2 logarithm and dissect floating-point numbers into exponent and mantissa
logarithm base ten base two complex [11 complex [2) matrix (natural) natural
of beta function (natural) %f gamma function (na... plotting
logarithm analysis with a... logarithmically spaced ve.. logfile startup option LogFileName Logging
data to memory
logarithm base ten base two complex [11 complex [2) matrix (natural) natural
of beta function (natural) %f gamma function (na... plotting
logarithm analysis with a... logarithmically spaced ve.. logfile startup option LogFileName Logging
data to memory
MATLAB - R( MATLAB• R( MATLAB• Ri MATLAB - MATLAB- MATLAB- MATLAB •F MATLAB■R MATLAB■ R MATLAB Ri MATLAB•M MATLAB - Ri MATLAB -1 Data Acqui DataAcqui Data Acqu
MATLAB - R( MATLAB• R( MATLAB• Ri MATLAB - MATLAB- MATLAB- MATLAB •F MATLAB■R MATLAB■ R MATLAB Ri MATLAB•M MATLAB - Ri MATLAB -1 Data Acqui DataAcqui Data Acqu
Рис. A.4. Просмотр HTML-документации
В левой части окна имеется раздел Help Navigator с четырьмя вкладками — Contents (содержание), Index (указатель), Search (поиск) и Favorites (избранное).
На рис. А.4 показано; как с помощью указателя найдена справка по той же функции 1од2. Как видите, HTML-документация содержит больше информации, чем встроенная справка.
На втором диске дистрибутива MATLAB имеется также документация в формате PDF. Она не устанавливается па жесткий диск компьютера, а ее текст полностью совпадает с HTML-версией (к сожалению, дублируются и иногда встречающиеся в документации ошибки). Назначение PDF-варианта документации — обеспечить удобство распечатывания.
Интерфейс главного окна
Говоря об интерфейсе главного окна MATLAB, следует сразу отметить главное — MATLAB был и остается системой командной строки, и все элементы интерфейса, которыми он обзавелся в пятой и особенно в шестой версии, являются лишь средством «мышиного» доступа к некоторым командам. Однако по-прежнему абсолютно все необходимые операции можно выполнять из командной строки.
На приведенном ранее рис. А.2 слева от командного окна видны еще два окна, каждое из которых, в свою очередь, имеет две вкладки. На рис. А.2 видны вкладки Launch Pad и Command History, а оставшиеся вкладки Workspace и Current Directory в отцепленном от командного окна виде представлены на рис. А.5.
■ /-<:' < ' ИНН
to £« у*, V* * * в । е,» *•
d*. №»
,'« !.« «•* »* '»*i IK»’ ,■ ,
f';"U
| C:\MtlibR12\uotii
Мем
lite
Betel
. CUM . 1
All ttl«iInie Tysa Ibaat noticed Ibmckisiu»
Ва.......
Ви Виг В* Вю« Вь В го В“ в.
В =2 Вс
В- Be
1x1.
2x2
2x2
1x5
9x9
1x5
1X1
1X1 1x6001
1x8001
1x8001
1x9
9x1
5
32
32
40
648
40
8
8
64008
64008
64008
72
72
double arrayI double array I double array | double array double array double array double array double array double array double array double array double array double array |
i BBulldlrror.nH-eile10:451
Qd3p_book,ipt04:23
В errorcount.»Mlle10:52j
®exp_corr.aH-eile08:29iubplot(2, 1, 1^
И 21304.tie10:43'
eioat_oxanple.a H-eile11:08перввй вариант ,.
: ®group_del.lИ-eila03:49yll»([-0.1 0.2) ‘
^grp_del.nИ-eila10:37размещаем коэф$|^
®lnd_dltt.lИ-file11:53Ш
Olnd_dlttl,»И-file09:29да
®lnd_dltt2.1И-tlle11:53■
[^intern_atate.l:И-file02:44a-square(2*pi"FM|
^Modulation, aИ-file04:02ЛИ^j
У -if?
iwiiiiBiiieiiiiii^
Рис. А.5. Вкладки Workspace (слева) и Current Directory (справа)
Очень удобным новшеством шестой версии MATLAB стала вкладка Command History. Здесь представлен список вводившихся команд, причем этот список охватывает не только текущий сеанс работы, но и предыдущие. Команды из списка можно повторно выполнять (двойным щелчком мыши) либо перетаскивать в командную строку для редактирования. .
Еще один способ доступа к предыдущим использованным командам — их «перелистывание» в командной строке с помощью клавиш Т и I.
Вкладка Workspace демонстрирует содержимое рабочей области памяти MATLAB. Здесь представлены имена переменных (Name), их размер в элементах (Size), число занимаемых байтов памяти (Bytes) и тип данных (Class). Двойной щелчок па имени переменной вызывает визуальный редактор массивов — Array Editor.
Вкладка Launch Pad показывает список установленных компонентов MATLAB и предоставляет удобный доступ к их документации, демонстрационным примерам и специализированным графическим средам.
Вкладка Current Directory позволяет работать с файлами текущего каталога — открывать их для редактирования, переименовывать, удалять, запускать MATLAB- программы.
Что касается панели инструментов главного окна MATLAB (см. рис. А.2), отметим лишь раскрывающийся список Current Directory, в котором перечислены использовавшиеся рабочие каталоги. При работе с несколькими MATLAB-проектами этот список дает возможность удобного переключения между ними. Выбрать новый рабочий каталог позволяет кнопка с многоточием, расположенная справа от списка.
Массивы
В этом разделе мы познакомимся с массивами — основными типами данных MATLAB. Как уже говорилось, название системы MATLAB расшифровывается как «MATrix LABoratory». Для простоты можно считать, что все, с чем оперирует MATLAB, является массивами, состоящими из комплексных чисел, вещественная и мнимая части которых представлены в 8-байтовом формате double. Даже обычное число (скаляр) с точки зрения MATLAB представляет собой матрицу размера 1x1.
MATLAB — интерпретирующая система, поэтому массивы не нужно как-то специально описывать. Размер массива может меняться в ходе работы — если вы присвоите значение элементу массива, указав индекс, превышающий текущий размер, MATLAB увеличит массив, Дополнив его нулями. Уменьшить текущий размер массива можно только принудительно, удалив часть его элементов.
ВНИМАНИЕ
При каждом изменении размера массива MATLAB заново выделяет для него блок памяти. О том, к каким неприятностям это может принести, будет рассказано в разделе «Оптимизация MATLAB-программ».
Посмотрим, как меняется размер массива в процессе работы, набрав в главном окне MATLAB несколько команд.
Для начала создадим числовую переменную:
» х = 5
х =
Как указывалось выше, даже такая переменная х трактуется системой как массив. Убедимся в этом с помощью функции size, возвращающей вектор, содержащий количество строк и столбцов массива:
» s1ze(x)
ans = 11
ЗАМЕЧАНИЕ
Кроме функции size, возвращающей вектор размеров массива по всем измерениям, имеется функция length, позволяющая определить максимальный из размеров массива. Особенно опа удобна при определении длины одномерных векторов.
Итак, с точки зрения MATLAB х — это массив 1x1. Сделаем эту переменную «настоящим» массивом, присвоив значение, скажем, элементу, расположенному в пятом столбце четвертой строки:
» х(4, 5) = 6
х =
50000
00000
00000
00О0-6
ЗАМЕЧАНИЕ
Нумерация элементов массивов в MATLAB начинается с единицы, как это принято при записи матриц в математике, а не с нуля, как, скажем, в языках программирования C/C++. При обращении к элементу массива индексы указываются через занятую в круглых скобках.
Как видите, переменная х стала массивом размером 4x5:
» size(x)
ans = 45
При попытке обратиться к элементу с индексами, выходящими за текущий размер массива, разумеется, выдается сообщение об ошибке:
» х(2. 7)
??? Index exceeds matrix dimensions.
Чтобы уменьшить размер массива, нужно удалить из него некоторое количество строк или столбцов. Для этого нужно просто присвоить соответствующему фрагменту массива «пустое» значение ([]):
» х(2, :) - []
X =
50000
00000
00006
Здесь мы использовали в качестве второго индекса символ двоеточия (:), что означает «все элементы массива вдоль данной размерности». Таким образом, мы
получили доступ не к одному элементу массива, а к целому фрагменту. Возможность работы с фрагментами массивов, имеющаяся в MATLAB, отсутствует в большинстве языков программирования, поэтому ее стоит обсудить подробнее.
Для использования в дальнейших примерах сформируем квадратную матрицу А размером 5x5 — «магический квадрат»:
» А - тад1с(5)
А -■
17
24
1
8
15
23
5
7
14
16
4
6
13
20
22
10
12
19
21
3
11
18
25
2
9
Для начала выделим из этого массива прямоугольный блок, простирающийся от второй до третьей строки и от второго до четвертого столбца:
» А(2:3, 2:4)'
ans - 5714
61320
Таким образом можно выделить из массива произвольный прямоугольный блок. Если выделяемый блок по одному из измерений совпадает с размером исходного массива, вместо задания диапазона индексов можно указать просто двоеточие (мы уже сталкивались с этим при удалении фрагмента массива):
» А(3:4. :) ans -
46132022
101219213
Некоторые отступления от общего синтаксиса возможны и тогда, когда выделяемый фрагмент «упирается» в границу массива справа или снизу. В этом случае для обозначения последнего (максимального) возможного значения индекса по какой-либо размерности можно использовать ключевое слово end. Это значение можно использовать и при вычислении индексов. Например, выделим из массива А блок размером 2x3, расположенный в правом нижнем углу:
» A(end-l:end. end-2:end)
ans =
19213
2529
Выделяемый фрагмент не обязательно должен быть сплошным. Выделим из массива А второй и четвертый элементы первой и последней строк:
» A([l end]. [2 4]) ans =
248
182
Наконец, для выделения из массива абсолютно произвольного набора элементов придется прибегнуть к обращению по линейному (то есть одномерному) индек-
су. Элементы двумерных массивов при этом нумеруются по столбцам. Выделим из массива А элементы, лежащие на кросс-диагонали:
» А([5 9 13 17 21]) ans =
И 12131415
Для автоматического формирования одномерных индексов из двумерных предназначена функция sub2lnd. Применим ее для получения одномерных индексов элементов массива А, лежащих на его кросс-диагонали:
» х = 1:5:% номера столбцов
» у = 5:-1:1; X номера строк
» Ind = sub2ind(size(A), у, х) Ind =
59131721
Полученные значения фрагментов массивов можно не только сохранять в виде новых переменных, с ними можно производить вычисления, так сказать, «на месте». В качестве примера увеличим в два раза значения элементов первого столбца массива А:
» А(:. 1) = А(:. 1)*2
А =
34241815
46571416
6132022
201219213
22182529
Мы рассмотрели лишь основные приемы работы с массивами в MATLAB. Имеется еще множество функций, реализующих преобразования массивов, матричные операции и т. д. Часть этих функций перечислена в приложении Б, а более подробная информация содержится в справочной системе и документации.
Другие типы данных
Помимо одномерных векторов и двумерных матриц MATLAB поддерживает ряд других типов данных. К ним относятся многомерные массивы, строки, структуры, массивы ячеек, а также объекты. Подробное рассмотрение реализации объектно-ориентированных концепций в MATLAB выходит за рамки этого краткого описания, хотя минимальные сведения о работе с объектами приведены в главе 7 при обсуждении функций пакета Filter Design. Остальные перечисленные типы данных рассматриваются ниже.
Многомерные массивы
Многомерные массивы являются естественным обобщением двумерных массивов. Для обращения к их элементам используется необходимое число индексов, однако заполнять многомерный массив числами и выражениями приходится по частям, так как синтаксис MATLAB позволяет записывать поэлементное содер-
жимое только для одно- и двумерных массивов. В качестве примера создадим трехмерный массив размером 2x2x2:
» х(:,:,1) = [1 2:3 4]: % первый «слой»
» х(:,:,2) = [5 6:7 8]; Ж второй «слой»
» х
х(:.: .1) =
2
4
х(:.:,2) =
6
8
Как видите, вывод значений многомерного массива MATLAB тоже осуществляет по «слоям».—
Многие функции MATLAB, ориентированные на работу с векторами, при получении входного параметра в виде двумерного массива обрабатывают его столбцы независимо. При использовании в качестве параметра многомерного массива такая обработка будет вестись вдоль первого измерения, размер массива вдоль которого не равен единице. Например, для созданного в приведенном примере трехмерного массива были бы независимо обработаны двухэлементные векторы х(:, 1.1), х(: ,2,1), х(:, 1,2) и х(: ,2,2). Кроме того, многие такие функции позволяют явно указать, вдоль какой размерности следует выбирать векторы из многомерного массива. Соответствующий параметр в документации обычно обозначается идентификатором DIM. В качестве примера можно привести функции быстрого преобразования Фурье fft и ifft, имеющие следующий вариант синтаксиса: у = fft(x, N, DIM) и х = 1fft(y, N, DIM).
Имеются и функции, специально предназначенные для обработки многомерных данных. Обычно идентификаторы таких функций отличаются от имен их одномерных родственников добавленной в конце буквой «п». Примером опять-таки могут служить функции быстрого преобразования Фурье, у которых имеются многомерные варианты fftn и ifftn.
Строки
Для задания строковых констант используются апострофы:
» sL = 'Digital';
» s2 = 'Signal':
» s3 = 'Processing':
С точки зрения MATLAB строки представляют собой массивы символов. Поэтому, например, операция соединения (конкатенации) строк выполняется не с помощью оператора сложения, а с использованием синтаксиса горизонтального соединения матриц:
» s4 = [si ' ' s2 ' ' S3]
s4 =
Digital Signal Processing
Основные функции работы со строками перечислены в разделе «Strfun» приложения Б.
Структуры
Структуры (structure) позволяют объединить в одной переменной разнородные данные (поля — field) и осуществлять доступ к ним по именам. В языке С соответствующий тип данных тоже называется структурой, а в языке Pascal — записью (record).
В MATLAB для создания структуры не требуется специальных объявлений — достаточно присвоить значение какому-либо полю. Имена полей указываются после имени переменной через точку. Например, для хранения информации, извлеченной из wav-файла, можно использовать следующую.структуру:
» w.name = 'c:\w1ndows\med1a\tada.wav': X имЯ файла
» w.Fs = 22050:&частота дискретизации
» w.bits = 16:Xчислобит на отсчет
» w.channels = 2:Xчислоканалов
» w.samples = 42752;Xчислоотсчетов
» w.data = wavread(w.name): X двумерный массив отсчетов
MATLAB показывает значения переменных-структур следующим образом:
» w
W =
name: "c:\w1ndows\med1 а\ta da.wav' Fs: 22050
bits: 16 channels: 2 samples: 42752
data: [42752x2 double]
Значения полей, имеющих короткие представления, выводятся полностью, а для больших массивов указываются только размеры и тип данных.
Можно создавать и массивы структур, для этого, как обычно, используются индексы. Превратим переменную w в двухэлементный массив структур:
» w(2).name = 'c:\w1ndows\medla\chord.wav' w =
1x2 struct array with fields: name Fs bits channels samples data
Для массивов структур MATLAB показывает только размеры массива и список полей.
Массивы ячеек
Массивы ячеек (cell array), так же как и структуры, позволяют объединить в одной переменной разнородные данные. Однако обращение к этим данным про-
изводится не по именам полей, а по числовым индексам. Чтобы отличить массив ячеек от обычного массива, его индексы записываются не в круглых скобках, а в фигурных. В качестве примера представим ту же информацию из wav- файла, которую мы использовали при рассмотрении структур, в виде массива ячеек:
» w(l} = ’c:\windows\media\tada.wav': % имЯ файла
» w{2}=22050;%частота дискретизации
» w{3}=16:%числобит на отсчет
» w{4}=2;%числоканалов
» w{5}=42752;%числоотсчетов
» w{6} = wavread(w{l}): % двумерный массив отсчетов
Приведенный пример не имеет особого практического смысла — в данном случае значительно удобнее был бы доступ по именам полей. Однако массивы ячеек удобны в тех случаях, когда нужно создать массив из векторов разной длины или матриц разного размера. Примером может служить хранение в массиве ячеек информации о фильтре, составленном из последовательно включенных секций разного порядка.
MATLAB показывает содержимое массивов ячеек следующим образом:
» w
W =
Columns 1 through 5
[1x25 char] [22050][16][2][42752]
Columns 6 through 6
[42752x2 double]
Как и в случае структур, значения элементов, имеющих короткие представления, выводятся полностью, а для больших массивов указываются только размеры и тип данных. В данном случае «слишком длинной» для вывода оказалась и текстовая строка.
Программирование
Интерактивная работа с MATLAB в режиме командной строки очень удобна при освоении системы и при необходимости поэкспериментировать, чтобы испытать разные подходы к анализу и обработке имеющихся данных. Однако по мере приобретения опыта, а также при решении конкретной задачи вы заметите, что очень часто набираете одни и те же последовательности команд. Это означает, что настало время превратить такие последовательности в программы (сценарии) и функции MATLAB.
Эти программы и функции представляют собой текстовые (ASCII) файлы с расширением .т, в которых записаны команды и операторы MATLAB. В принципе такие файлы могут создаваться и модифицироваться с помощью любого ASCII- редактора, но, начиная с версии 5, в MATLAB появился свой редактор, обеспечивающий, в частности, цветовое выделение синтаксических элементов языка, а также интегрированный с отладчиком. О работе с редактором речь пойдет
далее, а сначала следует рассмотреть различия между программами и функциями MATLAB.
Программы и функции
Как уже говорилось, текстовые файлы, содержащие операторы MATLAB, могут быть двух типов: программы (script; иногда используется дословный перевод — «сценарий» ) и функции (function). Между ними имеются следующие различия:
функции имеют заголовок function, а программы — заголовок script или вовсе не имеют заголовка;
функции могут принимать входные параметры и возвращать результаты вычислений, а программы — нет;•
программы используют рабочую область памяти среды MATLAB, а каждая функция при вызове создает свою собственную рабочую область памяти и общается с внешним миром только через параметры и глобальные переменные (см. далее);
функции могут вызываться из программ и других функций, а программу можно запустить только вручную, набрав ее имя в командной строке MATLAB.
Итак, как уже было сказано, программы и функции MATLAB представляют собой текстовые файлы с записью команд, операторов и вызовов функций MATLAB. В этих файлах могут содержаться любые команды MATLAB, в том числе те, которые обычно не применяются в командной строке (операторы циклов, условные операторы и т. п.; использование этих средств в командной строке возможно, но приводит к необходимости набирать много текста, так что удобнее оказывается сохранять такие фрагменты в виде файлов программ).
В одной строке можно записывать несколько операторов. Для их разделения следует использовать точку с запятой (если необходимо подавить вывод результатов вычислений в командное окно) или запятую (если этот вывод нужно разрешить).
Длинные строки для улучшения читаемости программы можно делить на части. Признаком того, что запись оператора продолжается на следующей строке, являются три точки в конце строки. Удобно использовать эту возможность, например, для более-наглядной записи поэлементно заданной матрицы:
М = [а b с d: ...
b b с d: ...
с с с d; ...
d d d d];
Хорошая программа невозможна без комментариев. Для обозначения комментариев в MATLAB используется знак % — комментарием считается часть строки справа от него. Средства создания многострочных комментариев в MATLAB не предусмотрены. При необходимости закомментировать большой фрагмент текста или, наоборот, снять с него знаки комментария можно воспользоваться соответственно командами Comment и Uncomment меню Text редактора/отладчика (см. далее).
Редактор/отладчик М-файлов
Для запуска редактора/отладчика М-файлов необходимо создать новый М-файл или открыть существующий. Для этого используются команды New ► M-file и Open меню File главного окна MATLAB или соответствующие кнопки панели инструментов. Окно редактора/отладчика показано на рис. А.6.
Рис. А.6. Редактор/отладчик М-файлов
Функции редактирования и работы с файлами, обеспечиваемые редактором/от- ладчиком М-файлов, являются типичными для текстовых редакторов, поэтому мы не будем обсуждать их. Из специфических возможностей следует отметить цветовое выделение синтаксических элементов языка программирования MATLAB, а также команды меню Text, позволяющие закомментировать выделенный фрагмент текста (Comment), убрать знаки комментария (Uncomment), проверить соответствие правых и левых скобок (Balance Delimiters), а также автоматически отформатировать левый край выделенного фрагмента текста (Smart Indent).
Правая часть панели инструментов содержит кнопки управления отладчиком. Эти функции редактора/отладчика будут рассмотрены далее, в разделе «Работа с отладчиком».
Создание функций
Текст М-файла функции должен начинаться с заголовка function, имеющего следующий вид:
function [yl. у2. ...] = fname(xl, х2. ...)
Здесь fname — имя функции, xl, х2 и т. д. — входные параметры, yl, у2 и т. д. — выходные параметры. Входные и/или выходные параметры могут отсутствовать.
На самом деле имя функции определяется не строкой fname, а именем, под которым сохранен М-файл. По этой же причине имена функций, в отличие от имен переменных, не чувствительны к регистру символов.
В качестве примера создадим функцию closest, которая будет принимать два входных параметра, вектор и число, и выбирать из вектора значение, максималь-
но близкое ко второму (числовому) параметру. Для этого, открыв окно редакто- ра/отладчика командой меню File ► New ► M-file, введите следующий текст:
function у = closest(A, х)
% Выбор из массива А элемента, ближайшего к х
[tmp, Ind] = m1n(abs(A - х)И
у = A(1nd):
Введя текст, сохраните файл под именем closest.ш.
Теперь кратко прокомментируем этот программный код. Первая строка — это заголовок функции, составленный согласно приведенному ранее шаблону. Вторая строка, являющаяся комментарием, — это встроенная справка об использовании нашей функции. По команде help fname в командное окно выводятся строки комментария, расположенные в файле fname.m непосредственно после заголовка функции. Проверим это:
» help closest
Выбор из массива А элемента, ближайшего к х
Таким образом, создавать встроенную справку для собственных функции совсем несложно.
Далее с помощью функции min определяется номер интересующего нас элемента, и в последней строке выходному параметру у присваивается значение этого элемента.
Переменные ind и tmp, создаваемые внутри функции, являются локальными. Они создаются внутри функции и уничтожаются при завершении ее работы. Если переменные с такими же именами существовали в рабочей области памяти MATLAB до вызова функции, их значения не изменятся.
Функция общается с внешним миром только через свои параметры и глобальные переменные. Чтобы объявить переменную х глобальной, необходимо использовать в головной программе и во всех функциях, которые должны иметь доступ к данной переменной, следующую директиву:
global х
Возврат из функции производится по достижении конца ее файла. Для досрочного возврата можно использовать оператор return. В любом случае результатами работы функции являются значения, которые выходные параметры имели на. момент возврата.
Путь поиска
Для того чтобы программа или функция была доступна из среды MATLAB, система должна быть способна найти соответствующий М-файл. Поиск файлов осуществляется следующим образом: сначала просматривается текущий рабочий каталог (его имя показано в панели инструментов главного окна, см. рис. А.2), а затем каталоги, входящие в путь поиска (MATLAB search path ). Когда пользователь начинает создавать собственные М-файлы, встает вопрос о том, где их целесообразно размещать. На этот счет можно дать следующую рекомендацию: файлы, относящиеся к разным проектам, следует размещать в отдельных катало-
гах, не добавляя эти каталоги в путь поиска. Выпадающий список Current Directory панели инструментов главного окна обеспечивает удобство перемещения между каталогами разных проектов. Если же в процессе работы у вас начинает формироваться собственная библиотека функций, используемых сразу в нескольких проектах, имеет смысл собрать их в один каталог и добавить его имя в путь поиска (для вызова редактора пути поиска используется команда Set Path меню File главного окна MATLAB). Тогда эти функции будут доступны в любой момент, вне зависимости от того, какой каталог является текущим.
Логические условия
В качестве логических условий в условных операторах и циклах while (см. далее) могут использоваться числовые скалярные значения. При этом нулевое значение трактуется как «ложь» (false), а любое ненулевое — как «истина» (true).
Кроме того, для формирования условий часто используются операторы сравнения “ (равно), — (не равно), < (меньше), > (больше), «■ (меньше или равно), >- (больше или равно). Следует иметь в виду, что для массивов они производят поэлементное сравнение, возвращая массив такого же размера, как сравниваемые аргументы. Результирующий массив содержит единицы там, где сравнение элементов дало выполнение условия, и нули там, где условие сравнения выполнено не было.
Для формирования логических условий полезны также следующие функции:
all(x) — возвращает 1, если все элементы х отличны от нуля;
апу(х) — возвращает 1, если хотя бы один элемент х отличен от пуля;
isequaKx, у) — возвращает 1, если значения х и у совпадают. В отличие от конструкции а!1(х"у), использование данной функции не приведет к ошибке, если размеры х и у не совпадают;
isempty(x) — возвращает 1, если х является пустой матрицей (то есть имеет размер 0x0).
Имеется еще довольно много функций проверки разнообразных условий, имена которых имеют вид 1 s.... За более подробной информацией обратитесь к справочной системе.
Условный оператор
Условный оператор в MATLAB реализуется с помощью ключевых слов if, else и end:
if cond
% ветвь, выполняемая, если cond истинно
else
% ветвь, выполняемая, если cond ложно
end
Здесь cond — проверяемое значение (см. ранее раздел «Логические условия»).
Для оператора if, вложенного в ветвь else другого (внешнего) оператора if, есть сокращенная форма записи с использованием ключевого слова el seif:
if condl
% ветвь, выполняемая, если condl истинно
el seif cond2
% ветвь, выполняемая, если condl ложно, a cond2 истинно
else
% ветвь, выполняемая, если condl и cond2 ложны
end
Аналогичным образом можно использовать el seif несколько раз,
Оператор выбора
Если в условном операторе выбирается одна из двух возможных альтернатив, то оператор выбора реализует разветвление программы на несколько путей. Выбор конкретного пути зависит от значения заданной переменной. Запись оператора выбора в MATLAB производится с помощью ключевых слов switch, case, otherwise и end:
switch x
case xl
% ветвь, выполняемая, если x равно xl
case x2
% ветвь, выполняемая, если x равно x2
otherwise.
% ветвь, выполняемая, если все условия case не соблюдаются
end
При выполнения оператора switch значение х поочередно сравнивается с xl, х2 и т. д. При обнаружении первого совпадения выполняются операторы соответствующей ветви, после чего производится выход из оператора выбора. Таким образом, в отличие от аналогичного оператора языка С, «проваливания» на следующую ветвь не происходит и операторы break в конце каждой ветви в MATLAB не нужны.
Циклы
Для реализации циклов в MATLAB имеется два оператора — for и while. В операторе for переменная-счетчик цикла поочередно принимает значения элементов некоторого вектора:
for к = х
% тело цикла
end
Операторы, входящие в тело цикла, будут выполняться при значении переменной к, равном х(1), затем х(2) и т. д. до x(end). После завершения цикла значение к остается равным x(end).
Разумеется, чаще всего в цикле for используется последовательный перебор целочисленных значений счетчика цикла:
for k - 1:N
Однако при необходимости можно использовать дробное значение шага
for к - -1:0.01:1
или перебор произвольных значений:
for к - [1 10 pi 9 1п(3)]
ВНИМАНИЕ
Изучая программирование, люди, как правило, приобретают привычку использовать в качестве счетчиков циклов переменные с именами i и j. В MATLAB это чревато неприятностями, поскольку по умолчанию эти переменные имеют значение мнимой единицы. Использование переменной i или] одновременно в качестве счетчика цикла и в качестве мнимой единицы — это те «грабли», на которые рано пли поздно наступают очень многие пользователи MATLAB. Чтобы избежать неприятностей, необходимо выработать новые привычки. Здесь есть несколько вариантов. Во-первых, можно просто избегать использования имен i и j в качестве счетчиков. Во-вторых, можно в качестве мнимой единицы использовать пе переменную i (j), а константу li (lj). В третьих, можно приучить себя использовать двухбуквеппые имена счетчиков: ii, jj и т. д.
Второй тип циклов реализуется с помощью оператора while. Тело цикла выполняется, пока условие cond остается истинным (то есть значение cond отлично от нуля): while cond
% тело цикла
end
Если cond изначально имеет нулевое значение, тело цикла не будет выполнено ни разу.
Чтобы реализовать досрочное завершение цикла, используется оператор break. Разумеется, он должен применяться в сочетании с условным оператором, например так:
for к - 1:N
% первая половина тела цикла
% проверка дополнительного условия завершения if cond
break
end
% вторая половина тела цикла
end
Оператор break можно использовать для реализации циклов с проверкой условия завершения не в начале (как делает оператор whi 1 е), а в произвольном месте цикла. Для этого с помощью оператора while создается «вечный» цикл, а его завершение производится оператором break:
while 1 % «вечный» цикл
Ж первая половина тела цикла
% проверка условия завершения if cond break
end
% вторая половина тела цикла
end
Кроме оператора break для управления выполнением программы внутри цикла имеется оператор continue. Размещенный внутри цикла for или while, этот оператор передает управление на проверку условия завершения цикла, пропуская при этом оставшийся фрагмент тела цикла. Это позволяет сделать код более наглядным, избежав использования длинного оператора if.
Функции с переменным числом параметров
При вызове функции можно использовать меньшее количество входных и выходных параметров, чем указано в заголовке функции. При этом рассчитанные функцией «лишние» выходные параметры просто игнорируются. Что касается неуказанных входных параметров, то функция выдаст сообщение об ошибке, когда попытается обратиться к одному из них. Однако внутри функции доступны сведения об использованном при вызове числе входных и выходных параметров, что позволяет в зависимости от этого управлять алгоритмом работы функции. Число переданных входных параметров можно узнать с помощью функции nargin, а число ожидаемых выходных параметров — с помощью функции nargout. В простейшем случае функция nargin может использоваться для задания входным параметрам значений по умолчанию:
function у - nargin_demo(x, N. mu. fid)
if nargin < 4
fid = 1:
end
if nargin < 3
mu = 0.2:
end
if nargin < 2
N = 256:
end
При вызове такой функции можно опускать один, два или три последних входных параметра, аналогично тому, как это позволяют делать язык C++ и последние версии языка Object Pascal:
у = nargin_demo(x, N. mu, fid) % полный вариант
у - narg1n_demo(x, N, mu)
у - nargin_demo(x, N)
у - nargin_demo(x)
Вместо опущенных параметров будут использованы заданные в тексте функции значения по умолчанию.
Аналогичным образом можно использовать и функцию nargout — например, чтобы сэкономить время, не вычисляя незатребованные выходные величины. Можно использовать функции nargin и nargout и для более серьезного управления логикой работы — скажем, менять используемый алгоритм в зависимости от числа входных и выходных параметров.
Ввод и вывод данных
Как мы уже знаем, простейшим способом вывода значения переменной в командное окно MATLAB является указание ее имени без точки с запятой. Аналогичное действие производит функция d1 sp(name), отличие заключается только в том, что на экран не будет выводиться идентификатор переменной name.
Форматированный вывод
Чтобы выводить в командное окно информацию в более аккуратном виде, следует воспользоваться функциями форматированного вывода. Это функции sprintf (формирование строковой переменной с форматированным текстом) и fprintf (вывод форматированного текста в поток вывода). Синтаксис обеих функций очень схож и практически не отличается от синтаксиса соответствующих функций языка С. Поэтому кратко рассмотрим лишь функцию fprintf:
fprintf (fid. 'format', xl, x2,...)
Здесь fid — числовой идентификатор потока вывода. При нулевом значении вывод не производится, значение 1 соответствует стандартному потоку вывода (вывод в командное окно), значение 2 — стандартному потоку вывода сообщений об ошибках (по умолчанию это тоже вывод в командное окно). Для записи информации в файл в качестве fid необходимо использовать значение, полученное от функции fopen при открытии файла (работа с файловыми потоками в данном приложении не рассматривается). Данный параметр можно опустить, тогда по умолчанию вывод будет производиться в командное окно.
Строковый параметр ' format' задает формат вывода. Эта строка должна содержать фиксированный выводимый текст и спецификаторы формата, на место которых будут подставлены значения переменных xl, х2 и т. д. Спецификаторы формата начинаются со знака X, за которым следуют цифры, задающие число символов для вывода, и буква, определяющая тип формата. Полная информация о возможных спецификаторах формата имеется в HTML-справке, здесь же приведем лйшь несколько конкретных примеров:
Id — вывод целого числа, количество позиций выбирается автоматически;
l.3f — вывод числа в формате с фиксированной запятой, после запятой выводится три десятичных знака, количество позиций для целой части выбирается автоматически;
1-15.Зе — вывод числа в экспоненциальном формате, мантисса имеет три десятичных знака после запятой, поле вывода занимает 15 символов, текст выравнивается по левому краю поля.
Для вывода специальных символов можно использовать комбинации \п (перевод строки), \г (возврат каретки), \t (табуляция), \Ь (забой), \\ (обратная косая черта), II (символ процента), '' (одиночный апостроф).
Теперь используем перечисленные спецификаторы и некоторые из символов:
» п = 15:
» err = 128.3567;
» value = 1234567890;
» fpr1ntf(l, 'Шаг Id. ошибка l.3f \nx''= 1-15.Зе м'. n, err, value)
Шаг 15. ошибка 128.357
x' = 1.235e+009 м
Сохранение и загрузка значений переменных
MATLAB позволяет сохранять переменные в виде МАТ-файлов (они имеют расширение .mat), которые затем могут быть снова загружены. Для сохранения всего содержимого рабочей области памяти используется команда
» save filename
Все существующие в данный момент переменные будут записаны в расположенный в текущем каталоге файл filename.mat.
Чтобы сохранить значения только некоторых переменных, следует указать их имена после имени файла:
» save filename х у asd ...
В файл filename.mat будут записаны только значения переменных х, у, asd и т. д. Загрузка сохраненных переменных производится командой 1 oad:
» load filename
Файл filename.mat должен быть доступен, то есть он должен находиться в текущем каталоге или в одном из каталогов, внесенных в список для поиска файлов (см. ранее раздел «Путь поиска»).
Работа с отладчиком
Отладочные средства собраны в правой части панели инструментов окна редак- тора/отладчика (рис. А.7), а также в меню Debug и Breakpoints.
Кнопки панели инструментов имеют следующее назначение:
Set/clear breakpoint — установка или сброс точки прерывания в текущей строке;
Clear all breakpoints — сброс всех точек прерывания;
Step — выполнение одной строки программы, при этом вызов функции считается одним оператором и заход внутрь вызываемой функции не производится;
Step in — выполнение одной строки программы с заходом внутрь вызываемых функций;
Step out — выполнение оставшейся части текущей функции, остановка программы производится после возврата из функции;
Continue — продолжение выполнения программы;
Exit Debug Mode — завершение отладки;
Stack — этот раскрывающийся список позволяет переключаться между рабочими пространствами MATLAB и вызванных функций.
Exit Debug Mode ContinueExit Debug Mode ContinueStackStackClear all breakpoints Set/clear breakpoint
Exit Debug Mode Continue
Exit Debug Mode Continue
Stack
Stack
ой о^аоа:^.ой о^аоа:^.pno^ulstioppno^ulstiopStepStepStep outStep out
ой о^аоа:^.
ой о^аоа:^.
pno^ulstiop
pno^ulstiop
Step
Step
Step out
Step out
Step in
Рис. A.7. Отладочные средства панели инструментов окна редактора/отладчика
При остановке программы в отладочном режиме (в установленной точке прерывания или при пошаговом выполнении) в главном окне появляется отладочная подсказка К». При этом становятся доступными рабочие области памяти всех вызванных в данный момент функций. По умолчанию текущей является рабочая область памяти последней вызванной функции. Переключаться между рабочими областями памяти всего стека функций можно с помощью раскрывающегося списка Stack панели отладочных инструментов (см. рис. А.7). Такой же список имеется в панели инструментов вкладки Workspace (см. рис. А.5). Область памяти среды MATLAB фигурирует в списке под именем Base.
Кроме того, узнать значение переменной можно, задержав указатель мыши на ее идентификаторе в окне редактора/отладчика. Появится всплывающая подсказка, отображающая значение переменной. Этот способ имеет смысл применять только для скалярных переменных и массивов небольшого размера, поскольку для больших массивов отображается только часть содержимого либо только размер и тип данных.
Оптимизация MATLAB-программ
Под оптимизацией в данном случае подразумевается повышение скорости работы функций и программ. В MATLAB применимы все или почти все общие приемы оптимизации программ (типа вынесения из цикла наружу всех вычислений, не зависящих от счетчика цикла). Однако у MATLAB имеется и некоторая специфика, которую следует учитывать при оптимизации кода. Об этой специфике и пойдет речь в данном разделе.
При необходимости повысить быстродействие MATLAB-программы следует учитывать два аспекта:
MATLAB — интерпретирующая, а не компилирующая система;
функции векторно-матричных операций встроены в ядро системы и выполняются предельно быстро.
Самая общая рекомендация, которая дается практически в любой книге, посвященной MATLAB, — стараться избегать использования циклов, заменяя их векторно-матричными операциями и поэлементными операциями над массивами. Приведем простейший пример, вычислив 10 000 значений функции sin двумя способами — с помощью цикла и путем выполнения поэлементной операции над вектором. Хронометраж будем вести с помощью функций tic и toe. Первая из них фиксирует начало отсчета времени, а вторая выводит на экран время (в секундах), прошедшее после tic. Вот соответствующий программный код:
» Я вычисления в цикле
» % длЯ чистоты эксперимента уничтожаем все переменные
» clear all
» tic
» for k = 1:10000, x(k) = sin(k): end
» toe
elapsed_time =
3.7900
» % векторная операция
» % длЯ чистоты эксперимента уничтожаем все переменные
» clear all
» tic
» X = sin(l:10000):
» toe
elapsed_time = 0.0500
Как видите, отказ от использования цикла ускорил вычисления примерно в 75 раз!
ЗАМЕЧАНИЕ
Время выполнения фрагмента программы может зависеть от того, существуют используемые переменные или их приходится создавать (см. далее обсуждение вопросов, связанных с выделением памяти). Поэтому для повышения чистоты эксперимента в приведенном листинге перед началом расчетов все имеющиеся переменные уничтожаются командой clear all. Эту команду можно также использовать для выборочного уничтожения переменных — в этом случае вместо слова all необходимо указать имена стираемых переменных, разделяя их пробелами: clear х у z
Однако не следует воспринимать данный совет как абсолютную догму. Не все алгоритмы хорошо поддаются векторизации, и иногда попытка искусственно свести алгоритм к последовательности матричных операций может потребовать создания промежуточных матриц большого размера. Необходимость выделения
памяти для хранения этих матриц может свести на нет преимущества отказа от циклов.
Итак, без циклов все-таки обойтись не удается, но при необходимости их использования следует обратить внимание еще на один аспект — выделение памяти для хранения переменных. Язык программирования MATLAB, являясь интерпретируемым языком сверхвысокого уровня, скрывает от пользователя операции, связанные с выделением и освобождением памяти. В результате мы чаще всего даже не задумываемся над тем, что в действительности происходит при выполнении простейшего (с точки зрения пользователя) оператора присваивания. Рассмотрим небольшой пример:
for k = 1:N
% какие-нибудь вычисления
х(к) = ...
end
Если переменная х не существовала до начала цикла, то при каждом проходе цикла происходит увеличение числа элементов в ней. В результате при каждом выполнении оператора присваивания система должна проделать следующее:
выделить память под переменную х нового размера;
скопировать туда старое содержимое переменной;
освободить память, отведенную ранее под хранение старого значения х;
□ наконец, выполнить собственно оператор присваивания для х(к).
Операции выделения и освобождения памяти выполняются довольно медленно, поэтому необходимость проделывать их при каждом проходе цикла может сильно замедлить работу программы, особенно если наращиваемые массивы имеют большой размер и если в цикле их используется несколько.
В качестве примера будем в цикле заполнять два вектора случайными гауссовыми числами, выводя на экран время, потребовавшееся для добавления каждых 1000 элементов:
» clear all % длЯ чистоты эксперимента
» tic
» for k = 1:1е4
»x(k) = randn:
»y(k) = randn:
»1f rem(k, le3)==0
» t-toc:
»fprintfd, dd: L3f seconds\n', k, t)
»tic
» end
» end
1000: 0.060 seconds
2000: 0.270 seconds
3000: 0.330 seconds
4000: 0.500 seconds
5000: 0.770 seconds
6000: 1.040 seconds
7000: 1.210 seconds
8000: 1.430 seconds
9000: 1.590 seconds
10000: 1.810 seconds
Как видите, по мере роста размера массивов скорость работы сильно падает — для добавления последней тысячи элементов понадобилось в 30 раз больше времени, чем для первой!
Решением этой проблемы является предварительное выделение памяти под заполняемые в цикле массивы. Для этого необходимо создать переменную нужного размера, скажем, с помощью функции zeros, формирующий массив, заполненный нулями. Модифицируем предыдущий пример:
» clear allX для чистоты эксперимента
» х - zerosd, 1е4); % создаем массивы
» у - zerosd. 1е4): X заранее
» tic
» for k - 1:1е4
»x(k) - randn:
»y(k) - randn;
»if rem(k, le3)—0
» t-toc;
»fprintfd, 'to: X.3f seconds\n', k, t)
»tic
» end
» end
1000: 0.060 seconds
2000: 0.000 seconds
3000: 0.000 seconds
4000: 0.050 seconds
5000: 0.000 seconds
6000: 0.000 seconds
7000: 0.060 seconds
8000: 0.000 seconds
9000: 0.000 seconds
10000: 0.050 seconds
Результат налицо: работа цикла проходит равномерно, не замедляясь.
ЗАМЕЧАНИЕ
Функция toe измеряет время дискретными порциями, размер которых лежит между 50 и 60 мс. Этим и объясняются нулевые значения, несколько раз полученные при выполнении последнего примера.
При использовании оператора while число проходов цикла заранее не изйестно. Поэтому не известен и итоговый размер наращиваемых в таком цикле массивов. В этой ситуации можно применить компромиссный подход, увеличивая массивы
внутри цикла, но не при каждом проходе, а изредка, зато большими кусками. Получается код наподобие следующего:
size_1ncr = 10000:% дискретность приращения
х = zerosd, sizejncr): % создание массивов
у = zerosd, sizejncr):
k = 1:% счетчик элементов
while cond
К проверяем, не исчерпана ли текущая длина массивов if k>length(x)
% выделяем дополнительную память
х = [х zerosd, sizejncr)]:
у = [у zerosd, sizejncr)]: end
% какие-нибудь вычисления
x(k) =
y(k) = ...
k = k+1;% увеличиваем значение счетчика
end
% после завершения цикла удаляем нулевые «хвосты»
x(k:end) = []:
y(k:end) = [];
Данный подход позволяет существенно ускорить вычисления, если число проходов цикла заранее не известно.
До сих пор мы измеряли время выполнения фрагментов программы с помощью функций tic и toe. Они весьма полезны, но в MATLAB имеется и более серьезный хронометрирующий инструмент — утилита профилирования, вызываемая командой
profile on
В качестве примера создадим несколько вариантов функции ind_diff, вычисляющей квадратную матрицу, значения элементов которой равны разности их индексов: Ау = г - j. Единственным входным параметром является размер N создаваемой матрицы.
Первая версия кода будет наиболее прямолинейной — с использованием двух вложенных циклов:
function у = ind_diff(N)
for k = 1:N
for 1 - 1:N
y(k.l) = k - 1;
end
end
Сохраняем текст функции в виде файла ind_diff.m, включаем профилирование и вызываем функцию:
» profile on
» у - ind_diffd00):
Для вывода результатов профилирования используется следующая команда:
» profile report
MATLAB сгенерирует отчет в HTML-формате и покажет его в установленном в системе web-браузере (рис. А.8).
■ ^ MATLAB Profiler Report - Netscape
MATLAB Profile Report: Summary
Report generated 19-Jan-2002 23:08:07■
Total recorded time 7.58 s Number of M-functions 2 Clock precision:0 050 s
Function List
|Hame prime [Calls [Time/caU | Selene ^Location
}^!Я1~йА&Г ^ 58 UOO0% । 1 |738|7381100 0% |£Лгаа£12Ы^
|в.*в£*У£ |o00 I 0 0% ! 1 |0 00 JO001 0 0% ^CЦЯЛТЬ^ВРЦуидг^^^
Рис. А.8. Итоговый отчет о профилировании
В итоговом отчете показаны общее время профилирования, число вызванных функций и время, затраченное на их выполнение. В данном случае кроме самой функции profile вызывалась только наша функция ind_diff. Чтобы получить подробную информацию о результатах профилирования этой функции, необходимо щелкнуть на ее имени в таблице. После перехода по гиперссылке откроется страница детализированной информации (рис. А.9).
Наибольший интерес здесь представляют выведенные под таблицей отдельные строки листинга функции, рядом с которыми показано абсолютное (в секундах) и относительное (в процентах) время их выполнения.
Проанализируем полученные результаты. Некоторое время потрачено на обслуживание циклов (строки 5 и 6), но основные затраты (71 %) пришлись на оператор присваивания (строка 4).
Воспользуемся данным ранее советом и заранее выделим память под создаваемый массив:
function у = ind_diff(N) у = zeros(N. N):
for к = 1:N
for 1 = 1:N
y(k,l) = к- - 1;
end
end
ГГ ГГГ Г
ГГ Г
ГГ Г
’’i^ia’afM a:ta.<:^5.41 714 4: y(k, 1) - к - 1;Z. 11 38* 5:end0.061* 6:end’’i^ia’afM a:ta.<:^5.41 714 4: y(k, 1) - к - 1;Z. 11 38* 5:end0.061* 6:endBcofiie C :\KATLJIBR13\ toolbox\ii>eit lato\ <,Teneial\ profile .in-Bcofiie C :\KATLJIBR13\ toolbox\ii>eit lato\ <,Teneial\ profile .in-
’’i^ia’afM a:ta.<:^
5.41 714 4: y(k, 1) - к - 1;
Z. 11 38* 5:end
0.061* 6:end
’’i^ia’afM a:ta.<:^
5.41 714 4: y(k, 1) - к - 1;
Z. 11 38* 5:end
0.061* 6:end
Bcofiie C :\KATLJIBR13\ toolbox\ii>eit lato\ <,Teneial\ profile .in-
Bcofiie C :\KATLJIBR13\ toolbox\ii>eit lato\ <,Teneial\ profile .in-
MATLAB Profile Report; Function Details
ixid1 di«- a'iMfiaaw^^ift.in
Tim^ 7.58 s (lOO.O«/o)
^elftoefys:^^
' [FuiicSni j7 j%M/ '.j'^^' jTLMe/ciiU:
аа|Йи®15ёсЗм^
a |cSK2S»rff 6f .aaaa a a
100% of the total time in this function was spent on the following lines:
Рис. A.9. Отчет о результатах профилирования — детальная информацияо вызываемых функциях
Сохраняем новую версию и снова включаем профилирование (команда profile report выключает режим профилирования):
» profile on
» у = 1nd_di ff(300):
» profile report
Сгенерированный детальный отчет показан на рис. А. 10. Как видите, время, затрачиваемое на выполнение присваивания внутри цикла, существенно уменьшилось. Завершаем работу с утилитой профилирования:
» profile off
№ МАЦ АВ Piofilei Hrpint№ МАЦ АВ Piofilei HrpintE* £» ^ew So1 J '‘‘VE* £» ^ew So1 J '‘‘VBtwHwM locotoi e WCIAVIND0WSnEMPhp542e6ew iSuttiitiat^ifWBtwHwM locotoi e WCIAVIND0WSnEMPhp542e6ew iSuttiitiat^ifWMATLAB Profile Report: Function DetailsMATLAB Profile Report: Function Details;;liMviitol£::^::Ci:V&fcfr^^^;;liMviitol£::^::Ci:V&fcfr^^^Time: 6.65 s (100. С%) :Self time: 6.65 s (100 0*?^)Time: 6.65 s (100. С%) :Self time: 6.65 s (100 0*?^)iFwicthn: : {Thro [CaUs iliine/calliFwicthn: : {Thro [CaUs iliine/call^ind^diff p65^ind^diff p656.656.65
№ МАЦ АВ Piofilei Hrpint
№ МАЦ АВ Piofilei Hrpint
E* £» ^ew So
1 J '‘‘V
E* £» ^ew So
1 J '‘‘V
BtwHwM locotoi e WCIAVIND0WSnEMPhp542e6ew iSuttiitiat^ifW
BtwHwM locotoi e WCIAVIND0WSnEMPhp542e6ew iSuttiitiat^ifW
MATLAB Profile Report: Function Details
MATLAB Profile Report: Function Details
;;liMviitol£::^::Ci:V&fcfr^^^
;;liMviitol£::^::Ci:V&fcfr^^^
Time: 6.65 s (100. С%) :
Self time: 6.65 s (100 0*?^)
Time: 6.65 s (100. С%) :
Self time: 6.65 s (100 0*?^)
iFwicthn: : {Thro [CaUs iliine/call
iFwicthn: : {Thro [CaUs iliine/call
^ind^diff p65
^ind^diff p65
6.65
6.65
iPuvnt Auctions:
i Child ftutctions: ^ne^:v^/^
100% if the total time in this function was Spent on the followaig lines:
О.О63.872.72О.О63.872.721%58%1%58%3.4:<5^6:7:3.4:<5^6:7:£o« k - 1:My(k,l) - k - 1;£o« k - 1:My(k,l) - k - 1;
О.О6
3.87
2.72
О.О6
3.87
2.72
1%
58%
1%
58%
3.
4:
<5^
6:
7:
3.
4:
<5^
6:
7:
£o« k - 1:M
y(k,l) - k - 1;
£o« k - 1:M
y(k,l) - k - 1;
SocuowKDos»SocuowKDos»ЛШЬШй—2LlIim^^^l^^h2X2J^Ll^l^i2l4K^^
SocuowKDos»
SocuowKDos»
Рис. A. 10. Результаты профилирования оптимизированного кода
ЗАМЕЧАНИЕ
Приведенные варианты кода были рассмотрены лишь с целью продемонстрировать профилирование. Время выполнения данной функции можно еще сильнее уменьшить, отказавшись от циклов вовсе. Если вам действительно нужно создать такую матрицу, следует заметить, что вдоль ее диагоналей, параллельных главной, стоят одинаковые числа, и воспользоваться функцией toepl itz:
у = toepl1tz(0:N-l. -(O:N-1));
Это, пожалуй, наиболее быстрый способ.
MATLAB и русский язык
Поскольку разработчики системы MATLAB не предусматривали работы с кириллицей, при попытке использования русского языка в MATLAB возникает ряд проблем. Конкретный набор возможных неприятностей зависит от конкретных версий MATLAB и операционной системы, поэтому перечислим здесь лишь несколько вещей, характерных для шестой версии MATLAB. Во-первых, в комментариях и текстовых константах нельзя использовать строчную букву «я» (это вообще довольно типичная беда программ, написанных на языке С). Именно по этой причине в комментариях к листингам в данной книге везде используется прописная буква «Я». Во-вторых, при наборе в командной строке строчной русской буквы «с» происходит переход на следующую строку, причем уже набранная строка не выполняется и не запоминается. В-третьих, при попытке использовать русский текст в надписях на графиках иногда возникают проблемы с кодировкой выбираемого MATLAB шрифта. Впрочем, последнюю проблему, как правило, удаётся решить, изменив настройки, используемые для вывода надписей по умолчанию.
Графика
Говоря о графических средствах MATLAB, прежде всего нужно отметить следующее. MATLAB — матричная программа, и ее графические команды могут лишь разнообразными способами визуализировать векторы и матрицы. На практике это означает, что точки, соответствующие элементам векторов и матриц, могут соединяться лишь прямыми линиями — никакого сглаживания или интерполяции производиться не будет. Если вы хотите, чтобы график выглядел более плавным, позаботьтесь о том, чтобы в визуализируемом массиве было больше точек. Если строится график функции, уменьшите шаг между соседними значениями ее аргумента. Если необходимо сгладить экспериментально полученные данные, для которых получить дополнительные точки затруднительно, следует воспользоваться функциями интерполяции (interp* spline, pchip, griddata*) или аппроксимации (polyfit; кроме того, имеется графический интерфейс аппроксимации, вызываемый командой Basic Fitting из меню Tools графических окон). За более подробными сведениями обратитесь к документации MATLAB.
Двумерная графика
Основным средством двумерной графики является функция pl ot. Наиболее типичный вариант ее использования выглядит следующим образом:
plot(x. у)
Здесь х и у — векторы одинаковой длины, задающие соответствующие координаты точек, выводимых на график. По умолчанию точки соединяются сплошными линиями синего цвета. Тип и цвет линий и символов точек можно изменить, об этом будет рассказано далее, в разделе «Настройка внешнего вида графиков».
В качестве примера построим график функции у - sin(7tx)/(7tx), которая в MATLAB имеет имя sine (рис. А. 11):
» х - -10:0.1:10; % значения координаты х
» у - slnc(x):X значения координаты у
» plot(x, у)
Если на экране еще не было графиков, функция plot создаст графическое окно. Если на экране уже имелись графические окна, график будет выведен в текущее окно — то, которое последним выводилось на передний план. О том, как можно создать’ несколько графических окон, будет рассказано далее, в разделе «Одновременный вывод нескольких графиков».
ЗАМЕЧАНИЕ
Можно использовать функцию plot с одним аргументом — plot(y). В этом случае вектор у задает вертикальные координаты точек, а по горизонтали откладываются номера элементов вектора.
Панель управления графического окна
В верхней части графического окна расположена панель инструментов (рис. А. 12), кнопки которой выполняют следующие функции:
New Figure — создает новое графическое окно;
Open File — позволяет создать ново^ графическое окно, загрузив в него ранее сохраненный график;
Print FigurePrint Figure
Print Figure
Print Figure
Save Figure
Open File I New Figure
Zoom In
Zoom Out
I Rotate 3D
jO S Q Si *t A
Edit Plot IInsert TextEdit Plot IInsert TextInsert Line Insert ArrowInsert Line Insert Arrow
Edit Plot IInsert Text
Edit Plot IInsert Text
Insert Line Insert Arrow
Insert Line Insert Arrow
Рис. A. 12. Панель инструментов графического окна
Save Figure — позволяет сохранить графическое окно в виде файла с расширением .fig (к сожалению, в окне сохранения файла это расширение не добавляется к имени автоматически — его приходится вводить вручную). Сохраняемый файл представляет собой МАТ-файл (см. ранее раздел «Ввод и вывод данных»), в котором записаны массивы данных, представленных на графике, а также все параметры настройки графического окна. Сохраненный fig-файл впоследствии можно загрузить с помощью кнопки Open File, воссоздав записанный график;
Print Figure — позволяет распечатать содержимое графического окна;
Edit Plot — включает режим редактирования графика. В этом режиме можно выделять элементы графика мышью и настраивать их свойства;
Insert Text — включает режим интерактивного размещения текста на графике;
Insert Arrow — включает режим рисования стрелок на графике;
Insert Line — включает режим рисования линий на графике;
Zoom In — включает режим увеличения масштаба. В этом режиме щелчок левой кнопкой мыши в области графика увеличивает масштаб отображения, правой — уменьшает;
Zoom Out — включает режим уменьшения масштаба. В этом режиме щелчок левой кнопкой мыши в области графика уменьшает масштаб отображения, правой — увеличивает;
Rotate 3D — включает режим настройки точки обзора. В этом режиме перемещение указателя мыши в области графика при нажатой левой кнопке мыши приводит к повороту габаритного параллелепипеда трехмерного графика. Использование данного режима для двумерных графиков не имеет особого смысла.
Команды меню графического окна в основном совпадают с кнопками панели инструментов. Отметим лишь несколько команд, представляющих особый интерес:
File ► Export — позволяет сохранить график в виде файла одного из поддерживаемых графических форматов;
Tools ► Basic Fitting — выводит окно настройки аппроксимации, с помощью которого можно подобрать подходящую аппроксимирующую кривую для представленных на графике данных;
Tools ► Data Statistics — выводит окно просмотра статистической информации о представленных на графике данных.
ВНИМАНИЕ
График MATLAB является векторным графическим объектом, для превращения которого в экранные пикселы может понадобиться проделать значительный объем вычислений. При перетаскивании окна размер графика не меняется, так что нет необходимости пересчитывать его заново — Windows лишь перемещает растровый образ окна. Если же вы меняете размер окна, разворачивая его, перетаскивая его границы или используя команду Размер системного меню окна, все вычисления, необходимые для построения растрового образа графика, системе придется проделать заново. Поэтому перерисовка графика после изменения размеров его окна потребует столько же времени, сколько и первоначальное построение. Имейте это в виду, если ваш график содержит большое количество элементов. Ситуация усугубляется, если в Windows установлен режим отображения содержимого окна при перетаскивании (соответствующий флажок расположен на вкладке Эффекты окна свойств экрана). При этом система попытается отследить перетаскивание границы окна, непрерывно перерисовывая график. В случае сложного графика это может привести к весьма существенному торможению работы.
Другие разновидности двумерных графиков
Кроме функции plot есть еще целый ряд функций с аналогичным синтаксисом, позволяющих получить другие разновидности двумерных графиков. Ниже перечислены только некоторые из этих функций, наиболее полезные в инженерных и научных приложениях:
semilogx(x, у) — график с логарифмическим масштабом по оси х;
semi 1 оду(х, у) — график с логарифмическим масштабом по оси у,
1 од!од(х, у) — график с логарифмическим масштабом по обеим осям;
plotyy(xl, yl, х2, у2) — вывод зависимостей у! от х1 и у2 от х2 с раздельной оцифровкой вертикальных осей (для первого графика оцифровка вертикальной оси наносится слева, для второго — справа);
stem(x, у) — график в виде «стебельков»;
stairs(x, у) — график в виде ступенчатой линии;
polar(ph1, г) — график в полярных координатах (phi — угловые координаты точек в радианах, г — соответствующие им радиусы).
Трехмерная графика
В MATLAB имеется функция с именем plots, но, вопреки ожиданиям, основным средством трехмерной графики является вовсе не она. Дело в том, что функция plot3(x, у, z) является просто трехмерным аналогом функции plot, то есть она позволяет построить линию в трехмерном пространстве по координатам точек, задаваемым векторами х, у и z. На практике гораздо чаще бывает необходимо строить графики функций двух переменных в виде поверхностей или линий равного уровня.,
Для построения трехмерных поверхностей служит функция surf, имеющая следующий синтаксис:
surf(X, Y, Z)
Здесь X, Y и Z — двумерные массивы одинакового размера. Функция строит поверхность, состоящую из четырехугольных ячеек. Координаты углов каждой ячейки задаются значениями четырех соседних элементов массивов X, Y и Z с индексами (1, j), (1, j+1), (1+1, j) и (1+1, j+1). Цвет ячеек (точнее, индекс цвета в текущей палитре) по умолчанию меняется пропорционально координате z.
Из способа задания параметров для функции surf видно, что ее возможности не ограничиваются построением двухкоординатных функциональных зависимостей. Действительно, функция surf позволяет строить произвольные трехмерные поверхности. Однако эта гибкость несколько усложняет построение обычных графиков фуйкций двух переменных.
Чтобы построить график функционально заданной поверхности z = Дх, у), массивы X и Y, передаваемые функции surf, должны задавать сетку (как правило, равномерную). Значения массива Z рассчитываются по формуле функциональной зависимости с использованием поэлементных операций над массивами X и Y. Массивы X и Y в данном случае удобнее всего формировать с помощью специальной функции meshgrid, имеющей следующий синтаксис:
[X, Y] = meshgr1d(x, у)
Здесь х и у — векторы, задающие наборы значений х- и г/-координат. Формируемые массивы X и Y имеют length(y) строк и length(x) столбцов. Строки массива X являются копиями вектора х, а столбцы массива Y — копиями вектора у. Чтобы пояснить работу функции meshgrid, передадим ей два целочисленных вектора:
» [X. Y] = meshgridQ
:5,
-3:3)
X =
1
2
3
4
5
1 .
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
Y =
-3
-3
-3
-3
-3
-2
-2
-2
-2
-2
-1
-1
-1
-1
-1
0
0
0
0
0
1
1
1
1
1
2
2
2
2
2
3
3
3
3
3
В качестве примера построим график функции si^n^2 + у2 )
Дх,у) =;._ —
/ 22
при изменении х и у от -5 до 5 с шагом 0,2 (рис. А. 13): » х = -5:0.2:5:
» [X. Y] = meshgrid(x);
» Z = sinc(sqrt(X.*2+Y<2)):
» surf(X. Y, Z)
» colormap gray
■<> hquie No. 1■<> hquie No. 1a*> £ <a*> £ <Рис. A. 13. Трехмерная поверхность, построенная с помощью функции surfРис. A. 13. Трехмерная поверхность, построенная с помощью функции surf
■<> hquie No. 1
■<> hquie No. 1
a*
> £ <
a*
> £ <
Рис. A. 13. Трехмерная поверхность, построенная с помощью функции surf
Рис. A. 13. Трехмерная поверхность, построенная с помощью функции surf
ЗАМЕЧАНИЕ
В приведенном фрагменте кода функция meshgrid используется с одним входным параметром. Это сокращенный вариант вызова, эквивалентный meshgrid(x, х).
Для построения графика функции двух переменных в виде линий равного уровня служит функция contour, имеющая следующий синтаксис:
[с. h] = contour(X, Y, Z, V)
Здесь Z — двумерный массив, содержащий значения функции, а параметры X и Y могут быть как массивами, полученными от функции meshgrid (см. выше), так и векторами координат, передаваемыми функции meshgrid. При отсутствии этих параметров в качестве координат используются номера строк и столбцов матрицы Z. Параметр V может быть числом (тогда он задает количество выводимых линий уровня) или вектором (тогда этот параметр трактуется как набор значений функции для построения линий равного уровня). При отсутствии данного параметра значения уровня выбираются автоматически.
Возвращаемыми результатами с и h являются структуры данных, которые необходимо передать другой функции, clabel, для нанесения оцифровки на линии уровня:
clabeKc, h)
В качестве примера построим линии уровня для функции peaks. Это демонстрационная функция трехмерной графики MATLAB, генерирующая поверхность с несколькими пиками и впадинами. Нанесем также на линии уровня оцифровку с помощью функции clabel (рис. А.14):
» [с. h] = contour(peaks):
Рис. А.14. Линии равного уровня, построенные с помощью функции contour, с оцифровкой, нанесенной функцией clabel
Другие разновидности трехмерных графиков
Кроме функций surf и contour есть еще целый ряд функций с аналогичным синтаксисом, позволяющих получить другие разновидности трехмерных графиков. Ниже перечислены только некоторые из этих функций, наиболее полезные в инженерных и научных приложениях:
surfc(X, Y, Z) — комбинация функций surf и contour. Линии равного уровня выводятся на нижней координатной плоскости;
mesh(X, Y, Z) — построение поверхности в виде сетки с окрашенными ребрами и незакрашенными четырехугольными ячейками;
meshc(X. Y, Z) — комбинация функций mesh и contour. Линии равного уровня выводятся на нижней координатной плоскости;
meshz(X, Y, Z) — то же, что mesh, но с краев построенной сетчатой поверхности вниз спадает «занавес»;
waterfall (X, Y, Z) — то же, что mesh, но ребра, разделяющие ячейки, проводятся только вдоль оси х. В результате объемное тело выглядит «нарезанным на ломтики»;
stem3(X, Y. Z) — вывод трехмерного графика в виде «стебельков», начинающихся при г = 0 в точках, задаваемых массивами X и Y. Высота «стебельков» определяется массивом Z;
contourf(X, Y. Z) — то же, что contour, но пространство между линиями равного уровня окрашено в различные цвета в зависимости от значений Z;
contour3(X, Y, Z) — то же, что contour, но линии равного уровня рисуются не в одной плоскости, а при соответствующих значениях с-координаты;
pcolor(X, Y. Z) — строит двумерный график, представляющий собой сетку из четырехугольных ячеек, координаты вершин которых задаются массивами X и Y. Ячейки закрашены цветами, определяемыми значениями элементов массива Z. Тот же результат можно получить, если для поверхности, построенной функцией surf, установить точку обзора точно сверху.
Настройка внешнего вида графиков
В большинстве случаев параметры оформления графиков, выбираемые по умолчанию, оказываются вполне приемлемыми. Однако иногда для повышения выразительности изображения возникает необходимость изменить тип и цвет линий, нанести на график поясняющие надписи и т. п. В данном разделе кратко рассматриваются соответствующие средства MATLAB.
Настройка линий и точек
Соединение точек графика отрезками синего цвета — не единственный вариант отображения. MATLAB позволяет управлять цветом графика, типом линии и способом отображения точек данных. Для этого используется дополнительный параметр команд plot, stem и т. п. Этот параметр представляет собой текстовую строку 'LineSpec', символы которой и указывают нужные режимы:
plot(x, у. 'LineSpec')
Список возможных символов и их значения приведены в табл. А.1.
Таблица А.1. Символы управления линиями и точками графиков
Символ
Назначение
Управление цветом
b
Синий (по умолчанию) — Blue
с
Голубой — Cyan
9
Зеленый — Green
к
Черный — ЫасК
Продолжение ^
Таблица А.1 (продолжение)
Символ
Назначение
m
Фиолетовый — Magenta
г
Красный — Red
W
Белый — White
У
Желтый — Yellow
Управление типом линии
-
Непрерывная (по умолчанию)
- -
Пунктирная, длинный штрих
Пунктирная, короткий штрих
Штрихпунктирная
Управление маркерами точек данных
Точка (по умолчанию)
+
Знак «плюс»
*
Звездочка
0
Кружок
X
Крестик
S
Квадрат — Square
d
Ромб — Diamond
Р
Пятиконечная звезда — Pentagram
h
Шестиконечная звезда — Hexagram
V
Треугольник острием вниз
А
Треугольник острием вверх
<
Треугольник острием влево
>
Треугольник острием вправо
Перечисленные в таблице символы можно комбинировать. К примеру, строка '-.dr' задаст вывод точек графика ромбиками (d), а соединяющих точки линий — штрих- пунктиром (-.). И точки, и линии при этом будут красного цвета (г).
Функции оформления графиков
Только что рассмотренные параметры управления точками и линиями задаются непосредственно при выводе графика функцией pl ot или одной из ей подобных.
Кроме того, существует еще целый ряд функций, которые вызываются уже после построения графика и меняют его внешний вид. Эти функции воздействуют только на текущий график (то есть график в текущем графическим окне и, если использовалась команда subplot, в текущей клетке этого окна). Ниже приведен список наиболее важных из этих функций:
□ axis — настройка координатных осей. Вот некоторые способы использования этой функции (обратите внимание на то, что не все перечисленные режимы являются взаимоисключающими):
О axis([xmin xmax ymin ymax]) — настройка предельных значений осей для двумерного графика;
О axis([xmin xmax ymin ymax zmin zmax]) — настройка предельных значений осей для трехмерного графика;
О axis auto — автоматический выбор пределов (этот режим установлен по умолчанию);
О axis tight — предельные значения осей в точности соответствуют диапазонам изменения данных;
О axi s equal — для всех осей графика устанавливается одинаковый масштаб;
О axis image — то же, что комбинация axis equal и axis tight;
О axi s square — делает длину осей одинаковой (а область графика — квадратной);
О axi s normal — отменяет действие режимов axi s square и axi s equal;
О axis off — отключает отображение осей вместе с оцифровкой, подписями и фоном графика;
О axis on — включает отображение осей, их оцифровки, подписей, а также фона графика;
□ grid — включение (grid on) и выключение (grid off) отображения линий сетки;
box — включение (box on) и выключение (box off) отображения обрамляющего график прямоугольника или параллелепипеда;
legend(' string!', 'string2', 'strings'. ...)—добавление аннотации («легенды») к графику. Каждая из строк-параметров задает аннотацию для одной из выведенных на график зависимостей;
titlе( 'text') — добавление заголовка к графику;
xl abel (' text') — добавление подписи к оси х;
yl abel (' text') — добавление подписи к оси у;
zl abel (' text') — добавление подписи к оси z;
text(x, у, 'string') или text(x, у, z, 'string') —размещение строки'string' в точке двумерного или трехмерного графика с указанными координатами;
xlim([xmin xmax]) — задание пределов по оси х;
ylim([ymin ymax]) — задание пределов по оси у;
zlim([zmin zmax]) — задание пределов по оси z.
В качестве примера повторим вывод графика, показанного ранее на рис. А.11, штрихпунктирной линией. Кроме того, добавим сетку, подписи к осям, «легенду» и заголовок. Результат показан на рис. А. 15.
» х = -10:0.1:10: % значения координаты х
» у = sinc(x);% значения координаты у
» plot(x. у. '-.')'
» grid on% добавляем сетку
» xlabel('x')% подпись оси х
» ylabel('sinc(x)')% подпись оси у
» legend('sine function') % аннотация
» % заголовок графика
» title('Plot of function sinc(x)=sin(\pi x)/(\pi x) ’)
Рис. A. 15. Графике настроенными параметрами отображения линий, . подписями осей, «легендой» и заголовком
Обратите внимание на то, что последовательность символов \р1, использованная в аргументе функции title, на рис. А. 15 превратилась в греческую букву л. Аналогичным образом при использовании функций title, xlabel, ylabel, legend и т. п. можно получить и другие специальные символы. Дело в том, что MATLAB распознает в выводимых на график текстовых строках некоторые команды языка ТеХ. Это команды вывода греческих букв (\alpha, \beta и т. д. для строчных букв и \Gamma, \Delta и т. д. для прописных, не совпадающих по начертанию с английскими), вывода математических символов (\infty для оо, \leq для < \geq для >, \рт для ± и т. п.), форматирования нижних и верхних индексов (соответственно _{,.} и А{...}), а также управления начертанием шрифта (\bf — полужирный, \it —
курсив, \sl — наклонный, \rm — обычный). За более подробной информацией о форматировании выводимого на график текста обратитесь к документации MATLAB.
ЗАМЕЧАНИЕ
ТеХ — это непревзойденная по своим возможностям система подготовки текстов, содержащих математические формулы. ТеХ не является визуальной системой — это скорее язык программирования. Чтобы продемонстрировать идею, приведем маленький пример — вы набираете во входном файле, скажем, $\gamma=\sqrt{\alphaA2+\betaA2}$ и получаете на печати у = ^/а2 + р2- Подумайте — может быть, это лучше, чем щелкать мышью в Equation Editor? Подробнее узнать о ТеХ можно, например, из книги [16].
Одновременный вывод нескольких графиков
Вывести на экран несколько графиков одновременно можно по-разному — в разных графических окнах, в разных областях одного окна или же в общих осях координат. В зависимости от этого используются различные средства MATLAB.
Чтобы вывести несколько графиков в разных графических окнах, нужно создать эти графические окна с помощью функции figure или команды меню File ► New ► Figure главного окна MATLAB (в меню графических окон есть более ко-' роткий вариант — команда File ► New Figure). После создания нового окна оно становится текущим, и последующий графический вывод направляется именно в него.
ЗАМЕЧАНИЕ
Сделать конкретное графическое окно текущим можно, выведя его на передний план и затем переключившись в командное окно MATLAB.
Приведенные ниже команды создадут два графика в разных окнах:
» plot(xl, yl)
» figure
» plot(x2. у2)
Для вывода нескольких графиков в разных областях одного окна используется команда subplot, имеющая следующий синтаксис:
subplot(Rows, Cols. N)
В результате графическое окно будет разбито на клетки в виде матрицы, имеющей Rows строк и Col s столбцов, и A-я клетка (в отличие от нумерации элементов в матрицах, нумерация клеток ведется по строкам?) становится текущей.
Приведенные ниже команды создают четыре графика, располагая их в одном графическом окне в две строки и два столбца (рис. А. 16):
» t - 0:0.01:10:
» subplot(2. 2. 1)
» plot(t. sin(t))
» subplot(2, 2. 2)
» plot(t, cos(t))
» subplot(2, 2. 3)
» plot(t, t.A2+l)
» subplot(2, 2. 4)
» plot(t. l./(t.*2+1))
ВИВВИВ-^ Figure No. 1
ВИВ
ВИВ
6b £Л Mw Ire* To* Ww ДО|a » eel t ал/ ^^r6b £Л Mw Ire* To* Ww ДО|a » eel t ал/ ^^rРис. A. 16. Результат использования команды subplotРис. A. 16. Результат использования команды subplot
6b £Л Mw Ire* To* Ww ДО
|a » eel t ал/ ^^r
6b £Л Mw Ire* To* Ww ДО
|a » eel t ал/ ^^r
Рис. A. 16. Результат использования команды subplot
Рис. A. 16. Результат использования команды subplot
Наконец, вывести несколько графиков в общих осях тоже можно разными способами. Во-первых, если параметр функции pl ot, задающий значения координаты у, является матрицей, то строятся отдельные графики для каждого столбца матрицы, например:
» х = (0:0.1:10)':
» plot(x. [sin(x) cos(x)J)
Во-вторых, при вызове функции plot можно перечислить несколько пар значений х- и г/-координат:
plot(xl. yl, х2, у2. ...)
При этом для каждой пары (х1, у1) будет построен свой график. Поэтому тот же результат, что и в предыдущем примере, можно получить и таким образом:
» plotCx, sin(x). х, cos(x))
В-третьих, можно использовать команду hold on, включающую режим сохранения содержимого текущих координатных осей при выводе в них новых графиков. Тогда новые команды plot будут строить графики поверх имеющихся, не затирая их. Для выключения этого режима используется команда hold off.
Перепишем наш пример еще раз, используя команды hold:
» plot(x. sin(x))
» hold on
» plot(x, cos(x))
» hold off
Дальнейшее использование графиков
Содержимое графического окна можно распечатать, используя следующие команды меню File: Page Setup, Print Setup, Print Preview и Print. Печать в MATLAB выполняется так же, как в других Windows-приложениях, поэтому подробно рассматривать этот процесс мы не будем.
Печатать графики непосредственно из MATLAB проходится редко, гораздо чаще необходимо использовать их в документах, создаваемых, например, в Microsoft Word. Для этого необходимо скопировать изображение в буфер обмена командой Edit ► Copy Figure меню графического окна.
Однако для получения желаемого результата необходимо настроить параметры копирования с помощью команды Edit ► Copy Options меню графического окна. После ее вызова откроется соответствующий раздел окна Preferences. В нем имеется два трехпозиционных переключателя и один флажок. Переключатель Clipboard format позволяет выбирать следующие варианты:
Metafile (may lose information) — в буфер помещается векторный образ окна;
Preserve information (metafile if possible) — MATLAB выбирает растровый или векторный вариант по своему усмотрению, в зависимости от сложности изображения;
Bitmap — в буфер помещается растровый образ окна.
Векторное изображение можно масштабировать без потери качества и редактировать в соответствующих программах (CorelDRAW, Adobe Illustrator и т. п.). При копировании растрового образа неизбежно происходит потеря информации, однако прорисовка и печать растрового рисунка может оказаться быстрее, чем в случае сложного векторного изображения. В большинстве случаев целесообразно выбирать вариант Preserve information (metafile if possible).
Переключатель Figure background color управляет копированием фона графического окна:
Use figure color — копируется фоновый прямоугольник того же цвета, что на экране (по умолчанию — серый);
Force white background — копируется фоновый прямоугольник белого цвета;
Тransparent background — изображение копируется без фонового прямоугольника.’
Наиболее целесообразный вариант — Transparent background.
Наконец, флажок Match figure screen size управляет размером копируемого изображения. Если флажок установлен, копируемое изображение будет иметь такие же размеры, как на экране. Если флажок снят, размер копируемого изображения определяется настройками, сделанными в окне Page Setup.
ЗАМЕЧАНИЕ
Помимо копирования в буфер обмена изображения могут выводиться на печать и записываться в файлы различных графических форматов с помощью команды pri nt. Она имеет большое количество дополнительных ключей, ознакомиться с назначением которых можно по документации MATLAB.
Дополнительные источники информации
В этом приложении были представлены лишь основные приемы использования MATLAB. Далее, в приложении Б, будет приведен краткий обзор функций базовой библиотеки MATLAB, а в приложении В — список компонентов системы. За дополнительной информацией следует обращаться к справочной системе, документации и книгам о MATLAB, которых издано уже немало. Кроме того, на сайте фирмы-производителя www.mathworks.com можно найти информацию о последних версиях программных продуктов, документацию, а также коллекцию М-файлов, разработанных пользователями MATLAB. Возможно, вам удастся найти в этой коллекции что-нибудь полезное для решения стоящих перед вами задач.
Форум по MATLAB (англоязычный, разумеется) в иерархии телеконференций USENET имеет имя comp.soft-sys.matlab. Через Web он доступен по адресу newsreader.mathworks.com.
Компания Softline (www.softline.ru) — официальный дилер фирмы Mathworks в России — поддерживает сайт www.matlab.ru, на котором имеются информационные материалы (на русском языке) по MATLAB и некоторым пакетам расширения. Там же организован и форум отечественных пользователей MATLAB.
Приложение Б
Обзор функций MATLAB
В данном приложении будет дан краткий обзор функций, входящих в базовую библиотеку MATLAB. Этих функций слишком много, чтобы можно было привести хотя бы краткое описание для каждой из них. Поэтому ниже приводится лишь список тематических разделов с краткой их характеристикой. Для некоторых разделов перечислены также важнейшие функции. За более подробным описанием следует обращаться к справочной системе и документации MATLAB. Разделы перечислены в алфавитном порядке имен их каталогов, а не в порядке значимости. Получить справку по конкретному разделу можно, набрав в командной строке следующий текст:
» help имя_раздела
В результате будет выведен список функций данного раздела с краткими комментариями по их назначению.
Audio
В данном разделе содержатся функции работы со звуковой картой компьютера. Важнейшие из этих функций были рассмотрены в разделе «Получение данных из внешних источников» главы 3.
Datafun
В этом разделе сосредоточены разнообразные функции анализа данных. Большинство из них ориентировано на работу с векторным аргументом; матрицы обрабатываются по столбцам. Вот список важнейших функций:
□ Базовые операции:
О max — вычисление наибольшего элемента и его индекса;
О min — вычисление наименьшего элемента и его индекса;
О mean — среднее значение;
О std — оценка среднеквадратического отклонения;
О var — оценка дисперсии;
О sort — сортировка элементов по возрастанию;
О sortrows — сортировка строк матрицы по возрастанию;
О sum — сумма элементов;
О prod — произведение элементов;
О hist — расчет и вывод гистограммы;
О trapz — численное интегрирование методом трапеций;
О cumsum — расчет частичных сумм элементов (численное интегрирование методом прямоугольников);
О cumprod — расчет частичных произведений элементов.
Конечные разности:
О di ff — вычисление разностей между соседними элементами;
О gradient — аппроксимация градиента;
О del 2 — дискретный лапласиан.
Корреляция:
О corrcoef — коэффициент взаимной корреляции;
О cov — ковариационная матрица;
О subspace — расчет угла между векторами.
Фильтрация и свертка:
О filter — одномерная дискретная фильтрация;
О filter2 — двумерная дискретная фильтрация;
О conv — свертка (умножение полиномов);
О conv2 — двумерная свертка;
О convn — многомерная свертка;
О deconv — обращение свертки (деление полиномов);
О detrend — удаление линейного тренда.
Преобразование Фурье:
О f ft — одномерное прямое дискретное преобразование Фурье;
О fft2 — двумерное прямое дискретное преобразование Фурье;
О fftn — многомерное прямое дискретное преобразование Фурье;
О if ft — одномерное обратное дискретное преобразование Фурье;
О i fft2 — двумерное обратное дискретное преобразование Фурье;
О i fftn — многомерное обратное дискретное преобразование Фурье;
О fftshift — перестановка половин вектора или квадрантов матрицы;
О ifftshift — перестановка, обратная по отношению к fftshift.
Datatypes
В этом разделе сосредоточены средства поддержки типов данных MATLAB.
Demos
В данном разделе собраны демонстрационные примеры.
Elfun
Как явствует из названия раздела, в нем содержатся файлы, реализующие элементарные математические функции. В большинстве случаев эти функции встроены в ядро системы, так что в М-файлах содержится только текст справки.
□ Тригонометрические функции:
О sin — синус;
О sinh — гиперболический синус;
О asin — арксинус;
О asinh — гиперболический арксинус;
О cos — косинус;
О cosh — гиперболический косинус;
О acos — арккосинус;
О acosh — гиперболический арккосинус;
О tan — тангенс;
О tanh — гиперболический тангенс;
О atan — арктангенс;
О atan2 — вычисление угловой координаты точки по паре ее декартовых координат;
О atanh — гиперболический арктангенс;
О sec — секанс;
О sech — гиперболический секанс;
О asec — арксеканс;
О asech — гиперболический арксеканс;
О esc — косеканс;
О csch — гиперболический косеканс;
О acsc — арккосеканс;
О acsch — гиперболический арккосеканс;
О cot — котангенс;
О coth — гиперболический котангенс;
О acot — арккотангенс;
О acoth — гиперболический арккотангенс.
□ Экспоненциальные функции:
О ехр — экспонента;
О log — натуральный логарифм;
О 1 oglO — десятичный логарифм;
О 1од2 — двоичный логарифм, а также выделение порядка и мантиссы числа;
О pow2 — функция 2Л, а также «сборка» числа из мантиссы и порядка;
О sqrt — квадратный корень;
О nextpow2 — ближайшая «сверху» степень двойки.
□ Функции для работы с комплексными числами:
О abs — модуль;
О angle — аргумент (фаза) комплексного числа;
О compl ex — «сборка» комплексного числа из вещественной и мнимой частей;
О conj — комплексное сопряжение;
О imag — мнимая часть комплексного числа;
О real — вещественная часть комплексного числа;
О unwrap — устранение скачков фазы (подробнее см. раздел «Построение графиков фазочастотных характеристик» главы 2);
О Isreal — проверка вещественности массива;
О cplxpair — сортировка чисел по комплексно-сопряженным парам.
Округление и остаток:
О fix — округление в сторону нуля;
О floor — округление вниз;
О ceil — округление вверх;
О round — округление к ближайшему целому числу;
О mod — взятие по модулю (остаток со знаком);
О rem — остаток от деления;
О sign — знаковая функция.
Elmat
В данном разделе собраны функции элементарных матричных операций.
Создание элементарных матриц:
О zeros — матрица, заполненная нулями;
О ones — матрица, заполненная единицами;
О eye — единичная матрица;
О repmat — дублирование матрицы «мозаикой»;
О rand — генерация случайных чисел с равномерным распределением;
О randn — генерация случайных чисел с нормальным распределением;
О 1 i nspace — генерация арифметической прогрессии;
О 1 ogspace — генерация геометрической прогрессии;
О freqspace — генерация вектора частот для анализа частотных характеристик;
О meshgrid — генерация массивов координат для построения трехмерных графиков.
Информационные функции:
О size — размер массива;
О 1 ength — длина вектора;
О ndims — число размерностей массива;
О di sp — вывод значения переменной;
О isempty — проверка на «пустоту»;
О i sequal — проверка массивов на равенство;
О isnumeric — проверка, является ли массив числовым;
О islogical — проверка, является ли массив логическим;
О logical — преобразование числовых величин в логические.
Преобразования матриц:
О reshape — изменение размеров матрицы при сохранении числа элементов;
О diag — создание диагональных матриц и выделение вектора диагональных элементов матрицы;
О blkdiag — создание блочно-диагональной матрицы;
О tri 1 — выделение нижнего треугольного блока матрицы;
О triu — выделение верхнего треугольного блока матрицы;
О fliplr — зеркальное отражение матрицы относительно вертикальной оси;
О fl 1 pud — зеркальное отражение матрицы относительно горизонтальной оси;
О flipdim — зеркальное отражение многомерного массива относительно указанной размерности;
О rot90 — поворот матрицы на 90°;
О find — индексы ненулевых элементов;
О end — последний индекс вдоль данной размерности;
О sub2ind — преобразование набора индексов в линейный индекс;
О i nd2sub — преобразование линейного индекса в набор индексов.
Специальные переменные и константы:
О ans — результат последней операции;
О eps — относительная точность вычислений с плавающей запятой;
О real max — максимально возможное число с плавающей запятой;
О realmin — минимально возможное число с плавающей запятой;
О pi — число л;
О 1, j — мнимая единица;
О 1 nf — бесконечность;
О NaN — нечисловое значение (Not-a-Number);
О isnan — проверка на NaN;
О isinf — проверка на бесконечность значения;
О isfinite — проверка на конечность значения.
Funfun
В данном разделе собраны функции поиска минимумов и нулей функций, численного интегрирования, а также численного решения дифференциальных уравнений. Все эти операции требуют создания М-файла функции, с которой будет вестись работа, поэтому данный раздел и получил такое имя — «Function functions». Вот важнейшие функции этого раздела:
fzero — решение нелинейных уравнений;
fminsearch — многомерная нелинейная минимизация без ограничений;
fmi nbnd — скалярная нелинейная минимизация с ограничениями;
quad, quadl — численное интегрирование;
dbl quad — численное вычисление двойного интеграла;
ode45, ode23, ode!13, ode23t, odel5s, ode23s, ode23tb — различные методы численного решения дифференциальных уравнений.
General
Данный раздел содержит функции общего назначения. Сюда относятся команды работы со справочной системой, управления рабочей областью памяти, открытия и сохранения файлов, настройки пути поиска файлов, управления командным окном, средства вызова команд операционной системы, а также отладочные средства.
Graph2d
В данном разделе содержатся средства двумерной графики. Важнейшие из них были рассмотрены в разделе «Двумерная графика» приложения А.
GraphSd
В данном разделе содержатся средства трехмерной графики. Важнейшие из них были рассмотрены в разделе «Трехмерная графика» приложения А.
Graphics
В этом разделе собраны средства поддержки дескрипторной графики (Handle Graphics®) MATLAB. Вкратце ее идею можно описать следующим образом. Все графические функции, такие как f 1 gure, pl ot и прочие, могут возвращать результат — число или несколько чисел, являющихся дескрипторами (handle) созданных функцией графических объектов — графических окон, координатных осей, графиков и т. д. Эти дескрипторы используются для получения программного доступа к графическим объектам и их свойствам. Более подробное описание дескрипторной графики выходит за рамки тематики данной книги. За необходимой информацией обратитесь к справочной системе MATLAB и книге «Using MATLAB Graphics», поставляемой в составе документации.
lofun
К данной категории относятся средства файлового ввода/вывода. Важнейшие функции работы с файлами были рассмотрены в разделе «Ввод и вывод данных» приложения А, а работа со звуковыми файлами подробно описана в разделе «Получение данных из внешних источников» главы 3.
Lang
В данном разделе собраны конструкции языка программирования MATLAB. Основные элементы языка были описаны в разделе «Программирование» приложения А. Из того, что не вошло в этот раздел, отметим следующее:
try и catch — операторы для обработки исключительных ситуаций (exception);
eval US') — вычисление MATLAB-выражения, заданного в виде строкового входного параметра 'S';.
fevaK'F', xl, х2, ...) —вычисление функции, имя которой задано строковым входным параметром ' F', с передачей ей входных параметров xl, х2 и т. д.;
gl obal — определение глобальной переменной;
persistent — определение локальной переменной функции, значение которой сохраняется при следующем вызове функции;
exi st — проверка существования переменной или функции;
1 sgl obal — проверка глобальности переменной;
disp — вывод значения переменной в командное окно MATLAB;
fprintf — запись форматированных данных в поток вывода;
sprintf — запись форматированных данных в строку;
1 nput — запрос на ввод значения переменной пользователем;
pause — приостановка работы программы.
Matfun
В данном разделе собраны матричные функции линейной алгебры. Отметим лишь важнейшие из них:
norm — норма матрицы или вектора;
rank — ранг матрицы;
det — определитель матрицы;
trace — след матрицы (сумма диагональных элементов);
\ и / — решение систем линейных уравнений (матричное деление);
1 nv — обращение матрицы;
eig — расчет собственных чисел и собственных векторов матрицы;
svd — разложение по сингулярным числам;
poly — характеристический полином матрицы;
ехрт — матричная экспонента;
1 ogm — матричный логарифм;
sqrtm — матричный квадратный корень.
Ops
Данный раздел посвящен операторам и символам, имеющим для MATLAB специальное значение. Поскольку поддержка этих базовых возможностей встроена в ядро системы, в каталоге Ops в основном содержится лишь справочная информация. Исключением, в частности, являются функции работы с битовыми представлениями неотрицательных целых чисел:
bitand — побитовое «И»;
bitcmp — побитовое «НЕ»;
bitor — побитовое «ИЛИ»;
bitmax — максимальное целое число, которое можно точно представить в используемом MATLAB формате с плавающей запятой. Для платформы PC это значение равно 253 - 1;
bitxor — побитовое «исключающее ИЛИ»;
bitset — установка бита с заданным номером в заданное значение;
bitget — считывание значения бита с заданным номером;
bitshift — побитовый сдвиг на заданное число разрядов.
Polyfun
В данном разделе собраны функции интерполяции и работы с полиномами. Перечислим лишь наиболее важные для задач обработки сигналов функции работы с полиномами:
roots — поиск корней полинома;
pol у — расчет коэффициентов полинома по его корням;
polyval — вычисление значения полинома в заданной точке;
pol yval m — вычисление значения полинома от матричного аргумента;
residue — представление дробно-рациональной функции в виде суммы простых дробей (эта функция была рассмотрена в разделе «Преобразование способов описания линейных цепей» главы 2);
polyfit — полиномиальная аппроксимация данных;
polyder — дифференцирование полиномов, их произведений и отношений;
polyint — интегрирование полиномов;
conv — умножение полиномов;
deconv — деление полиномов.
Sparfun
В некоторых предметных областях приходится иметь дело с матрицами очень большого размера, у которых отлична от нуля лишь малая часть элементов. Такие матрицы называются разреженными (sparse). На хранение нулевых элементов и выполнение математических операций с ними впустую тратится много ресурсов компьютера. В данном разделе собраны функции, позволяющие хранить матрицы и выполнять матричные операции непосредственно в разреженном виде, то есть хранить только значения и индексы ненулевых элементов матриц. В задачах обработки сигналов такие матрицы практически не встречаются, поэтому конкретные функции данного раздела здесь не перечисляются.
Specfun
Как явствует из названия, в этом разделе находятся специальные математические функции. Вот важнейшие из них:
airy — функции Эйри;
bessel j, bessely, besselh, besseli, besselk — функции Бесселя;
beta, betaine, betaln — бета-функция, неполная бета-функция и логарифм бета-функции;
ellipj — эллиптические функции Якоби;
el 1 i pke — полный эллиптический интеграл;
erf — функция ошибок;
erfc — дополнительная функция ошибок;
erfex — масштабированная дополнительная функция ошибок;
erfi nv — обратная функция ошибок;
expi nt — интегральная экспонента;
gamma, gammainc, gammain — гамма-функция, неполная гамма-функция и логарифм гамма-функции;
1 egendre — присоединенная функция Лежандра;
cross — векторное произведение;
dot — скалярное произведение векторов;
factor — разложение натурального числа на простые множители;
isprime — проверка, является ли натуральное число простым;
primes — генерация простых чисел;
gcd — наибольший общий делитель;
1cm — наименьшее общее кратное;
rat — рациональная аппроксимация;
factorial — факториал.
Specgraph
В данном разделе собраны специализированные графические функции. Сюда относятся, разнообразные диаграммы (area, bar, barb, pie и др.), рассмотренные нами ранее функции stem, stairs, contour и contourf, а также многие другие. Особый интерес представляют функции, имена которых начинаются с букв ez (от «easy» — «легкий») — ezplot, ezpolar, ezcontour, ezcontourf, ezgraph3, ezmesh, ezmeshc, ezplot3, ezsurf и ezsurfc. Они позволяют строить графики соответствующих типов (см. раздел «Графика» приложения А), задавая не массивы даных, а строки, в которых записаны формулы для вычислений. Также в данном разделе имеются функции чтения и записи графических файлов, трехмерной визуализации и анимации.
Strfun
К данному разделу относятся функции работы со строками (см. раздел «Строки» приложения А). Важнейшими из них являются следующие:
bl anks — создание строки, заполненной пробелами;
deblank — удаление концевых пробелов из строки;
strcat — соединение строк;
strcmp — сравнение строк;
strncmp — сравнение первых N символов строк;
strcmpi — сравнение строк без учета регистра символов;
strncmpi — сравнение первых N символов строк без учета регистра символов;
findstr — поиск одной строки внутри другой;
upper — преобразование строки к верхнему регистру;
1 ower — преобразование строки к нижнему регистру;
num2str — преобразование числа в строку;
int2str — преобразование целого числа в строку;
str2doubl e — преобразование строки в число в формате doubl е;
str2num — преобразование матрицы строк в числовой массив;
sprintf — запись форматированных данных в строку;
hex2dec — преобразование шестнадцатеричной строки в целое число;
dec2hex — преобразование целого числа в шестнадцатеричную строку;
bi n2dec — преобразование двоичной строки в целое число;
dec2bin — преобразование целого числа в двоичную строку.
Timefun
В данном разделе собраны функции работы с датами и временем. Важнейшими из них являются следующие:
now — текущие дата и время в виде числа;
date — текущая дата;
cl оск — текущие дата и время в виде вектора;
tic — запуск таймера;
toe — остановка таймера;
pause — приостановка работы программы на заданное время.
Uitools
MATLAB позволяет создавать программы, имеющие графический пользовательский интерфейс. В данном разделе библиотеки собраны средства, обеспечивающие соответствующие функции. Вопросы создания пользовательского интерфейса выходят далеко за рамки тематики дайной книги, скажем лишь, что запуск конструктора форм производится функцией guide. За дополнительной информацией обратитесь к справочной системе и документации MATLAB.
Verctrl
Функции данного раздела обеспечивают взаимодействие MATLAB с системами контроля версий файлов (version control system, VCS).
Winfun
В данном разделе собраны функции взаимодействия MATLAB с операционной системой Windows через интерфейсы DDE и ActiveX. Работу с ActiveX демонстрируют два примера: mwsamp (создание элемента управления ActiveX) и sampev (создание обработчика события для сервера ActiveX; эта функция используется примером mwsamp).
Приложение В Компоненты MATLAB
MATLAB — сложная система, и она постоянно развивается, приобретая все новые возможности. Главная сила MATLAB — это многочисленные пакеты расширения, ориентированные на решение задач в различных предметных областях. В данном приложении перечислены компоненты MATLAB и приведены их краткие описания.
Набор поставляемых фирмой MathWorks компонентов постоянно пополняется. Приводимый ниже список показывает состояние на январь 2002 г. Разделение компонентов на категории соответствует предлагаемому фирмой MathWorks.
MATLAB
Помимо собственно ядра MATLAB в состав системы входит целый ряд компонентов, предоставляющих дополнительные возможности:
■ MATLAB — ядро системы MATLAB («язык технических вычислений», как называют свой продукт разработчики);
MATLAB Compiler — средство преобразования М-файлов в программный код на языке C/C++;
MATLAB C/C++ Graphics Library — библиотека графических функций MATLAB для использования в программах на C/C++;
MATLAB C/C++ Math Library — библиотека математических функций MATLAB для использования в программах на C/C++;
MATLAB Excel Builder — средство создания модулей расширения для Microsoft Excel;-
MATLAB Report Generator — средство создания документации для MATLAB-приложений и данных;
MATLAB Runtime Server — средство преобразования MATLAB-приложений в автономные программные продукты;
MATLAB Web Server — средство разработки и распространения MATLAB- приложений, запускаемых через Интернет;
MatrixVB — интерфейс для вызова функций MATLAB из Microsoft Visual Basic.
Пакеты расширения MATLAB
Пакеты расширения MATLAB (toolbox) Представляют собой наборы функций, объединенные общей тематикой и ориентированные на решение задач конкретной предметной области^
Математика и анализ
Curve Fitting Toolbox — функции аппроксимации;
Optimization Toolbox — функции, реализующие разнообразные численные методы оптимизации, в том числе при наличии линейных и нелинейных ограничений [13];
Statistics Toolbox — функции статистического моделирования и проверки гипотез [13];
Neural Network Toolbox — функции моделирования и анализа нейронных сетей [13];
Symbolic/Extended Symbolic Math Toolbox — реализация аналитических расчетов с использованием ядра программы Maple [13];
Partial Differential Equation Toolbox — решение дифференциальных уравнений в частных производных;
PLS_Toolbox — анализ и моделирование временной динамики химических процессов методом частичных наименьших квадратов (Partial Least Squares, PLS);
Mapping Toolbox — пакет расширения для визуализации географических карт и работы с другой географической информацией;
Spline Toolbox — функции кусочно-полиномиальной (сплайновой) аппроксимации и интерполяции;
Structural Dynamics Toolbox — анализ колебаний и вибраций в механических системах методом конечных элементов;
Virtual Reality Toolbox — средство создания виртуальных трехмерных моделей, управляемых из среды MATLAB или Simulink, на основе языка VRML.
Экспорт и импорт данных
Data Acquisition Toolbox — средство взаимодействия с оборудованием аналогового и цифрового ввода/вывода данных;
Instrument Control Toolbox — средство взаимодействия MATLAB с современной измерительной аппаратурой через протоколы GPIB и VISA;
Database Toolbox — средство обмена данными с реляционными базами данных;
Excel Link — средство взаимодействия MATLAB с Microsoft Excel;
Portable Graph Object — средство, позволяющее экспортировать графики MATLAB в Microsoft Word в виде объектов ActiveX, обеспечивающих возможность настройки параметров графика.
Обработка сигналов и изображений
Signal Processing Toolbox — функции анализа и обработки сигналов;
Image Processing Toolbox — функции анализа и обработки изображений;
Communications Toolbox — функции анализа и моделирования систем связи;
Frequency Domain System Identification Toolbox — функции идентификации линейных динамических систем в частотной области [14];
System Identification Toolbox — функции идентификации линейных динамических систем, то есть создания их математических моделей на основе измеренных входных и выходных сигналов [14];
Wavelet Toolbox — функции анализа, очистки от шума и компрессии сигналов и изображений с использованием цейвлет-алгоритмов;
Filter Design Toolbox — функции анализа и синтеза фильтров, в том числе с учетом эффектов квантования и арифметики с фиксированной запятой;
Motorola DSP Developer's Kit — функции моделирования и тестирования кода для цифровых сигнальных процессоров серий 56300 и 56600 фирмы Motorola;
Developer’s Kit for Texas Instruments™ DSP — функции моделирования и тестирования кода для цифровых сигнальных процессоров фирмы Texas Instruments.
Разработка систем управления
Control System Toolbox — функции моделирования и анализа систем автоматического управления (систем с обратной связью) [14];
Fuzzy Logic Toolbox — функции моделирования и анализа систем с нечеткой логикой [13];
Robust Control Toolbox — функции моделирования и анализа систем управления, устойчивых по отношению к случайным воздействиям;
р-Analysis and Synthesis Toolbox — функции моделирования и анализа систем управления со многими переменными при наличии неопределенности модели;
LMI Control Toolbox — функции моделирования и анализа устойчивых систем управления с использованием методов оптимизации выпуклых функций;
Model Predictive Control Toolbox — функции моделирования и анализа систем управления с большим числом входных и выходных параметров при наличии ограничений;
Polynomial Toolbox — функции, реализующие современные полиномиальные методы применительно к системам управления;
QFT Frequency Domain Control Design Toolbox — функции моделирования и анализа устойчивых систем управления в частотной области с использованием теории количественных обратных связей (Quantitative Feedback Theory).
Финансовое моделирование и анализ
Financial Toolbox — функции для моделирования финансовых данных и разработки алгоритмов финансового анализа;
Financial Time Series Toolbox — функции для анализа финансовых данных методом временных рядов;
GARCH Toolbox — функции анализа изменчивости финансовых рынков с использованием одномерных GARCH-моделей;
Financial Derivatives Toolbox — функции анализа и моделирования процентных ставок и рисков;
Datafeed Toolbox — средство получения финансовых данных от поставщиков информации в реальном времени.
Simulink
С технической точки зрения Simulink® является расширением MATLAB, однако он предоставляет столько новых возможностей, что его следует рассматривать как отдельный программный продукт. Simulink — это графическая среда моделирования аналоговых и дискретных систем. Моделирование производится путем перетаскивания блоков из окон библиотек в окно создаваемой модели и настройки связей между ними. Большое число имеющихся библиотек позволяет моделировать самые разнообразные электрические, механические, гидравлические и другие системы. После создания модели можно запустить процесс моделирования. Simulink создаст систему дифференциальных уравнений, описывающих модель, и начнет выполнять ее решение численным методом. В качестве примера на рис. В.1 показана модель системы подавления шума с помощью адаптивного фильтра (это один из демонстрационных примеров набора блоков DSP Blockset). Кроме окна модели на рисунке видны окна трехканального осциллографа, анализатора спектра и графика импульсной характеристики фильтра. В процессе моделирования графики постоянно обновляются. Подробнее о системе Simulink можно прочитать в книгах [13, 15].
Simulink в настоящее время представляет собой весьма сложную систему, состоящую из нескольких отдельно устанавливаемых компонентов:
Simulink — ядро системы Simulink, среда моделирования систем непрерывного и дискретного времени;
Simulink Performance Tools — средства, упрощающие работу с большими Simu- link-моделями и позволяющие выполнять их оптимизацию;
Рис. В.1. Simulink-модель и окна графиков, динамически обновляемых в процессе моделирования
Stateflow® — средство моделирования систем, управляемых событиями [14];
Stateflow Coder — средство генерации С-кода на основе диаграмм Stateflow;
Real-Time Windows Target — среда моделирования, обеспечивающая выполнение моделей Simulink и Stateflow на персональном компьютере в реальном времени (с частотой дискретизации до 10 кГц);
Real-Time Workshop® — средство генерации С-кода на основе Simulink-моделей [14];
Real-Time Workshop Embedded Coder — средство генерации высококачественного исходного кода для встраиваемых систем;
Real-Time Workshop Ada Coder — средство генерации кода Ada 95 и Ada 83 на основе Simulink-моделей;
хРС Target — средство быстрого прототипирования приложений реального времени, использующих стандартные аппаратные средства персональных компьютеров;
хРС Target Embedded Option — средство создания и распространения приложений реального времени, использующих стандартные аппаратные средства персональных компьютеров;
Simulink Report Generator — средство создания документации для моделей Simulink и Stateflow;
Requirements Management Interface — средство связывания набора формальных технических требований с моделями Simulink, М-файлами и диаграммами Stateflow;
SimMechanics — средства моделирования механических систем.
Наборы блоков Simulink
Наборы блоков Simulink (blockset) представляют собой тематические библиотеки, ориентированные на конкретные предметные области:
CDMA Reference Blockset — блоки для моделирования систем мобильной телефонии IS-95A;
Communications Blockset — блоки для моделирования систем связи [14];
Dials & Gauges Blockset — набор графических блоков измерительных приборов для отображения сигналов и параметров моделирования;
DSP Blockset — блоки для моделирования систем цифровой обработки сигналов;
Fixed-Point Blockset — блоки для моделирования арифметики с фиксированной запятой;
Nonlinear Control Design Blockset — блоки для моделирования нелинейных систем управления [14];
Power System Blockset — блоки для моделирования энергетических систем [14].
Приложение Г Программа SPTool
Программа SPTool (Signal Processing Tool) предоставляет в распоряжение пользователя графическую среду для просмотра графиков сигналов и их спектров, расчета и анализа фильтров, а также фильтрации сигналов. Перечисленные действия относятся к тематике разных глав данной книги, поэтому описание программы SPTool размещено в приложении.
Для запуска программы SPTool необходимо набрать ее имя в командной строке MATLAB:
» sptool
Появится основное окно программы, показанное на рис. Г.1.
-^ SPTool: staitup.spt
fit» Edit Window Help
Spectra
mtlb [vector]mtlb [vector]chirp [vector] train [vector]chirp [vector] train [vector]FZIp [imported] FIRbp [design]FZIp [imported] FIRbp [design]mtlbse [auto]mtlbse [auto]chirpse [auto] trainse [auto]chirpse [auto] trainse [auto]
mtlb [vector]
mtlb [vector]
chirp [vector] train [vector]
chirp [vector] train [vector]
FZIp [imported] FIRbp [design]
FZIp [imported] FIRbp [design]
mtlbse [auto]
mtlbse [auto]
chirpse [auto] trainse [auto]
chirpse [auto] trainse [auto]
Viewj)jUpdateIViewj)jUpdateI
Viewj
)j
UpdateI
Viewj
)j
UpdateI
' View' View|View|
' View
' View
Naw Desiyij
Edit Design|
Apply J
Рис. Г.1. Программа SPTool — главное окно
В трех списках этого окна перечислены загруженные в программу SPTool сигналы (Signals), фильтры (Filters) и спектры (Spectra). Расположенные под списками кнопки позволяют выполнять различные операции, большинство из которых мы рассмотрим далее.
Типичный набор действий, выполняемых с помощью программы SPTool, включает в себя следующие операции:
загрузка сигнала;
просмотр графика сигнала;
спектральный анализ сигнала;
расчет фильтра;
фильтрация сигнала.
Далее мы кратко рассмотрим выполнение всех перечисленных процедур.
Загрузка сигнала
Для загрузки сигнала в меню File главного окна программы SPTool необходимо выбрать команду Import. Появится окно Import to SPTool, показанное на рис. Г.2.
Workspace CwtentoWorkspace Cwtento1"Ч»>1А|; |Signa,1"Ч»>1А|; |Signa,Sampling FmwncySampling Fmwncy-^ Import to SPTool-^ Import to SPToolHere [jTi’JHere [jTi’J^ F«Woiksp«*Г FwtM^ F«Woiksp«*Г FwtM□j□j
Workspace Cwtento
Workspace Cwtento
1"Ч»>1А|; |Signa,
1"Ч»>1А|; |Signa,
Sampling Fmwncy
Sampling Fmwncy
-^ Import to SPTool
-^ Import to SPTool
Here [jTi’J
Here [jTi’J
^ F«Woiksp«*
Г FwtM
^ F«Woiksp«*
Г FwtM
□j
□j
Рис. Г.2. Программа SPTool — окно импорта данных
Переключатель Source позволяет указать место хранения загружаемого сигнала — рабочую область MATLAB (From Workspace) или МАТ-файл (From Disk). Во втором случае становится доступным поле ввода MAT-file Name, в которое нужно ввести вручную или с помощью кнопки Browse имя нужного МАТ-файла.
В списке Workspace Contents перечислены переменные, имеющиеся в рабочей памяти MATLAB в данный момент. Если в качестве источника был выбран МАТ- файл, этот список будет называться File Contents и перечислять переменные, сохраненные в выбранном файле.
В раскрывающемся списке Import As выберите вариант Signal. Остальные два варианта, Filter и Spectrum, позволяют импортировать описания фильтров и уже рассчитанных спектров для просмотра и анализа.
Выберите в списке переменную, содержащую отсчеты загружаемого сигнала, и щелкните на кнопке -->, расположенной рядом с полем ввода Data. Можно также вручную ввести в это поле идентификатор переменной.
В поле ввода Sampling Frequency по умолчанию находится значение 1. Его можно отредактировать вручную, а можно импортировать, введя идентификатор переменной или выбрав его в списке и щелкнув на нижней кнопке -->.
Наконец, в поле ввода Name можно отредактировать имя, под которым данный сигнал будет фигурировать в программе SPTool. Сделав это, щелкните на кнопке ОК. Импортированный сигнал появится в списке Signals основного окна программы (см. рис. Г.1).
Просмотр графика сигнала
Для просмотра графика сигнала выберите его в списке Signals (см. рис. Г.1) и щелкните на кнопке View, расположенной под этим списком. Появится окно Signal Browser, показанное на рис. Г.З.
^ Siijnol [howxerOI"IO
File м**» Widow Help 2: 1~.
aa 4 , ' rix s ♦ * • г щ H - гл ^
Рис. Г.З. Программа SPTool — окно просмотра сигналов
В данном окне выводятся два графика. Нижний, с надписью Panner, показывает панораму всего сигнала. Верхний график первоначально тоже отображает весь сигнал, но масштаб отображения можно увеличить, и тогда верхний график будет показывать лишь фрагмент сигнала, а положение этого фрагмента на общей панораме демонстрируется с помощью прямоугольника на нижнем графике. Этот прямоугольник можно перетаскивать мышью, меняя тем самым участок обзора.
Кнопки панели инструментов окна Signal Browser позволяют распечатывать график сигнала, воспроизводить сигнал с помощью звуковой карты компьютера, управлять масштабом отображения, выбирать нужный канал в случае многоканального сигнала и задавать нужный режим отображения маркеров.
На график можно нанести два маркера, позволяющие производить над сигналом количественные измерения. Маркеры перетаскиваются с помощью мыши, а информация о помеченных ими отсчетах сигнала выводится в нижней части окна. Можно экспортировать эту информацию в рабочую область памяти MATLAB в виде структуры — для этого служит команда Export меню Markers.
Спектральный анализ сигнала
Для анализа спектра сигнала, загруженного в программу SPTool, выберите нужный сигнал в списке Signals главного окна программы (см. рис. Г.1) и щелкните на кнопке Create, расположенной под списком Spectra. Появится окно Spectrum Viewer, показанное на рис. Г.4.
Рис. Г.4. Программа SPTool — окно спектрального анализа
В левой части окна выбирается метод спектрального анализа и настраиваются его параметры. За более подробной информацией о сущности различных методов и имеющихся у них параметрах обратитесь к материалу главы 5.
Раскрывающийся список, в котором первоначально выведена строка Inherit from, позволяет скопировать полный набор настроек анализатора спектра из другого расчета, представленного в списке Spectra основного окна программы.
Произведя настройку параметров анализа, щелкните на кнопке Apply. Будет рассчитана оценка спектра сигнала и выведен соответствующий график. Кнопки
панели инструментов позволяют выполнять те же операции, что были перечислены выше применительно к просмотру графиков сигналов. При просмотре спектра также возможно использование маркеров.
Расчет фильтра
Для расчета дискретного фильтра щелкните на кнопке New Design, расположенной под списком Filters в главном окне программы SPTool (см. рис. Г.1). Можно также изменить параметры уже рассчитанного фильтра, выбрав его в списке Filters и щелкнув на кнопке Edit Design. В любом из перечисленных случаев появится окно Filter Designer, показанное на рис. Г.5.
^Filter Designer
р, /Ч i м * ^ х ff
Рис. Г.5. Программа SPTool — окно расчета фильтров
В раскрывающемся списке Algorithm выбирается метод расчета, а в разделе Specifications задаются параметры синтезируемого фильтра. За более подробной информацией о методах синтеза дискретных фильтров обратитесь к материалу главы 6.
Выбрав метод расчета и задав параметры фильтра, щелкните на кнопке Apply для выполнения синтеза. В центре окна будет выведен график АЧХ получившегося фильтра, а в разделе Measurements показаны его параметры.
Кнопки панели инструментов позволяют управлять масштабом отображения графика. Кроме того, можно вывести график АЧХ в полосе пропускания крупным планом, а также наложить на АЧХ график одного из спектров, перечисленных в списке Spectra основного окна программы.
Возможности программы SPTool по синтезу фильтров существенно ограничены по сравнению с программой FDATool, описанной в главе 6. Единственная возможность, имеющаяся в SPTool и отсутствующая в FDATool, — это прямое редактирование расположения нулей и полюсов фильтра. Для такого редактирования выберите в списке Algorithm последнюю строку — Pole/Zero Editor. Окно Filter Designer примет вид, показанный на рис. Г.6.
Рис. Г.6. Программа SPTool — редактирование расположения нулей и полюсов фильтра
В этом режиме редактирования фильтра можно перемещать нули и полюсы мышью, добавлять и удалять их, автоматически формировать из них комплексносопряженные пары.
ЗАМЕЧАНИЕ
Поскольку в окне Filter Designer при редактировании нулей и полюсов не выводится график АЧХ фильтра, при использовании данного режима следует одновременно с окном Filter Designer открыть и рассматриваемое далее окно Filter Viewer. При редактировании фильтра в окне Filter Designer его характеристики, отображаемые в окне Filter Viewer, будут синхронно обновляться. Вообще окна программы SPTool не являются модальными, то есть можно открыть любое их количество и свободно переключаться между ними.
Просмотр характеристик фильтра
Для просмотра характеристик фильтра, загруженного в программу SPTool, выберите его в списке Filters основного окна программы (см. рис. Г.1) и щелкните
на кнопке View, расположенной под этим списком. Появится окно Filter Viewer, показанное на рис. Г.7.
Рис. Г.7. Программа SPTool — просмотр характеристик фильтра
В левой части окна Filter Viewer расположена группа флажков Plots для выбора состава отображаемых графиков. В разделе Frequency Axis можно выбрать частотный диапазон для просмотра характеристик и задать тип шкалы частот — линейный или логарифмический.
Кнопки панели инструментов позволяют управлять режимом отображения и выводом маркеров для текущего графика, оси которого выделяются красным цветом. Информация о маркерах, как обычно, выводится в нижней части окна.
Фильтрация сигнала
Для пропускания сигнала через фильтр необходимо выбрать сигнал и фильтр соответственно в списках Signals и Filters основного окна программы (см. рис. Г.1), а затем щелкнуть на кнопке Apply, расположенной под списком Filters. Появится окно Apply Filter, показанное на рис. Г.8.
Единственным доступным полем ввода в этом окне является поле Output Signal, в котором нужно задать имя для выходного сигнала. В раскрывающемся списке Algorithm можно выбрать функцию MATLAB для осуществления фильтрации — filter, filtfilt или fftfilt (см. главу 4). Выполнив эти действия, щелкните на кнопке ОК. Будет рассчитан выходной сигнал, который появится под указанным именем в списке Signals основного окна программы.
Рис. Г.8. Программа SPTool — окно применения фильтра
Просмотреть график выходного сигнала и выполнить анализ его спектра можно описанными ранее способами. Для одновременного просмотра графиков входного и выходного сигналов нужно выбрать их оба в списке Signals основного окна программы (для этого при щелчке на выбираемом сигнале необходимо, как это принято в Windows, нажать клавишу Ctrl) и щелкнуть на кнопке View. В открывшемся окне Signal Browser будут показаны графики обоих выбранных сигналов (рис. Г.9).
«£ Signal Browset
Рис. Г.9. Программа SPTool — одновременный просмотр графиков входного и выходного сигналов фильтра
ЗАМЕЧАНИ Е
Аналогичным образом можно просматривать несколько спектров или характеристики нескольких фильтров одновременно.
•§uiss930jj [bu§i§ вхэявп гчиюхэиэ ионноявёиэ ей чхиьлгои онжок хмннвУ dXxxXdxo XIчиI9Лdиxdoпэяe эявхэоэ о ошПвиРофни
•>|S!a о; yodxg иояпоня кэчхвяоечконэоя омийохдоэн тгивф-дуу^ я иэип -ве хи Kifir в ‘gVdlVW ихючвп чхэвидо oiAhogsd я xmhhbIT dwiAdxo хишоштхэхэя -хооэ xdoпэяe xotoeeHodn aoeds>po/v\ oi podxg эяпоня вн яоыгэ^д гияэчдо srawoAd -илЛопэяе 4XBdgi4H отшохдоэн ‘вняо олохе чхэвн оххяэи мэшсивкинве ‘эяэипэ д
хннне^ eidouoxe онио — looidS bimimbCjocIij "О I "J ‘omjхннне^ eidouoxe онио — looidS bimimbCjocIij "О I "J ‘omj
хннне^ eidouoxe онио — looidS bimimbCjocIij "О I "J ‘omj
хннне^ eidouoxe онио — looidS bimimbCjocIij "О I "J ‘omj
01-j ond вн эоннвевяоп
‘looidS wojj yodxg оняо кэхиякоп мРнвгхоя ионнвУ BdogwB эггэоц 'ро^дд KWKBdj -odn вняо олоняонэо and ошэк ей podxg вйнвиюя кэхэЛечиопэи олохе кггу -Х1чннв1г dXxMXdxo эУия я Iчdxя9цэ и IчdxчIfиф ‘шгвнлиэ 4XBHodHxdoH9xe онжом ‘oxox gwod^
'Э|Н ошэк эж олох uoissss uado ИО^НВИЮЯ ОНЖОК ЭНВЭЭ HI4HH9HBdXO3 4XHeXdxB£ "ids 9HH9dHni3Bd ХО19И1И яоэ -нвээ 1Ч1гивф •KKWBdxodn вняо олоняонэо aiy oiH9w ей sy uoissas элед иии uoissag элед гчУнвиюя oihIhokoh э 4XHHBdxoo онжои! роддд иo^ч^чвdлodп э i4xoged энвэд
iqioged ао±е±чиА£эс1 аинанеихоэ
Z8SZ8SlooidS evMwedjod|j j anHaxowdij
Z8S
Z8S
Литература
Я решил несколько отойти от традиции, согласно которой список литературы должен выглядеть как монотонный и безликий перечень. Вместо этого я разбил список на несколько групп и дал комментарии к каждой группе, постаравшись пояснить, с какой целью включена в список каждая книга и какую пользу сможет извлечь из нее читатель.
В список литературы помещались только источники, доступные читателю, поэтому в нем отсутствуют зарубежные издания (имеется лишь единственное оговоренное исключение).
Радиотехника
К этой группе относятся книги, посвященные преимущественно теоретической радиотехнике. В них можно найти более глубокое теоретическое обоснование материала глав 1-2. [1] и [2] — это последние из нескольких изданий двух классических учебников по курсу «Радиотехнические цепи и сигналы». Двухтомный курс лекций [3] представляет зарубежный подход к этим вопросам. Книга [4] — учебное пособие на ту же тему, в составлении которого принимал участие и автор данной книги. Монография [5] — фундаментальный курс по теории сигналов, где подробно изложены принципы построения пространства сигналов и решения оптимизационных задач в этом пространстве. Наконец, [6] — поистине великолепная книга, помогающая пытливо и непредвзято взглянуть на некоторые вопросы теории связи и информации, получив при этом весьма неожиданные на первый взгляд результаты. В общем, эту книгу должен прочесть каждый, кто собирается серьезно заниматься обработкой сигналов или телекоммуникациями.
Гоноровский И. С., Демин М. П. Радиотехнические цепи и сигналы: Учебник для вузов. — М.: Радио и связь, 1994.
Баскаков С. И. Радиотехнические цепи и сигналы: Учебник для вузов по спец. «Радиотехника». — М.: Высш, шк., 2000.
Сиберт У. М. Цепи, сигналы, системы: В 2 ч. / Пер. с англ. — М.: Мир, 1988.
Иванов М.Т., Сергиенко А. Б., Ушаков В. Н. Теоретические основы радиотехники. Учебное пособие / Под ред. В. Н. Ушакова. — М.: Высш, шк., 2002.
Френке Л. Теория сигналов / Пер. с англ.; Под ред. Д. Е. Бакмана. — М.: Сов. радио, 1974.
Финк Л. М. Сигналы, помехи, ошибки... Заметки о некоторых неожиданностях, парадоксах и заблуждениях в теории связи. 2-е изд., перераб. и доп. — М.: Радио и связь, 1984.
Цифровая обработка сигналов
К данной группе относятся книги, речь в которых идет о собственно цифровой обработке сигналов. К сожалению, их немного, и изданы они по большей части довольно давно. [7] и [8] — два классических труда по цифровой обработке сигналов. В них подробно изложена теория дискретных сигналов, дискретной фильтрации и дискретного спектрального анализа. Несмотря на свой солидный возраст, эти книги не потеряли актуальности —■ разве что главы, посвященные аппаратной реализации цифровой обработки сигналов, сейчас могут вызвать лишь ностальгическую улыбку... Об их непреходящей ценности свидетельствует и тот факт, что обе книги [7, 8] включены в список литературы к курсу «Discrete-Time Signal Processing», читаемому в MIT (Massachusetts Institute of Technology, Массачусетский технологический институт — одно из ведущих высших учебных заведений мира в области радиотехники, телекоммуникаций и вычислительной техники). Книга [9], хотя и издана в США, может быть доступна читателю. Дело в том, что она входила в комплект документации, поставлявшейся фирмой Analog Devices, Inc. вместе с учебно-демонстрационными платами на цифровых сигнальных процессорах ADSP218x. Кроме того, эта книга в PDF-формате имеется на CD-ROM с информационными материалами, бесплатно распространяемом фирмой Analog Devices. На этом диске содержится еще несколько книг, посвященных базовым понятиям цифровой обработки сигналов. Книга [10] посвящена цифровому спектральному анализу, в ней можно найти подробное теоретическое обоснование вопросов, обсуждавшихся в главе 5. Наконец, в книге [И] описаны как некоторые алгоритмы цифровой обработки сигналов, так и вопросы, связанные с реализацией этих алгоритмов на специализированных цифровых сигнальных процессорах.
Голд Б., Рэйдер Ч. Цифровая обработка сигналов / Пер. с англ.; Под ред. А. М. Трахтмана. — М.: Сов. радио, 1973, 368 с:
Рабинер Л., Гоулд Б. Теория и применение цифровой обработки сигналов / Пер. с англ.; Под ред. К). И. Александрова. — М.: Мир, 1978.
Digital Signal Processing Applications Using the ADSP-2100 Family. — Prentice Hall, Englewood Cliffs, 1992.
Марпл-мл. С. Л. Цифровой спектральный анализ и его приложения /Пер. с англ. — М.: Мир, 1990.
И. Куприянов М. С., Матюшкин Б. Д. Цифровая обработка сигналов: процессоры, алгоритмы, средства проектирования. — СПб.: Политехника, 1999.
MATLAB
В данную группу собраны книги, посвященные системе MATLAB. За последнее время таких книг издано несколько десятков, поэтому ограничимся лишь несколькими названиями. Книга [12] — учебный курс по последней, шестой версии MATLAB. Справочник [13] посвящен пакетам расширения MATLAB, имеющим общематематический характер. Для обработки сигналов из этих пакетов наиболее интересны Statistics (Статистика) и Neural Networks (Нейронные сети). В справочнике [14], среди прочих, кратко описан пакет Communications. Учебный курс [15] посвящен Simulink — расширению MATLAB, предназначенному для моделирования динамических систем (см. приложение В). Наконец, книга [16] содержит описания системы численных расчетов MATLAB, системы аналитических вычислений Maple и системы верстки текстов с математическими формулами LaTeX.
Дьяконов В. П. MATLAB 6: Учебный курс. — СПб.: Питер, 2002.
Дьяконов В., Круглов В. Математические пакеты расширения MATLAB: Специальный справочник. — СПб.: Питер, 2001.
Дьяконов В., Круглов В. MATLAB. Анализ, идентификация и моделирование систем: Специальный справочник. — СПб.: Питер, 2002.
Гультяев А. Визуальное моделирование в среде MATLAB: Учебный курс. — СПб: Питер, 2000.
Говорухин В. Н„ Цибулин В. Г. Компьютер в математическом исследовании: Учебный курс. — СПб.: Питер, 2001,
Разное
К данной группе отнесены книги, не попадающие в предыдущие категории. Книга [17] посвящена численным методам оптимизации, которые могут использоваться, в частности, при прямом синтезе дискретных фильтров (см. главу 6). В книгах [18] и [19] рассматриваются адаптивные фильтры, параметры которых автоматически подстраиваются в соответствии со статистическими свойствами обрабатываемых сигналов. Такие фильтры сейчас повсеместно применяются в разнообразных системах обработки сигналов.
Гилл Ф., Мюррей У., Райт М. Практическая оптимизация / Пер. с англ. — М.: Мир, 1985.
Адаптивные фильтры / Пер. с англ.; Под ред. К. Ф. Н. Коуэна и П. М. Гранта. — М.: Мир, 1988.
Уидроу Б., Стирнз С. Д. Адаптивная обработка сигналов. — М.: Радио и связь, 1989.
Алфавитный указатель
' (апостроф), эрмитово сопряжение, 513< (меньше), 528% (знак процента), 525( ) (круглые скобки), 519, (запятая), 513, 525.*, поэлементное умножение, 512.’, транспонирование, 513... (три точки), 525./, поэлементное деление, 512Л поэлементное возведение в степень, 512: (двоеточие), 519-520: (точка с запятой), 513-514, 525{} (фигурные скобки), 524~= (не равно), 528= (меньше или равно), 528== (равно), 528(меньше), 528(больше), 528= (больше или равно), 528р-Analysis and Synthesis Toolbox, 571AADC, 129additive white Gaussian noise channel, 177ademod, функция, 487AM с подавленной несущей, 493амплитудная модуляция, 490квадратурная модуляция, 496однополосная модуляция, 495фазовая модуляция, 497частотная модуляция, 498ademodce, функция, 487АМ с подавленной несущей, 493амплитудная модуляция, 490квадратурная, модуляция, 496однополосная модуляция, 495фазовая модуляция, 497частотная модуляция, 498' (апостроф), эрмитово сопряжение, 513< (меньше), 528% (знак процента), 525( ) (круглые скобки), 519, (запятая), 513, 525.*, поэлементное умножение, 512.’, транспонирование, 513... (три точки), 525./, поэлементное деление, 512Л поэлементное возведение в степень, 512: (двоеточие), 519-520: (точка с запятой), 513-514, 525{} (фигурные скобки), 524~= (не равно), 528= (меньше или равно), 528== (равно), 528(меньше), 528(больше), 528= (больше или равно), 528р-Analysis and Synthesis Toolbox, 571AADC, 129additive white Gaussian noise channel, 177ademod, функция, 487AM с подавленной несущей, 493амплитудная модуляция, 490квадратурная модуляция, 496однополосная модуляция, 495фазовая модуляция, 497частотная модуляция, 498ademodce, функция, 487АМ с подавленной несущей, 493амплитудная модуляция, 490квадратурная, модуляция, 496однополосная модуляция, 495фазовая модуляция, 497частотная модуляция, 498aliasing, 130, 133, 231
' (апостроф), эрмитово сопряжение, 513
< (меньше), 528
% (знак процента), 525
( ) (круглые скобки), 519
, (запятая), 513, 525
.*, поэлементное умножение, 512
.’, транспонирование, 513
... (три точки), 525
./, поэлементное деление, 512
Л поэлементное возведение в степень, 512
: (двоеточие), 519-520
: (точка с запятой), 513-514, 525
{} (фигурные скобки), 524
~= (не равно), 528
= (меньше или равно), 528
== (равно), 528
(меньше), 528
(больше), 528
= (больше или равно), 528
р-Analysis and Synthesis Toolbox, 571
A
ADC, 129
additive white Gaussian noise channel, 177
ademod, функция, 487
AM с подавленной несущей, 493
амплитудная модуляция, 490
квадратурная модуляция, 496
однополосная модуляция, 495
фазовая модуляция, 497
частотная модуляция, 498
ademodce, функция, 487
АМ с подавленной несущей, 493
амплитудная модуляция, 490
квадратурная, модуляция, 496
однополосная модуляция, 495
фазовая модуляция, 497
частотная модуляция, 498
' (апостроф), эрмитово сопряжение, 513
< (меньше), 528
% (знак процента), 525
( ) (круглые скобки), 519
, (запятая), 513, 525
.*, поэлементное умножение, 512
.’, транспонирование, 513
... (три точки), 525
./, поэлементное деление, 512
Л поэлементное возведение в степень, 512
: (двоеточие), 519-520
: (точка с запятой), 513-514, 525
{} (фигурные скобки), 524
~= (не равно), 528
= (меньше или равно), 528
== (равно), 528
(меньше), 528
(больше), 528
= (больше или равно), 528
р-Analysis and Synthesis Toolbox, 571
A
ADC, 129
additive white Gaussian noise channel, 177
ademod, функция, 487
AM с подавленной несущей, 493
амплитудная модуляция, 490
квадратурная модуляция, 496
однополосная модуляция, 495
фазовая модуляция, 497
частотная модуляция, 498
ademodce, функция, 487
АМ с подавленной несущей, 493
амплитудная модуляция, 490
квадратурная, модуляция, 496
однополосная модуляция, 495
фазовая модуляция, 497
частотная модуляция, 498
all, функция, 528
allpass filter, 196
AM, 427
amod, функция, 487
AM с подавленной несущей, 491
амплитудная модуляция, 490
квадратурная модуляция, 496
однополосная модуляция, 493
фазовая модуляция, 496
частотная модуляция, 497
amodce, функция, 487
АМ с подавленной несущей, 491
амплитудная модуляция, 490
квадратурная модуляция, 496
однополосная модуляция, 493
фазовая модуляция, 496
частотная модуляция, 497
amplitude modulation, 427
with suppressed carrier, 438
amplitude shift keying, 466
AM-SC, 438
analog, 127
Analog-to-Digital Converter, 129
Analysis, меню, 369
angle modulation, 447
ans, переменная, 511
any, функция, 528
Apply Filter, окно, 581
Apply, кнопка, 420
AR model, 277
arburg, функция, 305
arcov, функция, 305
ARMA model, 278
armcov, функция, 305
Array Editor, 518
aryule, функция, 305
ASK, 466
auread, функция, 182
autoregressive model, 277
Autoregressive Moving Average, 278
auwrite, функция, 183
averaged modified periodogram method, 276
AWGN channel, 177
awgn, функция, 177
axis, функция, 551
В
band-pass filter, 104
band-stop filter, 104
Bartlett, 276
bartlett, функция, 289
beat, 438
besselap, функция, 116
besself, функция, 120
bi2de, функция, 379
bilinear transformation, 314
bilinear, функция, 334
binary, 461
bitand, функция, 379
bitget, функция, 379
blackman, функция, 294
blockset, 574
box, функция, 551
boxcar, функция, 288
break, ключевое слово, 530
buttap, функция, 107
butter, функция, 120, 329
butterfly, 258
buttord, функция, 122, 332
c
canonic form, 206
carrier, 426
case, ключевое слово, 529
CDMA Reference Blockset, 574
cell array, 523
cheblap, функция, 108
cheblord, функция, 122, 332
cheb2ap, функция, 112
cheb2ord, функция, 122, 333
chebwin, функция, 297
chebyl, функция, 120, 329
cheby2, функция, 120, 329
chirp, функция, 168
clabel, функция, 547
clear, команда, 535
colormap, функция, 170, 301
Command History, вкладка, 517
Command Window, 510
Communications Blockset, 574
Communications Toolbox, 571
constellation, 468
constrained least square, 352, 354
continue, ключевое слово, 531
continuous phase frequency shift keying, 463
contour, функция, 547
contourS, функция, 549
contourf, функция, 549
Control System Toolbox, 571
conv, функция, 125, 212
Convert structure, кнопка, 420
convert, функция, 410
convmtx, функция, 224
convolution matrix, 224
copyobj, функция, 404, 410, 423
correlation, 69
correlation function, 50
covariance, 69
CPFSK, 463
cremez, функция, 360
cross-correlation function, 52
cumulative distribution function, 63
Current Directory,
вкладка, 518
список, 518, 528
Curve Fitting Toolbox, 570
D
DAC, 129
Daniell, 276
daqfcngen, демонстрационная
программа, 187
daqscope, демонстрационная
программа, 187
Data Acquisition Toolbox, 186, 570
Database Toolbox, 571
Datafeed Toolbox, 572
ddeniod, функция, 487
амплитудная манипуляция, 499
квадратурная манипуляция, 500
минимальная частотная
манипуляция, 504
фазовая манипуляция, 502
частотная манипуляция, 503
ddemodce, функция, 487
амплитудная манипуляция, 499
квадратурная манипуляция, 500
минимальная частотная
манипуляция, 504
фазовая манипуляция, 502
частотная манипуляция, 503
decimate, функция, 232
decimation, 230
in frequency, 259
in time, 256
deconv, функция, 212
deconvolution, 212
DECT, 282
demod, функция, 481
AM с подавленной несущей, 483
амплитудная модуляция, 482
время-импульсиая
модуляция, 486
квадратурная модуляция, 485
однополосная модуляция, 483
фазовая модуляция, 484
частотная модуляция, 484
широтно-импульсная модуляция, 486
demodmap, функция, 504
demodulation, 426
Denominator, поле ввода, 371
denormalmax, функция, 404
denormalmin, функция, 404
Design Filter,
вкладка, 368
кнопка, 369
команда меню, 372
переключатель, 368
Developer's Kit
for Texas Instruments™ DSP, 571
DFT, 251
dftmtx, функция, 287
Dials & Gauges Blockset, 574
DIF, 259
differential phase shift keying, 467
digital, 128
Digital-to-Analog Converter, 129
direct form I, 206
direct form II, 206
direct transposed form I, 209
direct transposed form II, 208, 214
diric, функция, 167
Discrete Fourier Transform, 251
discrete series, 127
discrete-time, 128
disp, функция, 404, 412, 423, 532
DIT, 256
dmod, функция, 487
амплитудная манипуляция, 499
квадратурная манипуляция, 500
минимальная частотная
манипуляция, 503
фазовая манипуляция, 501
частотная манипуляция, 502
dmodce, функция, 487
амплитудная манипуляция, 499
квадратурная манипуляция, 500
минимальная частотная манипуляция, 503
фазовая манипуляция, 501
частотная манипуляция, 502
double, 379
DPSK, 467
DSP Blockset, 574
Е
eigenvectors, 284
ellip, функция, 120, 329
ellipap, функция, 114
ellipord, функция, 122, 333
else, ключевое слово, 528
elseif, ключевое слово, 529
end, ключевое слово
максимальное значение индекса, 520
оператор for, 529
оператор while, 530
оператор выбора, 529
условный оператор, 528
ensemble averaging, 64
envelope, 160
eps, функция, 404, 412, 423
eqtflength, функция, 125, 225
equiripple filter, 319
erf, функция, 67
erfc, функция, 67
erfinv, функция, 67
ergodic, 72
error function, 66
EV, 284
even symmetry, 204
Excel Link, 571
exponent, 377
exponentbias, функция, 404
exponentlength, функция, 404
exponentmax, функция, 404
exponentmin, функция, 404
Export from SPTool, окно, 583
Export To, список, 370
Export, команда меню, 370
extended, 380
eye diagram, 476
eyediagram, функция, 506
F
Fast Fourier Transform, 256
fda, расширение файлов, 370
'DATool, среда для расчета фильтров, 367
анализ фильтра, 369
импорт фильтра, 371
квантование фильтров, 418
синтез фильтра, 368
сохранение результатов, 370
•FT, 256
ft, функция, 285, 399, 421, 522
ftfilt, функция, 287, 581
ftn, функция, 522
ftshift, функция, 286
ield, 523
igure window, 515
'igure, функция, 553
File, меню, 370
Filter Design Toolbox, 571
Filter Designer, окно, 579
Filter Order, раздел, 368
Filter Specifications, график, 369
Filter Specifications, команда меню, 369
Filter Structure, список, 371 -
Filter Type, переключатель, 368
Filter Viewer, окно, 581
Filter, меню, 371-372
filter, функция, 213, 399-400, 410, 581
filtfilt, функция, 215, 232, 581
filtic, функция, 214
Financial Derivatives Toolbox, 572
Financial Time Series Toolbox, 572
Financial Toolbox, 572
find, функция, 154
finite impulse response, 203
FIR filter, 203
firl, функция, 340
fir2, функция, 341
fircls, функция, 352
firclsl, функция, 354
firlpnorm, функция, 365
firls, функция, 238, 349
firrcos, функция, 344
fixed point, 374
Fixed-Point Blockset, 574
fliplr, функция, 125
float, 379
floating point, 374
flops, функция, 285
fluctuation, 64
FM, 448
for, ключевое слово, 529
Format, поле ввода, 420
Fourier transform, 31
fprintf, функция, 532
fractionlength, функция, 404
freqs, функция, 97
freqspace, функция, 219
Frequency and Magnitude Specifications, раздел, 369
frequency deviation, 450
Frequency Domain System Identification
Toolbox, 571
frequency modulation, 448
frequency shift keying, 462
Frequency Specifications, раздел, 369
freqz, функция, 217, 288, 410
Fs, поле ввода, 372
FSK, 462
function, 525
ключевое слово, 526
Fuzzy Logic Toolbox, 571
G
gain, 94, 196, 228
GARCH Toolbox, 572
gauspuls, функция, 159
Gaussian distribution, 66
get, функция, 399
granular limit cycle, 394
gremez, функция, 362
grid, функция, 551
group delay, 90
Group Delay, команда меню, 369
grpdelay, функция, 219
GSM, 282
H
hamming, функция, 292
hann, функция, 291
help, команда, 516, 527
Help, меню, 516
helpdesk, команда, 516
heterodyne, 142
heterodyning, 143
hex2num, функция, 404
high-pass filter, 104
hilbert, функция, 243, 484
hilbiir, функция, 348
hist, функция, 173
Hoertzel, 265
I
if, ключевое слово, 528
ifft, функция, 285, 421, 522
ifftn, функция, 522
HR filter, 206
iirgrpdelay, функция, 366
iirlpnorm, функция, 365
iirlpnormc, функция, 365
imag, функция, 243
Image Processing Toolbox, 571
imagesc, функция, 300
impinvar, функция, 335
Import Filter,
вкладка, 371
кнопка, 372
комадна меню, 371
Import to SPTool, окно, 576
impulse invariance, 315
Impulse Response, команда меню, 369
impz, функция, 216, 410
infinite impulse response, 206
initial conditions, 214
Input/output scaling, поле ввода, 420
instantaneous frequency, 448
Instrument Control Toolbox, 570
interp, функция, 236
interpolation, 230
polyphase algorithm, 238
intersymbol interference, 475
inverse Chebyshev filter, 110
invfreqz, функция, 337
isallpass, функция, 412■
isempty, функция, 528
iscqual, функция, 528
isfir, функция, 412
ISI, 475
islinphase, функция, 412
ismaxphase, функция, 412
isminphase, функция, 412
isreal, функция, 412
issos, функция, 412
isstablc, функция, 412
К
kaiser, функция, 295
kaiserord, функция, 342
keying, 461
L
Launch Pad, вкладка, 518
leakage, 270
legend, функция, 551
length, функция, 423, 519
limit cycle, 393
limitcycle, функция, 412, 417
linear prediction, 278
lloyds, функция, 398
LMI Control Toolbox, 571
load, команда, 533
loglog, функция, 545
long double, 380
low-pass filter, 104
lp2bp, функция, 118
lp2bs, функция, 120
lp2hp, функция, 117
1р21р, функция, 117
M
MA model, 278
Magnitude and Phase, команда меню, 369
Magnitude Response, команда меню, 369
Magnitude Specifications, раздел, 369
mantissa, 377
Mapping Toolbox, 570
marcumq, функция, 85
MATLAB
C/C++ Graphics Library, 569
C/C++ Math Library, 569
Compiler, 569
Excel Builder, 569
Report Generator, 569
Runtime Server, 569
Web Server, 570
графика, 542
двумерная, 542
копирование графиков, 555
настройка оформления, 549
панель инструментов графического окна, 543
трехмерная, 545
интерактивный режим, 510
интерфейс главного окна, 517
использование русского языка, 542
командное окно, 510
компоненты,569
переменные, 511
глобальные, 527
локальные, 527
подавление вывода результата, 514
поэлементные операции, 512
программирование, 524
ввод и вывод данных, 532
запись нескольких операторов в строке, 525
комментарии, 525
логические условия, 528
оператор выбора, 529
оптимизация программ, 534 отладка, 533
MATLAB (продолжение)
программы, 525
профилирование, 538
разрыв длинных строк, 525
редактор/отладчик М-файлов, 526
сценарии, 525
условный оператор, 528
функции,525-526
циклы,529
путь поиска файлов, 527
системные требования, 508
справочная система, 515
HTML-документация, 516
PDF-документация, 517
встроенная справка, 515
типы данных
массивы, 518
массивы ячеек, 523
многомерные массивы, 521
нумерация элементов, 519
строки, 522
структуры, 523
установка, 509
ядро, 569
MatrixVB, 570
МАТ-файлы, 185, 533
max, функция, 405
MBSA, 249
McClellan J. Н., 319
mean value, 64
mesh, функция, 548
meshc, функция, 548
meshgrid, функция, 546
meshz, функция, 548
min, функция, 405
minimax approximation, 319
Minimum order, переключатель, 369
minimum shift keying, 466
Mode, список, 420
Model Predictive Control Toolbox, 571
Model-Based Spectrum Analysis, 249
modified periodogram, 275
modinap, функция, 504
modulate, функция, 481
AM с подавленной несущей, 483
амплитудная модуляция, 482
время-импульсная модуляция, 486
квадратурная модуляция, 485
однополосная модуляция, 483
фазовая модуляция, 484
частотная модуляция, 484
широтно-импульсная модуляция, 486
modulated signal, 426 modulating signal, 426 modulation, 426
index, 449
Motorola DSP Developer's Kit, 571 Moving Average, 278 MSK, 466 multiband filter, 340
Multiple Signal Classification, 282 MUSIC, 282
оценка частот, 283
N
nargin, функция, 531 nargout, функция, 531 Neural Network Toolbox, 570 nlm, функция, 412 noise subspace, 283 Nonlinear Control Design
Blockset, 574 nonparainetric spectrum analysis, 249 nonrecursive filter, 202 noperations, функция, 405, 412, 423 normal distribution, 66 normalize, функция, 413 normcdf, функция, 67 norminv, функция, 67 normpdf, функция, 67 noverflows, функция, 405, 413, 423 num2bin, функция, 413 num2hex, функция, 405, 413 num2int, функция, 413 numberofsections, функция, 413 Numerator, поле ввода, 371 nunderflows, функция, 405 Nyquist frequency, 130 Nyquist theorem, 139
О
odd symmetry, 204
Open Session, кнопка, 370 Optimization Toolbox, 570 optimizeunitygains, функция, 413, 423 order, функция, 413 otherwise, ключевое слово, 529 overflow limit cycle, 394 Overflow mode, список, 420 overlap-add, 270 overlap-save, 270 Overwrite Existing Variables, флажок, 371
Р
parametric spectrum analysis, 249
Parks T. W„ 319
Partial Differential Equation
Toolbox, 570
pburg, функция, 305
pcolor, функция, 549
pcov, функция, 305
PDF, 63
peig, функция, 311
periodogram, 275
periodogram, функция, 301
phase
delay, 90
modulation, 448
Phase Response, команда меню, 369
phase shift keying, 467
plot, функция, 151, 153, 542
plot3, функция, 545
plotyy, функция, 545
PLS_Toolbox, 570
PM, 448
pmcov, функция, 305
pmusic, функция, 308
polar, функция, 545
pole, 94, 196
Pole/Zero Plot, команда меню, 370
poly, функция, 101
polyder, функция, 125
Polynomial Toolbox, 572
polyphase algorithm, 238
polyval, функция, 125
Portable Graph Object, 571
power spectral density, 75
Power System Blockset, 574
prediction error, 278
print, функция, 556
probability density function, 63
profile, команда, 538
prony, функция, 339
psd, функция, 305
psdplot, функция, 305
pseudospectrum, 282
PSK, 467
PTM, 486
pulse
time modulation, 486
train, 161
width modulation, 477
pulstran, функция, 161
pwelch, функция, 303
PWM, 477
pyulear, функция, 305
р-норма, 318, 365
Q
QAM, 459
QASK, 467
qfft, функция, 421
свойства объекта, 421
qfilt, функция, 408
свойства объекта, 410
структура фильтра, 408
qfilt2tf, функция, 413
QFT Frequency Domain Control Design
Toolbox, 572
qreport, функция, 400, 405, 413, 423
quadrature, 160
amplitude modulation, 459
amplitude shift keying, 467
quantiz, функция, 398
quantization, 128
error, 128
noise, 128
quantize, функция, 402
Quantizer type, список, 420
quantizer, функция, 400
свойства объекта, 401
quotient, 212
R
RADIX, 260
radix, функция, 423
raised cosine filter, 325
square root, 328
rand, функция, 172-173
randint, функция, 462
randn, функция, 172, 176
range, функция, 405, 414, 423 ■
raylcdf, функция, 84
Rayleigh, 83
raylinv, функция, 84
raylpdf, функция, 84
raylrnd, функция, 84
raylstat, функция, 84
rcosfir, функция, 346
rcosiir, функция, 347
rcosine, функция, 345
realmax, функция, 405
realmin, функция, 405
Real-Time Windows Target, 573
Real-Time Workshop, 573
Ada Coder, 573
Embedded Coder, 573
rectpuls, функция, 155
recursive filter, 205
remainder, 212
remez, функция, 356
remezord, функция, 361
repmat, функция, 470
Requirements Management Interface, 574
resample, функция, 238
resampling, 230, 237
reset, функция, 405, 414, 423
residue, функция, 102
return, ключевое слово, 527
reziduez, функция, 225
Robust Control Toolbox, 571
rolloff factor, 325
rooteig, функция, 311
rootmusic, функция, 310
roots, функция, 101
Round mode, список, 420
round, функция, 472
s
sample time, 127
samples, 127
sampling, 128
frequency, 127, 151
theorem, 139
Sampling Frequency, раздел, 371
saturation, 397
Save session, кнопка, 370
Save session As, команда меню, 370
save, команда, 533
sawtooth, функция, 166
Scale transfer-fcn coeffs=l, кнопка, 420
scalevalues, функция, 414
scatter plot, 472
scattereyedemo, демонстрационная
программа, 506-507
scatterplot, функция, 505
script, 525
search path, 527
second-order sections, 227
semilogx, функция, 545
semilogy, функция, 545
set, функция, 399
Set Quantization Parameters,
вкладка, 369, 418
setbits, функция, 414
shaping filter, 474
Show filter structures, кнопка, 418
Signal Browser, окно, 577, 582
Signal Processing Tool, программа, 575
Signal Processing Toolbox, 571
signal subspace, 283
signal-to-noise ratio, 381
SimMechanics, 574
Simulink, 572
Performance Tools, 572
Report Generator, 574
Simulink, ядро, 572
sine, функция, 157
single, 379
single side band, 439
size, функция, 519
SNR, 381
sos, функция, 414
sos2ss, функция, 227
sos2tf, функция, 227
sos2zp, функция, 227
sosfilt, функция, 230
sound, функция, 183
soundsc, функция, 184, 470
specgram, функция, 170, 300
Specify order, поле ввода, 368
spectral shaping, 474
spectrogram, 300
spectrum leakage, 270
Spectrum Viewer, окно, 578
Spline Toolbox, 570
sprintf, функция, 532
SPTool, программа, 575
импорт данных, 576
просмотр графика сигнала, 577
просмотр характеристик фильтра, 580
расчет фильтров, 579
сохранение и загрузка сеанса, 583
спектральный анализ, 578
фильтрация сигнала, 581
экспорт данных, 583
square root raised-cosine filter, 328, 473
square, функция, 164
ss2sos, функция, 228
ss2tf, функция, 102, 225
ss2zp, функция, 102, 225
SSB, 439
stairs, функция, 151, 545
standard deviation, 64
state space, 96
Stateflow, 573
Coder, 573
Statistics Toolbox, 172, 570
stem, функция, 151, 217, 545
stem3, функция, 549 •
Step Response, команда меню, 370
View Filter Coefficients, команда меню, 370Virtual Reality Toolbox, 570wWalker, 319waterfall, функция, 549Wavelet Toolbox, 571wavplay, функция, 184wavread, функция, 178wavrecord, функция, 185wavwrite, функция, 182wav-файлы, 178weighting functions, 273Welch, 276method, 276wgn, функция, 176while, ключевое слово, 530white Gaussian noise, 176white noise, 79window, 273wordlength, функция, 405Workspace, вкладка, 518Xxlabel, функция, 551xlim, функция, 551xPC Target, 573Embedded Option, 574Yylabel, функция, 551ylim, функция, 551Yule, 319yulewalk, функция, 336zz-преобразованиеобратное, 147свойства, линейность, 146связь с другими преобразованиями, 145zero, 94, 196zeros, функция, 537zlabel, функция, 551zlim, функция, 551Zoom In, кнопка, 370Zoom Out, команда, 370zp2sos, функция, 228zp2ss, функция, 102, 225zp2tf, функция, 101, 225zplane, функция. 222, 410z-transform, 143z-плоскость, 222View Filter Coefficients, команда меню, 370Virtual Reality Toolbox, 570wWalker, 319waterfall, функция, 549Wavelet Toolbox, 571wavplay, функция, 184wavread, функция, 178wavrecord, функция, 185wavwrite, функция, 182wav-файлы, 178weighting functions, 273Welch, 276method, 276wgn, функция, 176while, ключевое слово, 530white Gaussian noise, 176white noise, 79window, 273wordlength, функция, 405Workspace, вкладка, 518Xxlabel, функция, 551xlim, функция, 551xPC Target, 573Embedded Option, 574Yylabel, функция, 551ylim, функция, 551Yule, 319yulewalk, функция, 336zz-преобразованиеобратное, 147свойства, линейность, 146связь с другими преобразованиями, 145zero, 94, 196zeros, функция, 537zlabel, функция, 551zlim, функция, 551Zoom In, кнопка, 370Zoom Out, команда, 370zp2sos, функция, 228zp2ss, функция, 102, 225zp2tf, функция, 101, 225zplane, функция. 222, 410z-transform, 143z-плоскость, 222
View Filter Coefficients, команда меню, 370
Virtual Reality Toolbox, 570
w
Walker, 319
waterfall, функция, 549
Wavelet Toolbox, 571
wavplay, функция, 184
wavread, функция, 178
wavrecord, функция, 185
wavwrite, функция, 182
wav-файлы, 178
weighting functions, 273
Welch, 276
method, 276
wgn, функция, 176
while, ключевое слово, 530
white Gaussian noise, 176
white noise, 79
window, 273
wordlength, функция, 405
Workspace, вкладка, 518
X
xlabel, функция, 551
xlim, функция, 551
xPC Target, 573
Embedded Option, 574
Y
ylabel, функция, 551
ylim, функция, 551
Yule, 319
yulewalk, функция, 336
z
z-преобразование
обратное, 147
свойства, линейность, 146
связь с другими преобразованиями, 145
zero, 94, 196
zeros, функция, 537
zlabel, функция, 551
zlim, функция, 551
Zoom In, кнопка, 370
Zoom Out, команда, 370
zp2sos, функция, 228
zp2ss, функция, 102, 225
zp2tf, функция, 101, 225
zplane, функция. 222, 410
z-transform, 143
z-плоскость, 222
View Filter Coefficients, команда меню, 370
Virtual Reality Toolbox, 570
w
Walker, 319
waterfall, функция, 549
Wavelet Toolbox, 571
wavplay, функция, 184
wavread, функция, 178
wavrecord, функция, 185
wavwrite, функция, 182
wav-файлы, 178
weighting functions, 273
Welch, 276
method, 276
wgn, функция, 176
while, ключевое слово, 530
white Gaussian noise, 176
white noise, 79
window, 273
wordlength, функция, 405
Workspace, вкладка, 518
X
xlabel, функция, 551
xlim, функция, 551
xPC Target, 573
Embedded Option, 574
Y
ylabel, функция, 551
ylim, функция, 551
Yule, 319
yulewalk, функция, 336
z
z-преобразование
обратное, 147
свойства, линейность, 146
связь с другими преобразованиями, 145
zero, 94, 196
zeros, функция, 537
zlabel, функция, 551
zlim, функция, 551
Zoom In, кнопка, 370
Zoom Out, команда, 370
zp2sos, функция, 228
zp2ss, функция, 102, 225
zp2tf, функция, 101, 225
zplane, функция. 222, 410
z-transform, 143
z-плоскость, 222
strips, функция, 181
Structural Dynamics Toolbox, 570
structure, 523
sub2ind, функция, 521
subcarrier, 445
subplot, функция, 181, 553
surf, функция, 545
surfc, функция, 548
switch, ключевое слово, 529
symbol, 461
symbol rate, 461
Symbolic/Extended Symbolic Math
Toolbox, 570
symerr, функция, 473
System Identification Toolbox, 571
s-плоскость, 222
TeX, 553
text, функция, 551
tf2sos, функция, 227
tf2ss, функция, 101, 225
tf2zp, функция, 101, 225
tic, функция, 535
time averaging, 73
title, функция, 551
toe, функция, 535
Toeplitz matrix, 149
toeplitz, функция, 149, 224
toolbox, 510
tostring, функция, 405, 414, 423
transfer function, 93, 195
transversal filter, 202
triang, функция, 288
tripuls, функция, 156
Turn quantization on, флажок, 369, 418 twiddles, функция, 423
u
udecode, функция, 397
uencode, функция, 396
uniform distribution, 65
unitquantize, функция, 402
unitquantizer, функция, 403
Units, список, 372
unwrap, функция, 99, 219
upfirdn, функция, 238
V
Variable names, раздел, 371
variance, 64
z-преобразование, 143
свойства
задержка, 146
свёртка, 147
А
абсолютная интегрируемость, 33
авторегрессионная модель, 277
линейное предсказание, 278
спектр сигнала, 278
формирование сигнала, 277
адаптивные фильтры, 476
аддитивный белый гауссов шум, 177 алгоритм
Герцеля, 265
дискретной фильтрации, 193 -
Ремеза, 319
АМ, 427
АМн, 466
амплитуда, 19, 427
комплексная, 49, 56
амплитудная
манипуляция, 466, 470
амплитудная модуляция, 427
демодуляция, 436
КПД, 435
мощность, 434
однотональная, 429
векторная диаграмма, 432
спектр, 431
ширина спектра, 432
перемодуляция, 430
с подавленной несущей, 438
спектр, 433
амплитудная огибающая, 55, 58, 428
амплитудно-частотная
характеристика, 90
амплитудный спектр, 25, 33
АМ-ПН, 438
анализ
корреляционный, 50
сигналов, 17
аналитический сигнал, 56, 440, 456
спектр, 58
аналого-цифровой
преобразователь, 129
ансамбль реализаций, 60
аппроксимация АЧХ, 104
АЦП, 129, 381
АЧХ, 90, 97, 104, 173
крутизна ската, 112
максимально плоская, 107-108, 110
бабочка, 258, 260
база сигнала, 36
базис Котельникова, 139
белый шум, 79
• дискретный, 150 преобразование в линейной системе, 92
биения, 438, 461
билинейное z-преобразование, 314, 334
БИХ-фильтры, 206 блочная обработка;268 боковые полосы, 433 боковые частоты, 431
БПФ, 256
квантованное, 421
обратное, 260
основание, 260 прореживание по времени, 256 по частоте, 259
число операций, 258, 285
быстрое преобразование Фурье, 256
В
вектор, 150
вектор состояния, 200, 207
вектор-строка, 511
верхняя боковая полоса, 439
весовые функции, 273, 287, 320
взаимный спектр, 54, 90
ВИМ, 486
восстановление
радиосигнала, 141
непрерывного сигнала, 133, 139
временная область, 34
время-импульсная модуляция, 486
выбор порядка фильтра, 332
для метода Ремеза, 361
вычеты, 94, 198
Г
гармоники, 23 генерация импульсов, 155 периодических сигналов, 164 последовательности импульсов, 161 программа daqfcngen, 187
сигнала с меняющейся частотой, 168
гетеродин, 142
гетеродинирование, 143 гистограмма, 173
глазковая диаграмма, 476, 506
глубина модуляции, 429
графическое окно, 515
групповая задержка, 90, 114, 321, 366
для симметричных фильтров, 204
расчет для аналоговых систем, 123
д
двоичная последовательность, 461
девиация частоты, 450
действующее значение, 22
дельта-функция, 19, 88
спектр, 47
фильтрующее свойство, 19, 146
демодуляция, 426
АМ, 436
с подавленной несущей, 439
КАМ, 459
квадратурной манипуляции, 472
однополосного сигнала, 442
УМ, 456
ФМ, 456-457
ЧМ, 456, 458
ЧМи, 464
диаграмма рассеяния, 472, 505
динамический диапазон, 377
дискретизация, 128
дискретного сигнала, 231
квадратурная, 142
дискретная
синусоида, 145
экспоненциальная функция, 145
дискретно-аналоговые устройства, 128
дискретное преобразование Фурье, 251
дискретный единичный скачок, 144
дисперсия, 64, 69, 75
выходного сигнала линейной системы, 92
дифференциальное уравнение линейной системы, 93
дополнительный код, 374-375
ДПФ, 251
Е
единичная импульсная функция, 144
единичный скачок, дискретный, 144
3
задержка
групповая, 90, 219
фазовая, 90
записи сигналов, 185
запятая
плавающая, 377
фиксированная, 375 звук
воспроизведение, 183
запись, 185
импульс
гауссов, 40
конечная последовательность, 161
прямоугольный, 34, 154-155
задержанный, 34
трапециевидный, 156
треугольный, 156
несимметричный, 36, 154-155
симметричный, 37
экспоненциальный
двусторонний, 39
односторонний, 38, 154
импульсная характеристика, 315
аналоговой системы, 88
расчет, 95
дискретной системы, 194, 216
расчет, 199
индекс угловой модуляции, 449
интеграл
вероятности, 66
интервал
дискретизации, 127
корреляции, 78
интерполяция, 163, 230, 235, 473
искажения мультипликативные, 136
К
КАМ, 459
КАМн, 467
квадратурная
дискретизация,142
манипуляция, 467
демодуляция, 472 помехоустойчивость, 471 спектр мощности, 474 формирование спектра, 473
модуляция, 459
обработка сигнала, 457
квадратурное дополнение, 56, 160
квантование, 128, 380
в цифровых фильтрах, 383
гармонического сигнала, 380
отношение сигнал/шум, 381
зоны, 382
квантование (продолжение) квантованные значения, 382 неравномерное, 382, 398 уровни, 380
характеристика квантования, 405 шум,380
квантованные значения, 382
КИХ-фильтры, 203
классификация сигналов, 18 ковариационная функция, 68-69 код Баркера, 237
колебания квазигармонические, 80
командное окно, 510
комментарии, 525
комплексная
амплитуда, 49, 56
огибающая, 56, 58
экспонента, спектр, 49
комплексный коэффициент передачи, 90, 196
композитный стереосигнал, 446
константа, спектр, 48
конструктор, 399
корреляционная матрица, 149
белого шума, 150
неотрицательная
определенность, 150
корреляционная функция, 50, 68-69 взаимная, 52
выходного и входногосигналов, 91
импульсной характеристики, 92
интервал корреляции, 78
коэффициент корреляции, 72
нормированная, 72
периодического сигнала, 51
связь со спектрами сигналов, 53
корреляционный анализ, 50
косинусоидальное сглаживание АЧХ, 324, 344
коэффициент сглаживания, 325 коэффициент
заполнения, 165
корреляции, 70
модуляции, 429
передачи, 90
сглаживания, 325
усиления, 94, 196
Л
лепестки спектра, 26, 34
линейное предсказание, 278
линейность, 87, 189
линия задержки, 202
ложные частоты, 130, 133, 231
м
манипуляция, 461
амплитудная, 466, 470
квадратурная, 467
фазовая, 467, 470
частотная, 462
мантисса, 377
депормализованная, 378 нормализация, 377
массив ячеек, 523
массивы, 518
масштабирование коэффициентов
фильтров, 387
математическое ожидание, 64
матрица, 150
единичная, 150
собственные числа, 150
Теплица, 149
мгновенная частота, 448
меандр, 27
межсимвольная интерференция, 475 метод
инвариантной импульсной характеристики, 315, 335
низкочастотного эквивалента, 59
Прони, 319
усреднения модифицированных периодограмм, 276
Уэлча, 276
Юла—Уолкера, 319
минимаксная аппроксимация, 319
минимизация р-нормы
ошибки, 365
многополосные фильтры, 340
моделирование сигналов, 151 модельный спектральный
анализ, 249
модулированный сигнал, 426
модулирующий сигнал, 426
модуляция, 426
амплитудная, 142, 427
квадратурная, 459
однополосная, 439
угловая, 142, 427, 447
фазовая, 448
цифровая, 461
частотная, 448
широтно-импульсная, 477
мощность, 21
мгновенная, 21
средняя, 21, 51
случайного процесса, 75
МСИ, 475
мультипликативные искажения, 136
МЧМн, 466
н
насыщение, 397
научная нотация, 377
начальная фаза, 19, 58
независимость статистическая, 67
некоррелированность, 67, 150
нелинейность, 87
непараметрический спектральный
анализ, 249
нестационарность, 88
несущая, 426
несущее колебание, 426
нижняя боковая полоса, 439
низкочастотный эквивалент, 59
нули функции
передачи, 94, 196, 222
О
обратный код, 374
объект, 399
огибающая, 90, 160, 428
амплитудная, 55, 58
комплексная, 56, 58
однополосная модуляция, 439
демодуляция, 442
окно, 273, 287, 320
Бартлетта, 289
Блэкмена, 294
Кайзера, 238, 295, 342
прямоугольное, 288
треугольное, 288
Ханна, 291
Хэмминга, 292, 323, 341-342
Чебышева, 297
округление, 380
коэффициентов фильтров, 383
промежуточных результатов, 391
оператор
дифференцирования, 45
интегрирования, 45
операции поэлементные, 151
опорное колебание, 436
остаток, 212
отношение сигнал/шум, 381
отсчеты, 127, 178
комплексные, 142
спектральные, 255
ошибка предсказания, 278
ошибки квантования, 128
п
пакет расширения, 510
параллельные вычисления, 208
параметрические системы, 88
параметрический спектральный
анализ, 249
передискретизация, 230, 237
полифазный алгоритм, 238
перекрытие
с накоплением, 270
с суммированием, 270
перемодуляция, 430, 446, 483
переполнение, 389
переходная характеристика, 89
период дискретизации, 127
периодическое продолжение
сигнала, 23
периодограмма, 275
Бартлетта, 276
Даньелла, 276
модифицированная, 275
пилот-сигнал, 439, 446
плавающая запятая, 377
плотность вероятности, 382
выходного сигнала линейной
системы, 92
двумерная, 68
многомерная, 68
одномерная, 63
поднесущая, 445
поле структуры, 523
полином Чебышева, 110
полиномы, деление, 212
полифазный алгоритм, 238
полная фаза, 55, 58, 448
полоса
задерживания, 104
пропускания, 104
полосовой фильтр
идеальный, 141
получение данных из внешних
источников, 178
полюсы функции передачи, 94, 96, 196,
222
кратные, 95
полярная модуляция, 444
порядок
линейной цепи, 93
фильтра, 202, 205
числа, 377
последовательность импульсов меандр, 27
пилообразных, 29, 188 прямоугольных, 25, 164, 188 треугольных, 30, 166, 188
постоянная составляющая, 73 постоянный во времени сигнал,
спектр, 48
поэлементные операции, 151
предельный цикл, 393
разновидности, 394
преобразование Гильберта, 57, 80, 440 дискретное, 240, 351, 357
преобразование Лапласа, 94, 96
связь с z-преобразованием, 146
преобразование Фурье, 31
быстрое, 256
дискретное, 251
быстрые алгоритмы, 256
восстановление непрерывного сигнала, 253
матрица преобразования, 254
свойства, 251
связь со спектральной
функцией, 255
спектральное разрешение, 256
эквивалентный фильтр, 262
дуальность, 41, 133
задержка, 43
обратное, 33
примеры расчета, 34
прямое, 32
свойства, 42
дифференцирование, 44 изменение масштаба оси
времени, 44 интегрирование, 45 линейность, 43 произведение, 46 свертка, 45
умножение на гармоническую функцию, 46
связь с z-преобразованием, 146
связь с рядом Фурье, 47
причинность, 89, 215
проектирование цифровых
фильтров, 313
Прони, 319
прореживание, 230-231, 256
по времени, 256
по частоте, 259
пространство состояний, 200, 207
простые дроби, 94
простые сигналы, 36
прототип аналоговый, 313
прямой код, 374, 377
прямые методы синтеза цифровых
фильтров, 317
псевдоспектр, 282, 284
пульсации АЧХ, 107, ПО, 112
равномерные, 319
ПФ, 104
Р
равенство Парсеваля, 55
дискретное, 253
радиоимпульс, 158
гауссов, 159
разностное уравнение, 193
распределение вероятности
гауссово, 66
нормальное, 66
Пуассона, 62
равномерное, 65, 380
Рэлея, 83
генерация случайных
чисел, 173
функция распределения, 173
Рэлея—Райса, 85
растекание спектра, 270
реализация случайного процесса, 60
редактор массивов, 518
Рише, Гаспар, 319
русский язык в MATLAB, 542
ряд Котельникова, 254
ряд Фурье, 22, 451
в точках разрыва, 28
вещественный, 24
вычисление мощности сигнала, 55
комплексный, 24
примеры разложения сигналов, 25
связь с преобразованием Фурье, 47
синусно-косинусный, 23
частичные суммы, 28
С
свертка, 88, 91-92
дискретная, 212
линейная, 147, 195
матрица свертки, 224
свертка (продолжение)
представление в виде скалярного произведения, 223
круговая, 252-253, 265
линейная, 265
обращение, 212
свободные колебания, 199
свойства объектов, 399
секции второго порядка, 227
секционная обработка, 268
сигнал, 18
аналитический, 56, 142, 243, 440, 456
аналоговый, 127
гармонический, 19, 188
дискретный, 270
со случайной начальной фазой, 61
спектр, 48
детерминированный, 18 дискретизированный, 131, 138 дискретный, 128
случайный, 148
конечной длительности, 19 многоканальный, 150, 152 модулированный, 426 модулирующий, 426 периодический, 18
спектр, 49
простой, 36
с большой базой, 36
с меняющейся частотой, 188 с ограниченной
полосой частот, 157
энергией, 18
сложный, 36
случайный, 18, 60, 188
сопряженный, 56
физический, 127 финитный, 19 цифровой, 128, 461 широкополосный, 36 сигпал/шум, 381 сигнальное подпространство, 283 сигнально-кодовая конструкция, 468 символ, 461
символьная скорость, 461
синтез цифровых фильтров, 313
билинейное z-преобразование, 314
классификация методов, 313
метод инвариантной импульсной характеристики, 315
метод Ремеза, 355
синтез цифровых фильтров (продолжение) прямые методы, 317
оптимальные, 318 субоптимальные, 319 с использованием окон, 320, 340 функции MATLAB, 328
синхронное детектирование, 436, 439
системная функция, 195
системы'
аналоговые, 87
дискретные
способы описания, 193
устойчивость, 199
физическая реализуемость, 196
классификация, 87
с переменными параметрами, 88
с постоянными параметрами, 88
физическая реализуемость, 89
системы линейные, 87
комплексный коэффициент передачи, 94
преобразование
детерминированных сигналов, 88
случайных процессов, 91
способы описания, 93 дифференциальное уравнение, 93
пули и полюсы, 94
операторный коэффициент передачи, 93
полюсы и вычеты, 94
пространство состояний, 96
функция передачи, 93
устойчивость, 95-96
характеристики, 88
скважность, 26, 165, 477
СКК, 468
скорость затухания спектра, 30-31
сложные сигналы, 36
случайные величины, 63
генерация, 172
двумерные, 68
коэффициент корреляции, 70
независимость, 67, 70
некоррелированность, 67, 70
статистическая связь, 70
случайный процесс, 60
вероятностные характеристики двумерные, 68
многомерные, 68
одномерные, 63
вещественный, 149
случайный процесс (продолжение)
дискретный, 148, 380
корреляционная матрица, 149
дисперсия, 64
интервал корреляции, 78
квазидетерминированный, 61
ковариационная функция, 68
корреляционная функция, 68
математическое ожидание, 64
модели, 60
плотность вероятности, одномерная, 63
реализация, 60
сечение, одномерное, 63
спектр мощности, 75
спектральные характеристики, 74
среднее квадратическое
отклонение, 64
стационарный, 71, 148
коэффициент корреляции, 72
узкополосный, 80
огибающая, 83, 85
при наличии детерминированной составляющей, 84
фаза, 84
функция распределения
вероятности, 63
центрированный, 68
экспоненциально
коррелированный, 299
эргодический, 72
смещенный код, 374, 378
созвездие, 468
соотношение неопределенности, 36
сопряженный сигнал, 56
спектр, 25
взаимный, 54
дискретизированного сигнала, 132
влияние формы импульсов, 135
размерность, 132
дискретного сигнала, 131, 271
периодического, 250
дискретного случайного процесса, 274
мгновенный, 300
мощности, 75
односторонний, 58
растекание, 270
симметрия, 33
скорость затухания, 30-31
ширина эффективная, 36, 78
энергетический, 54
спектральная плотность, 32
средней мощности, 75
спектральная функция, 32
спектральный анализ
модельный, 249
непараметрические методы, 275
метод Уэлча, 276
периодограмма, 275
непараметрический, 249
параметрические методы, 249, 277
EV, 284
MUSIC, 282
авторегрессионные, 277
спектрограмма, 300
среднее квадратическое отклонение, 64
среднеквадратическое значение, 22
средняя мощность, 51
статистическая независимость, 67
статистическое усреднение, 64
стационарность, 71, 88, 189
стереовещание, 444
стереосигнал композитный, 446
строки, 522
структура, 523
т
теорема
Винера—Хинчина, 76
дискретная, 275
дискретизации, 139
Котельникова, 138
Найквиста, 139
Рэлея, 54
дискретная, 252
У
угловая модуляция, 427, 447
гармоническая, 449
векторная диаграмма, 453
девиация частоты, 450
индекс, 449
спектр, 451
ширина спектра, 454
демодуляция, 456
узкополосность, 426
уровни квантования, 380
усечение, 381
условия
устойчивости, 96
Дирихле, 22
усреднение
по времени, 73
статистическое, 64
устойчивость, 95
фаза
начальная, 58
полная, 55, 58, 448
фазовая
автоподстройка частоты, 438
задержка, 90
манипуляция, 467, 470
дифференциальная, 467
относительная, 467
фазоразностная, 467
модуляция, 448
демодуляция, 456-457
функция, 55
фазовращатель, 57
фазовый спектр, 25, 33, 54
фазочастотная характеристика, 90
ФАПЧ, 438, 458
физическая реализуемость, 89
фиксированная запятая, 375
фильтр
адаптивный, 190, 476
антисимметричный, 204
Баттерворта, 105, 120, 482
Бесселя, 114, 120
групповая задежка, 125
верхних частот, 104
Винера, 282
внутреннее состояние, 214
всепропускающий, 196, 366
выбор порядка, 121
дискретный, 213
блочный в частотной области, 268
внутреннее состояние, 239 преобразование способов
описания, 224
реализация в частотной
области, 265
устойчивость, 395
форма реализации, 206
частотная характеристика, 217
дифференцирующий, 351, 357
заграждающий, 104
Кауэра, 112
максимально-фазовый, 365
минимально-фазовый, 365
многополосный, 340
начальное состояние, 214
нерекурсивный, 191, 202
импульсная характеристика, 203
нижних частот, 104
полосно-задерживающий, 104
фильтр (продолжение) полосовой, 104
идеальный, 141
пробка, 104
прототип, 104, 313
преобразование, 116
режекторный, 104
рекурсивный, 192, 205
импульсная характеристика, 205 с бесконечной импульсной
характеристикой, 206
с конечной импульсной характеристикой, 203
с косинусоидальным сглаживанием АЧХ, 324, 344
SQRT-вариант, 328, 473
с переменными параметрами, 190
симметричный, 204, 215 трансверсальный, 202 цифровой
масштабирование, 387
предельный цикл, 393
Чебышева
второго рода, 110, 120
групповая задежка, 125
первого рода, 107, 120
эллиптический, 112, 120 флуктуации, 64, 68, 73-74 ФМ, 448
ФМн, 467
ФНЧ, 104
идеальный, 138
форма реализации дискретного фильтра каноническая, 206, 210 каскадная, 210, 227 параллельная, 211, 226 последовательная, 210, 227
прямая, 206
транспонированная, 208
форматы представления чисел, 374 отрицательных, 374 с плавающей запятой, 377
неявный старший бит, 377 нормализованный, 377 с двойной точностью, 379 с одинарной точностью, 379 с расширеной точностью, 380 соглашение
о денормализации, 378
с фиксированной запятой, 375 формирование спектра, 474 формирующий фильтр, 474
функция
Бесселя, 451 включения, 20
Дирака, см. дельта-функция, 19
Дирихле, 167, 188
единичного скачка, 20, 89 спектр, 48 кусочно-заданная, 154 ошибок, 66
передачи, 195
распределения вероятности, 63 преобразование, 172
с переменным числом параметров, 531
фазовая, 55
Хевисайда, 20
Чебышева, рациональная, 112
ФЧХ, 90, 97 линейная, 215
X, ц
характеристика квантования, 405 ЦАП, 129, 136, 151
ШИМ-реализация, 478 центральная предельная теорема, 67 центральная частота, 58 цифро-аналоговый преобразователь, 129
ч
частное, 212
частота, 19
биений, 438
дискретизации, 127, 151, 179
мгновенная, 168, 448
Найквиста, 130
средняя, 104
среза, 104 центральная, 58
частотная дисперсия, 476
частотная манипуляция, 462
демодуляция, 464
когерентная, 464
некогерентная, 465
минимальная, 465
с непрерывной фазовой функцией, 463
частотная модуляция, 448
демодуляция, 456, 458
частотная область, 34
частотная характеристика, 196
частотное разделение каналов, 426 частоты ложные, 130, 133
чебышевская аппроксимация, 319 ЧМ, 448
ЧМн, 462
ш
шаг дискретизации, 127
ШИМ, 477
широкополосные сигналы, 36
широтно-импульсная модуляция, 477 шум, 60
белый, 79
коррелированный, 174, 176
шум квантования, 128, 380
размах, 382
шумовое подпространство, 283
э, я
экспоненциальный формат, 377 энергетический спектр, 54
энергия, 21, 50, 53
случайного процесса, 75 эргодичность, 72 эффект Гиббса, 28, 319 эффективная ширина спектра, 36, 78 ячейка памяти, 202
Сергиенко Александр Борисович
Цифровая обработка сигналов
Главный редактор Е. СтрогановаЗаведующий редакцией И. КорнеевЛитературный редактор Е. БочкареваХудожник Н. БиржаковКорректор В. ЛистоваВерстка Ю. Сергиенко
Лицензия ИД № 05784 от 07.09.2001.
Подписано в печать 16.07.03. Формат 70x100 716.
Усл. п. л. 49,02. Доп. тираж 4500 экз. Заказ № 245.
ООО «Питер Принт».
196105, Санкт-Петербург, ул. Благодатная, д. 67в.
Налоговая льгота - общероссийский классификатор продукцииОК 005-93, том 2; 953005-литература учебная.
Отпечатано с фотоформ в ФГУП «Печатный двор» им. А. М. ГорькогоМинистерства РФ по делам печати, телерадиовещания и средств массовых коммуникаций.197110, Санкт-Петербург, Чкаловский пр., 15.