Форум программистов, компьютерный форум, киберфорум
Arduino
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/42: Рейтинг темы: голосов - 42, средняя оценка - 4.83
5 / 5 / 3
Регистрация: 30.05.2012
Сообщений: 89

Спектроанализатор и визуализация

06.12.2013, 21:24. Показов 8260. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообщем проблема такая, необходимо реализовать цифровой фильтр, для обработки аудио сигнала. Т.е считываем сигнал далее пропускаем его через фильтр, фильтр может пропускать определенную частоту от 100 до 10КГц. Как это можно реализовать может кто сталкивался с такой проблемой или может натолкнуть на мысли или какую либо информацию? Буду очень благодарен.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.12.2013, 21:24
Ответы с готовыми решениями:

спектроанализатор в phonon
Собственно сабж. Взял за основу плеера, плеер из экзампла. Хочу сделать спектроанализатор в нём, как в винампе. Можно ли такое сделать?...

Спектроанализатор улавливает звук не на всех компьютерах
Такая ситуация: есть спектроанализатор звука, написан на основе БПФ, для захвата звука используется DirectSound. Но есть такая...

Визуализация 1+2
Создайте график функций x〖^2〗 + 5 на отрезке . В качестве значений используйте массив x размером в 100 элементов. Для создания массива...

7
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
06.12.2013, 23:33
...вот вам готовый способ реализации цифровой фильтрации для МК http://www-users.cs.york.ac.uk... /trad.html, вам нужен полосовой фильтр.

Описание
1
5 / 5 / 3
Регистрация: 30.05.2012
Сообщений: 89
07.12.2013, 15:57  [ТС]
raxp спасибо за информацию.
Такой вопрос:
считал я сигнал в моем случае стерео аудио
C++
1
2
3
4
5
for  (register int i = 0; i < 128; ++i)
  {
    data[i] = analogRead(AUDIOPIN);
    im[i] = 0;
  }


дальше мне нужно пропустить его через фильтр с частотой среза например 125Гц т.е он срежет все что выше этой частоты если я верно понимаю, на выходе получаю обработанный сигнал. Так же у меня есть LOL SHIELD на который мне необходимо вывести сигнал. Шилд размером 14 на 9 ну думаю понятно что он из себя представляет. каждый столбец в шилде отвечает за определенную частоту (31,5 45 63 90 125 250 500 1000 2000 4000 6000 8000 12000 16000 ) и у каждого столбца есть уровень (от 0 до 9) дак вот мне необходимо как то вывести это, не могу понять как это сделать как преобразовать сигнал полученный после фильтра в сигнал пригодный для вывода на шилд, т.е получится что то вроде экволайзера как в аудиоплеерах...
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
07.12.2013, 17:09
Лучший ответ Сообщение было отмечено raxp как решение

Решение

Так же у меня есть LOL SHIELD на который мне необходимо вывести сигнал. Шилд размером 14 на 9 ну думаю понятно что он из себя представляет.
не, непонятно, но исходя из этого:
и у каждого столбца есть уровень (от 0 до 9)
...
т.е получится что то вроде экволайзера как в аудиоплеерах.
делаю вывод о в корне неверной постановке вами задачи (название темы меняю). Эквалайзер - это регулировка спектра, на него не выводят, им управляют. Спектр же - это то, чего у вас будет отображаться, визуализироваться на матрице. Вам нужен на самом деле - спектроанализатор:


http://arv.radioliga.com/content/view/98/44/
http://elm-chan.org/works/akilcd/report_e.html (дядя Элм-Чен знает толк в инженерных трюках)

Но я бы советовал вам не брать нахрапом сразу анализ спектра через FFT (хотя могу рекомендовать Марпл), а реализовать попроще - методом пяти ординат. Вот как описано это у В.П. Дьяконова "СПРАВОЧНИК по алгоритмам и программам на языке бейсик для персональных ЭВМ":
1- делаем 5 выборок в переменные Y1...Y5
2- вычисляем среднее значение сигнала Y0 = (Y1+Y5+2*(Y2+Y4))/6
3- вычисляем амплитуды гармоник сигнала (спектральных составляющих) равномерно распределенных по полосе
M1 = (Y1 - Y5 + Y2 - Y4) / 3
M2 = (Y1 + Y5 - 2 * Y3) / 4
M3 = (Y1 - Y5 - 2 * (Y2-Y4)) / 6
M4 = ((Y1 + Y5) - 4 * (Y2 + Y4) + 6 * Y3) / 12

