Обновить

Комментарии 28

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

Квадратные волны для корреляции – рабочий приём, их используют в простых DTMF-детекторах. Подвох: меандр содержит все нечётные гармоники (3-ю, 5-ю...) с амплитудами 1/k, поэтому результат корреляции – это сумма компонент сигнала на частотах f, 3f, 5f... Для чистого синусоида это не проблема, для сложного сигнала – ложные срабатывания. Если нужна вычислительно дешёвая однотональная детекция без этого эффекта – смотрите на алгоритм Гёрцеля: один бин ДПФ за O(N) операций, без трансцендентных функций.

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

Я думаю можно, потому что меандр содержит первую гармонику в качестве основной. Но, вероятно, алгоритм поиска будет сложнее. С одной стороны убираем синусы/косинусы, с другой стороны усложняется анализ.

Я бы все-таки обобщил. То что излагает автор в статье - это однобокий взгляд на вещи. Для погружения в тематику пойдет. Но, если внимательно приглядеться к формуле (которая в текущей редакции текста обозначена как 1.3) скалярного произведения, которая взята здесь за основу анализа, то можно обратить внимание на то что это банальный линейный КИХ фильтр со всеми вытекающими. В качестве "эталонных" коэффициентов можно брать синус/косинус, меандры, единицу и пр. У КИХ фильтра есть отклик, который мы можем настраивать под свои нужды подбором коэффициентов. Тогда весь этот ДПФ представляется лишь частным случаем задачи фильтрации. Возьмите свой набор коэффициентов и назовите анализ своим именем - в определеных обстоятельствах он даже будет работать и приносить пользу. КИХ фильтры со входа на выход передают спектральное население сигнала в неизменном виде - меняются только амплитуды и фазы гармонических составляющих, а новые частоты не появляются. Коэффициенты от синусоиды и от меандра хорошо усиливают свою основную гармонику и все что около нее, а остальные ослабляют, только и всего. Как ни странно, в линейных КИХ фильтрах присутствуют нелинейные эффекты: амплитуду некоторых гармоник можно снизить до нуля и, соответствующие спектральные составляющие исчезнут навсегда.
Чтобы все это понять нужно представить себе ДПФ как процесс развернутый во времени, а не то что у нас происходит одномоментно и раз и навсегда. Понятно, что с этим есть определенные трудности ведь доступная длина сигнала для анализа ограничена, но всегда можно сделать ДПФ оконным и "проскользить" им по всей длинне чтобы увидеть эффекты выбранного фильтра в динамике. И посреди всего этого нарисованного хаоса может быть даже придти к выводу, что лучше уж взять БИХ фильтр вроде алгоритма Гёрцеля.

Фильтр с переменными параметрами.

Спасибо за комментарий! Однако здесь важно понимать контекст. Статья задумывалась как вводный, образовательный материал, поэтому я сознательно выбрал классический путь изложения.

Спектральный анализ и цифровая фильтрация - это две огромные, фундаментальные темы. Если вы откроете любую классическую литературу по ЦОС (Р. Лайонс, С. Смит, А. Сергиенко, А. Оппенгейм и др.), то увидите строгую педагогику: сначала дается спектральный анализ (включая основы ДПФ), и только потом рассматривается фильтрация. Ни один из этих авторов не смешивает эти понятия на этапе введения. Я решил следовать этой проверенной временем методологии, чтобы не перегружать читателя.

Безусловно, эти темы тесно связаны, и из одной вытекает другая. Однако углубление в эти взаимосвязи выходит за рамки базового объяснения того, что такое ДПФ, БПФ и их свойства, а именно это является моей главной целью.

Обобщить эти концепции и показать их глубинное единство, безусловно, можно. Но это материал для совершенно другой, гораздо более объемной статьи. Если у вас есть желание и экспертиза написать такой обзор - буду только рад его прочитать!

Спасбо за спасибо за комментарий! На мой взгляд, факт наступления для человечества эры ИИ, должен убедить в том что ДПФ, БПФ - это туфта, которая на практике не работает. Что же реально работает на практике? Посмотрите на искусственные нейронные сети: в их устройстве также присутствуют линейные КИХ фильтры с фиг-знает-какими параметрами + нелинейный фильтр + структура сети. На данном этапе развития человечества - это приоритет для всех вменяемых исследователей. Можно написать и об этом статью, но проблема даже еще глубже. Волны как носитель информации являются энергетическими монстрами: чтобы детектировать волну требуется несколько периодов + преобразование цифровых сигналов в волновые + перегенрация их на каждом этапе обработки + сквозные токи в транзисторах и пр. и пр. Короче угля будут добывать все больше и больше благодаря таким вот популяризаторам цифровых фильтров. Естественные нейронные сети тратят на обработку сигналов куда меньше энергии потому что не используют волны. Шире надо смотреть на вещи, чуть-чуть в сторону и обязательно в будущее!

Одно замечание: в (1.11) вы определяете фазу как арктангенс отношения мнимой и действительной составляющих (в ЦОС их часто называют квадратурами). Но область значений простого арктангенса (-π/2...π/2), а нам нужна фаза в диапазоне (-π...π), поэтому сразу следует давать определение фазы через atan2 от двух аргументов, правильно учитывающий квадрант на комплексной плоскости.

Спасибо за ценное замечание! Действительно, использование простого арктангенса в формуле (1.11) может ввести в заблуждение.

Я дополнил статью «Важное уточнение» сразу после формулы (1.11).

Хорошо написано. Читать бы такое когда был студентом. Мы сидели на довольно таки тяжёлых советских книгах, хотя там терминология гораздо корректнее.

Спасибо! Рад, что статья оказалась полезной. Я действительно старался донести суть, избегая тяжёлых определений и сухой терминологии — чтобы материал был понятен даже тем, кто видит ДПФ впервые. Но ваше замечание про корректность терминов возьму на заметку.

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

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

Автор продолжай, тема интересная.

Спасибо, постараюсь!

Поддерживаю. Давно искал подобные статьи. Очень жду продолжения!

Спасибо за поддержку! Очень рад, что статья оказалась полезной. Постараюсь продолжить.

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

из очень-очень давно:

Спасибо за обратную связь! Идею с анимацией взял на заметку 👍

Статья - замечательная, но не хватает вводного абзаца. "Куда лошадь запрягать" :) Executive Summary.
Что такое вообще преобразование Фурье. И что оно даёт.

Причём далее по тексту уважаемый Автор таки это пишет. Но очень уж глубоко закопано.

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

Спасибо за ценное замечание! Вы абсолютно правы - статья выигрывает, если с самого начала обозначить, куда лошадь запрягать 😊 Добавил вводный блок с кратким объяснением сути преобразования Фурье, которые оно решает. Теперь читателю будет проще сразу вникнуть в контекст.

Однозначно нужно продолжать 🙂👍

Спасибо, постараюсь!

Что даст преобразование Фурье, если его применить к сигналу, состоящему из суммы двух косинусов с частотами, например, к1=корень из 2 и к2= корень из 3?

Отклик ДПФ на гармонический сигнал с частотой, не кратной 1/T, где T - длительность сигнала, то есть лежащей между бинами ДПФ, имеет вид sin(x)/x. Вместо одиночной "палки" получаем "расплывшийся" по бинам спектр с кучей боковых лепестков. В худшем случае, когда частота точно посередине между двумя соседними бинами, главный лепесток ДПФ будет состоять из двух одинаковых отсчётов с амплитудой примерно -3дБ, а уровень боковиков будет максимальным.

Да, получится ситуация, описанная в примере 3 — утечка спектра. Если я правильно понял, у вас два сигнала с частотами √2 ≈ 1.41 и √3 ≈ 1.73 Гц при частоте дискретизации 100 Гц.

 

![](https://habrastorage.org/webt/fd/7b/26/fd7b26956befab9ae31b44d59bfea8ca.png)

 

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

Можете пока сами поэкспериментировать. Код в статье разбит на блоки и идёт сверху вниз по тексту: сначала функции для ДПФ, потом для спектра, потом генерация сигналов, и в конце -Пример 7.

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

Для генерации такого изображения я изменил параметры сигналов:

SIGNAL_PARAMS = [

    {"amp": 1.0, "freq": 1.41,   "phase": 0,   "type": "cos"}, 

    {"amp": 1.0, "freq": 1.73,   "phase": 0,   "type": "cos"}, 

    {"amp": 0.0, "freq": 0.0,    "phase": 0,   "type": "cos"}, 

    {"amp": 0.0, "freq": 0.0,    "phase": 0,   "type": "sin"} 

]

Первый попавшийся онлайн-сервис попробовал — https://pythononline.dev/. Графики сгенерировались, всё работает.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации