|
как это сделано: FFT4096, 100-6500Hz, freq.resolution 0.001Hz, как достигнуто такое разрешение по частоте? |
|
|
|
Dec 21 2010, 14:51
|
Гуру
     
Группа: Свой
Сообщений: 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 лет назад в институте так с тех пор ни разу ничего толком кроме чужой математики для ЦОС не применял. В-общем валенок и может быть это нужно в раздел для начинающих перетащить если что-то понятное любому ЦОС-нику спрашиваю.
|
|
|
|
|
 |
Ответов
|
Nov 13 2011, 20:33
|
Местный
  
Группа: Участник
Сообщений: 350
Регистрация: 16-11-08
Пользователь №: 41 680

|
И всё таки не много не понятно. Что делает эта функция? Код delta = remainder(delta, 2.0 * M_PI); // map delta phase into +/- M_PI interval
|
|
|
|
|
Nov 14 2011, 03:19
|
Местный
  
Группа: Участник
Сообщений: 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 градусов.
|
|
|
|
|
Nov 14 2011, 07:35
|

Эксперт
    
Группа: Свой
Сообщений: 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)) с большим иммунитетом к шуму, главным образом для частот на границе бинов (поскольку в этом случае будет две равноценных оценки) А так да, идея алгоритма на вскидку смотрится очень хорошо
|
|
|
|
|
Nov 15 2011, 06:16
|
Знающий
   
Группа: Свой
Сообщений: 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
--------------------
ну не художники мы...
|
|
|
|
|
Nov 15 2011, 06:59
|

Эксперт
    
Группа: Свой
Сообщений: 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, если этого не сделать, то точность упадёт на границе ЗЫ. Вообще-то вычисление фазы через квадратуры всегда усиливает шум и помехи. Поэтому при вычислении частоты через фазу не стоит пренебрегать использованием спектральных окон, как в примере - чтобы подавить хвосты от возможных синусовых помех. Они и всегда мешают, а этому методу будут особенно
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|