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

 
 
> как это сделано: FFT4096, 100-6500Hz, freq.resolution 0.001Hz, как достигнуто такое разрешение по частоте?
Ruslan1
сообщение Dec 21 2010, 14:51
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Здравствуйте!

Помогите пожалуйста, спать не могу, все думаю......

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

короткая листовка: http://www.campbellsci.com/documents/produ...es/b_avw200.pdf
полный мануал: http://www.campbellsci.com/documents/manuals/avw200.pdf


Прибор определяет частоту синусоидального сигнала, который может быть в диапазоне 100 - 6500 Гц, с разрешением 0.001Гц и точностью 0.013% от измеренной величины. Указано что используется 4096-точечное FFT. Интересно, что еще кроме упомянутого FFT применяется для получения такого разрешения по частоте?

Как это может быть сделано? Взяли FFT, определили частоту грубо, потом детально обнюхали область вокруг найденной частоты, получили частоту точно?


Что абсолютно точно известно (это физика процесса):
1. Полезный сигнал- честная одночастотная синусоида (дернули струну, потом ищут ее частоту собственных колебаний. то есть это затухающее колебание механической струны, которое преобразовано в электрический сигнал). Шумы возможны.
2. Общая длительность исследуемого сигнала доли секунды (ну пусть 300 ms)


Что говорит изготовитель (интересный текст и какие-то картинки начинаются со страницы 85, еще есть спецификация на странице 9):
1. The AVW200 uses an audio A/D for capturing the sensor’s signal. The number of samples acquired in this period is 4096 points. A Fast Fourier Transform (FFT) algorithm is used to create a frequency spectrum.
2. the spectral analysis gives improved frequency resolution (0.001 Hz rms) during quiet conditions.
3. the AVW200 Fourier transforms the recorded response and analyzes the resulting spectrum to determine the wire’s resonant frequency. This analysis also provides diagnostic information indicating the quality of the resonant-frequency measurement.
4. Measurement resolution: 0.001 (Hz RMS)
5. Accuracy basic: +/- 0.013% of reading.
6. DF measurement time between 1.6 to 1.8 second
7. SYSTEM: PROCESSOR: Hitachi H8S 2324 (16-bit CPU with 32 bit internal core), MEMORY: Either 128 or 512 kbytes of SRAM; 2 Mbyte of OS Flash
8. частоту проца не знаю, но пишут про дополнительный ток потребления во время измерения 27mA@12V. Судя по даташиту проца получается что используется он по максимуму, 25 МГц тактовой.


Сразу оговорюсь, как учили меня 20 лет назад в институте так с тех пор ни разу ничего толком кроме чужой математики для ЦОС не применял. В-общем валенок и может быть это нужно в раздел для начинающих перетащить если что-то понятное любому ЦОС-нику спрашиваю.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ivan219
сообщение Nov 13 2011, 20:33
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 350
Регистрация: 16-11-08
Пользователь №: 41 680



И всё таки не много не понятно.
Что делает эта функция?
Код
delta = remainder(delta, 2.0 * M_PI);  // map delta phase into +/- M_PI interval
Go to the top of the page
 
+Quote Post
tmtlib
сообщение Nov 14 2011, 03:19
Сообщение #3


Местный
***

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



Цитата(ivan219 @ Nov 14 2011, 00:33) *
И всё таки не много не понятно.
Что делает эта функция?
Код
delta = remainder(delta, 2.0 * M_PI);  // map delta phase into +/- M_PI interval


Фазу приводят к диапазону -3.14...+3.14, пример в градусах: это что-то наподобие того, что 350 градусов привратится в -10 и т.д. Т.е. вектор (Im,Re) всегда в правом полукруге от -90 до 90 градусов.
Go to the top of the page
 
+Quote Post
fontp
сообщение Nov 14 2011, 07:35
Сообщение #4


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

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



