Spectrum analizator Widma (ATmega8)
Spectrum analizator Widma (ATmega8)
В инете нашел интересную схемку analizator widma,вот ссылка на сайт автора http://diy.elektroda.eu/?p=40,там и видео есть,можно посмотреть как работает.
(сайт на Польском языке)
Вот ссылка на видео на Youtube http://www.youtube.com/watch?v=Ecq9a97DcmI
В прикрепленном файле есть прошивка, BascomAVR
fusebits (CKOPT=0, все остальные=1)
(сайт на Польском языке)
Вот ссылка на видео на Youtube http://www.youtube.com/watch?v=Ecq9a97DcmI
В прикрепленном файле есть прошивка, BascomAVR
fusebits (CKOPT=0, все остальные=1)
- Вложения
-
- .rar
- Плата
- (94.98 КБ) 483 скачивания
-
- .rar
- Прошивка
- (21.96 КБ) 504 скачивания
-
- analizator.png
- Принципиальная схема
- (48.57 КБ) 1348 скачиваний
Последний раз редактировалось Ilnur Сб дек 05, 2009 01:33:35, всего редактировалось 2 раза.
- larik
- Мучитель микросхем
- Сообщения: 403
- Зарегистрирован: Вс окт 12, 2008 00:19:25
- Откуда: Подольск, Мос. Область
как видно из схемы там кварц на 16 мгц, вот табличка по ней моно выставить, распечатал себе помогает иногда
галочка = 0 пустой квардратик = 1 (codevision, ponyprog)
галочка = 0 пустой квардратик = 1 (codevision, ponyprog)
- Вложения
-
- 07_fuse_table.gif
- fuse
- (32.76 КБ) 1040 скачиваний
Сам интересуюсь работой схемы, если кто может, разъясните на пальцах, как контроллер выделяет из сигнала разные частоты, зачем нужен этот фильтр, алгоритм(словами, картинки не обязательны) разложения сигнала по каналам? Насколько я понял, на одну ножку подается исходный нормализованный сигнал с одного из каналов( например правый), а на другую обработанный 2-мя фильтрами(может фильтры управляемые? хотя я не заметил схемы управления ими) и тоже нормализованный второй канал(левый?).
Мне нужен алгоритм определения уровня сигнала определенной частоты.
Здесь я по картинке насчитал аж 25 каналов...
У меня пока такие идеи:
первая: разделять сигнал аппаратными фильтрами(типа как в схеме фнч на операционниках) и подавать выделенные сигналы на входы ацп.
Разновидность этой идеи: использовать один фильтр, но управляемый, и контроллер несколько тысяч раз в секунду перенастраивает фильтр на разные частоты и измеряет ацп уровень на выходе фильтра. Но высокие частоты к этому плохо отнесутся, да и эффективность думаю будет невысокой(погрешности большие, да и сигнал должен успеть пройти фильтр до его перенастройки).
Достоинство: простота алгоритма, почти всю работу делает аппаратная часть.
Недостаток: слишком много железа, схема сложная и большая, мало каналов ацп в контроллере(устранен в варианте с перенастраиваемым фильтром).
вторая: тупо подавать сигнал на ацп а в программе подсчитывать частоту перехода сигнала через ноль или частоту смены направлений сигнала, если он однополярный(короче длительность периода или полупериода). Например для определения сигнала частотой <80гц нужно насчитать(при частоте измерений 1500гц) больше 18 периодов сигнала. А уровень сигнала этой частоты определять из среднеарифметического этих 18(или больше) измерений.
Достоинство: минимум железа, простота схемы.
Недостаток: большая вычислительная нагрузка, большой алгоритм, нужно много памяти для хранения измерений, для сигналов высокой частоты нужен мощный контроллер.
Может есть еще какой алгоритм попроще? Мне нужно определить наличие и уровень сигнала с диапазоном от 0-30 до 0-300гц. Короче программный эквалайзер или программный фильтр...
Мне нужен алгоритм определения уровня сигнала определенной частоты.
Здесь я по картинке насчитал аж 25 каналов...
У меня пока такие идеи:
первая: разделять сигнал аппаратными фильтрами(типа как в схеме фнч на операционниках) и подавать выделенные сигналы на входы ацп.
Разновидность этой идеи: использовать один фильтр, но управляемый, и контроллер несколько тысяч раз в секунду перенастраивает фильтр на разные частоты и измеряет ацп уровень на выходе фильтра. Но высокие частоты к этому плохо отнесутся, да и эффективность думаю будет невысокой(погрешности большие, да и сигнал должен успеть пройти фильтр до его перенастройки).
Достоинство: простота алгоритма, почти всю работу делает аппаратная часть.
Недостаток: слишком много железа, схема сложная и большая, мало каналов ацп в контроллере(устранен в варианте с перенастраиваемым фильтром).
вторая: тупо подавать сигнал на ацп а в программе подсчитывать частоту перехода сигнала через ноль или частоту смены направлений сигнала, если он однополярный(короче длительность периода или полупериода). Например для определения сигнала частотой <80гц нужно насчитать(при частоте измерений 1500гц) больше 18 периодов сигнала. А уровень сигнала этой частоты определять из среднеарифметического этих 18(или больше) измерений.
Достоинство: минимум железа, простота схемы.
Недостаток: большая вычислительная нагрузка, большой алгоритм, нужно много памяти для хранения измерений, для сигналов высокой частоты нужен мощный контроллер.
Может есть еще какой алгоритм попроще? Мне нужно определить наличие и уровень сигнала с диапазоном от 0-30 до 0-300гц. Короче программный эквалайзер или программный фильтр...
- Yellow Tiger
- Сверлит текстолит когтями
- Сообщения: 1148
- Зарегистрирован: Вт июл 08, 2008 12:24:17
Вот здесь ("Юкио Сато. Обработка сигналов. Первое знакомство") все достаточно на пальцах.tom1101 писал(а):... если кто может, разъясните на пальцах, как контроллер выделяет из сигнала разные частоты, ...
А вот из этого ничего не выйдет - если амплитуда ВЧ составляющих мала, то они могут и не привести к переходу через ноль - посмотри любую осциллограмму обычного звукового сигнала - гитара, голос, радио, что угодно. Заметнее на одной ноте, конечно.tom1101 писал(а):...тупо подавать сигнал на ацп а в программе подсчитывать частоту перехода сигнала через ноль...
Вот тебе кусочек из Sgt.Pepper'а, для примера:

