С Новым годом! Форум программистов, компьютерный форум, киберфорум
Цифровая обработка сигналов
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
123 / 98 / 28
Регистрация: 09.01.2018
Сообщений: 584
1

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

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

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

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

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

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

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

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

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

35
5425 / 2778 / 561
Регистрация: 07.11.2019
Сообщений: 4,548
04.10.2024, 11:04 21
Author24 — интернет-сервис помощи студентам
ViktorArs, фильтровать можно по разному:
Фильтрация во временной области: обычная свертка сигнала с КИХ-фильтром, например. Тут все вещественное, все просто.
Фильтрация в частотной области: Делаем ПФ сигнала, делаем ПФ фильтра, перемножаем их, и делаем ОПФ. Теорема о свертке, так это называется.
Вот тут и возникают особенности. Например у вас разные длины фильтра и сигнала. И потом, свертка через Фурье - циклическая, поэтому, скорее всего, надо дополнять нулями, если хотим получить нормальный результат.
Вот пример на Python:
a-сигнал, b-фильтр, и то и другое уже дополнено нулями. Обратите внимание на симметрию действительной и мнимой части Фурье-преобразований и отсутствие (нулевой) мнимой части у результата.
Код
In [31]: a=np.array([1, 2,3,1,0,0,0,0])

In [32]: b=np.array([0,.5,.5,0,0,0,0,0])

In [33]: a_fft=np.fft.fft(a)

In [34]: a_fft
Out[34]:
array([ 7.        +0.j        ,  1.70710678-5.12132034j,
       -2.        -1.j        ,  0.29289322+0.87867966j,
        1.        +0.j        ,  0.29289322-0.87867966j,
       -2.        +1.j        ,  1.70710678+5.12132034j])

In [35]: b_fft=np.fft.fft(b)


In [37]: b_fft
Out[37]:
array([ 1.        +0.j        ,  0.35355339-0.85355339j,
       -0.5       -0.5j       , -0.35355339+0.14644661j,
        0.        +0.j        , -0.35355339-0.14644661j,
       -0.5       +0.5j       ,  0.35355339+0.85355339j])

In [38]: c_fft=a_fft*b_fft

In [39]: c_fft
Out[39]:
array([ 7.        +0.j        , -3.76776695-3.26776695j,
        0.5       +1.5j       , -0.23223305-0.26776695j,
        0.        +0.j        , -0.23223305+0.26776695j,
        0.5       -1.5j       , -3.76776695+3.26776695j])

In [40]: np.convolve(a,b )
Out[40]:
array([0. , 0.5, 1.5, 2.5, 2. , 0.5, 0. , 0. , 0. , 0. , 0. , 0. , 0. ,
       0. , 0. ])


In [42]: c=np.fft.ifft(c_fft)

In [43]: c
Out[43]:
array([ 0.00000000e+00+0.j,  5.00000000e-01+0.j,  1.50000000e+00+0.j,
        2.50000000e+00+0.j,  2.00000000e+00+0.j,  5.00000000e-01+0.j,
        0.00000000e+00+0.j, -2.22044605e-16+0.j])
0
123 / 98 / 28
Регистрация: 09.01.2018
Сообщений: 584
04.10.2024, 15:53  [ТС] 22
Класс!
Вообще я также делаю. Задумка именно такая.
Но у меня вылезает мнимая часть равная примерно 20% от действительной.
Одно отличие. У меня задана АФЧХ фильтра аналогового.
Я из него искусственно делаю АФЧХ цифрового путем создания симметрии. (именно такой ка вы описали).
Перемножаю частотные образы сигнала и фильтра, как у вас в примере.
И далее ОДПФ.
О результате писал.

Так можно делать? (я про симметрию)
0
5425 / 2778 / 561
Регистрация: 07.11.2019
Сообщений: 4,548
04.10.2024, 17:34 23
Вы бы лучше бы пример со своими данными и результатами расчета выложили бы в архиве. Проще будет найти ошибку. Возможно у вас нулевые частоты не совпадают или что-то еще.
0
123 / 98 / 28
Регистрация: 09.01.2018
Сообщений: 584
07.10.2024, 08:26  [ТС] 24
Да. Обязательно. Я просто в выходные вообще не имею возможности к компьютеру подойти. В будни тоже не всегда. А так я обязательно, ближайшее время.
0
123 / 98 / 28
Регистрация: 09.01.2018
Сообщений: 584
08.10.2024, 16:13  [ТС] 25
Цитата Сообщение от u235 Посмотреть сообщение
Вы бы лучше бы пример со своими данными
1. Входной сигнал черный. Красные - ДПФ-ОДПФ входного сигнала. Мнимая часть = 0.
2. 3. АФЧХ Входного сигнала.
5. 6. АФЧХ фильтра.
7. 8. АФЧХ вЫходного сигнала.
4. Выходной сигнал. (видно, что есть мнимая часть)
Миниатюры
Преобразование Фурье  
0
5425 / 2778 / 561
Регистрация: 07.11.2019
Сообщений: 4,548
08.10.2024, 18:33 26
а можно эти данные не в виде графиков, а в виде файлов с числами?
0
123 / 98 / 28
Регистрация: 09.01.2018
Сообщений: 584
08.10.2024, 21:11  [ТС] 27
См. вложение.

Не в тему:
Интересное наблюдение. Установлен архиватор 7z. ПКМ на m-файле = в раскрывающемся меню все как обычно, есть пункт "7z -> запаковать/добавить в архив/ ...".
На mat-файле в меню такой пункт отсутствует почему-то.
Вложения
Тип файла: 7z QuestionFor_IM_part.7z (17.9 Кб, 3 просмотров)
0
5425 / 2778 / 561
Регистрация: 07.11.2019
Сообщений: 4,548
08.10.2024, 22:02 28
Лучший ответ Сообщение было отмечено ViktorArs как решение

