В инете нашел интересную схемку analizator widma,вот ссылка на сайт автора http://diy.elektroda.eu/?p=40,там и видео есть,можно посмотреть как работает. (сайт на Польском языке)
как видно из схемы там кварц на 16 мгц, вот табличка по ней моно выставить, распечатал себе помогает иногда
галочка = 0 пустой квардратик = 1 (codevision, ponyprog)
Сам интересуюсь работой схемы, если кто может, разъясните на пальцах, как контроллер выделяет из сигнала разные частоты, зачем нужен этот фильтр, алгоритм(словами, картинки не обязательны) разложения сигнала по каналам? Насколько я понял, на одну ножку подается исходный нормализованный сигнал с одного из каналов( например правый), а на другую обработанный 2-мя фильтрами(может фильтры управляемые? хотя я не заметил схемы управления ими) и тоже нормализованный второй канал(левый?).
Мне нужен алгоритм определения уровня сигнала определенной частоты.
Здесь я по картинке насчитал аж 25 каналов...
У меня пока такие идеи:
первая: разделять сигнал аппаратными фильтрами(типа как в схеме фнч на операционниках) и подавать выделенные сигналы на входы ацп.
Разновидность этой идеи: использовать один фильтр, но управляемый, и контроллер несколько тысяч раз в секунду перенастраивает фильтр на разные частоты и измеряет ацп уровень на выходе фильтра. Но высокие частоты к этому плохо отнесутся, да и эффективность думаю будет невысокой(погрешности большие, да и сигнал должен успеть пройти фильтр до его перенастройки).
Достоинство: простота алгоритма, почти всю работу делает аппаратная часть.
Недостаток: слишком много железа, схема сложная и большая, мало каналов ацп в контроллере(устранен в варианте с перенастраиваемым фильтром).
вторая: тупо подавать сигнал на ацп а в программе подсчитывать частоту перехода сигнала через ноль или частоту смены направлений сигнала, если он однополярный(короче длительность периода или полупериода). Например для определения сигнала частотой <80гц нужно насчитать(при частоте измерений 1500гц) больше 18 периодов сигнала. А уровень сигнала этой частоты определять из среднеарифметического этих 18(или больше) измерений.
Достоинство: минимум железа, простота схемы.
Недостаток: большая вычислительная нагрузка, большой алгоритм, нужно много памяти для хранения измерений, для сигналов высокой частоты нужен мощный контроллер.
Может есть еще какой алгоритм попроще? Мне нужно определить наличие и уровень сигнала с диапазоном от 0-30 до 0-300гц. Короче программный эквалайзер или программный фильтр...
tom1101 писал(а):... если кто может, разъясните на пальцах, как контроллер выделяет из сигнала разные частоты, ...
Вот здесь ("Юкио Сато. Обработка сигналов. Первое знакомство") все достаточно на пальцах.
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 хватает с лихвой, тем более я уже и так в нее кучу режимов зашил, остался последний и самый совершенный из них - реакция на взрывы.
Прошывал програматором на COM порт програматор uniprof фюзы поставил только cksel0-3 1111 вчера потестировал оказалось чо он работает не очень коректно а именно схема на операционнике фотки не скину потому что фотик сломался на днях
ну там с 700 до 1000 грц идет затухание и оно не оч красиво потом выглядит дисплей 16х2 без подсветки по 1 $ набрал 4 шт других нет а те что есть подсветкой то стоят космически дорого но думю если все по схеме правильно собрать то будет работать все нормально просто у меня не все номиналы идельно как на схеме и ОУ не тот я 2 шт lm358 ставил
Общий привет.
Собрал сей девайс на макетке. Насколько я понял этот анализатор чисто
визуальная фенька, и толку от неё не много, прикольно только.Если и есть провал по частотам, то он практически не заметен.
Есть один косяк с дисплеями.
Поставил 16х2 от мэлта, не пашет, на дисплее тишина.Долго пытался понять где собака порылась, оказалось в дисплее.У мэлта, позже вспомнил, немного другая инициализация, а программа писалась
под буржуиские дисплеи.Внедрил от винстар и всё пошло.Может кому
поможет информация.
В BASCOM не шарю, может найдется кто вдруг, подправит исходники
под мэлт?
На форуме bascomavr.3bb.ru Ведущий специалист переделал эту программу под свои нужды. Даже светомузыку сделал по этому принципу. Поспрашивайте, я думаю он поможет.
собрал фильтры на транзисторах кт315 несколько деталей полет лучше даж понравилось) кстати дисплей c контролером sed1278 очень четко и бысто рисует полоски нет смазывания а вот mc1602ch медленно вобше бы хотел переделать под цветной дисплей от сименса s55 чтобы полоски были цветные но чтото меня берут сомнения что мк потянет прорисовку..