реклама на сайте
подробности

 
 
> Взять кусочек 4096-точечного DFT в окрестности максимума 128-точечного FFT?, Есть ли смысл...
tmtlib
сообщение Nov 17 2011, 10:20
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 200
Регистрация: 30-10-10
Пользователь №: 60 531



Как насчёт следующего алгоритма:
1) Берём FFT 128 точек, грубо находим максимум
2) В окрестности максимума запускаем DFT с шагом, как у FFT на 4096 точки, но только для маленького диапазона частот. Т.е. получаем кусок спектра из 50-60 точек с повышенной точностью.

Есть смысл? Как это будет соотноситься с поиском центра масс только по FFT-128?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
fontp
сообщение Nov 17 2011, 12:50
Сообщение #2


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



QUOTE (tmtlib @ Nov 17 2011, 13:20) *
Как насчёт следующего алгоритма:
1) Берём FFT 128 точек, грубо находим максимум
2) В окрестности максимума запускаем DFT с шагом, как у FFT на 4096 точки, но только для маленького диапазона частот. Т.е. получаем кусок спектра из 50-60 точек с повышенной точностью.

Есть смысл? Как это будет соотноситься с поиском центра масс только по FFT-128?


1.А как вы его возьмёте? У вас обычно нет данных для этого... Добавить нулей? Можно, уже много раз обсуждалось...
Или Вы просто не хотите делать большой БПФ4096, а хотите поиметь только часть частот около максимума?? А данные добавлять всё равно нулевые...Тоже возможно, сделать на нужных частотах Герцеля, но не БПФ, поскольку это одно и то же по результату. В любом случае потом по точкам вблизи максимума подгоняют параболу (или даже функцию спектрального окна, но это не для реального времени)


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

Y is a three-element complex vector with the
% DFT output magnitude maximizer as the center element Y(kmax-1), Y(kmax), Y(kmax+1)).
%
% Returns -0.5 < x < 0.5, which is the fraction of the sample
% spacing (i.e., bin width) about the center element where the
% peak is estimated to be.

% Ref: Macleod, M.D., "Fast Nearly ML Estimation of the Parameters
% of Real or Complex Single Tones or Resolved Multiple Tones,"
% IEEE Trans. Sig. Proc. Vol 46 No 1,
% January 1998, pp141-148.

ref = Y(2); % Isolate phase reference.
R = real(Y.*conj(ref)); % Generate phase corrected coefficient vector.
gamma = (R(1)-R(3))/((2*R(2))+R(1)+R(3)); % Calculate offset.
delta = (sqrt(1 + 8*gamma*gamma)-1)/(4*gamma); % Final estimate.
x = delta;

Можете найти полжение максимума по этой формуле, потом прогнать Герцель в окрестности. Герцель это фильтр, который в точности даёт результат БПФ. но только в одной частотной точке. Можно найти в первом приближении центральную частоту по Macleod, прогнать Герцель на этой частоте f0 и двух соседних f0-0.25df, f0+0.25df, df шаг БПФ на 128. Потом провести параболу и посмотреть на какой частоте её вершина. Называют это авторы ML-extension
Go to the top of the page
 
+Quote Post
tmtlib
сообщение Nov 18 2011, 00:55
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 200
Регистрация: 30-10-10
Пользователь №: 60 531



Цитата(fontp @ Nov 17 2011, 16:50) *
1.А как вы его возьмёте? У вас обычно нет данных для этого... Добавить нулей? Можно, уже много раз обсуждалось...
Или Вы просто не хотите делать большой БПФ4096, а хотите поиметь только часть частот около максимума??

Да, я хотел делать именно так:
БПФ128 находит максимум X,
потом идёт цикл ДПФ4096, но i пробегает значения не 0..4095, а (X*32-10)..(x*32+10)
В обоих случаях ничего нулей не добавляю.

пс Вот смотрю приведённый вами интересный метод.
Go to the top of the page
 
+Quote Post
fontp
сообщение Nov 18 2011, 08:51
Сообщение #4


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



QUOTE (tmtlib @ Nov 18 2011, 03:55) *
Да, я хотел делать именно так:
БПФ128 находит максимум X,
потом идёт цикл ДПФ4096, но i пробегает значения не 0..4095, а (X*32-10)..(x*32+10)
В обоих случаях ничего нулей не добавляю.
пс Вот смотрю приведённый вами интересный метод.


Это не ДПФ. По определению ДПФ содержит только N ортогональных частот, где N - это количество исходных отсчетов
Формально Вы можете вычислить такие же суммы для более мелкой равномерной сетки, но это будет математически всё равно что добавить нулей до 4096 точек и взять ДПФ на 4096. Конечно, если Вы считаете в лоб ДПФ (или Герцеля), а не по БПФ, при вычислениях нулей не добавляете, зачем, их вклад в сумму нулевой. Результат во всех случаях будет один

С "грубо берём максимум" есть ещё одна проблема, если потом захочется брать очень тонко. Можно иногда промахнуться.
Кроме обычных ошибок, вызванных шумом, возможны ещё и ошибки другой природы при частоте на границе бинов. А именно максимум ложный. Если значения мощности в двух бинах примерно равны, то шум может перекинуть максимум к ложному бину. После этого мелкая сетка Вам уже не поможет... Поэтому при последовательном уточнении нужно быть аккуратным с максимумом - это он максимум, когда есть явно доминирующее значение, а если они примерно равны лучше взять вместо максимума что-то более похожее на центр масс
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 07:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01378 секунд с 7
ELECTRONIX ©2004-2016