145 / 119 / 29
Регистрация: 09.01.2018
Сообщений: 818
|
|
Преобразование Фурье19.09.2024, 10:10. Показов 1852. Ответов 35
Метки фазовый спектр (Все метки)
Вопрос.
На картинке три сигнала синусоиды отличающиеся количеством отсчетов: 1-й сигнал содержит на 1 отсчет меньше от целого числа периодов. 2-й сигнал содержит целое число периодов. 3-й сигнал содержит на 1 отсчет больше от целого числа периодов. Отличие вполне видно невооруженным глазом в конце синусоиды. Соответственно по цветам изображены спектры (ДПФ). Амплитудные спектры очень близки между собой. По фазе - есть вопросы. 1. Почему фазовый спектр 2 и 3 сигналов гладкий, а когда на 1 отсчет меньше, чем целое число периодов, то превращается в хрень какую-то. Причем ОДПФ дает исходный сигнал, поэтому вроде как думается, что в расчете ошибок нет. При дальнейшем уменьшении кол-ва отсчетов, т.е. укорочении синуса фазовый спектр снова гладкий. Итого фазовый спектр непонятной формы получается, когда количество отсчетов на 1 меньше, чем целое число ПОЛУпериодов. (на полупериодах тот же эффект повторяется) 2. Вопрос по ОДПФ. Формально ОДПФ дает комплексные отсчеты, но (см. первые три осциллограммы с сигналами, на них ОДПФ тоже есть) при этом RE часть = сигналу, а IM часть = нулю. Однако Если я пропускаю синус через к.л. фильтр, то ОДПФ дает НЕнулевую мнимую часть. Так разве должно быть? Почему так? И что это значит физически? И как правильно сделать, чтобы была нулевая мнимая часть?
0
|
19.09.2024, 10:10 | |
Ответы с готовыми решениями:
35
Преобразование Фурье Преобразование Фурье Дискретное преобразование Фурье |
3601 / 2514 / 570
Регистрация: 11.09.2009
Сообщений: 9,113
|
|
19.09.2024, 16:55 | |
Потому что рассчёт спектра при ДПФ производится исходя из предположения, что сигнал бесконечен, то есть оцифрованное "окно" периодически повторяется бесконечное количество раз. Получается, что скачки сигнала по фазе в точках пристыковки окон - фазовая модуляция, которую и видно на рассчитанном спектре.
Чтобы "очистить" спектр, применяют к окну функции преобразования огибающей в колоколоподобную, со спадом амплитуды на краях до нуля - оконные весовые функции, например функции Бартлетта, Хэмминга, Ханна, Блэкмана-Харриса и др. Есть ещё вариант - подбирается ширина окна уменьшением количества имеющихся отсчётов или добавлением нулевых отсчётов так, чтобы фаза в начале и в конце окна совпадали. Но это более сложный и менее распространённый алгоритм, и не ко всем видам сигнала может быть применён (в частности, к сигналам со сложным спектром - вообще неприменим).
1
|
145 / 119 / 29
Регистрация: 09.01.2018
Сообщений: 818
|
|
19.09.2024, 21:14 [ТС] | |
Согласен. Дело ясное.
Тоже ясно. В данном конкретном случае, я так изначально и делал. Вопрос главный немного не в том. Наверно невнятно выразился. 1. Я взял сигнал с целым числом периодов. 2. Построил спектр. 3. Удалил одну точку в конце сигнала. 4. Построил спектр. 5. И т.д. по одной точке удаляя прошел один период. 6. Построил спектры всех сигналов. И из них все сигналы кроме двух имеют гладенький фазовый спектр. А два исключения, это 1. Целое число периодов минус одна точка в конце. 2. Целое число периодов минус полпериода, минус одна точка в конце.
0
|
3601 / 2514 / 570
Регистрация: 11.09.2009
Сообщений: 9,113
|
|
19.09.2024, 22:38 | |
При таком количестве периодов в окне, чтобы изменение длины окна на один отсчёт приводило к кардинальному изменению вида спектра, - это надо посадить в алгоритм расчёта какую-то солидную ошибку. Ищите. Где - подсказать не могу. Из вашего рисунка не очень понятно даже, сколько отсчётов приходится на один период. Могу только предположить, что около 20. И периодов в окне укладывается 20. Итого, ширина окна 400 ±1 отсчёт. Если всё так, то точно ищите ошибку, потому что 1/400 - это 0,25%. На форму спектра принципиально резко влиять не должно.
Могу предположить, что это может быть связано с точностью представления числа, с округлением, с "набеганием" ошибки и т.п., и при каких-то числах возникает резкий выброс погрешности счёта. Проверьте, что с дискретизацией и представлением окна всё правильно, и попробуйте для начала использовать счёт в числах с двойной точностью. Посмотрите, что изменится.
1
|
145 / 119 / 29
Регистрация: 09.01.2018
Сообщений: 818
|
|
22.09.2024, 22:08 [ТС] | |
![]() 12 отсчетов в периоде Даже не решаюсь спросить о чем это. Что делать-то? Первую часть предложения не совсем понял? Как дискретизацию проверить? Она 12 отсчетов на период. (вы совершенно точно предположили). Но как и что проверить я не понимаю совсем. Вторая часть предложения . . . А разве в матлабе по умолчанию не double?
0
|
3601 / 2514 / 570
Регистрация: 11.09.2009
Сообщений: 9,113
|
|
23.09.2024, 02:11 | |
ViktorArs, чего-то я сообразить не могу, как вы считаете...
В случае хорошо состыкованной синусоиды, в амплитудном спектре действительно должны быть две "палки". Но только одна - прямая, вторая - зеркальная в отрицательных частотах. У вас - две положительные, причём значения 39180 и 440800 ... Хотя частота исходного сигнала судя по верхнему графику равна 40000 (4/1*10-4). По-моему, где-то что-то сильно съехало. Нет?
1
|
145 / 119 / 29
Регистрация: 09.01.2018
Сообщений: 818
|
|
23.09.2024, 13:25 [ТС] | |
Спасибо!!!
Есть отличие, когда спектр строится от 0 до pi или от -pi/2 до pi/2 ? Я всегда думал, что разницы нет? Если есть, не могли бы пояснить в чем суть? Да, 40 кГц. Пытаюсь понять.
0
|
3601 / 2514 / 570
Регистрация: 11.09.2009
Сообщений: 9,113
|
|
24.09.2024, 02:27 | |
Опять вообще не понял. Спектр строится по отсчётам амплитуды в имеющемся исходном окне.
Ширина окна - в единицах времени. Обратная величина - ширина рассчитанного спектра в единицах частоты. Огибающая рассчитанного спектра - sin(x)/x. Первый ноль огибающей - на частоте, равной частоте дискретизации. Берётся только этот первый "лепесток" огибающей спектра. То, что можно посчитать в следующих лепестках - просто повторение этой периодической функции. Теорема Котельникова, однако... Есть конечно приёмы всякого "оверсэмплирования", но это частные случаи. Явно не ваш. Так что первое, с чем вам по-моему надо разобраться, откуда в выходном спектре частоты выше половины частоты дискретизации. Амплитудный спектр обычно рисуется только для положительных значений частоты, т.е. берётся только половина от рассчитанного массива. Вторая половина - зеркальная, частоты отрицательные, "мнимые". Смысл её рисовать? Но всё равно, даже если предположиь, что шкала "съехала" на какую-то константу, те две "палки" не объяснить. 39180 - это видимо исходные 40000. А как сюда попала частота в 10 раз выше?... На фазовый спектр пока вообще не смотрю. При таком представлении амплитудного - нет смысла, вообще непонятно, как он считается. Вы считаете в Маткаде? Стандартными функциями? Там же Хэлп встроенный неплохой есть. Да и статей про него куча.
1
|
145 / 119 / 29
Регистрация: 09.01.2018
Сообщений: 818
|
|
24.09.2024, 11:23 [ТС] | |
Все верно.
Все верно. Вот я и строю (привычка, если можно так выразиться) два лепестка в положительном направлении. Т.е. не от 0 до Ну вот я со 2 курса рисую до Все в matlab. Ф-ции свои, но я ими пользуюсь больше 10 лет, и я их сравнивал со стандартными, и получалось одинаково. А что касается pi/2 и т.д. - это нормализованные единицы имелось ввиду.
0
|
3601 / 2514 / 570
Регистрация: 11.09.2009
Сообщений: 9,113
|
|
24.09.2024, 12:38 | |
Зачем?
ДПФ - это ж не какой-то физический смеситель, а просто алгоритм с определёнными допущениями и ограничениями. В исходном спектре такой частоты нет. Всё, что выше fs/2 - это ж просто "дефект счёта". Или я что-то забыл?
1
|
5452 / 2812 / 565
Регистрация: 07.11.2019
Сообщений: 4,626
|
|
24.09.2024, 12:39 | |
Если сигнал содержит целое число периодов, т.е. нет разрывов при периодическом продолжении сигнала, то его амплитудный спектр будет состоять из двух пиков и нулей (точнее очень близких к нулю значений).
Близкие к нулю (шумы дискретизации) комплексные значения будут иметь случайную фазу, что вы и наблюдаете. Фаза это направление вектора, если вектор нулевой, то о его направлении говорить нет смысла.
2
|
5452 / 2812 / 565
Регистрация: 07.11.2019
Сообщений: 4,626
|
|
24.09.2024, 14:05 | |
Все что выше fs/2 - это "отрицательные" частоты. В matlab есть функция fftshift, для того чтобы нулевая частота была в центре графика.
Чтобы при ОДПФ не получались комплексные значения, нужно чтобы при фильтрации сохранялась симметрия. (Четная функция для действительной части и нечетная для мнимой).
2
|
3601 / 2514 / 570
Регистрация: 11.09.2009
Сообщений: 9,113
|
|
24.09.2024, 14:28 | |
Ну, я не математик-теоретик, я практик. Привык, чтобы рассчитанные спектры как на экране анализатора спектра выглядели. Иначе какой в них практический смысл?
![]() Разобрались, что ли? Так поделитесь, в чём дело было. Даже интересно.
0
|
145 / 119 / 29
Регистрация: 09.01.2018
Сообщений: 818
|
|
25.09.2024, 09:03 [ТС] | |
О!
Именно так я и рассчитываю делать (это далнейший вопрос, тут подробно еще не писал). Точнее давно сделал, но на данный момент тут занятость повысилась. Через недельку займусь. И фильтр вроде симметричный, но вылезает все равно мнимая часть. На много меньше по амплитуде, чем действительная, но вылезает. Добавлено через 1 минуту Не на 100% еще. Просто полагаю, что это очень хорошая идея. Добавлено через 6 минут Где я приводил 2 картинки, там графки отличаются наличием/отсутствием одной точки. 1. Начинается синус в нуле, заканчивается за один отсчет до нуля. Если мы согласно теории Фурье бесконечно продлеваем сигнал, то это идеальный синус. Нет разрывов. Вероятно разрывов 1-го рода. 2. Начинается синус в нуле, заканчивается тоже в нуле. Если мы также продлеваем сигнал, то это не совсем идеальный синус. В месте "стыковки" будет как бы два отсчета подряд со значением ноль. Первый ноль - последняя точка предыдущего синуса, второй ноль - первая точка нового куска синуса. Это вроде как получается разрыв.
0
|
5452 / 2812 / 565
Регистрация: 07.11.2019
Сообщений: 4,626
|
|
25.09.2024, 09:10 | |
ViktorArs, какую фазу будет иметь вектор 0+0j? Никакую, точнее неопределенную: arctg(0/0)
Вот, а у вас вместо нулей - почти нули, связаные с конечной разрядностью и т.п. И фаза получается случайная, что вы и наблюдаете на графике. Добавлено через 5 минут ViktorArs, Вот в первом случае на графике будет случайная фаза для значений где амплитуды близких к нулю.. А во втором случае появляются промежуточные частоты с маленькой,но не нулевой амплитудой из-за разрыва. Постройте графики АЧХ в логарифмической шкале, все будет понятно.
1
|
5452 / 2812 / 565
Регистрация: 07.11.2019
Сообщений: 4,626
|
|
04.10.2024, 06:21 | |
Это требование к отфильтрованому сигналу (в частотной области, Фурье образу) перед ОДПФ. Иначе мы не получим действительный сигнал на выходе.
Смысл в том, чтобы действительная часть перед обратным преобразованием была четной функцией, мнимая - нечетной.
0
|
145 / 119 / 29
Регистрация: 09.01.2018
Сообщений: 818
|
|
04.10.2024, 09:30 [ТС] | |
А как мне быть-то тогда не пойму? Как достичь выполнения требования? Для этого фильтр должен отвечать требованиям каким-то?
Есть входной сигнал. Он туда-суда (ДПФ-ОДПФ) преобразуется правильно. Мнимая = 0. Пропускаю через фильтр. И что мне потом мне сигнал видоизменять? Это же не правильно? А если брать не цифровые фильтры а аналоговые? Там тоже мнимая часть будет? Добавлено через 1 час 6 минут Что-то я поразмышлял, я даже не понимаю, как именно цифровой фильтр (линейная дискретная система) может "испортить" входной сигнал, что у него (у сигнала) это требование перестанет выпоняться?
0
|
04.10.2024, 09:30 | ||||||
Помогаю со студенческими работами здесь
20
Дискретное преобразование Фурье Оконное преобразование Фурье Быстрое преобразование Фурье
Быстрое преобразование Фурье Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
|
Реляционная модель и правила Кодда: фундамент современных баз данных
Codd 05.04.2025
Конец 1960-х — начало 1970-х годов был периодом глубоких трансформаций в области хранения и обработки данных. На фоне растущих потребностей бизнеса и правительственных структур существовавшие на тот. . .
|
Асинхронные операции в Django с Celery
py-thonny 05.04.2025
Разработчики Django часто сталкиваются с проблемой, когда пользователь нажимает кнопку отправки формы и. . . ждёт. Секунды растягиваются в минуты, терпение иссякает, а интерфейс приложения замирает. . . .
|
Использование кэшей CPU: Максимальная производительность в Go
golander 05.04.2025
Разработчикам хорошо известно, что эффективность кода зависит не только от алгоритмов и структур данных, но и от того, насколько удачно программа взаимодействует с железом. Среди множества факторов,. . .
|
Создаем Telegram бот на TypeScript с grammY
run.dev 05.04.2025
Одна из его самых сильных сторон Telegram — это интеграция ботов прямо в экосистему приложения. В отличие от многих других платформ, он предоставляет разработчикам мощный API, позволяющий создавать. . .
|
Паттерны распределённых транзакций в Event-Driven микросервисах
ArchitectMsa 05.04.2025
Современные программные системы всё чаще проектируются как совокупность взаимодействующих микросервисов. И хотя такой подход даёт множество преимуществ — масштабируемость, гибкость, устойчивость к. . .
|
Работа с объемным DOM в javascript
Htext 04.04.2025
Сегодня прочитал статью тут о расходах памяти в JS, ее утечках и т. п. И вот что вспомнил из своей недавней практики. Может, кому пригодится. Хотя, в той статье об этом тоже есть.
Дело в том, что я. . .
|
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
|
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
|
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
|