Форум программистов, компьютерный форум, киберфорум
Цифровая обработка сигналов
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
145 / 119 / 29
Регистрация: 09.01.2018
Сообщений: 818

Преобразование Фурье

19.09.2024, 10:10. Показов 1852. Ответов 35

Author24 — интернет-сервис помощи студентам
Вопрос.
На картинке три сигнала синусоиды отличающиеся количеством отсчетов:
1-й сигнал содержит на 1 отсчет меньше от целого числа периодов.
2-й сигнал содержит целое число периодов.
3-й сигнал содержит на 1 отсчет больше от целого числа периодов.
Отличие вполне видно невооруженным глазом в конце синусоиды.
Соответственно по цветам изображены спектры (ДПФ). Амплитудные спектры очень близки между собой. По фазе - есть вопросы.

1. Почему фазовый спектр 2 и 3 сигналов гладкий, а когда на 1 отсчет меньше, чем целое число периодов, то превращается в хрень какую-то. Причем ОДПФ дает исходный сигнал, поэтому вроде как думается, что в расчете ошибок нет.
При дальнейшем уменьшении кол-ва отсчетов, т.е. укорочении синуса фазовый спектр снова гладкий. Итого фазовый спектр непонятной формы получается, когда количество отсчетов на 1 меньше, чем целое число ПОЛУпериодов. (на полупериодах тот же эффект повторяется)

2. Вопрос по ОДПФ. Формально ОДПФ дает комплексные отсчеты, но (см. первые три осциллограммы с сигналами, на них ОДПФ тоже есть) при этом RE часть = сигналу, а IM часть = нулю. Однако Если я пропускаю синус через к.л. фильтр, то ОДПФ дает НЕнулевую мнимую часть. Так разве должно быть? Почему так? И что это значит физически? И как правильно сделать, чтобы была нулевая мнимая часть?
Миниатюры
Преобразование Фурье  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.09.2024, 10:10
Ответы с готовыми решениями:

Преобразование Фурье
Добрый день! Задали вопрос. Почему нельзя вместо преобразований Фурье использовать интерполяцию кубичискими сплайнами при восстановлении...

Преобразование Фурье
Добрый день! Не могли бы вы подбросить рабочий код для преобразования Фурье в Делфи? Нужен код не быстрого преобразования, а обычного....

Дискретное преобразование Фурье
Ребят у меня вопрос, у меня есть сигнал виде отсчетов общее число отсчетов 120540, так вот скажите, чтобы взять ДПФ необходимо, чтобы длина...

35
3601 / 2514 / 570
Регистрация: 11.09.2009
Сообщений: 9,113
19.09.2024, 16:55
Цитата Сообщение от ViktorArs Посмотреть сообщение
Почему фазовый спектр ...
Потому что рассчёт спектра при ДПФ производится исходя из предположения, что сигнал бесконечен, то есть оцифрованное "окно" периодически повторяется бесконечное количество раз. Получается, что скачки сигнала по фазе в точках пристыковки окон - фазовая модуляция, которую и видно на рассчитанном спектре.

Чтобы "очистить" спектр, применяют к окну функции преобразования огибающей в колоколоподобную, со спадом амплитуды на краях до нуля - оконные весовые функции, например функции Бартлетта, Хэмминга, Ханна, Блэкмана-Харриса и др.
Есть ещё вариант - подбирается ширина окна уменьшением количества имеющихся отсчётов или добавлением нулевых отсчётов так, чтобы фаза в начале и в конце окна совпадали. Но это более сложный и менее распространённый алгоритм, и не ко всем видам сигнала может быть применён (в частности, к сигналам со сложным спектром - вообще неприменим).
1
145 / 119 / 29
Регистрация: 09.01.2018
Сообщений: 818
19.09.2024, 21:14  [ТС]
Цитата Сообщение от i8085 Посмотреть сообщение
Потому что рассчёт спектра при ДПФ производится исходя из предположения, что сигнал бесконечен, то есть оцифрованное "окно" периодически повторяется бесконечное количество раз. Получается, что скачки сигнала по фазе в точках пристыковки окон - фазовая модуляция, которую и видно на рассчитанном спектре.
Согласен. Дело ясное.
Цитата Сообщение от i8085 Посмотреть сообщение
Чтобы "очистить" спектр, применяют к окну функции преобразования огибающей в колоколоподобную, со спадом амплитуды на краях до нуля - оконные весовые функции, например функции Бартлетта, Хэмминга, Ханна, Блэкмана-Харриса и др.
Тоже ясно.
Цитата Сообщение от i8085 Посмотреть сообщение
Есть ещё вариант - подбирается ширина окна уменьшением количества имеющихся отсчётов или добавлением нулевых отсчётов так, чтобы фаза в начале и в конце окна совпадали. Но это более сложный и менее распространённый алгоритм, и не ко всем видам сигнала может быть применён (в частности, к сигналам со сложным спектром - вообще неприменим).
В данном конкретном случае, я так изначально и делал.

Вопрос главный немного не в том. Наверно невнятно выразился.
1. Я взял сигнал с целым числом периодов.
2. Построил спектр.
3. Удалил одну точку в конце сигнала.
4. Построил спектр.
5. И т.д. по одной точке удаляя прошел один период.
6. Построил спектры всех сигналов.

И из них все сигналы кроме двух имеют гладенький фазовый спектр.
А два исключения, это
1. Целое число периодов минус одна точка в конце.
2. Целое число периодов минус полпериода, минус одна точка в конце.
0
3601 / 2514 / 570
Регистрация: 11.09.2009
Сообщений: 9,113
19.09.2024, 22:38
Цитата Сообщение от ViktorArs Посмотреть сообщение
все сигналы кроме двух ...
При таком количестве периодов в окне, чтобы изменение длины окна на один отсчёт приводило к кардинальному изменению вида спектра, - это надо посадить в алгоритм расчёта какую-то солидную ошибку. Ищите. Где - подсказать не могу. Из вашего рисунка не очень понятно даже, сколько отсчётов приходится на один период. Могу только предположить, что около 20. И периодов в окне укладывается 20. Итого, ширина окна 400 ±1 отсчёт. Если всё так, то точно ищите ошибку, потому что 1/400 - это 0,25%. На форму спектра принципиально резко влиять не должно.

Могу предположить, что это может быть связано с точностью представления числа, с округлением, с "набеганием" ошибки и т.п., и при каких-то числах возникает резкий выброс погрешности счёта.
Проверьте, что с дискретизацией и представлением окна всё правильно, и попробуйте для начала использовать счёт в числах с двойной точностью. Посмотрите, что изменится.
1
145 / 119 / 29
Регистрация: 09.01.2018
Сообщений: 818
22.09.2024, 22:08  [ТС]
Цитата Сообщение от i8085 Посмотреть сообщение
При таком количестве периодов в окне, чтобы изменение длины окна на один отсчёт приводило к кардинальному изменению вида спектра, - это надо посадить в алгоритм расчёта какую-то солидную ошибку.

Цитата Сообщение от i8085 Посмотреть сообщение
Из вашего рисунка не очень понятно даже, сколько отсчётов приходится на один период. Могу только предположить, что около 20. И периодов в окне укладывается 20. Итого, ширина окна 400 ±1 отсчёт. Если всё так, то точно ищите ошибку, потому что 1/400 - это 0,25%. На форму спектра принципиально резко влиять не должно.
12 отсчетов в периоде
Цитата Сообщение от i8085 Посмотреть сообщение
Могу предположить, что это может быть связано с точностью представления числа, с округлением, с "набеганием" ошибки и т.п., и при каких-то числах возникает резкий выброс погрешности счёта.
Даже не решаюсь спросить о чем это. Что делать-то?
Цитата Сообщение от i8085 Посмотреть сообщение
Проверьте, что с дискретизацией и представлением окна всё правильно, и попробуйте для начала использовать счёт в числах с двойной точностью. Посмотрите, что изменится.
Первую часть предложения не совсем понял? Как дискретизацию проверить? Она 12 отсчетов на период. (вы совершенно точно предположили). Но как и что проверить я не понимаю совсем. Вторая часть предложения . . . А разве в матлабе по умолчанию не double?
0
145 / 119 / 29
Регистрация: 09.01.2018
Сообщений: 818
22.09.2024, 22:11  [ТС]
Цитата Сообщение от i8085 Посмотреть сообщение
Из вашего рисунка не очень понятно даже, сколько отсчётов приходится на один период.
Уменьшил (укоротил) сигнал. Вроде все о чем вы говорили должно быть видно теперь. Эффект тотже.
Миниатюры
Преобразование Фурье   Преобразование Фурье  
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  [ТС]
Спасибо!!!
Цитата Сообщение от i8085 Посмотреть сообщение
Но только одна - прямая, вторая - зеркальная в отрицательных частотах. У вас - две положительные, причём значения 39180 и 440800 ...
Есть отличие, когда спектр строится от 0 до pi или от -pi/2 до pi/2 ? Я всегда думал, что разницы нет? Если есть, не могли бы пояснить в чем суть?
Цитата Сообщение от i8085 Посмотреть сообщение
Хотя частота исходного сигнала судя по верхнему графику равна 40000 (4/1*10-4).
Да, 40 кГц.
Цитата Сообщение от i8085 Посмотреть сообщение
По-моему, где-то что-то сильно съехало. Нет?
Пытаюсь понять.
0
3601 / 2514 / 570
Регистрация: 11.09.2009
Сообщений: 9,113
24.09.2024, 02:27
Цитата Сообщение от ViktorArs Посмотреть сообщение
спектр строится от 0 до pi или от -pi/2 до pi/2
Опять вообще не понял. Спектр строится по отсчётам амплитуды в имеющемся исходном окне.
Ширина окна - в единицах времени. Обратная величина - ширина рассчитанного спектра в единицах частоты. Огибающая рассчитанного спектра - sin(x)/x. Первый ноль огибающей - на частоте, равной частоте дискретизации. Берётся только этот первый "лепесток" огибающей спектра. То, что можно посчитать в следующих лепестках - просто повторение этой периодической функции. Теорема Котельникова, однако... Есть конечно приёмы всякого "оверсэмплирования", но это частные случаи. Явно не ваш. Так что первое, с чем вам по-моему надо разобраться, откуда в выходном спектре частоты выше половины частоты дискретизации.
Амплитудный спектр обычно рисуется только для положительных значений частоты, т.е. берётся только половина от рассчитанного массива. Вторая половина - зеркальная, частоты отрицательные, "мнимые". Смысл её рисовать? Но всё равно, даже если предположиь, что шкала "съехала" на какую-то константу, те две "палки" не объяснить. 39180 - это видимо исходные 40000. А как сюда попала частота в 10 раз выше?...
На фазовый спектр пока вообще не смотрю. При таком представлении амплитудного - нет смысла, вообще непонятно, как он считается.
Вы считаете в Маткаде? Стандартными функциями? Там же Хэлп встроенный неплохой есть. Да и статей про него куча.
1
145 / 119 / 29
Регистрация: 09.01.2018
Сообщений: 818
24.09.2024, 11:23  [ТС]
Цитата Сообщение от i8085 Посмотреть сообщение
Опять вообще не понял. Спектр строится по отсчётам амплитуды в имеющемся исходном окне.
Ширина окна - в единицах времени. Обратная величина - ширина рассчитанного спектра в единицах частоты. Огибающая рассчитанного спектра - sin(x)/x. Первый ноль огибающей - на частоте, равной частоте дискретизации.
Все верно.
Цитата Сообщение от i8085 Посмотреть сообщение
Берётся только этот первый "лепесток" огибающей спектра. То, что можно посчитать в следующих лепестках - просто повторение этой периодической функции.
Все верно. Вот я и строю (привычка, если можно так выразиться) два лепестка в положительном направлении. Т.е. не от 0 до https://www.cyberforum.ru/cgi-bin/latex.cgi?f_s/2, а от 0 до https://www.cyberforum.ru/cgi-bin/latex.cgi?f_s. На рисунке же явно видно, что пики расположены в точках 40 кГц и f_s - 40 кГц = 480 кГц - 40 кГц = 440 кГц.
Цитата Сообщение от i8085 Посмотреть сообщение
Амплитудный спектр обычно рисуется только для положительных значений частоты, т.е. берётся только половина от рассчитанного массива. Вторая половина - зеркальная, частоты отрицательные, "мнимые". Смысл её рисовать?
Ну вот я со 2 курса рисую до https://www.cyberforum.ru/cgi-bin/latex.cgi?f_s.
Все в matlab. Ф-ции свои, но я ими пользуюсь больше 10 лет, и я их сравнивал со стандартными, и получалось одинаково.

А что касается pi/2 и т.д. - это нормализованные единицы имелось ввиду.
0
3601 / 2514 / 570
Регистрация: 11.09.2009
Сообщений: 9,113
24.09.2024, 12:38
Цитата Сообщение от ViktorArs Посмотреть сообщение
я со 2 курса рисую до fs.
Зачем?
ДПФ - это ж не какой-то физический смеситель, а просто алгоритм с определёнными допущениями и ограничениями. В исходном спектре такой частоты нет. Всё, что выше fs/2 - это ж просто "дефект счёта". Или я что-то забыл?
1
5452 / 2812 / 565
Регистрация: 07.11.2019
Сообщений: 4,626
24.09.2024, 12:39
Если сигнал содержит целое число периодов, т.е. нет разрывов при периодическом продолжении сигнала, то его амплитудный спектр будет состоять из двух пиков и нулей (точнее очень близких к нулю значений).
Близкие к нулю (шумы дискретизации) комплексные значения будут иметь случайную фазу, что вы и наблюдаете. Фаза это направление вектора, если вектор нулевой, то о его направлении говорить нет смысла.
2
145 / 119 / 29
Регистрация: 09.01.2018
Сообщений: 818
24.09.2024, 13:23  [ТС]
Спасибо!

Добавлено через 20 минут
Цитата Сообщение от i8085 Посмотреть сообщение
ДПФ - это ж не какой-то физический смеситель, а просто алгоритм с определёнными допущениями и ограничениями. В исходном спектре такой частоты нет. Всё, что выше fs/2 - это ж просто "дефект счёта". Или я что-то забыл?
Нет. Вы все верно говорите. В учебнике так было, с тех пор пошло.
0
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
Цитата Сообщение от ViktorArs Посмотреть сообщение
В учебнике так было
Ну, я не математик-теоретик, я практик. Привык, чтобы рассчитанные спектры как на экране анализатора спектра выглядели. Иначе какой в них практический смысл?

Цитата Сообщение от ViktorArs Посмотреть сообщение
Спасибо!
Разобрались, что ли? Так поделитесь, в чём дело было. Даже интересно.
0
145 / 119 / 29
Регистрация: 09.01.2018
Сообщений: 818
25.09.2024, 09:03  [ТС]
Цитата Сообщение от u235 Посмотреть сообщение
Чтобы при ОДПФ не получались комплексные значения, нужно чтобы при фильтрации сохранялась симметрия. (Четная функция для действительной части и нечетная для мнимой).
О!
Именно так я и рассчитываю делать (это далнейший вопрос, тут подробно еще не писал). Точнее давно сделал, но на данный момент тут занятость повысилась. Через недельку займусь.
И фильтр вроде симметричный, но вылезает все равно мнимая часть. На много меньше по амплитуде, чем действительная, но вылезает.

Добавлено через 1 минуту
Цитата Сообщение от i8085 Посмотреть сообщение
Разобрались, что ли? Так поделитесь, в чём дело было. Даже интересно.
Не на 100% еще.
Просто полагаю, что это очень хорошая идея.
Цитата Сообщение от u235 Посмотреть сообщение
Если сигнал содержит целое число периодов, т.е. нет разрывов при периодическом продолжении сигнала, то его амплитудный спектр будет состоять из двух пиков и нулей (точнее очень близких к нулю значений).
Близкие к нулю (шумы дискретизации) комплексные значения будут иметь случайную фазу, что вы и наблюдаете. Фаза это направление вектора, если вектор нулевой, то о его направлении говорить нет смысла.
Добавлено через 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
145 / 119 / 29
Регистрация: 09.01.2018
Сообщений: 818
03.10.2024, 20:26  [ТС]
Цитата Сообщение от u235 Посмотреть сообщение
Чтобы при ОДПФ не получались комплексные значения, нужно чтобы при фильтрации сохранялась симметрия. (Четная функция для действительной части и нечетная для мнимой).
Это для комплексной частотной характеристики фильтра должно это соблюдаться?
0
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.10.2024, 09:30
Помогаю со студенческими работами здесь

Дискретное преобразование Фурье
Здравствуйте, преподаватель задал к завтрашнему сей пример в довольно странной форме, не очень понятно, как к нему подступиться. Вроде...

Оконное преобразование Фурье
Оконное преобразование Фурье — это разновидность преобразования Фурье. ...

Быстрое преобразование Фурье
Здравствуйте, реализую быстрое преобразование Фурье массива и фильтра, умножаю их, делаю обратное преобразование и на выходе должен быть...

Дискретное преобразование Фурье
Здравствуйте, не знаю даже в какую тему правильно вопрос адресовать. В общем разбираю с дискретным преобразованием Фурье и возник вопрос...

Быстрое преобразование Фурье
Доброго времени суток! Стоит следующая задача. Используя алгоритм Быстрого Преобразования Фурье (Radix-4), вычислить дискретное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
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, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер