Зарегистрирован: Вс мар 22, 2009 15:10:13 Сообщений: 128
Рейтинг сообщения:0
В инете нашел интересную схемку analizator widma,вот ссылка на сайт автора http://diy.elektroda.eu/?p=40,там и видео есть,можно посмотреть как работает.
(сайт на Польском языке)
как видно из схемы там кварц на 16 мгц, вот табличка по ней моно выставить, распечатал себе помогает иногда
галочка = 0 пустой квардратик = 1 (codevision, ponyprog)
Вложения:
Комментарий к файлу: fuse 07_fuse_table.gif [32.76 KiB]
Скачиваний: 1033
Сам интересуюсь работой схемы, если кто может, разъясните на пальцах, как контроллер выделяет из сигнала разные частоты, зачем нужен этот фильтр, алгоритм(словами, картинки не обязательны) разложения сигнала по каналам? Насколько я понял, на одну ножку подается исходный нормализованный сигнал с одного из каналов( например правый), а на другую обработанный 2-мя фильтрами(может фильтры управляемые? хотя я не заметил схемы управления ими) и тоже нормализованный второй канал(левый?).
Мне нужен алгоритм определения уровня сигнала определенной частоты.
Здесь я по картинке насчитал аж 25 каналов...
У меня пока такие идеи:
первая: разделять сигнал аппаратными фильтрами(типа как в схеме фнч на операционниках) и подавать выделенные сигналы на входы ацп.
Разновидность этой идеи: использовать один фильтр, но управляемый, и контроллер несколько тысяч раз в секунду перенастраивает фильтр на разные частоты и измеряет ацп уровень на выходе фильтра. Но высокие частоты к этому плохо отнесутся, да и эффективность думаю будет невысокой(погрешности большие, да и сигнал должен успеть пройти фильтр до его перенастройки).
Достоинство: простота алгоритма, почти всю работу делает аппаратная часть.
Недостаток: слишком много железа, схема сложная и большая, мало каналов ацп в контроллере(устранен в варианте с перенастраиваемым фильтром).
вторая: тупо подавать сигнал на ацп а в программе подсчитывать частоту перехода сигнала через ноль или частоту смены направлений сигнала, если он однополярный(короче длительность периода или полупериода). Например для определения сигнала частотой <80гц нужно насчитать(при частоте измерений 1500гц) больше 18 периодов сигнала. А уровень сигнала этой частоты определять из среднеарифметического этих 18(или больше) измерений.
Достоинство: минимум железа, простота схемы.
Недостаток: большая вычислительная нагрузка, большой алгоритм, нужно много памяти для хранения измерений, для сигналов высокой частоты нужен мощный контроллер.
Может есть еще какой алгоритм попроще? Мне нужно определить наличие и уровень сигнала с диапазоном от 0-30 до 0-300гц. Короче программный эквалайзер или программный фильтр...
... если кто может, разъясните на пальцах, как контроллер выделяет из сигнала разные частоты, ...
Вот здесь ("Юкио Сато. Обработка сигналов. Первое знакомство") все достаточно на пальцах.
tom1101 писал(а):
...тупо подавать сигнал на ацп а в программе подсчитывать частоту перехода сигнала через ноль...
А вот из этого ничего не выйдет - если амплитуда ВЧ составляющих мала, то они могут и не привести к переходу через ноль - посмотри любую осциллограмму обычного звукового сигнала - гитара, голос, радио, что угодно. Заметнее на одной ноте, конечно.
Вот тебе кусочек из Sgt.Pepper'а, для примера:
Спасибо за книжку, для себя нашел программный полосовой фильтр - частный случай разложения Фурье но только для одной частоты. По описаниям работает быстро. Сижу, отлаживаю.
FFT тоже не медленно работает - мега8 (на 16MHz) успевает и отсчеты замерить, и разложение посчитать, и вывести на дисплей одновременно осциллограмму и спектр, вот посмотри:
Elm Chan - Audio Spectrum Monitor.
Видел, но я пока только пару недель с контроллерами общаюсь, так что ассемблер еще плохо знаю, и для меня проще в AlgorithmBuilder собрать с нуля алгоритм, чем пытаться выдрать его из программы в виде ассемблерного листинга.
Полосовой фильтр у меня так и не запустился(и кажется я знаю почему: я ведь еще не извлек данные из регистра adc - щас в даташите ищу его регистры), хотя вроде он довольно прост:
В начале инициализация:
sum_sin=0
sum_cos=0
Подсчет по прерываниям ADC:
sum_sin=sum_sin+signal*sin(phase*2*pi);
sum_cos=sum_cos+signal*cos(phase*2*pi);
phase=phase+freq;
После 5 измерений(некоторые делают до 32, но у меня памяти мало под таблицы синусов, косинусов и корней):
power=sqrt(sum_sin^2+sum_cos^2);
Где power-мощность сигнала "signal" на частоте freq, если я правильно понял.
У меня такие параметры: freq=80, 5 измерений до подсчета power(как я понял они перекрывают фазу в 320 градусов, что неплохо).
Вообще мои рассуждения верны? Или уже здесь я допускаю ошибку? Алгоритм пока дорабатываю. Всего понадобилось 5 синусов, 5 косинусов и 37 корней для таблиц.
А так проект такой: tiny13 вшита в мышь, принимает аудиосигнал, оцифровывает его, вычисляет (очень приближенно) power сигнала с частотой <80Hz (взрывы и выстрелы), этот power загружает в подпрограмму ШИМ, которая управляет вибродвигателем. Для мыши производительности tiny13 хватает с лихвой, тем более я уже и так в нее кучу режимов зашил, остался последний и самый совершенный из них - реакция на взрывы.
Зарегистрирован: Пн мар 02, 2009 12:23:37 Сообщений: 169
Рейтинг сообщения:0
Прошывал програматором на COM порт програматор uniprof фюзы поставил только cksel0-3 1111 вчера потестировал оказалось чо он работает не очень коректно а именно схема на операционнике фотки не скину потому что фотик сломался на днях
Зарегистрирован: Пн мар 02, 2009 12:23:37 Сообщений: 169
Рейтинг сообщения:0
ну там с 700 до 1000 грц идет затухание и оно не оч красиво потом выглядит дисплей 16х2 без подсветки по 1 $ набрал 4 шт других нет а те что есть подсветкой то стоят космически дорого но думю если все по схеме правильно собрать то будет работать все нормально просто у меня не все номиналы идельно как на схеме и ОУ не тот я 2 шт lm358 ставил
Зарегистрирован: Сб сен 20, 2008 14:59:28 Сообщений: 363
Рейтинг сообщения:0
Общий привет.
Собрал сей девайс на макетке. Насколько я понял этот анализатор чисто
визуальная фенька, и толку от неё не много, прикольно только.Если и есть провал по частотам, то он практически не заметен.
Есть один косяк с дисплеями.
Поставил 16х2 от мэлта, не пашет, на дисплее тишина.Долго пытался понять где собака порылась, оказалось в дисплее.У мэлта, позже вспомнил, немного другая инициализация, а программа писалась
под буржуиские дисплеи.Внедрил от винстар и всё пошло.Может кому
поможет информация.
В BASCOM не шарю, может найдется кто вдруг, подправит исходники
под мэлт?
_________________ Радиоэлектроника, это наука о КОНТАКТАХ!
На форуме bascomavr.3bb.ru Ведущий специалист переделал эту программу под свои нужды. Даже светомузыку сделал по этому принципу. Поспрашивайте, я думаю он поможет.
Зарегистрирован: Пн мар 02, 2009 12:23:37 Сообщений: 169
Рейтинг сообщения:0
собрал фильтры на транзисторах кт315 несколько деталей полет лучше даж понравилось) кстати дисплей c контролером sed1278 очень четко и бысто рисует полоски нет смазывания а вот mc1602ch медленно вобше бы хотел переделать под цветной дисплей от сименса s55 чтобы полоски были цветные но чтото меня берут сомнения что мк потянет прорисовку..
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения