Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: FFT в db
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
djhall
Мне необходимо построить график БПФ в том виде как он обычно представляется в даташитах на АЦП, т.е. в децибелах.
У меня есть исходный файл с отсчётами АЦП на который подан синусоидальный сигнал. Нахожу БПФ по 2048 точкам и далее нахожу 10*log10(БПФ) и строю график. Далее показан сигнал и 10*log10(БПФ) (первые две картинки)- явно не совсем хороший спектр. В чём может быть ошибка? Подскажите как правильно построить такой график.

Ожидал увидеть нечто такое (третья картика)
dm.pogrebnoy
Окно жешь. Оконную функцию наложить надо. почитать можно тут
Другие статьи с этого сайта рекомендованы к прочтению.
doom13
С окном получите спектр по внешнему виду как на третьей картинке, но ещё нормировка нужна, чтоб максимум был отнормирован к 0 dBFS. Про dBFS почитайте, как раз получится то, что надо и, если не ошибаюсь, то надо считать 20*log10(S).

Оконную функцию можно из Matlab-a дёрнуть, chebwin например.
gridinp
Цитата(djhall @ Jun 19 2014, 23:50) *
Ожидал увидеть нечто такое (третья картика)

У вас получается спектр от бесконечной функции, которая получается путем повторения данных из АЦП. Проще говоря начало с хвостом плохо стыкуются.
Поэтому поможет либо окно, либо данные из АЦП должны представлять точно целое число периодов входной частоты.
ViKo
Цитата(doom13 @ Jun 19 2014, 23:28) *
С окном получите спектр по внешнему виду как на третьей картинке...

Никогда не получит, ни при каких окнах. laughing.gif
Нет, так категорично - не правильно. Приближаться будет...
prig
Цитата(ViKo @ Jun 20 2014, 14:34) *
Никогда не получит, ни при каких окнах. laughing.gif
Нет, так категорично - не правильно. Приближаться будет...


Получится полностью аналогичный график, если точно повторить условия.
У тех же ADI условия мне попадались когда-то.
Если память не изменяет, в ADI получают выборку с кратным периодом и прямоугольным окном с "правильным" позиционированием.
"Правильное" позиционирование - это края окна на нулях, вроде бы, но точно не помню.
При использовании прочих видов окон и последующей нормировке возникнут проблемы с положением уровня шума.
ViKo
Цитата(prig @ Jun 20 2014, 16:56) *
Получится полностью аналогичный график, если точно повторить условия.
У тех же ADI условия мне попадались когда-то.
Если память не изменяет, в ADI получают выборку с кратным периодом и прямоугольным окном с "правильным" позиционированием.
"Правильное" позиционирование - это края окна на нулях, вроде бы, но точно не помню.
При использовании прочих видов окон и последующей нормировке возникнут проблемы с положением уровня шума.

А как его узнать заранее, "правильное"...? Если частота сигнала известна, то и спектр не нужен. rolleyes.gif
А если в окно укладывается 20,5 периодов?
djhall
Спасибо большое всем.
Действительно с оконной функцией получилось. Правда я ещё не совсем разобрался - вроде на сигнале в 131 072 самплов и более не получилось таким образом преобразовать.

Было(слева), стало(справа)
Fat Robot
Желание быть в оппозиции подчас "превозмогает и рассудок".

Даже если частота известна, то может быть интересна амплитуда, уровень шумов или уровень внеполосных составляющих.

Цитата(ViKo @ Jun 20 2014, 15:01) *
А как его узнать заранее, "правильное"...? Если частота сигнала известна, то и спектр не нужен. rolleyes.gif
А если в окно укладывается 20,5 периодов?
doom13
В софте к отладочным платам от TI в качестве одного из параметров задаётся частота анализируемого сигнала для нормировки максимально возможной амплитуды к 0, значение амплитуды в dBFS, видимо, для удобства оценки динамического диапазона АЦП. С оконной функцией там тоже можно побаловаться.
ViKo
Цитата(Fat Robot @ Jun 20 2014, 19:37) *
Желание быть в оппозиции подчас "превозмогает и рассудок".
Даже если частота известна, то может быть интересна амплитуда, уровень шумов или уровень внеполосных составляющих.

Не совсем так. Говорю, основываясь на собственном опыте. Точек, правда у меня 1024. Картинку, как на среднем рисунке у ТС, имел. А как на правом рисунке - нет. Перебираю 4 различных оконных функции + плоское. Если взять точек побольше, будет ближе к идеалу. А так, даже об амплитуде можно только гадать.
doom13
Цитата(ViKo @ Jun 20 2014, 22:11) *
Не совсем так. Говорю, основываясь на собственном опыте. Точек, правда у меня 1024. Картинку, как на среднем рисунке у ТС, имел. А как на правом рисунке - нет. Перебираю 4 различных оконных функции + плоское. Если взять точек побольше, будет ближе к идеалу. А так, даже об амплитуде можно только гадать.

Что-то не так у Вас с оконной функцией. От количества точек разрешающая по частоте увеличится и шумы просядут.
ViKo
Цитата(doom13 @ Jun 20 2014, 22:35) *
Что-то не так у Вас с оконной функцией. От количества точек разрешающая по частоте увеличится и шумы просядут.

О том и речь. Больше точек - лучше спектр. rolleyes.gif Меньше - хуже. rolleyes.gif
doom13
Ранее Вы утверждали, что оконная функция не позволит получить спектр как на третьем рисунке вверху, а это не так.
Цитата(ViKo @ Jun 20 2014, 22:38) *
О том и речь. Больше точек - лучше спектр. rolleyes.gif Меньше - хуже. rolleyes.gif

Да, но без оконной функции никак.

1) Сигнал и сигнал после применения оконной функции (окно Чебышева из Matlab - chebwin(1024,80)).
2) Спектр сигнала без использования оконной функции.
3) Спектр сигнала с использованием оконной функции.

Как видите, количество точек не меняется sm.gif
ViKo
Цитата(doom13 @ Jun 20 2014, 23:05) *
Как видите...

Вижу - приблизились к нужной картинке. Вижу амплитуду в 2 раза меньше, чем без окна. Вижу не палку в спектре, а узкий колокол.
Xenia
Правую половину спектра надо отрезать - это зеркальная часть, побочный продукт алгоритма FFT. Тем более что по теории число коэффициентов не может превышать частоту Найквиста (половины числа точек в исходном массиве).

Откладывать на спектре следует не sin- и cos- составлющие (они дёргаются, переходя друг в друга, из-за того, что фаза плывёт), а их "гипотенузу" sqrt(sin^2+cos^2) - это будет амплитуда, от фазы независящая. Тогда эффект "шершавости", возможно, сам пропадет, без всяких окон.
doom13
Цитата(ViKo @ Jun 20 2014, 23:16) *
Вижу - приблизились к нужной картинке. Вижу амплитуду в 2 раза меньше, чем без окна. Вижу не палку в спектре, а узкий колокол.

Не приблизились к нужной картинке, а сделали всё согласно правилам, за ширину "палки в спектре" и будет отвечать количество точек FFT. На любом спектроанализаторе Вы увидите такой же результат.
ViKo
Цитата(Xenia @ Jun 20 2014, 23:25) *
Откладывать на спектре следует не sin- и cos- составлющие (они дёргаются, переходя друг в друга, из-за того, что фаза плывёт), а их "гипотенузу" sqrt(sin^2+cos^2) - это будет амплитуда, от фазы независящая. Тогда эффект "шершавости", возможно, сам пропадет, без всяких окон.

На всех показанных картинках именно она, амплитуда, и есть.

Цитата(doom13 @ Jun 20 2014, 23:31) *
Не приблизились к нужной картинке, а сделали всё согласно правилам, за ширину "палки в спектре" и будет отвечать количество точек FFT. На любом спектроанализаторе Вы увидите такой же результат.

Задайте в вашем примере целое число периодов исследуемой частоты, и покажите результат БПФ, без окна и с окном.
doom13
Цитата(Xenia @ Jun 20 2014, 23:25) *
Правую половину спектра надо отрезать - это зеркальная часть, побочный продукт алгоритма FFT. Тем более что по теории число коэффициентов не может превышать частоту Найквиста (половины числа точек в исходном массиве).

Вопрос был не в этом, тут сам смысл применения окна показан, а правую половину, если смущает, можно и выбросить.

Цитата(Xenia @ Jun 20 2014, 23:25) *
Откладывать на спектре следует не sin- и cos- составлющие (они дёргаются, переходя друг в друга, из-за того, что фаза плывёт), а их "гипотенузу" sqrt(sin^2+cos^2) - это будет амплитуда, от фазы независящая. Тогда эффект "шершавости", возможно, сам пропадет, без всяких окон.

Вообще-то там и показана амплитуда:
Код
sqrt((Re{FFT})^2 + (Im{FFT})^2)

, так что если правую часть выбросить, то остальное всё верно.

Цитата(ViKo @ Jun 20 2014, 23:40) *
Задайте в вашем примере целое число периодов исследуемой частоты, и покажите результат БПФ, без окна и с окном.

Ну вот здесь получается, видимо, частный случай, не всегда в нужную выборку влезет целое число периодов. Так что на это, думаю, полагаться не стоит.
Xenia
Цитата(doom13 @ Jun 21 2014, 01:05) *
Вообще-то там и показана амплитуда:
Код
sqrt((Re{FFT})^2 + (Im{FFT})^2)


А чем тогда синенький от красненького отличается? sm.gif А то я поняла так, что один из них sin, а другой cos.
ViKo
Цитата(doom13 @ Jun 21 2014, 00:05) *
Ну вот здесь получается, видимо, частный случай, не всегда в нужную выборку влезет целое число периодов. Так что на это, думаю, полагаться не стоит.

Возвращаемся к началу дискуссии... Полагаться, как вы говорите, не на что. В одном случае будут красивые "палки", в другом - не очень. Как повезет.
Теоретики придумали десятка два оконных функций, каждая имеет некую особенность, и еще нужно вспомнить, какую когда включать. И ни одна не гарантирует идеальную достоверность амплитуды и частоты. laughing.gif
doom13
Цитата(Xenia @ Jun 21 2014, 00:14) *
А чем тогда синенький от красненького отличается? sm.gif А то я поняла так, что один из них sin, а другой cos.

Картинки слева на право:
Цитата(doom13 @ Jun 20 2014, 23:05) *
1) Сигнал и сигнал после применения оконной функции (окно Чебышева из Matlab - chebwin(1024,80)).
2) Спектр сигнала без использования оконной функции.
3) Спектр сигнала с использованием оконной функции.

Ну и цветом конечно же sm.gif
ViKo
Цитата(Xenia @ Jun 21 2014, 00:14) *
А чем тогда синенький от красненького отличается? sm.gif А то я поняла так, что один из них sin, а другой cos.

В первом на сигнал не наложена оконная функция (плоское окно), в другом - ... наложена sm.gif
doom13
Цитата(ViKo @ Jun 21 2014, 00:16) *
Возвращаемся к началу дискуссии... Полагаться, как вы говорите, не на что. В одном случае будут красивые "палки", в другом - не очень. Как повезет.
Теоретики придумали десятка два оконных функций, каждая имеет некую особенность, и еще нужно вспомнить, какую когда включать. И ни одна не гарантирует идеальную достоверность амплитуды и частоты. laughing.gif

Красивые, как Вы говорите, палки без использования окна будут в одном частном случае, если в рассматриваемую выборку помещается целое число периодов сигнала (из всего множества анализируемых частот - одна совпадёт и то, если повезёт).
С оконной функцией мы получаем красивый спектр во всех случаях.
ViKo
Цитата(doom13 @ Jun 21 2014, 00:28) *
Красивые, как Вы говорите, палки без использования окна будут в одном частном случае, если в рассматриваемую выборку помещается целое число периодов сигнала (из всего множества анализируемых частот - одна совпадёт и то, если повезёт).
С оконной функцией мы получаем красивый спектр во всех случаях.

Не одна, а целая куча. Их же много может быть, кратных.
Красивый спектр - именно синенький. Такой и хотел видеть топикстартер. А красненький - только приближение к нему.
doom13
Цитата(ViKo @ Jun 21 2014, 00:39) *
Не одна, а целая куча. Их же много может быть, кратных.
Красивый спектр - именно синенький. Такой и хотел видеть топикстартер. А красненький - только приближение к нему.

То, что хотел увидеть топикстартер, он увидел выше и выразил свою благодарность за помощь в данном вопросе. Вам советую почитать хотя бы это. Думаю, спор далее не уместен и нужно закрывать тему.
ViKo
Цитата(doom13 @ Jun 21 2014, 00:54) *
То, что хотел увидеть топикстартер, он увидел выше и выразил свою благодарность за помощь в данном вопросе. Вам советую почитать хотя бы это. Думаю, спор далее не уместен и нужно закрывать тему.

А мы спорим? sm.gif Мы говорим об одном и том же, только по-разному оцениваем степень "волшебства" оконных функций. Определяется упертостью оппонента. За совет спасибо, только я это читал и применял раньше вас (я так думаю). rolleyes.gif
doom13
Цитата(ViKo @ Jun 21 2014, 10:18) *
А мы спорим? sm.gif Мы говорим об одном и том же, только по-разному оцениваем степень "волшебства" оконных функций. Определяется упертостью оппонента.

По всем признакам похоже на спор, и говорили мы, на сколько я помню, о разном: Вы о том, что нет необходимости в использовании оконной функции, я о том, что есть. На счёт степени упёртости оппонента позвольте с Вами согласиться, вообще нет ничего призрительного в признании своей неправоты и это не только моя оценка:
Цитата(Fat Robot @ Jun 20 2014, 19:37) *
Желание быть в оппозиции подчас "превозмогает и рассудок".


Цитата(ViKo @ Jun 21 2014, 10:18) *
За совет спасибо, только я это читал и применял раньше вас (я так думаю). rolleyes.gif

Читать то Вы читали, но не совсем то, о чём шла речь с самого начала темы. Ваши слова противоречат друг другу:
Цитата(ViKo @ Jun 20 2014, 22:11) *
Говорю, основываясь на собственном опыте. Точек, правда у меня 1024. Картинку, как на среднем рисунке у ТС, имел. А как на правом рисунке - нет. Перебираю 4 различных оконных функции + плоское. Если взять точек побольше, будет ближе к идеалу. А так, даже об амплитуде можно только гадать.

Цитата(ViKo @ Jun 20 2014, 13:34) *
Никогда не получит, ни при каких окнах. laughing.gif


То, о чём был начальный вопрос, и получается с использованием окна.
prig
Цитата(ViKo @ Jun 20 2014, 18:01) *
А как его узнать заранее, "правильное"...? Если частота сигнала известна, то и спектр не нужен. rolleyes.gif
А если в окно укладывается 20,5 периодов?

В реальных задачах, например OFDM, решают задачу синхронизации.
Соответственно, условия выборки определяются далеко не произвольно.
Зачем нужен спектр при известной частоте, за меня уже ответили.


Цитата(doom13 @ Jun 21 2014, 12:28) *
...Вы о том, что нет необходимости в использовании оконной функции, я о том, что есть.
...

Вообще-то, от конкретной задачи зависит. Если вспомнить тот же OFDM, то после применения оконной функции, хоть сколько-нибудь существенно отличной от прямоугольной, о собственно OFDM можно забыть.
doom13
Цитата(prig @ Jun 23 2014, 10:36) *
Вообще-то, от конкретной задачи зависит. Если вспомнить тот же OFDM, то после применения оконной функции, хоть сколько-нибудь существенно отличной от прямоугольной, о собственно OFDM можно забыть.

С OFDM не работал, видимо это так, в моих задачах применял, и для оценки ДД АЦП и при обработке. Тут, наверное, не совсем правильно было сказано и имелось ввиду использование окна применительно к поставленному вопросу. Вы верно дополнили.
shf_05
попробуйте дополнить сигнал слева и справа нулями.

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

еще попробуйте оцифровать сигнал на частоте как для картинки 3 (100 Гц против ваших 10 Гц).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.