Свежие обсуждения
Измерения

LC-метр из звуковой карты

1 38 68

У меня вопрос ко всем, кто может по человечески объяснить алгоритм вычисления быстрого преобразования Фурье БПФ? Взяв например 8 отчетов а1,а2,а3,а4,а5,а6,а7,а8. Что на что поделить, умножить сложить и .т.д.? Ссылки не надо, все пересмотрел, либо я тупой, либо объясняют так.

 

asmvvv1: приходит сообщение MM_WIM_DATA

Ага, callback Window. У меня LCmeter тоже на нём работал, а потом я на callback Event перешёл в Thread-е.

asmvvv1: обычно размер буфера 9600*4=38400

Т.е. он не равен 2 в целой степени, чтобы под быстрое Фурье подходило? Просто чтобы круглочисленные частоты формировать типа 1000Гц? Я где-то вычитал, что буфер лучше делать кратным dwPageSize, размеру страницы памяти системы, и она как раз всегда кратна 2 в целой степени.

asmvvv1: функцией GlobalAlloc
С Movable и Share, как в примерах написано?
Тоже раньше так делал, сейчас VirtualAlloc.

asmvvv1: три буфера, оказалось это вполне достаточно

Для callback Window - да. Для Event-а достаточно даже двух, поэтому и перешёл на него, правда этого не всегда бывает достаточно. Я, вообще делаю 10 буферов на, примерно, секунду работы, чтобы в случае задержки в обработке не сбивалась фаза сигнала, которая мне нужна для усреднения. Предусмотренно слежение за отставанием, т.е. если обработка опаздывает, то данные просто накапливаются в усредняющем буфере и на обработку с графикой (которые жрут много времени) не идут.

 

asmvvv1: кто может по человечески объяснить алгоритм вычисления быстрого преобразования Фурье БПФ?

Я не могу и не хочу, а просто пользуюсь готовой процедурой - не помню где взял, но гугль в помощь. Я даже не знаю, как считается функция синуса и косинуса в процессоре, хотя тоже постоянно ими пользуюсь.
Если вам нужна интерпретация результата, то обычно а1- это среднее, а2 - это амплитуда последней гармоники (никогда не пользовался), а2, а3 - вещественная и мнимая части 1-й гармоники, а4,а5 - второй, а6,а7-3-ей.

 

Вот тут я не в тему
Как мне кажеться, БПФ - это комплесное (векторное) представление сигнала.
У меня тоже есть БПФ в виде функции с открытым кодом на С++. Там в пошаговом выполнении видно, что на что умножается, что с чем складывается. Дать два входящих отсчета и посмотреть на весь процесс пошагово.
А что в книжках высоколобо объясняется работа этого алгоритма - полностью согласен.
Так и сам БПФ есть в нескольких вариантах. И есть модернизации от разных умельцев.

 

БПФ, кстати разные бывают. Есть что из комплексного вектора делают комплексный, я вот с таким прокололся в LC- метре, в результате количество частот в 2 раза меньше было чем возможно, я ещё не понимал в чём дело, думал ошибка где... В данном случае нужно брать такое, что из вещественного вектора комплексный делает.

 

Представьте, что вы хотите сделать БПФ на микроконтроллере, где нет комплексных действительных чисел, а есть только 8-битные значения регистров. Вот главный интерес БПФ.

 

Боюсь показаться назойливым, но

1. Я почти на 100% уверен, что даже для микроконтроллеров существуют уже готовые БПФ и ничего самому писать не надо.

2.

asmvvv1: где нет комплексных действительных чисел

Комплексных чисел нет нигде. Процессор компа с ними не работает. Я, например, для Дельфи сам определил тип "комплексный" и написал к нему небольшую библиотечку, там умножение, деление и т.д. И БПФ с ними не работает напрямую. Оно просто преобразует значения входного массива так, что там получаются вещественные и мнимые части комплексных чисел. Которые ещё нужно преобразовать к типу "комплексный", если вы хотите воспользоваться библиотекой к этому типу прилагающейся.
Кстати, в последнее время я вообще редко пользуюсь именно библиотекой комплексных чисел, и сложение, вычитание и умножение, например, я всегда делаю вручную для повышения скорости вычислений. Да и деление иногда тоже, кроме тех случаев, когда боюсь запутаться.

 

asmvvv1: Если схема на одном резисторе позволяет иметь диапазон измерения 1000,

Откуда взялось такое низкое мнение о схеме с одним опорником?

При Rref=100 ом вменяемый (т.е. принимая, что на краях случайная погрешность возрастает до 10%) диапазон измерений получается от 0,01 ом до 1 Мом -- то есть восемь порядков! Ну "что еще надо человеку, чтобы встретить старость"?

(частота измерения 11 кГц, время измерения -- пол-секунды).

 

IDiod: диапазон измерений получается от 0,01 ом до 1 Мом

Это у вас Zmeter-ом так получилось, или чем-то другим? У меня вроде нету усреднения за 0,5 сек, только 0,3 и 1 сек.

 

Да нет, в свое время экспериментировал с возможностями звуковых карт, чисто из спортивного интереса. Вроде я где-то давал ссылку на свои "изыски" --
http://antiradio.narod.ru/rlc-meter/index.htm

(теперь тут лежит боле-менее "причесанная" версия метра).