4- коэффициент гармоник K = (SQRT((M2^2)+(M3^2)+(M4^2)))/M1
В принципе, если сильно хотса через Фурье, то на пальцах так:
1- имеем, скажем от 4-х периодов выборки
2- производим квантование по 4 (a1, b1, c1, d1 - это один период и т.д.) на период (из условия минимума наложения дополнительных спектров)
Fc = 4Fd/ (4*(k+-1))
3- далее выделяем и складываем составляющие SUM (Ai) = a1+a2+a3+a4; SUM (Bi) = b1+b2+b3+b4; и т.д.
4- действительная часть Re = SUM (ai) - SUM (ci)
5- мнимая часть Im = SUM (bi) - SUM (di)
6- квадратуры есть, далее комплексная Z = SQRT (RE^2 + JM^2)
0
5 / 5 / 3
Регистрация: 30.05.2012
Сообщений: 89
07.12.2013, 17:52  [ТС]
да вы верно говорите что это не экволайзер, мне необходимо выводить частотный спектр.
FFT я уже делал, но его использовать нельзя в данном случае.(Если что это курсовая и преподаватель предложил вернее явно намекнул что тут нужны фильтры, FFT ему не катит)
Мне необходимо пропустить сигнал через 14 таких фильтров у каждого своя частота пропускания, в результате получаем 14 выходных сигналов, далее их нужно обработать и вывести на лолшилд.
Вот думаю прояснил проблему.
Проблема в том как реализовать фильтр и потом обработать выходные данные фильтра для передачи на шилд.
частота дискретизации сигнала 48 кГц.
частоты фильтров я писал в посте выше.
полоса пропускания 10% или около этого я точно не понял что преподаватель имел ввиду, если что поправь меня)
было бы хорошо если бы вы привели программный код с ним у меня туговато.

вот что смог сделать сам.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <Charliplexing.h>
 
 
 
#define AUDIOPIN 5    // pin к которому подключен аудио вход
#define COLUMN 14
#define LEVEL 9
 
 
char im[128];         // обработанный сигнал
char data[128];       // входной сигнал
char data_avgs[COLUMN];   //массив сигналов для LOL SHIELD
 
 
register int i;       // счетчик для циклов
 
void setup() 
{
  LedSign::Init();
}
 
void loop()
{
  for  (i = 0; i < 128; ++i)
  {
    data[i] = analogRead(AUDIOPIN);
    im[i] = 0;
  }
  
  // тут необходимо прогнать сигнал через фильтры
 
 
  // average bars together
  for (i = 0; i < 14; ++i) {
    data_avgs[i] = data[i*4] + data[i*4 + 1] + data[i*4 + 2] + data[i*4 + 3];   // average together усредняем данные сигнала если необходимо
    data_avgs[i] = map(data_avgs[i], 0, 30, 0, 9);                              // remap values for LoL приводим к нужному уровню
  }
  
  // Set LoL Shield signal
  for (register int x = 0; x < COLUMN; ++x)
    for (register int y = 0; y < LEVEL; ++y)
      if (y < data_avgs[13 - x])
        LedSign::Set(x, y, 1);
      else  
        LedSign::Set(x, y, 0);      
}
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
07.12.2013, 19:01
использовать нельзя в данном случае.(Если что это курсовая и преподаватель предложил вернее явно намекнул что тут нужны фильтры, FFT ему не катит
ну раз через фильтры, можно и через фильтры. В аналоговой технике так и делалось и делается (цветомузыка тому пример).

было бы хорошо если бы вы привели программный код с ним у меня туговато.
программный код в генераторе кода выше, вводите параметры для каждого из полосовых фильтров и работайте
0
5 / 5 / 3
Регистрация: 30.05.2012
Сообщений: 89
07.12.2013, 20:08  [ТС]
как же все просто)
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
07.12.2013, 20:12
Разумеется.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.12.2013, 20:12
Помогаю со студенческими работами здесь

Визуализация
Здравствуйте, уважаемые форумчане. Хотелось бы узнать, возможно ли визуализировать(создать несколько членов, которые будут отвечать за...

3D-визуализация
Здравствуйте! На выходе из программы имеется массив температур размерностью 60х60х20. T.mat Lx = 30; Ly = 30; Lz = 10; hx =...

Визуализация
Всем доброго времени суток. Кто представляет, как можно сделать визуализацию как в WMP? Там как я понял используется фрактальная графика...

Визуализация
Когда выполняется какая-нибудь макрос обработки данных, то Аксесс просто замирает и показывает песочные часы до конца работы макроса. А...

Визуализация
Здравствуйте. Тут нужна лишь визуализация. Такой алгоритм : 1. Есть на экране форма, и 2 &quot;контейнера&quot;(Целое, Дробное) например....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru