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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Обнаружение частоты, Нужно вычеслить наличие 1000Гц
Designer56
сообщение Nov 25 2008, 13:00
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 932
Регистрация: 13-10-06
Из: Уфа
Пользователь №: 21 290



Цитата(GetSmart @ Nov 25 2008, 17:22) *
Не, не то же.....

В смысле- КФ считается через спектры соотв. сигналов. Только уже ДПФ не обойдешься, или интегрировать по времени нужно по большому интервалу, чтобы поймать максимум.


--------------------
"...Дьяволу ведомо многое не потому, что он- Дьявол, а потому, что он стар..."
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Nov 25 2008, 13:30
Сообщение #17


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(Alex_1811)
Нужно детектировать наличее сигнала определенной частоты (в моем случаи 1000Гц).
Я понимаю что нужно что-то типа преобразования Фурье, но я далек от этого.
Берёте свёртку сигнала и 10..100 периодов исследуемой частоты в комплексном виде. Другими словами один нужный базис ДПФ. Длину вектора будет равна амплитуде искомой частоты. Далее что хотите, то и делайте smile.gif

ЗЫ. Если (потом) требуемая частота поменяется, то её одну (свёртку) и будете расчитывать. На AVR наверное нужно все операции делать в целых числах. И синус с косинусом вычислять как-нибудь таблично.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
klen
сообщение Nov 25 2008, 13:56
Сообщение #18


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



1. корелятор и БПФ/ДПФ - cуть одно и тоже, ДПФ - векторный коррелятор с опорой в виде синусойды, все определяется тоько временем накопления (кличество отсчетов)!

2. если очень очень бысторо написать и попробывать то рекомендую сделать буфер на 3x512 отсчетов
в первых двух расчитать и хранить синусойду и косинусойду 1000Гц - это будет опора в комплексном виде
в последний записать выборку.

оценка квадрата амплитуды сигнала 1000Гц вычисляется по формуле

(1/512)*E( (cos[i]*y(i))^2 +(sin(i)y(i))^2 )
где Е - сумма 0...511



пример кода
Код
int main (void)
{
  // допустим частота АЦП 10000Гц
  float adc_freq  = 10000.0;
  float view_freq = 1000.0 ;
  


  for (uint16_t i = 0; i < 512; i++)
   {
     buf_sin[i] = sin( (adc_freq / view_freq) * i * 2 * M_PI / 512);
     buf_sin[i] = cos( (adc_freq / view_freq) * i * 2 * M_PI / 512);
   }

  // GetSamples();

  volatile float AmpSqrt = 0.0;
  for (uint16_t i = 0; i < 512; i++)
   {
      AmpSqrt = pow(buf_sin[i]*buf_in[i],2)  + pow(buf_cos[i]*buf_in[i],2);
   }
  
  return 1 ;
}


прогнал в авр студии - 7мгц частота проца, 88мега на вычисление одного значения потреюуется 44мс, тоесть Вы сможете 25 раз в секунду измерять. полоса примерно 100Гц. это если тупо использовать float, если использовать целочисленную арифметику то скорость можно увеличить в разы(соответственно и полосу сузить)
Go to the top of the page
 
+Quote Post
Alex_1811
сообщение Nov 25 2008, 14:01
Сообщение #19


Частый гость
**

Группа: Участник
Сообщений: 178
Регистрация: 31-10-06
Из: Яблунець
Пользователь №: 21 821



Вот тут http://helper10.narod.ru/alg2.htm
Нашел такое:

Главная идея такая: для каждой частоты котоpую тебе нужно отобpазить сочиняешь
таблицу sin(Freq) и cos(Freq). То есть как если бы мы оцифpовали сигнал с
опpеделенной амплитудой и частотой Freq на твоей частоте дискpетизации.
Длина таблицы должна быть больше чем одна полуволна сигнала Freq. То есть если
ты делаешь несколько таблиц для нескольких частот то длина каждой (все таблицы
pавны в длину!) беpешь длину полуволны для низшей частоты.
Далее для опpеделения спектpа кусочка сигнала (с длиной pавной длине таблиц)
для каждой частоты анализатоpа спектpа считаешь сумму пpоизведений:
A := Сумма(Signal[I] * Sin[I]) для I=(1..BlockLen)
B := Сумма(Signal[I] * Cos[I]) для I=(1..BlockLen)
После этого амплитуда данной частоты есть
Sqrt(A^2 + B^2).
Чтобы не вычислять коpень можешь делать пpосто A^2 + B^2.
Hу и как-то их масштабиpуешь. Потом pисуешь палку соотв. длины и усе.


Это для меня покатит?
Go to the top of the page
 
+Quote Post
klen
сообщение Nov 25 2008, 14:14
Сообщение #20


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



пробуй
Go to the top of the page
 
+Quote Post
Alex_1811
сообщение Nov 25 2008, 14:19
Сообщение #21


Частый гость
**

Группа: Участник
Сообщений: 178
Регистрация: 31-10-06
Из: Яблунець
Пользователь №: 21 821



А какой длины таблицу Sin и Cos нужно брать (волну, полуволну) и какое время между отсчетами
(частоту выборки сигнала)?
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Nov 25 2008, 15:41
Сообщение #22


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



лучше делать выборки на частоте, кратной искомой (напр. 8/16/32кГц). таблица - целочисленная, на 1 полупериод синуса (т.е. 4/8/16 выборок), умножение/сложение/наколение на лету.

Сообщение отредактировал ukpyr - Nov 25 2008, 15:43
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Nov 25 2008, 15:46
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(ukpyr @ Nov 25 2008, 15:26) *
может, проще коррелятором ?

Вот у корелятора наблюдается большое время детектирования. В разы больше чем у фильтра.
Go to the top of the page
 
+Quote Post
Microwatt
сообщение Nov 25 2008, 17:37
Сообщение #24


Гуру
******

Группа: Почетный участник
Сообщений: 6 851
Регистрация: 25-08-08
Из: Запорожье
Пользователь №: 39 802



Да, тяжело в электронике программерам... Ну, куда ни сунься - везде гигабайта- другого не хватает...
Сказано было сразу:LM567. Вот от нее и пляшите после тщательного изучения матчасти.... И перестраиваемый по частоте программно фильтр достаточно просто на ней организовать.
А то- Фурье, корреляторы, матрицы- накопители, синус-косинусные преобразования....
Go to the top of the page
 
+Quote Post
Rst7
сообщение Nov 25 2008, 18:56
Сообщение #25


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата(Microwatt @ Nov 25 2008, 19:37) *
Да, тяжело в электронике программерам... Ну, куда ни сунься - везде гигабайта- другого не хватает...

Вашу ненависть к цифровым методам мы знаем. Предложите решение, если завтра человеку понадобится определить 10 разных частот одновременно? Десять LM'ок? wink.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
klen
сообщение Nov 25 2008, 19:51
Сообщение #26


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Вот один из самых оригинальных в моем понятиии пример для AVR - я долго искал, как же всетаки применить в жизни дробные операции AVR не притягивая за уши - вот оно
http://elm-chan.org/works/akilcd/report_e.html
Go to the top of the page
 
+Quote Post
Serg76
сообщение Nov 25 2008, 20:02
Сообщение #27


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Присоединяюсь к mse. Самое простое это применить алгоритм Герцеля. Так, например, делают в декодере DTMF.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 25 2008, 20:45
Сообщение #28


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(ukpyr @ Nov 25 2008, 18:41) *
лучше делать выборки на частоте, кратной искомой
Чем лучше?
Главное чтобы частота выборки была как минимум в 2 раза выше искомой (теорема Котельникова).


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Microwatt
сообщение Nov 25 2008, 21:17
Сообщение #29


Гуру
******

Группа: Почетный участник
Сообщений: 6 851
Регистрация: 25-08-08
Из: Запорожье
Пользователь №: 39 802



Цитата(Rst7 @ Nov 25 2008, 22:56) *
Вашу ненависть к цифровым методам мы знаем. Предложите решение, если завтра человеку понадобится определить 10 разных частот одновременно? Десять LM'ок? wink.gif

Не стоит тут трактовать мои чувства.
завтра? так то будет завтра.
А человек сегодня не может уверенно одну частоту обнаружить. Ему решение оптимальное и подсказали.
Можно одной LM и десять частот обнаружить и весь спектр прочесать умеючи. Только не сразу, а поочередно. Кстати, вычисления так точно придется делать поочередно. или срочно затребовать десятиядерный контроллер....
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Nov 25 2008, 22:49
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Microwatt @ Nov 25 2008, 21:37) *
Да, тяжело в электронике программерам... Ну, куда ни сунься - везде гигабайта- другого не хватает...
Сказано было сразу:LM567. Вот от нее и пляшите после тщательного изучения матчасти.... И перестраиваемый по частоте программно фильтр достаточно просто на ней организовать.
А то- Фурье, корреляторы, матрицы- накопители, синус-косинусные преобразования....

Да всё это звучит грозно, а на деле ... Гигобайты это на ПиСишках, а здесь их нет и сотнями байтов укладываемся.

Тот же DTMF делал на м8 - 10 режекторных фильтров. Пару килобайтов.

Тут ещё одной информации не хватает - а именно превышение сигнала над фоном. Насколько сигнал чёткий будет?

Корелятором тоже делал, но ... выделяет хуже, соотношение сигнал/шум держит хуже, времени тратит больше, проц загружает намного больше.

Конечно фильтр перестраевыемый сделать значительно сложнее. Плавучку не потянешь, а фиксированная времени больше захавает, но какого-нибудь второго порядка вполне реально потянуть с 16-ти битной арифметикой с фиксированной точкой. Одну частоту. Если сигнал отчётливый.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 09:58
Рейтинг@Mail.ru


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