143 / 117 / 29
Регистрация: 09.01.2018
Сообщений: 815
|
|
Преобразование Фурье19.09.2024, 10:10. Показов 1844. Ответов 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,109
|
|
19.09.2024, 16:55 | |
Потому что рассчёт спектра при ДПФ производится исходя из предположения, что сигнал бесконечен, то есть оцифрованное "окно" периодически повторяется бесконечное количество раз. Получается, что скачки сигнала по фазе в точках пристыковки окон - фазовая модуляция, которую и видно на рассчитанном спектре.
Чтобы "очистить" спектр, применяют к окну функции преобразования огибающей в колоколоподобную, со спадом амплитуды на краях до нуля - оконные весовые функции, например функции Бартлетта, Хэмминга, Ханна, Блэкмана-Харриса и др. Есть ещё вариант - подбирается ширина окна уменьшением количества имеющихся отсчётов или добавлением нулевых отсчётов так, чтобы фаза в начале и в конце окна совпадали. Но это более сложный и менее распространённый алгоритм, и не ко всем видам сигнала может быть применён (в частности, к сигналам со сложным спектром - вообще неприменим).
1
|
143 / 117 / 29
Регистрация: 09.01.2018
Сообщений: 815
|
|
19.09.2024, 21:14 [ТС] | |
Согласен. Дело ясное.
Тоже ясно. В данном конкретном случае, я так изначально и делал. Вопрос главный немного не в том. Наверно невнятно выразился. 1. Я взял сигнал с целым числом периодов. 2. Построил спектр. 3. Удалил одну точку в конце сигнала. 4. Построил спектр. 5. И т.д. по одной точке удаляя прошел один период. 6. Построил спектры всех сигналов. И из них все сигналы кроме двух имеют гладенький фазовый спектр. А два исключения, это 1. Целое число периодов минус одна точка в конце. 2. Целое число периодов минус полпериода, минус одна точка в конце.
0
|
3601 / 2514 / 570
Регистрация: 11.09.2009
Сообщений: 9,109
|
|
19.09.2024, 22:38 | |
При таком количестве периодов в окне, чтобы изменение длины окна на один отсчёт приводило к кардинальному изменению вида спектра, - это надо посадить в алгоритм расчёта какую-то солидную ошибку. Ищите. Где - подсказать не могу. Из вашего рисунка не очень понятно даже, сколько отсчётов приходится на один период. Могу только предположить, что около 20. И периодов в окне укладывается 20. Итого, ширина окна 400 ±1 отсчёт. Если всё так, то точно ищите ошибку, потому что 1/400 - это 0,25%. На форму спектра принципиально резко влиять не должно.
Могу предположить, что это может быть связано с точностью представления числа, с округлением, с "набеганием" ошибки и т.п., и при каких-то числах возникает резкий выброс погрешности счёта. Проверьте, что с дискретизацией и представлением окна всё правильно, и попробуйте для начала использовать счёт в числах с двойной точностью. Посмотрите, что изменится.
1
|
143 / 117 / 29
Регистрация: 09.01.2018
Сообщений: 815
|
|
22.09.2024, 22:08 [ТС] | |
![]() 12 отсчетов в периоде Даже не решаюсь спросить о чем это. Что делать-то? Первую часть предложения не совсем понял? Как дискретизацию проверить? Она 12 отсчетов на период. (вы совершенно точно предположили). Но как и что проверить я не понимаю совсем. Вторая часть предложения . . . А разве в матлабе по умолчанию не double?
0
|
3601 / 2514 / 570
Регистрация: 11.09.2009
Сообщений: 9,109
|
|
23.09.2024, 02:11 | |
ViktorArs, чего-то я сообразить не могу, как вы считаете...
В случае хорошо состыкованной синусоиды, в амплитудном спектре действительно должны быть две "палки". Но только одна - прямая, вторая - зеркальная в отрицательных частотах. У вас - две положительные, причём значения 39180 и 440800 ... Хотя частота исходного сигнала судя по верхнему графику равна 40000 (4/1*10-4). По-моему, где-то что-то сильно съехало. Нет?
1
|
143 / 117 / 29
Регистрация: 09.01.2018
Сообщений: 815
|
|
23.09.2024, 13:25 [ТС] | |
Спасибо!!!
Есть отличие, когда спектр строится от 0 до pi или от -pi/2 до pi/2 ? Я всегда думал, что разницы нет? Если есть, не могли бы пояснить в чем суть? Да, 40 кГц. Пытаюсь понять.
0
|
3601 / 2514 / 570
Регистрация: 11.09.2009
Сообщений: 9,109
|
|
24.09.2024, 02:27 | |
Опять вообще не понял. Спектр строится по отсчётам амплитуды в имеющемся исходном окне.
Ширина окна - в единицах времени. Обратная величина - ширина рассчитанного спектра в единицах частоты. Огибающая рассчитанного спектра - sin(x)/x. Первый ноль огибающей - на частоте, равной частоте дискретизации. Берётся только этот первый "лепесток" огибающей спектра. То, что можно посчитать в следующих лепестках - просто повторение этой периодической функции. Теорема Котельникова, однако... Есть конечно приёмы всякого "оверсэмплирования", но это частные случаи. Явно не ваш. Так что первое, с чем вам по-моему надо разобраться, откуда в выходном спектре частоты выше половины частоты дискретизации. Амплитудный спектр обычно рисуется только для положительных значений частоты, т.е. берётся только половина от рассчитанного массива. Вторая половина - зеркальная, частоты отрицательные, "мнимые". Смысл её рисовать? Но всё равно, даже если предположиь, что шкала "съехала" на какую-то константу, те две "палки" не объяснить. 39180 - это видимо исходные 40000. А как сюда попала частота в 10 раз выше?... На фазовый спектр пока вообще не смотрю. При таком представлении амплитудного - нет смысла, вообще непонятно, как он считается. Вы считаете в Маткаде? Стандартными функциями? Там же Хэлп встроенный неплохой есть. Да и статей про него куча.
1
|
143 / 117 / 29
Регистрация: 09.01.2018
Сообщений: 815
|
|
24.09.2024, 11:23 [ТС] | |
Все верно.
Все верно. Вот я и строю (привычка, если можно так выразиться) два лепестка в положительном направлении. Т.е. не от 0 до Ну вот я со 2 курса рисую до Все в matlab. Ф-ции свои, но я ими пользуюсь больше 10 лет, и я их сравнивал со стандартными, и получалось одинаково. А что касается pi/2 и т.д. - это нормализованные единицы имелось ввиду.
0
|
3601 / 2514 / 570
Регистрация: 11.09.2009
Сообщений: 9,109
|
|
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,109
|
|
24.09.2024, 14:28 | |
Ну, я не математик-теоретик, я практик. Привык, чтобы рассчитанные спектры как на экране анализатора спектра выглядели. Иначе какой в них практический смысл?
![]() Разобрались, что ли? Так поделитесь, в чём дело было. Даже интересно.
0
|
143 / 117 / 29
Регистрация: 09.01.2018
Сообщений: 815
|
|
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
|
143 / 117 / 29
Регистрация: 09.01.2018
Сообщений: 815
|
|
04.10.2024, 09:30 [ТС] | |
А как мне быть-то тогда не пойму? Как достичь выполнения требования? Для этого фильтр должен отвечать требованиям каким-то?
Есть входной сигнал. Он туда-суда (ДПФ-ОДПФ) преобразуется правильно. Мнимая = 0. Пропускаю через фильтр. И что мне потом мне сигнал видоизменять? Это же не правильно? А если брать не цифровые фильтры а аналоговые? Там тоже мнимая часть будет? Добавлено через 1 час 6 минут Что-то я поразмышлял, я даже не понимаю, как именно цифровой фильтр (линейная дискретная система) может "испортить" входной сигнал, что у него (у сигнала) это требование перестанет выпоняться?
0
|
04.10.2024, 09:30 | ||||||
Помогаю со студенческими работами здесь
20
Дискретное преобразование Фурье Оконное преобразование Фурье Быстрое преобразование Фурье
Быстрое преобразование Фурье Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
|
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
|
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
|
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
|
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
|
Метод с двумя буферами (или double buffering) или ping-pong buffering
Hrethgir 02.04.2025
Из ответов LM модели.
Метод, который предполагает использование двух массивов для хранения промежуточных результатов сложения векторов, обычно применяется в сценариях, где необходимо минимизировать. . .
|
На любовном киберфронте
Alexander-7 01.04.2025
Недавно на одном малоизвестном сайте знакомств мною заинтересовалась девушка:
«Текст немного странный. Но, судя по адресу почты, иностранка», – подумал я. Поколебавшись пару суток, я ответил ей:. . .
|
Как работает Node.js изнутри
run.dev 29.03.2025
Node. js изменил подход к разработке веб-приложений, позволив использовать JavaScript не только на стороне клиента, но и на сервере. Созданный в 2009 году Райаном Далем, этот открытый,. . .
|
Моки в Python: Mock Object Library
py-thonny 29.03.2025
Тестирование кода требует особого подхода, когда речь идёт о компонентах, взаимодействующих с внешним миром. Мы часто сталкиваемся с непредсказуемостью HTTP-запросов, чтением данных из базы или. . .
|
JavaScript: Управление памятью и улучшение производительности
run.dev 29.03.2025
В отличие от низкоуровневых языков программирования, JavaScript не требует ручного выделения и освобождения памяти. Здесь работает автоматический сборщик мусора, который определяет, какие объекты. . .
|