- Yellow Tiger
- Сверлит текстолит когтями
- Сообщения: 1148
- Зарегистрирован: Вт июл 08, 2008 12:24:17
FFT тоже не медленно работает - мега8 (на 16MHz) успевает и отсчеты замерить, и разложение посчитать, и вывести на дисплей одновременно осциллограмму и спектр, вот посмотри:
Elm Chan - Audio Spectrum Monitor.
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 хватает с лихвой, тем более я уже и так в нее кучу режимов зашил, остался последний и самый совершенный из них - реакция на взрывы.
Полосовой фильтр у меня так и не запустился(и кажется я знаю почему: я ведь еще не извлек данные из регистра 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 хватает с лихвой, тем более я уже и так в нее кучу режимов зашил, остался последний и самый совершенный из них - реакция на взрывы.
- krolaka
- Нашел транзистор. Понюхал.
- Сообщения: 169
- Зарегистрирован: Пн мар 02, 2009 12:23:37
- Контактная информация:
ну там с 700 до 1000 грц идет затухание и оно не оч красиво потом выглядит
дисплей 16х2 без подсветки по 1 $ набрал 4 шт других нет а те что есть подсветкой то стоят космически дорого
но думю если все по схеме правильно собрать то будет работать все нормально просто у меня не все номиналы идельно как на схеме и ОУ не тот я 2 шт lm358 ставил 
- ChipManyak
- Потрогал лапой паяльник
- Сообщения: 363
- Зарегистрирован: Сб сен 20, 2008 14:59:28
Общий привет.
Собрал сей девайс на макетке. Насколько я понял этот анализатор чисто
визуальная фенька, и толку от неё не много, прикольно только.Если и есть провал по частотам, то он практически не заметен.
Есть один косяк с дисплеями.
Поставил 16х2 от мэлта, не пашет, на дисплее тишина.Долго пытался понять где собака порылась, оказалось в дисплее.У мэлта, позже вспомнил, немного другая инициализация, а программа писалась
под буржуиские дисплеи.Внедрил от винстар и всё пошло.Может кому
поможет информация.
В BASCOM не шарю, может найдется кто вдруг, подправит исходники
под мэлт?
Собрал сей девайс на макетке. Насколько я понял этот анализатор чисто
визуальная фенька, и толку от неё не много, прикольно только.Если и есть провал по частотам, то он практически не заметен.
Есть один косяк с дисплеями.
Поставил 16х2 от мэлта, не пашет, на дисплее тишина.Долго пытался понять где собака порылась, оказалось в дисплее.У мэлта, позже вспомнил, немного другая инициализация, а программа писалась
под буржуиские дисплеи.Внедрил от винстар и всё пошло.Может кому
поможет информация.
В BASCOM не шарю, может найдется кто вдруг, подправит исходники
под мэлт?
Радиоэлектроника, это наука о КОНТАКТАХ!
- krolaka
- Нашел транзистор. Понюхал.
- Сообщения: 169
- Зарегистрирован: Пн мар 02, 2009 12:23:37
- Контактная информация:
собрал фильтры на транзисторах кт315 несколько деталей полет лучше
даж понравилось) кстати дисплей c контролером sed1278 очень четко и бысто рисует полоски нет смазывания
а вот mc1602ch медленно
вобше бы хотел переделать под цветной дисплей от сименса s55 чтобы полоски были цветные но чтото меня берут сомнения что мк потянет прорисовку..
Сегодня выдалось свободное время собрал данный спектр анализатор.
Заработал однако токо с WINSTAR-ским дисплеем.
Заработал однако токо с WINSTAR-ским дисплеем.
- Вложения
-
- P401.JPG
- Фото
- (198.04 КБ) 1258 скачиваний
