Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: БПФ для оценки низкочастотной составляющей
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
roman73
Доброго времени суток!

Необходимо выделить низкочастотную составляющую временного ряда.
Алгоритм по ТЗ такой:
1.Делается БПФ.
2.Обнуляются все частоты, кроме некоторого числа низких.
3.Делается обратное БПФ.

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

Число отсчетов ~50000-100000
Lmx2315
Цитата(roman73 @ Aug 22 2011, 17:32) *
Необходимо выделить периодическую составляющую временного ряда.
..
2.Обнуляются все частоты, кроме некоторого числа низких.
..


..очень похоже на ФНЧ, почему его нельзя применить?
Соорудить ФНЧ фильтр с требуемой полосой пропустить выборку через него - получить ваш сигнал.
roman73
Чтобы не было недоразумений - фильтр нужен программный.

Эксперсс-гугление по запросу "программная реализация фнч" выдает какой-то бред...
bahurin
Цитата(roman73 @ Aug 22 2011, 17:32) *
Доброго времени суток!

Необходимо выделить периодическую составляющую временного ряда.
Алгоритм по ТЗ такой:
1.Делается БПФ.
2.Обнуляются все частоты, кроме некоторого числа низких.
3.Делается обратное БПФ.


Простите, конечно, но кто вам такое бредовое ТЗ выдал? То что вы описали это цифровой фнч, обладающий очень плохими характеристиками и выполненный настолько неэффективно, насколько это возможно.
Хотя, нет можно еще хуже если вместо FFT применять наивный способ вычисления DFT.
Если же все-таки необходимо выполнить через обнуление FFT (для того чтобы порадовать начальство или преподавателей), то смело обнуляйте как реальную так и мнимую части на выходе FFT. После обратного FFT в вашем сигнале появится мнимая часть, но если вы правильно обнулите спектр, то она будет равна нулю (ну или очень маленькой типа 10^-18). На каком хоть языке программирования надо этот шедевр реализовать?
roman73
Цитата(bahurin @ Aug 2+2 2011, 18:17) *
Простите, конечно, но кто вам такое бредовое ТЗ выдал? То что вы описали это цифровой фнч, обладающий очень плохими характеристиками и выполненный настолько неэффективно, насколько это возможно.
Хотя, нет можно еще хуже если вместо FFT применять наивный способ вычисления DFT.

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

Цитата(bahurin @ Aug 22 2011, 18:17) *
Если же все-таки необходимо выполнить через обнуление FFT (для того чтобы порадовать начальство или преподавателей), то смело обнуляйте как реальную так и мнимую части на выходе FFT. После обратного FFT в вашем сигнале появится мнимая часть, но если вы правильно обнулите, то она будет равна нулю (ну или очень маленькой типа 10^-18). На каком хоть языке программирования надо этот шедевр реализовать?

Поподробнее пожалуйста.
В чём заключается правильное обнуление?
По поводу языка - желательно Visual C/C++.
V_G
1. Во входном сигнале мнимой компоненты нет.
2. Вычисленное ДПФ из такого сигнала автоматом имеет симметричную действительную и антисимметричную мнимую части.
3. Если при обнулении частей спектра вы сохраните свойства симметрии действительной и мнимой частей, ОДПФ автоматом даст в результате нулевую мнимую часть.
4. Откуда уверенность, что после применения предложенного в начале алгоритма на выходе будет строго периодический сигнал (не учитывая естественной периодичности, связанной с длиной выборки)?

ЗЫ. Что Вы имели в виду, когда писали, что фильтр - программный? Все цифровые фильтры вычислительные (и в этом смысле программные) по определению.
roman73
Цитата(V_G @ Aug 22 2011, 18:51) *
4. Откуда уверенность, что после применения предложенного в начале алгоритма на выходе будет строго периодический сигнал (не учитывая естественной периодичности, связанной с длиной выборки)?

Нет такой уверенности.
Так в ТЗ написано.
Переименовал тему.

Цитата(V_G @ Aug 22 2011, 18:51) *
ЗЫ. Что Вы имели в виду, когда писали, что фильтр - программный? Все цифровые фильтры программные по определению.

Ну теоретически цифровой фильтр тоже можно схемно реализовать sm.gif
Имел в виду что интересует реализация на обычном компе с виндой.
Не интересует реализация на микроконтроллерах/плисах и т.д.
bahurin
Цитата(roman73 @ Aug 22 2011, 18:35) *
Поподробнее пожалуйста.
В чём заключается правильное обнуление?
По поводу языка - желательно Visual C/C++.


Есть два варианта. Если входной сигнал вещественный то вы делаете fft получаете комплексный спектр S(k), k = 0.. N-1 N - количество точек FFT. Потом вы можете обнулить все отсчеты S(k) при k>k0, k0 - индекс выше которого надо обнулить. Обнуляете как реальную так и мнимую часть. Делаете IFFT получаете комплексный сигнал на выходе, мнимую часть отбрасываете, реальную удваиваете. Второй вариант обнулить не все что спектральные отсчеты k>k0, а обнулить только с индексами k0<k<N-k0, тогда вы сохраните свойство симметрии преобразования фурье вещественного сигнала и получите на выходе ifft нулевую мнимую часть и ничего не надо будет удваивать. Какой библиотекой FFT пользуетесь?
roman73
Спасибо за разъяснения.
Данная операция точно может сойти за фильтр низких частот? sm.gif

Цитата(bahurin @ Aug 22 2011, 19:13) *
Какой библиотекой FFT пользуетесь?


Пока что никакой sm.gif присматриваюсь к FFTW.
bahurin
Цитата(roman73 @ Aug 22 2011, 19:43) *
Спасибо за разъяснения.
Данная операция точно может сойти за фильтр низких частот? sm.gif

да только не за фильтр ниЗКИХ частот, а за фильтр ниЖНИХ частот.
Alexey Lukin
Цитата(bahurin @ Aug 22 2011, 19:13) *
Есть два варианта.

Из них самый простой — третий: использовать FFT для вещественного сигнала. Оно и работает в 2 раза быстрее, и не возникает проблем с мнимой частью после IFFT.
petrov
Цитата(roman73 @ Aug 22 2011, 19:43) *
Данная операция точно может сойти за фильтр низких частот? sm.gif


Данная операция фильтром не является, хотите использовать FFT для фильтрации - читайте про быструю свёртку.


Дмитрий_Б
Странная терминология. И неопределённая постановка задачи. Почитайте о свойствах спектров действительных сигналов и секционированной свёртке.
V_G
И еще предупреждение.
Простое отбрасывание ВЧ компонентов спектра вместо нормально рассчитанного ФНЧ дает очень плохую переходную характеристику: будьте готовы к большим выбросам и длительным переколебаниям в выходном сигнале.
Alexey Lukin
Цитата(petrov @ Aug 22 2011, 20:52) *
Цитата(roman73 @ Aug 22 2011, 19:43) *

Данная операция точно может сойти за фильтр низких частот? sm.gif

Данная операция фильтром не является, хотите использовать FFT для фильтрации - читайте про быструю свёртку.

Не является, но сойти может! laughing.gif
petrov
Цитата(V_G @ Aug 22 2011, 21:09) *
И еще предупреждение.
Простое отбрасывание ВЧ компонентов спектра вместо нормально рассчитанного ФНЧ дает очень плохую переходную характеристику: будьте готовы к большим выбросам и длительным переколебаниям в выходном сигнале.


+ спектральные наложения, т. е. в выходном сигнале будут появляться спектральные составляющие которых не было во входном.
bahurin
Цитата(Alexey Lukin @ Aug 22 2011, 20:22) *
Из них самый простой — третий: использовать FFT для вещественного сигнала. Оно и работает в 2 раза быстрее, и не возникает проблем с мнимой частью после IFFT.


Ну как бы не вводите в заблуждение. FFT вещественного сигнала позволяет выполнять FFT двух вещественных сигналов как одно FFT комплексного сигнала с возможностью разделения их спектров. Если у вас только один вещественный сигнал то применение к нему FFT не даст никакого выигрыша. Во вторых спектр вещественного сигнала все равно комплексный и если вы в нем что-то обнулите неправильно то на выходе ifft вылезит мнимая часть и никуда от нее не денетесь.
Alexey Lukin
Вы не про то говорите. Я говорю про FFT, которое считается от одного вещественного сигнала и выдаёт только половину спектра. А то, про что говорите вы, — называется "FFT от двух вещественных сигналов", оно в данном случае не нужно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.