roman73 0 22 августа, 2011 Опубликовано 22 августа, 2011 (изменено) · Жалоба Доброго времени суток! Необходимо выделить низкочастотную составляющую временного ряда. Алгоритм по ТЗ такой: 1.Делается БПФ. 2.Обнуляются все частоты, кроме некоторого числа низких. 3.Делается обратное БПФ. Вопросы: Если применять классическое БПФ, что делать с мнимой частью сигнала? Допустим, мнимая часть входного сигнала устанавливается в 0. А что делать с мнимой частью результирующего сигнала? Или можно применить другое преобразование вместо Фурье, работающее только с действительным сигналом? Косинус-преобразование? Хартли? Насколько я знаю, преобразование Хартли напрямую не даёт частоты, а что-то другое. А как с этим у косинус-преобразования? Применимо ли тут RealFFT? Какой из перечисленных алгоритмов лучше для данного случая? Где взять эффективные реализации? Число отсчетов ~50000-100000 Изменено 22 августа, 2011 пользователем roman73 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 22 августа, 2011 Опубликовано 22 августа, 2011 · Жалоба Необходимо выделить периодическую составляющую временного ряда. .. 2.Обнуляются все частоты, кроме некоторого числа низких. .. ..очень похоже на ФНЧ, почему его нельзя применить? Соорудить ФНЧ фильтр с требуемой полосой пропустить выборку через него - получить ваш сигнал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
roman73 0 22 августа, 2011 Опубликовано 22 августа, 2011 · Жалоба Чтобы не было недоразумений - фильтр нужен программный. Эксперсс-гугление по запросу "программная реализация фнч" выдает какой-то бред... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bahurin 0 22 августа, 2011 Опубликовано 22 августа, 2011 (изменено) · Жалоба Доброго времени суток! Необходимо выделить периодическую составляющую временного ряда. Алгоритм по ТЗ такой: 1.Делается БПФ. 2.Обнуляются все частоты, кроме некоторого числа низких. 3.Делается обратное БПФ. Простите, конечно, но кто вам такое бредовое ТЗ выдал? То что вы описали это цифровой фнч, обладающий очень плохими характеристиками и выполненный настолько неэффективно, насколько это возможно. Хотя, нет можно еще хуже если вместо FFT применять наивный способ вычисления DFT. Если же все-таки необходимо выполнить через обнуление FFT (для того чтобы порадовать начальство или преподавателей), то смело обнуляйте как реальную так и мнимую части на выходе FFT. После обратного FFT в вашем сигнале появится мнимая часть, но если вы правильно обнулите спектр, то она будет равна нулю (ну или очень маленькой типа 10^-18). На каком хоть языке программирования надо этот шедевр реализовать? Изменено 22 августа, 2011 пользователем bahurin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
roman73 0 22 августа, 2011 Опубликовано 22 августа, 2011 · Жалоба Простите, конечно, но кто вам такое бредовое ТЗ выдал? То что вы описали это цифровой фнч, обладающий очень плохими характеристиками и выполненный настолько неэффективно, насколько это возможно. Хотя, нет можно еще хуже если вместо FFT применять наивный способ вычисления DFT. В общем обсуждать это нет смысла. Может про периодическую составляющую и не совсем правда, но тз нужно реализовать и в кратчайший срок. (К тому же это не единственная обработка сигнала). По поводу обнуления - в будущем вместо него может быть что-то другое. Я понимаю, что это решение неэффекетивно, и можно использовать разные оптимизации (например вычисление не всех коэффициентов ПФ, Герцель и т.д.) но на это просто нет времени. Если же все-таки необходимо выполнить через обнуление FFT (для того чтобы порадовать начальство или преподавателей), то смело обнуляйте как реальную так и мнимую части на выходе FFT. После обратного FFT в вашем сигнале появится мнимая часть, но если вы правильно обнулите, то она будет равна нулю (ну или очень маленькой типа 10^-18). На каком хоть языке программирования надо этот шедевр реализовать? Поподробнее пожалуйста. В чём заключается правильное обнуление? По поводу языка - желательно Visual C/C++. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 7 22 августа, 2011 Опубликовано 22 августа, 2011 (изменено) · Жалоба 1. Во входном сигнале мнимой компоненты нет. 2. Вычисленное ДПФ из такого сигнала автоматом имеет симметричную действительную и антисимметричную мнимую части. 3. Если при обнулении частей спектра вы сохраните свойства симметрии действительной и мнимой частей, ОДПФ автоматом даст в результате нулевую мнимую часть. 4. Откуда уверенность, что после применения предложенного в начале алгоритма на выходе будет строго периодический сигнал (не учитывая естественной периодичности, связанной с длиной выборки)? ЗЫ. Что Вы имели в виду, когда писали, что фильтр - программный? Все цифровые фильтры вычислительные (и в этом смысле программные) по определению. Изменено 22 августа, 2011 пользователем V_G Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
roman73 0 22 августа, 2011 Опубликовано 22 августа, 2011 · Жалоба 4. Откуда уверенность, что после применения предложенного в начале алгоритма на выходе будет строго периодический сигнал (не учитывая естественной периодичности, связанной с длиной выборки)? Нет такой уверенности. Так в ТЗ написано. Переименовал тему. ЗЫ. Что Вы имели в виду, когда писали, что фильтр - программный? Все цифровые фильтры программные по определению. Ну теоретически цифровой фильтр тоже можно схемно реализовать :) Имел в виду что интересует реализация на обычном компе с виндой. Не интересует реализация на микроконтроллерах/плисах и т.д. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bahurin 0 22 августа, 2011 Опубликовано 22 августа, 2011 (изменено) · Жалоба Поподробнее пожалуйста. В чём заключается правильное обнуление? По поводу языка - желательно 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 пользуетесь? Изменено 22 августа, 2011 пользователем bahurin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
roman73 0 22 августа, 2011 Опубликовано 22 августа, 2011 · Жалоба Спасибо за разъяснения. Данная операция точно может сойти за фильтр низких частот? :) Какой библиотекой FFT пользуетесь? Пока что никакой :) присматриваюсь к FFTW. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bahurin 0 22 августа, 2011 Опубликовано 22 августа, 2011 · Жалоба Спасибо за разъяснения. Данная операция точно может сойти за фильтр низких частот? :) да только не за фильтр ниЗКИХ частот, а за фильтр ниЖНИХ частот. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexey Lukin 0 22 августа, 2011 Опубликовано 22 августа, 2011 · Жалоба Есть два варианта. Из них самый простой — третий: использовать FFT для вещественного сигнала. Оно и работает в 2 раза быстрее, и не возникает проблем с мнимой частью после IFFT. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 6 22 августа, 2011 Опубликовано 22 августа, 2011 · Жалоба Данная операция точно может сойти за фильтр низких частот? :) Данная операция фильтром не является, хотите использовать FFT для фильтрации - читайте про быструю свёртку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dmitry_B 0 22 августа, 2011 Опубликовано 22 августа, 2011 · Жалоба Странная терминология. И неопределённая постановка задачи. Почитайте о свойствах спектров действительных сигналов и секционированной свёртке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 7 22 августа, 2011 Опубликовано 22 августа, 2011 · Жалоба И еще предупреждение. Простое отбрасывание ВЧ компонентов спектра вместо нормально рассчитанного ФНЧ дает очень плохую переходную характеристику: будьте готовы к большим выбросам и длительным переколебаниям в выходном сигнале. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexey Lukin 0 22 августа, 2011 Опубликовано 22 августа, 2011 · Жалоба Данная операция точно может сойти за фильтр низких частот? :) Данная операция фильтром не является, хотите использовать FFT для фильтрации - читайте про быструю свёртку. Не является, но сойти может! :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться