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

Быстрое преобразование Фурье не для степени 2

Никогда о нём не слышал. Будем почитать.

http://www.padabum.com/d.php?id=3411

стр. 365.

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

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


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

Какой-то он избыточный. Мне нужен довольно простой результат. Даже не "оценивание". А просто спектр с определённой степенью точности и с промежуточными частотами. При разрешении 1/8 бина БПФ точность амплитуды уже будет не менее 95% (точно не измерял, но не ниже 90%). Мне нужна примерно такая точность амплитуды и частОты 1/8 целого. И всё. Если амплитуда синуса ниже шума, то вообще не важен результат. Я пока что планировал итеративно вычислять ДПФ дробных частот в районе пиков на БПФ до достижения нужной точности частоты. Но с БПФ плохо то, что он амплитуду (пики) выдаёт неверную для дробных частот. Придётся анализировать окресности всех бинов до 1/2 от самого высокого. Хорошо хоть точек мало.

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

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


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

Какой-то он избыточный. Мне нужен довольно простой результат. Даже не "оценивание". А просто спектр с определённой степенью точности и с промежуточными частотами. При разрешении 1/8 бина БПФ точность амплитуды уже будет не менее 95% (точно не измерял, но не ниже 90%). Мне нужна примерно такая точность амплитуды и частОты 1/8 целого. И всё. Если амплитуда синуса ниже шума, то вообще не важен результат. Я пока что планировал итеративно вычислять ДПФ дробных частот в районе пиков на БПФ до достижения нужной точности частоты. Но с БПФ плохо то, что он амплитуду (пики) выдаёт неверную для дробных частот. Придётся анализировать окресности всех бинов до 1/2 от самого высокого. Хорошо хоть точек мало.

А интерполировать по трём бинам не пробовали?Я когда-то игрался с этим,получались неплохие результаты но дальше модели не пошло.

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


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

А интерполировать по трём бинам не пробовали?Я когда-то игрался с этим,получались неплохие результаты но дальше модели не пошло.

Над этим я думал. Но штука в том, что шума много допускается. Без шума мне точность вытягивать не надо. А с шумом (грубо 0 дб С/Ш) мне нужна предельная точность.

Да и результат точнее не будет, скорее наоборот. Т.к., если это делать по БПФ, то сразу вылезут грабли БПФ-а - несоответствие (а точнее занижение) амплитуды дробных частот. Что сразу может сделать пик на спектре принадлежащим шуму, а не моему сигналу. То есть, по трём точкам, значит одна из них - это пик на спектре БПФ. Но пик недостоверный. Если брать несколько пиков, то опять неясно какой в реале выше, т.к. они все недостоверные.

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

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


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

Над этим я думал. Но штука в том, что шума много допускается. Без шума мне точность вытягивать не надо. А с шумом (грубо 0 дб С/Ш) мне нужна предельная точность.

Да и результат точнее не будет, скорее наоборот. Т.к., если это делать по БПФ, то сразу вылезут грабли БПФ-а - несоответствие (а точнее занижение) амплитуды дробных частот. Что сразу может сделать пик на спектре принадлежащим шуму, а не моему сигналу.

Ясно,с большим шумом я не пробовал.

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


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

Так спектр и усреднить можно. По множеству реализаций.

 

 

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


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

Если надо определять коэффициенты с "дробными частотами" (между бинами), то дополняйте сигнал нулями и берите обычное ДПФ.

Правильно ли я понимаю, что если мне надо найти все дробные бины с разрешением 1/8, то я должен к основному блоку данных (32 точки) добавить ещё 7 раз по 32 точки нулей и сделать БПФ по 256 точкам? Или там другой алгоритм добавления?

 

Сейчас пока моделирую, проверяю достоверность амплитуд пиков этого метода. Хоть результат спектра далёк от идеала, но в моём случае, когда априорно известно, что сигнал - простой синус, может быть этот метод и сработает. Хотя БПФ по в 8 раз большему блоку сам по себе накладен и возможно будет медленнее БПФ @ 32N + X раз ДПФ.

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


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

Какой-то он избыточный.

Ну на 30 точек получаем 10 амплитуд-частот-фаз и восстановленный сигнал проходит через все точки с любой точностью. Избыточность меньше, чем у БПФ(сигнал представлен меньшим числом гармоник). Если нужно 4 частоты - возьмите 12 точек. Вот с шумами дело темное. Тут Крамер-Рао не работает. Закон такой: Если сигнал состоит точно из N частот, то для их определения достаточно 3 * N точек выборки не обязательно через равные промежутки времени.

А математика тут противная и требует повышенной точности вычислений и, наверное, усреднения по нескольким выборкам. При моем числе точек и для микропроцессора даже не пытался.

 

Поставленная Вами задача - нужная и интересная и я ей тоже занимаюсь(в свободное от работы время и медленно). Пока действительно слишком долго считает.

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


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

Правильно ли я понимаю, что если мне надо найти все дробные бины с разрешением 1/8, то я должен к основному блоку данных (32 точки) добавить ещё 7 раз по 32 точки нулей и сделать БПФ по 256 точкам?

Совершенно верно. Перед дополнением нулей сигнал можно умножить на весовое окно. Если шума очень много — то прямоугольное (оно оптимально для детектирования сигнала), если поменьше — то Ханна или другое аналогичное (они улучшают аккуратность оценки частоты при интерполяции по 3 точкам). Далее интерполирете частоту по трём максимальным точкам в спектре. Спектр перед этим лучше перевести в логарифмический масштаб амплитуд.

 

Если нужна более высокая точность — обратитесь к параметрическим методам. Задача нахождения частоты синусоиды в шуме кем только не решалась, вот даже вот в соседнем топике...

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


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

Задача нахождения частоты синусоиды в шуме кем только не решалась, вот даже вот в соседнем топике...

У меня задача не совсем такая. Мне её сначала нужно "выявить" на фоне большого шума. Просто по БПФ её часто не видно. Это главная часть задачи. И точек мало.

Я уже посмотрел на результаты 8-кратного дополнения нулей. Вобщем неплохо. Хотя странно, что амплитуды немного (или заметно) неточны. Часто даже в большую сторону. И это без шума вообще. Но мне это некритично.

 

Спектр перед этим лучше перевести в логарифмический масштаб амплитуд.

Зачем?

 

Upd.

Вобщем, проверил. БПФ от дополненного нулями блока сэмплов даёт результат лучше обычного БПФ для определения сразу же максимума на спектре и более точной (чем БПФ) частоты этого максимума. И это при больших шумах. Только подозреваю, что смысла в очень большом дополнении нулями нет. Этот же результат можно высчитать другим методом (тремя точками?). А во сколько раз дополнять нулями оптимально, надо бы разобраться. 2, 4 или 8.

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

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


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

У меня задача не совсем такая. Мне её сначала нужно "выявить" на фоне большого шума. Просто по БПФ её часто не видно. Это главная часть задачи. И точек мало.

Я уже посмотрел на результаты 8-кратного дополнения нулей. Вобщем неплохо. Хотя странно, что амплитуды немного (или заметно) неточны. Часто даже в большую сторону. И это без шума вообще. Но мне это некритично.

 

 

Зачем?

1.При SNR = 1 видно хорошо, значит Ваш сигнал меньше?

2.БПФ - практически идеальный обнаружитель синусоидального сигнала и если его не видно, значит число точек мало и ничего не поможет.

3.Рекомендуемые здесь методы основаны на том, что пик однозначно виден и ближайшие бины не скачут.

4.Вершина пика при окне Ханна мало похожа на параболу, а логарифмирование слегка приближает форму пика к ней. Я бы выбрал окно с более гладкой вершиной Наттала, Гаусса, Флаттоп и без логарифмирования.

5.А фильтр перед АЦП нельзя сделать лучше? Насколько входная частота меняется?

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


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

Только подозреваю, что смысла в очень большом дополнении нулями нет. Этот же результат можно высчитать другим методом (тремя точками?). А во сколько раз дополнять нулями оптимально, надо бы разобраться. 2, 4 или 8.

Дополнение сигнала нулями эквивалентно sinc-интерполяции спектра. Раза в 2–4 эта интерполяция может выглядеть неочевидно, а потом уже можно похожих результатов добиться полиномиальной интерполяцией.

 

4.Вершина пика при окне Ханна мало похожа на параболу, а логарифмирование слегка приближает форму пика к ней. Я бы выбрал окно с более гладкой вершиной Наттала, Гаусса, Флаттоп и без логарифмирования.

Вот уж как раз flat-top окно на параболу совсем непохоже. Да и способность детектировать сигнал в шуме у этих окон слабая — они слишком узкие во временной области.

 

Зачем?

Так точнее получаются оценки частоты с помощью параболической интерполяции. Если не брать логарифма, то оценки будут смещены в сторону ближайшего бина ДПФ.

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


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

...

1. Re := cos(p * i) + (Random-0.5)*3.0;

 

2. Это не так. Точнее не всегда так. Возьмите 32 точки, частоту например в 10.5 раз выше 1/Т. БПФ будет показывать недостоверную частоту и амплитуду максимума (хоть с шумом, хоть без). Далее сравните много раз картинки чистого БПФ и дополненного нулями в 8 раз. Даже по картикам виден лучший результат.

 

5. Зачём? Нет наложения спектров.

 

----------

Маленький вопрос не совсем по теме.

ДПФ/БПФ увеличивает С/Ш в 2 раза или в 1.41 при увеличении периода (длины [кол-ва точек] синуса) в 2 раза на фоне белого шума?

 

Дополнение сигнала нулями эквивалентно sinc-интерполяции спектра. Раза в 2–4 эта интерполяция может выглядеть неочевидно, а потом уже можно похожих результатов добиться полиномиальной интерполяцией.

Это хорошо. Если бы мне нужна была одна точка и я знал где её искать, интерполировал бы только её и сэкономил время. Но чтобы найти все возможные видимо проще будет делать большой БПФ.

Upd.

Как раз, в продолжении этого алгоритма мне понадобится знать только 4 точки из всего спектра. Их-то и можно будет интерполировать после короткого БПФ. Причём с любой дробной частью частоты.

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

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


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

ДПФ/БПФ увеличивает С/Ш в 2 раза или в 1.41 при увеличении периода (длины [кол-ва точек] синуса) в 2 раза на фоне белого шума?

С/Ш в каждом бине ДПФ улучшается на 3 дБ, т.к. мощность шума распределяется на 2 бина, а мощность синуса не изменяется.

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


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

5. Зачём? Нет наложения спектров.

 

----------

В смысле шума на входе. БПФ не идеальный фильтр, а шума очень много.

Хотя если частота может меняться в несколько раз, смысла нет.

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

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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