Перейти к содержанию
    

БПФ для оценки низкочастотной составляющей

Доброго времени суток!

 

Необходимо выделить низкочастотную составляющую временного ряда.

Алгоритм по ТЗ такой:

1.Делается БПФ.

2.Обнуляются все частоты, кроме некоторого числа низких.

3.Делается обратное БПФ.

 

Вопросы:

Если применять классическое БПФ, что делать с мнимой частью сигнала?

Допустим, мнимая часть входного сигнала устанавливается в 0.

А что делать с мнимой частью результирующего сигнала?

Или можно применить другое преобразование вместо Фурье, работающее только с действительным сигналом?

Косинус-преобразование? Хартли? Насколько я знаю, преобразование Хартли напрямую не даёт частоты, а что-то другое.

А как с этим у косинус-преобразования?

Применимо ли тут RealFFT?

Какой из перечисленных алгоритмов лучше для данного случая?

Где взять эффективные реализации?

 

Число отсчетов ~50000-100000

Изменено пользователем roman73

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Необходимо выделить периодическую составляющую временного ряда.

..

2.Обнуляются все частоты, кроме некоторого числа низких.

..

 

..очень похоже на ФНЧ, почему его нельзя применить?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чтобы не было недоразумений - фильтр нужен программный.

 

Эксперсс-гугление по запросу "программная реализация фнч" выдает какой-то бред...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доброго времени суток!

 

Необходимо выделить периодическую составляющую временного ряда.

Алгоритм по ТЗ такой:

1.Делается БПФ.

2.Обнуляются все частоты, кроме некоторого числа низких.

3.Делается обратное БПФ.

 

Простите, конечно, но кто вам такое бредовое ТЗ выдал? То что вы описали это цифровой фнч, обладающий очень плохими характеристиками и выполненный настолько неэффективно, насколько это возможно.

Хотя, нет можно еще хуже если вместо FFT применять наивный способ вычисления DFT.

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

Изменено пользователем bahurin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простите, конечно, но кто вам такое бредовое ТЗ выдал? То что вы описали это цифровой фнч, обладающий очень плохими характеристиками и выполненный настолько неэффективно, насколько это возможно.

Хотя, нет можно еще хуже если вместо FFT применять наивный способ вычисления DFT.

В общем обсуждать это нет смысла.

Может про периодическую составляющую и не совсем правда, но тз нужно реализовать и в кратчайший срок.

(К тому же это не единственная обработка сигнала).

По поводу обнуления - в будущем вместо него может быть что-то другое.

Я понимаю, что это решение неэффекетивно, и можно использовать разные оптимизации (например вычисление не всех коэффициентов ПФ, Герцель и т.д.) но на это просто нет времени.

 

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

Поподробнее пожалуйста.

В чём заключается правильное обнуление?

По поводу языка - желательно Visual C/C++.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Во входном сигнале мнимой компоненты нет.

2. Вычисленное ДПФ из такого сигнала автоматом имеет симметричную действительную и антисимметричную мнимую части.

3. Если при обнулении частей спектра вы сохраните свойства симметрии действительной и мнимой частей, ОДПФ автоматом даст в результате нулевую мнимую часть.

4. Откуда уверенность, что после применения предложенного в начале алгоритма на выходе будет строго периодический сигнал (не учитывая естественной периодичности, связанной с длиной выборки)?

 

ЗЫ. Что Вы имели в виду, когда писали, что фильтр - программный? Все цифровые фильтры вычислительные (и в этом смысле программные) по определению.

Изменено пользователем V_G

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4. Откуда уверенность, что после применения предложенного в начале алгоритма на выходе будет строго периодический сигнал (не учитывая естественной периодичности, связанной с длиной выборки)?

Нет такой уверенности.

Так в ТЗ написано.

Переименовал тему.

 

ЗЫ. Что Вы имели в виду, когда писали, что фильтр - программный? Все цифровые фильтры программные по определению.

Ну теоретически цифровой фильтр тоже можно схемно реализовать :)

Имел в виду что интересует реализация на обычном компе с виндой.

Не интересует реализация на микроконтроллерах/плисах и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поподробнее пожалуйста.

В чём заключается правильное обнуление?

По поводу языка - желательно 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 пользуетесь?

Изменено пользователем bahurin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за разъяснения.

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

 

Какой библиотекой FFT пользуетесь?

 

Пока что никакой :) присматриваюсь к FFTW.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за разъяснения.

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

да только не за фильтр ниЗКИХ частот, а за фильтр ниЖНИХ частот.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть два варианта.

Из них самый простой — третий: использовать FFT для вещественного сигнала. Оно и работает в 2 раза быстрее, и не возникает проблем с мнимой частью после IFFT.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Странная терминология. И неопределённая постановка задачи. Почитайте о свойствах спектров действительных сигналов и секционированной свёртке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И еще предупреждение.

Простое отбрасывание ВЧ компонентов спектра вместо нормально рассчитанного ФНЧ дает очень плохую переходную характеристику: будьте готовы к большим выбросам и длительным переколебаниям в выходном сигнале.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Не является, но сойти может! :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...