QUOTE (tmtlib @ Nov 14 2011, 06:19) *
Фазу приводят к диапазону -3.14...+3.14, пример в градусах: это что-то наподобие того, что 350 градусов привратится в -10 и т.д. Т.е. вектор (Im,Re) всегда в правом полукруге от -90 до 90 градусов.


Именно на этом этапе алгоритм перестанет работать, если нет перекрытия. Как показывает автор "матерьяльчика" в последней табличке (Pass 4) для отсутствия перекрытия.
http://www.dspdimension.com/admin/pitch-sh...g-using-the-ft/
Для частот на границе бинов получаем 2 значения частоты для примерно одинаковых величин спектральной мощности, и только одно из них правильное. Поскольку максимум двух равных величин при реальных вычислениях определяется шумом, то в этом случае алгоритм будет выбирать правильное значение с вероятностью 0.5. Впрочем можно попытаться определить частоту другим методом по каждому из блоков отдельно и потом взять то значение которое ближе к этой оценке, но это уже как бы гибрид

QUOTE (tmtlib @ Nov 13 2011, 15:50) *
2) Для каждого из 512 элемента считаем фазу. Если по простому, то фаза[i]:=ArcTan(Im[i] / Re[i]); Можно сделать получше, расписав разные случаи (если Re[i]=0 и т.д.)
3) храним фазы за предыдущий проход FFT и за текущий. m_fftLastPhase[i] - это старая фаза, а phase - это на самом деле phase[i], т.е. фаза[i] от текущего FFT. Заметил, что метод лучше работает если применить сглаживающее окно.


Для определения частоты вам не нужны все FFT_N значений фазы, поскольку только FFT_N/FFT_STEP значений фазы около максимума спектральной мощности правильные, а остальные искажены врэпингом на 2*pi (Pass 5). Более того в реальной ситуации присутствуют шумы и большинство из этих FFT_N/FFT_STEP правильных оценок (если их много) будут реально сильно зашумлены из-за очень быстрого падения уровня сигнала в бине при отклонении от центрального. Мы помним, что отклик бинов на синусоиду падает в соответствии с функцией спектрального окна, и в лучшем случае он будет спадать как синк или быстрее. В реальной ситуации только 2-4 центральных бина будут давать значимую оценку частоты, причем наименее искажены шумом будут только одна (если частота близко к центру бина) или две (если частота на границе бинов) оценки для центральных бинов (где максимум спектральной мощности). Остальные "утонут" под шумом
Все 512 значений могут представлять интерес только для визуализации "сонограм", поскольку они, в большинстве, шумоподобны.
Поэтому приведеный алгоритм "недоделаный" - мало того что он неэффективен, но он не содержит последнего шага, поскольку он генерирует FFT_N значений частоты из которых в лучшем случае (отсутствие шума) только FFT_N/FFT_STEP правильны и не сказано, как правильные выбрать из массива оценок, большинство из которых неправильны, см. таблички у автора
http://www.dspdimension.com/admin/pitch-sh...g-using-the-ft/
По смыслу понятно, что выбирать нужно где-то возле максимума спектральной мощности

С учетом сказанного простейший алгоритм будет выглядеть так:
1) Берём FFT и получаем массивы амплитуд мнимой и действительной части по 512 элементов в каждом Im[0..511], Re[0..511].
2) Вычисляем энергию для каждого k E[k]=Re*Re+Im*Im
3) Находим максимум E[k] - пусть будет E() для kmax. Здесь вообще-то нужно проверять что kmax не прыгает. Если изменение kmax от фрейма к фрейму больше 1 по модулю - то это не синусоида, выход по ошибке
4) Для элементов kmax, kmax-1, kmax+1 считаем фазу. фаза[]:=ATAN2(Im[], Re[]); другие элементы на самом деле не нужны, в них отсутствует полезная информация
3) храним посчитаные фазы за предыдущий проход FFT и за текущий. m_fftLastPhase[i] - это старая фаза, а phase - это на самом деле phase[kmax], т.е. фаза[kmax] от текущего FFT. Поскольку kmax гарантировано не меняется больше чем на 1, то в любом случае значение фазы для kmax посчитаны и для предыдущего фрейма и есть в массиве

Если перекрытие FFT_N/FFT_STEP >2 то оценку можно немного улучшить если использовать не одно значение максимума, а два первых максимума и построить взвешенную оценку для частоты по этим двум оценкам.
Если главный максимальный бин k0=kmax, а следующий по энергии k1=arg max(E(kmax-1), E(kmax+1)), то можно построить оценку типа
(f(k1)*E(k1)+f(k0)*E(k0))/(E(k0)+E(k1)) с большим иммунитетом к шуму, главным образом для частот на границе бинов (поскольку в этом случае будет две равноценных оценки)

А так да, идея алгоритма на вскидку смотрится очень хорошо
Go to the top of the page
 
+Quote Post
alex_os
сообщение Nov 15 2011, 06:16
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030



Цитата(fontp @ Nov 14 2011, 10:35) *
...
(f(k1)*E(k1)+f(k0)*E(k0))/(E(k0)+E(k1)) с большим иммунитетом к шуму, главным образом для частот на границе бинов (поскольку в этом случае будет две равноценных оценки)


f(k1) это измеренная частота для бина k1 ? А что если приращение фазы измерять по нескольким бинам в окрестности
максимума? Взвешивание получится автоматически.

Код
        delta =  angle( X_1(kmax-n:kmax+n)' * X(kmax-n:kmax+n) )


X_1 - предидущий выход FFT (вектор столбец),
X - текущий выход FFT,
kmax - индекс бина с максимальной энергией,
n - число 0...3


--------------------
ну не художники мы...
Go to the top of the page
 
+Quote Post
fontp
сообщение Nov 15 2011, 06:59
Сообщение #6


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

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



QUOTE (alex_os @ Nov 15 2011, 09:16) *
f(k1) это измеренная частота для бина k1 ? А что если приращение фазы измерять по нескольким бинам в окрестности
максимума? Взвешивание получится автоматически.

CODE
        delta =  angle( X_1(kmax-n:kmax+n)' * X(kmax-n:kmax+n) )


X_1 - предидущий выход FFT (вектор столбец),
X - текущий выход FFT,
kmax - индекс бина с максимальной энергией,
n - число 0...3


Можно бы и по всем. только не все бины одинаково полезны. Поэтому это будет не оптимально.
Усреднять надо в соответствии с уровнем сигнала каждого бина. Вычисление фазы в бинах с низким уровнем сигнала по отношению к шуму бесмысленны - это уже фаза компоненты шума а не сигнала. А уровень сигнала убывает при отклонении от центральных бинов достаточно быстро (быстрее чем 1/n), в то время как шум остается постоянным. Поэтому при низком уровне сигнал/шум лучше усреднять по 2-3-м, причем с учетом энергии (можно даже расписать точные формулы, выписывая плотность вероятности ошибки фазы в бине как функцию отношения сигнал/шум - это можно найти в учебниках по спектральному анализу или статрадиофизике - и максимизмизируя произведение вероятностей).

При очень высоком уровне сигнал/шум, хотя бы 20дб, действительно усреднять вроде можно по всем четырём (FFT_N/FFT_STEP в общем случае перекрытия, но тоже с учетом энергии бина), поскольку ошибки измерения фазы статистически независимы, но различны для разных бинов, в зависимости от энергии

да, f(k) - измеренная частота для бина k. Я не максимизировал функцию вероятности, а просто написал на вскидку формулу, которая будет вести себя оптимально для частот и посередине бина (f(k0)) и на границе бинов (f(k0)+f(k1))/2,
если этого не сделать, то точность упадёт на границе

ЗЫ. Вообще-то вычисление фазы через квадратуры всегда усиливает шум и помехи. Поэтому при вычислении частоты через фазу не стоит пренебрегать использованием спектральных окон, как в примере - чтобы подавить хвосты от возможных синусовых помех. Они и всегда мешают, а этому методу будут особенно
Go to the top of the page
 
+Quote Post
fontp
сообщение Nov 16 2011, 10:52
Сообщение #7


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

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



QUOTE (rudy_b @ Nov 16 2011, 04:46) *
Более правильно - по МНК подбирается параметры гаусса (огибающей) (при соответствующей весовой функции) с весами, пропорциональными мощности. При этом точность возрастает на порядок.



Так предложили уже взвешивать, если говорить о алгоритме с разностью фаз ДПФ перекрывающихся фреймов.
Или Вы о чём то своём?

Сообщение отредактировал fontp - Nov 16 2011, 11:10
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Ruslan1   как это сделано: FFT4096, 100-6500Hz, freq.resolution 0.001Hz   Dec 21 2010, 14:51
- - Fast   может быть применен какой-н сплайн к спектральным ...   Dec 21 2010, 17:44
- - =GM=   Цитата(Ruslan1 @ Dec 21 2010, 17:51) .. с...   Dec 21 2010, 18:32
|- - Ruslan1   Цитата(=GM= @ Dec 21 2010, 23:32) За 300 ...   Dec 21 2010, 19:35
|- - Fast   Цитата(Ruslan1 @ Dec 22 2010, 01:35) Спас...   Dec 22 2010, 01:49
||- - bahurin   если вы хотите получить точность 0.001 Гц при испо...   Dec 22 2010, 02:39
|- - =GM=   Цитата(Ruslan1 @ Dec 21 2010, 22:35) Это ...   Dec 22 2010, 06:20
|- - Ruslan1   Цитата(=GM= @ Dec 22 2010, 11:20) (Не хот...   Dec 22 2010, 07:15
- - Alex11   Тут, действительно, фишка в том, что сигнал - чист...   Dec 21 2010, 21:43
- - blackfin   Цитата(Ruslan1 @ Dec 21 2010, 20:51) Как ...   Dec 22 2010, 01:41
|- - Ruslan1   Цитата(blackfin @ Dec 22 2010, 06:41) Име...   Dec 22 2010, 05:35
- - Fast   два раза fft нельзя для коротких сигналов, fft - д...   Dec 22 2010, 07:28
|- - Ruslan1   Цитата(Fast @ Dec 22 2010, 12:28) два раз...   Dec 22 2010, 08:53
|- - fontp   QUOTE (Ruslan1 @ Dec 22 2010, 14:53) Спас...   Dec 22 2010, 09:07
|- - =GM=   Ruslan1, не хочется встревать в перепалку, но вот ...   Dec 22 2010, 09:15
|- - Ruslan1   Цитата(=GM= @ Dec 22 2010, 14:15) Ruslan1...   Dec 22 2010, 10:19
|- - =GM=   Про линейку не забудьте. Заодно ответьте себе, мож...   Dec 22 2010, 10:43
||- - Ruslan1   Цитата(=GM= @ Dec 22 2010, 15:43) Про лин...   Dec 22 2010, 12:16
||- - fontp   QUOTE (Ruslan1 @ Dec 22 2010, 18:16) Проч...   Dec 22 2010, 12:18
|||- - Ruslan1   Цитата(fontp @ Dec 22 2010, 17:18) Нет не...   Dec 22 2010, 12:33
|||- - =GM=   fontp, ну что же вы? Лишили парня сна на целую нед...   Dec 22 2010, 17:51
|||- - rudy_b   Если основная частота одна (либо несколько, но раз...   Dec 22 2010, 20:11
||- - vvs157   Цитата(Ruslan1 @ Dec 22 2010, 18:16) Проч...   Jan 11 2011, 10:28
||- - =GM=   1.3 мм для стальной линейки. И надо учитывать кофф...   Jan 11 2011, 12:55
|- - fontp   QUOTE (Ruslan1 @ Dec 22 2010, 16:19) 2. ...   Dec 22 2010, 10:44
|- - Ruslan1   Цитата(fontp @ Dec 22 2010, 15:44) Вы не ...   Dec 22 2010, 11:30
||- - fontp   QUOTE (Ruslan1 @ Dec 22 2010, 17:30) В-об...   Dec 22 2010, 11:44
|- - vallav   Цитата(fontp @ Dec 22 2010, 16:44) Вы не ...   Jan 9 2011, 06:24
|- - fontp   QUOTE (vallav @ Jan 9 2011, 12:24) Вы что...   Jan 9 2011, 07:16
|- - vallav   Цитата(fontp @ Jan 9 2011, 13:16) Если из...   Jan 9 2011, 09:43
|- - fontp   QUOTE (vallav @ Jan 9 2011, 15:43) В биол...   Jan 9 2011, 09:59
|- - Ruslan1   Доброго времени суток и всех с прошедшими праздник...   Jan 10 2011, 18:32
|- - fontp   QUOTE (Ruslan1 @ Jan 11 2011, 00:32) С то...   Jan 11 2011, 08:16
- - fontp   Точность измерения частота одиночной синусоиды за ...   Dec 22 2010, 07:39
- - Alexey Lukin   Частоту синусоиды можно вычислить с практически бе...   Jan 3 2011, 19:53
- - blackfin   Цитата(Ruslan1 @ Jan 11 2011, 00:32) С то...   Jan 10 2011, 21:50
|- - vallav   Цитата(blackfin @ Jan 11 2011, 03:50) А г...   Jan 11 2011, 04:07
- - Ruslan1   И снова зравствуйте! Всех поздравляю с прошед...   Mar 13 2011, 12:21
- - Ruslan1   В-общем, я получил положительный результат 1. Исп...   Mar 18 2011, 16:33
- - Alex11   При этих точностях 16 бит категорически не хватает...   Mar 18 2011, 21:33
|- - Ruslan1   Цитата(Alex11 @ Mar 18 2011, 23:33) При э...   Mar 19 2011, 22:54
|- - Ruslan1   Цитата(Alex11 @ Mar 18 2011, 23:33) При э...   Mar 20 2011, 12:55
- - ivan219   Ruslan1 вы можете выложить исходники на билдере? ...   Mar 20 2011, 17:48
- - ivan219   Ruslan1 Я вот что заметил. Если делать комплексный...   Mar 20 2011, 19:04
- - Ruslan1   Отмечаю сразу всем, извините что не сразу. 0. Мат...   Mar 24 2011, 22:00
- - ivan219   Цитата(Ruslan1 @ Mar 25 2011, 01:00) 1. О...   Mar 25 2011, 08:57
|- - Ruslan1   Цитата(ivan219 @ Mar 25 2011, 10:57) Не с...   Mar 25 2011, 11:02
- - Alex11   Поанализировал я тут Ваш файлик. Очень тяжело иска...   Mar 27 2011, 18:11
|- - Ruslan1   Цитата(Alex11 @ Mar 27 2011, 20:11) Поана...   Mar 27 2011, 21:04
- - Alex11   Судя по виду Вашего файла, там скорее не внешние п...   Mar 28 2011, 10:49
- - ivan219   Поможет БИХ фильтр. Если есть вычислительные ресур...   Mar 28 2011, 17:24
- - Alex11   Фильтр не поможет, т.к. проблема не в гармониках -...   Mar 28 2011, 23:24
|- - Ruslan1   Цитата(Alex11 @ Mar 29 2011, 01:24) Тепер...   Mar 29 2011, 14:12
- - Alex11   Вот уточненные результаты: средняя частота 822.566...   Mar 29 2011, 19:34
|- - Ruslan1   Цитата(Alex11 @ Mar 29 2011, 22:34) Видно...   Mar 31 2011, 13:23
- - Alex11   Так Вы проверьте свою программу на модели. Сгенери...   Mar 31 2011, 14:16
|- - Ruslan1   Цитата(Alex11 @ Mar 31 2011, 17:16) Так В...   Mar 31 2011, 15:40
- - Alex11   С гармониками бороться довольно просто - нужно, чт...   Mar 31 2011, 16:24
|- - Ruslan1   Цитата(Alex11 @ Mar 31 2011, 19:24) С гар...   Mar 31 2011, 20:57
- - Alex65111   Долго читал про потенциальную точность измерения, ...   Apr 1 2011, 06:05
|- - Ruslan1   Цитата(Alex65111 @ Apr 1 2011, 09:05) 2. ...   Apr 1 2011, 06:52
- - EvgenyNik   Прежде чем экспериментировать и бросаться в пучину...   Apr 2 2011, 19:56
- - Dmitry Valento   Цитата(Ruslan1 @ Mar 27 2011, 23:04) Как ...   Apr 3 2011, 16:31
|- - Ruslan1   Цитата(Dmitry Valento @ Apr 3 2011, 19:31...   Apr 3 2011, 17:40
- - Alex11   Правильное Гауссовское окно считается так: sqrt(sq...   Apr 3 2011, 18:18
|- - Ruslan1   Цитата(Alex11 @ Apr 3 2011, 21:18) Правил...   Apr 3 2011, 21:29
|- - Alexey Lukin   Цитата(Alex11 @ Apr 3 2011, 22:18) sqrt(s...   Apr 7 2011, 09:32
- - Alex11   Ширина выбирается в зависимости от задачи. Мне нуж...   Apr 3 2011, 22:57
- - Dmitry Valento   Ruslan1, извиняюсь, при копи-пасте потерял еденичк...   Apr 4 2011, 11:33
|- - Ruslan1   Цитата(Dmitry Valento @ Apr 4 2011, 14:33...   Apr 4 2011, 11:58
- - Alex11   Шкалу вертикальную сделайте линейную, а не логариф...   Apr 4 2011, 13:03
- - Alex11   Согласен, теоретически - да, но поскольку сигма вы...   Apr 7 2011, 14:37
- - Fetronics   Вопросы о разрешающей способности измерения частот...   Oct 21 2011, 16:03
- - rudy_b   Цитата(Ruslan1 @ Dec 21 2010, 17:51) ... ...   Oct 22 2011, 01:22
|- - ys05   Цитата(rudy_b @ Oct 22 2011, 05:22) Для с...   Oct 22 2011, 08:04
|- - rudy_b   Цитата(ys05 @ Oct 22 2011, 11:04) Интерес...   Oct 23 2011, 18:50
- - tmtlib   Если кому ещё интересна эта тема, вот хороший мате...   Nov 12 2011, 10:31
|- - fontp   QUOTE (tmtlib @ Nov 12 2011, 13:31) Если ...   Nov 13 2011, 06:51
- - ivan219   Цитата(tmtlib @ Nov 12 2011, 14:31) Если ...   Nov 13 2011, 10:24
- - tmtlib   Цитата(ivan219 @ Nov 13 2011, 13:24) А мо...   Nov 13 2011, 12:50
|- - alex_os   Цитата(fontp @ Nov 15 2011, 09:59) Поэтом...   Nov 15 2011, 07:40
||- - fontp   QUOTE (alex_os @ Nov 15 2011, 10:40) Так ...   Nov 15 2011, 07:43
||- - alex_os   Цитата(fontp @ Nov 15 2011, 10:43) Винова...   Nov 15 2011, 13:37
|- - rudy_b   Цитата(fontp @ Nov 15 2011, 09:59) Можно ...   Nov 16 2011, 01:46
- - thermit   вычисляет остаток от деления дельты на два пи, вер...   Nov 13 2011, 21:16


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

 


RSS Текстовая версия Сейчас: 1st July 2025 - 10:05
Рейтинг@Mail.ru


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