Решение

ViktorArs, у вас проблема с фильтром stfResSpec. Первый элемент должен соответствовать нулевой частоте, второй должен быть комплексно сопряжен с последним, третий - с предпоследним и т.д., см. Фурье от входного сигнала.. А у вас первый сопряжен с последним и т.д.
1
5425 / 2778 / 561
Регистрация: 07.11.2019
Сообщений: 4,548
09.10.2024, 10:32 29
Можно так изменить симметрию, тогда фильтр в временной области не будет комплексным.
Matlab M
1
2
3
4
5
6
load('Filter.mat')
stfResSpec(2:241)=stfResSpec(1:240); % смещение
stfResSpec(241)=0; % зануляем частоты
stfResSpec(1)=0; %зануляем частоты
r=ifft(stfResSpec);
plot(r)
Добавлено через 15 секунд
Можно так изменить симметрию, тогда фильтр в временной области не будет комплексным.
Matlab M
1
2
3
4
5
6
load('Filter.mat')
stfResSpec(2:241)=stfResSpec(1:240); % смещение
stfResSpec(241)=0; % зануляем частоты
stfResSpec(1)=0; %зануляем частоты
r=ifft(stfResSpec);
plot(r)
0
123 / 98 / 28
Регистрация: 09.01.2018
Сообщений: 584
09.10.2024, 12:35  [ТС] 30
Нашел ошибку, где происходит у меня такая кривость. Сделал по вашей рекомендации. Все работает!
Спасибо большое!

Добавлено через 1 час 6 минут
Цитата Сообщение от u235 Посмотреть сообщение
Чтобы при ОДПФ не получались комплексные значения, нужно чтобы при фильтрации сохранялась симметрия. (Четная функция для действительной части и нечетная для мнимой).
Где-то в середине темы между делом писал/спрашивал, про то как обстоят дела с физическими фильтрами, а не цифровыми. Там симметрии нет. Получается при ОДПФ мнимая часть всегда будет?
0
5425 / 2778 / 561
Регистрация: 07.11.2019
Сообщений: 4,548
09.10.2024, 12:42 31
Что значит физическими? Аналоговые фильтры или что-то еще?
0
123 / 98 / 28
Регистрация: 09.01.2018
Сообщений: 584
09.10.2024, 13:19  [ТС] 32
Аналоговые.
Физические - имел ввиду реальные, физически существующие: резисторы, конденсаторы, ОУ (если активные), . . .
0
5425 / 2778 / 561
Регистрация: 07.11.2019
Сообщений: 4,548
09.10.2024, 14:06 33
ViktorArs, если аналоговые, то понятия ОДПФ для них неприменимо. Но если математически рассматривать отрицательные частоты, то симметрия АЧХ и ФЧХ должна сохраниться, как и в дискретном случае, на мой взгляд. Можно сказать, что аналоговый сигнал будет вести себя подобно дискретному с бесконечно большой частотой дискретизации.
0
123 / 98 / 28
Регистрация: 09.01.2018
Сообщений: 584
09.10.2024, 16:21  [ТС] 34
Спасибо!!!
0
123 / 98 / 28
Регистрация: 09.01.2018
Сообщений: 584
06.11.2024, 11:27  [ТС] 35
Возник другой вопрос. Не стал создавать разные темы, т.к. вероятно вопрос либо очень близкий, либо вообще об одном и том же.
Есть входной сигнал и некий фильтр. Фильтрацию провожу не сверткой сигнала и фильтра, а вычисляю спектр сигнала и АФЧХ фильтра, перемножаю их и произвожу ОДПФ.
На рисунке пример. Синусоидальный сигнал длительностью 0,5 мс. К нему добавляю "нулевой хвост" разной длины (верхний график) и делаю преобразование.
Pic1 хвост 0,5 мс (длительность сигнала 1,0 мс)
Pic2 хвост 1,0 мс (длительность сигнала 1,5 мс)
Pic3 хвост 1,5 мс (длительность сигнала 2,0 мс)
Pic4 хвост 2,5 мс (длительность сигнала 3,0 мс)
На последнем рисунке совмещены Pic1 и Pic4.
Pic1: Ощущение, что затухающий "хвост" сигнала, который не поместился на Pic1, продолжился в начало сигнала. Поэтому и амплитуда возрастающей части сигнала больше.
Pic4: А вот когда нулей во входном сигнале много и весь "хвост" умещается, то он просто умещается.

Так ли это?
Что это?
С чем связано?
Миниатюры
Преобразование Фурье  
0
123 / 98 / 28
Регистрация: 09.01.2018
Сообщений: 584
06.11.2024, 22:10  [ТС] 36
UPD:
Pic1: Ощущение, что затухающий "хвост" сигнала, который не поместился на Pic1, продолжился в начало сигнала. Поэтому и амплитуда возрастающей части сигнала больше и в начальный момент времени амплитуда (огибающая) начинает расти не с нуля, а уже имеет какое-то значение в начальный (нулевой) момент времени.
0
06.11.2024, 22:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2024, 22:10
Помогаю со студенческими работами здесь

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

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

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

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

Преобразование Фурье необычного сигнала
Приветствую всех! Есть дискретный сигнал (зависимость от времени) который в каждый момент времени...

Обратное быстрое преобразование Фурье
Здравствуйте, уважаемые форумчане. Изучаю теорию БПФ(быстрое преобразование Фурье), а именно -...


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru