Форум программистов, компьютерный форум, киберфорум
Цифровая обработка сигналов
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.50/22: Рейтинг темы: голосов - 22, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 21
1

Детализированное отображение "спектра", как в Adobe Audition

28.10.2013, 20:38. Просмотров 4007. Ответов 26
Метки нет (Все метки)

Здравствуйте.
Необходима консультация человека разбирающегося в сфере построения спектра сигнала))
Вообщем интересует вопрос как и на чем лучше прорисовывать спектр ( БПФ уже сделано, пересчитано в дБ ). (С++ Builder 6).

И так на данный момент я прорисовываю спектр на канвасе TImage, где у меня 1 пиксель это 1 отчет после БПФ, то есть по вертикали у меня при БПФ 512 получается закрашивается 256 пикселей, цвет выбираю в зависимости от величины отсчета - чем больше тем ярче.

Проблема в недостаточной детализации картинки...сам не могу додумать как сделать детализированное отображение спектра, по качеству стремящееся к абод аудишену)) Но понимаю что точно не простой прорисовкой по пикселям, если кто то уже имеет опыт, подскажите плз
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2013, 20:38
Ответы с готовыми решениями:

Как написать регулярное выражение для выдергивания английских букв и символов: "+", ",", ":", "-", " ", "!", "?" и "."
Не могу ни как собразить как написать регулярное выражение для выдергивания английских букв и...

Отображение типа bool в Datagridview как "Да" и "Нет"
В Datagridview отображается таблица из БД. в БД один столбец таблицы имет тип boolean. В свойствах...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло",...

Подскажите пожалуйста, как убрать вот этот элемент в Adobe Audition cs6?
Нужно чтобы когда я открываю Мр3 файл в этой программе, то чтобы показывался только частотный...

26
10205 / 6587 / 493
Регистрация: 28.12.2010
Сообщений: 21,165
Записей в блоге: 1
28.10.2013, 22:12 2
Это огибающая, сырые отсчеты во времени:
Детализированное отображение "спектра", как в Adobe Audition


Это спектрограмма (НЕ СПЕКТР), распределение спектра во времени:
Детализированное отображение "спектра", как в Adobe Audition

Детализированное отображение "спектра", как в Adobe Audition


Так называемую детализацию можно имитировать градиентным переходом между цветами, или дискретно дополнением нулями при построении спектра для расширения разрешения по частоте. Ферштеен?
2
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 21
28.10.2013, 22:45  [ТС] 3
Не ферштеен xD
То есть сейчас я все правильно делаю - рисуя на канве по пикселям?
Можно поподробнее про дополнение нулями?
Сейчас я как раз и использую градиентные переходы между цветами) просто всё мёлкое...и плохо видны те или иные характеристики...
0
10205 / 6587 / 493
Регистрация: 28.12.2010
Сообщений: 21,165
Записей в блоге: 1
28.10.2013, 22:55 4
Если вы используете отображение скажем, условно говоря, 1000 точек данных на экранном линейном отрезке в 100 пикселей, то конечно это неверный подход. Тут лучше перед отображением прореживание и постепенная детализация при масштабировании. Про "все мелкое" непонятно, приведите пример.
=====================
Дополнение сигнала нулями позволяет более подробно рассмотреть структуру спектра, своего рода осуществляется интерполяция преобразования Фурье.

http://1labview.info/spektraln... e-nulyami/
http://www.inkcanon.com/predme... age26.html
1
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 21
28.10.2013, 23:23  [ТС] 5
ну у меня БПФ в основном 512 будет...поэтому у мя на 1 отсчет 1 пиксель(если же кол-во отсчетов превышает размер Имаджа...я его увеличиваю и делаю прокрутку)...то есть входной массив который я падаю в функцию БПФ я допустим записываю 400 реальных отсчетов и дополняю 112 нулей, я правильно понял?

более мелкие это в частности голосовые гармоники при плохом качестве записи...или удаленности от микрофона...

вы не могли бы уточнить про масштабирование? на данном этапе я просто делал так - допустим увеличиваю в 2 раза по х или у ... у меня в этом плане масштабирование идет порознь... между у1 и у2 я вставляю у = ( у1 + у2 ) / 2...и тд

я извеняюсь за кучу может быть глупых вопросов...но я полный новичек в этой теме)
0
10205 / 6587 / 493
Регистрация: 28.12.2010
Сообщений: 21,165
Записей в блоге: 1
29.10.2013, 08:39 6
1024-точечное, 2048-точечное БПФ не улучшает ситуацию?
0
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 21
29.10.2013, 12:26  [ТС] 7
k sojaleniju net...v etom slychae teryaju detalizaciju po vremeni...tyt palka v dvyh koncah...i imenno 512 polychaetsya nailychshim variantom...

P.S. izvenyajus' ta translit - ne mogy yazik pereklju4it' xD
0
10205 / 6587 / 493
Регистрация: 28.12.2010
Сообщений: 21,165
Записей в блоге: 1
29.10.2013, 14:49 8
На эту тему вам будет полезна тема Как узнать частоту звука?
0
2008 / 1280 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
29.10.2013, 17:16 9
Цитата Сообщение от Reist Посмотреть сообщение
teryaju detalizaciju po vremeni
обычно используют перекрытие окон. Не знаю как в Audition-e, а в Sound Forge есть даже параметр - перекрытие в процентах.
0
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 21
29.10.2013, 18:58  [ТС] 10
Цитата Сообщение от raxp Посмотреть сообщение
На эту тему вам будет полезна тема Как узнать частоту звука?
Prochital dannyju vetky...iz nee po moei teme vrode tol'ko sledyjushee:
Цитата Сообщение от raxp
А по сабжу, для повышения точности методов FFT используют несколько параллельно проводимых преобразований с разным количеством точек, так реализовано в некоторых цифровых осциллографах, что дает более четкую картинку спектрограммы и более высокую точность за счет совмещения нескольких спектров в единицу времени с разным разрешением по частоте. Вот так вот.
1.Ne mogli bi ytochnit' kak stikovat' dopystim dannie s BPF 512 i 1024 ili ya ne tak ponyal napisannoe?

2.dalee vi tam ypominali normirovanie: symma elementov delennaya na kolichestvo iskljuchaya max element...isklju4aem tol'ko odin element max...ved' elementov blizkih k max mojet bit' neskol'ko - chto eto daet?)

Добавлено через 7 минут
Цитата Сообщение от vital792 Посмотреть сообщение
обычно используют перекрытие окон. Не знаю как в Audition-e, а в Sound Forge есть даже параметр - перекрытие в процентах.
Ya pravil'no ponyal chto perekritie osyshestvlyaetsya pytem podachi ots4etov v funkciju BPF vmesto [0-512],[513-1024] sledyjushim obrazom: [0-512],[256-768],[513-124]?)
0
10205 / 6587 / 493
Регистрация: 28.12.2010
Сообщений: 21,165
Записей в блоге: 1
29.10.2013, 19:28 11
1.Ne mogli bi ytochnit' kak stikovat' dopystim dannie s BPF 512 i 1024 ili ya ne tak ponyal napisannoe?
да так и стыковать, у вас разный шаг по сути, одни частоты есть в одном, другие в другом. Поскольку преобразование проводится параллельно, то в итоге сливаем на одну временную ось.

2.dalee vi tam ypominali normirovanie
это было в контексте поиска максимума, вам это ни к чему.
1
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 21
29.10.2013, 20:54  [ТС] 12
Цитата Сообщение от raxp Посмотреть сообщение
да так и стыковать, у вас разный шаг по сути, одни частоты есть в одном, другие в другом. Поскольку преобразование проводится параллельно, то в итоге сливаем на одну временную ось.
Но после БПФ 512 - выход 256 элементов, а после 1024 - 512, ммм запутался...голова плохо соображает уже)
на примере: Fд = 8000 БПФ1 = 512, БПФ2 = 1024

при БПФ1 один элемента(k) описывает по частоте - ~15,625Гц, по времени - ~ 62,5 мс
при БПФ2 один элемента(n) описывает по частоте - ~7,8125Гц, по времени - ~ 125 мс

То мне прорисовывать так: ?
n[1,1] n[1,1] n[1,2] n[1,2]
n[2,1] n[2,1] n[2,2] n[2,2]
k[1,1] k[1,2] k[1,3] k[1,4]
n[3,1] n[3,1] n[3,2] n[3,2]
n[4,1] n[4,1] n[4,2] n[4,2]
k[2,1] k[2,2] k[2,3] k[2,4]
и тд ...
Чет я намудрил но думаю понятно смысл...я правильно понял?
0
2008 / 1280 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
30.10.2013, 07:51 13
Цитата Сообщение от Reist Посмотреть сообщение
sledyjushim obrazom: [0-512],[256-768]
da esli perekrytie v polovinu okna

Добавлено через 3 минуты
а по поводу прорисовки - вы я так понимаю будете отрисовывать спектрограмму? Тогда нормируйте ее по времени в соответствии с шагом окна.
1
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 21
30.10.2013, 13:23  [ТС] 14
Цитата Сообщение от vital792 Посмотреть сообщение
da esli perekrytie v polovinu okna

Добавлено через 3 минуты
а по поводу прорисовки - вы я так понимаю будете отрисовывать спектрограмму? Тогда нормируйте ее по времени в соответствии с шагом окна.
Да, спектрограмма, под нормированием вы имеете ввиду, что при последовательном БПФ 512 у меня секунду описывает 16 элементов, а вот уже при перекрытии в 50%, получается своего рода масштабирование и 1 секунду описывать уже будет 24 элемента, и мне это соответственно учитывать при расчете времени, правильно?)
0
2008 / 1280 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
30.10.2013, 14:13 15
когда вы идете по сигналу с перекрытием, сначала выбираете шаг, например если перекрытие 50% шаг равен половине длины окна: spectr = fft( signal(index*step : index*step+fftSize) * windowFunction). Таким образом вы получаете одну линию спектрограммы. Временная шкала этой спектрограммы(один пиксел) будет равна step/SampleRate. Всего в спектрограмме таким способом получается SignalLength/step - fftSize/step вертикальных линий. Изменяя шаг, вы можете уплавлять длиной спектрокраммы и разрешением по времени
1
2008 / 1280 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
30.10.2013, 15:06 16
набросал пример на матлабе (т.к. он все нарисует за меня, я с рисовалками не особо дружу):
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
filename = 'D:\Complete1.wav';
sizeAll = wavread(filename,'size');
sizeAll = sizeAll(1);
step = 32;
fft_size = 512;
 
[signal, SamplingRate] = wavread(filename);
 
for i=1:sizeAll/step-fft_size/step
%     Hs=spectrum.cov(12);
%     dpd=psd(Hs,signal((i-1)*step+1:i*step+fft_size),'NFFT',fft_size);
%     s(:,i) = 20*log10(dpd.Data);
    sp = abs(fft(signal((i-1)*step+1:i*step+fft_size)));
    s(:,i) = 20*log10(sp(1:end/2));
end
figure
% subplot(2,1,1)
% plot((1:sizeAll)/SamplingRate, signal); grid on; axis tight;
% subplot(2,1,2)
imagesc((1:sizeAll)/SamplingRate, (size(s,1):-1:1)/size(s,1)*SamplingRate/2, (s));
grid on
во вложениях полученные спектрограммы: первая построена при помощи сглаженной ковариационной спектральной оценки, вторая напрямую вычислением fft
2
Миниатюры
Детализированное отображение "спектра", как в Adobe Audition   Детализированное отображение "спектра", как в Adobe Audition  
2008 / 1280 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
30.10.2013, 16:21 17
в индексе ошибся (дурацкая матлабовская индексация с единицы - до сих пор не могу привыкнуть после си)
Matlab M
1
2
3
4
5
6
7
for i=1:sizeAll/step-fft_size/step
    Hs=spectrum.cov(12);
    dpd=psd(Hs,signal((i-1)*step+1:(i-1)*step+fft_size),'NFFT',fft_size);
    s(:,i) = 20*log10(dpd.Data);
%     sp = abs(fft(signal((i-1)*step+1:(i-1)*step+fft_size)).*kaiser(fft_size));
%     s(:,i) = 20*log10(sp(1:end/2));
end
1
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 21
30.10.2013, 20:48  [ТС] 18
raxp, вы не могли бы плз посмотреть 12 пост) или я там чушь полную написал?))) а то жду вашего ответа))

Добавлено через 3 минуты
vital792, спасибо), вы не подскажете у меня чем больший % перекрытия тем больше так скажем искажение по времени, то есть гармоники начинают друг на друга накладываться(будущая на прошлую), это недостаток данного метода или моих кривых рук? xD при 10-15% всё более менее норм при >50% уже накладки)
0
10205 / 6587 / 493
Регистрация: 28.12.2010
Сообщений: 21,165
Записей в блоге: 1
30.10.2013, 22:04 19
...смысл поняли правильно.
1
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 21
30.10.2013, 22:18  [ТС] 20
Спасибо большое) по результату отпишусь)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.10.2013, 22:18

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Получить значение из {"text1":"val1","text2":"val2","text3":{"text":"val"}}
Есть такая строка var my = '{"text1":"val1","text2":"val2","text3":{"text":"val"}}'; Как из...

Как вернуть в окна Проводника панель инструментов с кнопками "Вперед", "Назад", "Копировать", "Вставить"?
Как вернуть в окна Проводника панель инструментов с кнопками "вперед-назад", "копировать",...

Adobe audition
Приветствую дорогие гении! Adobe audition 3.0 не удаляется! запускал анинсталятор 10 тыщ раз! пишет...

Как в sql реализован логич.тип?Как можно в sql сделать так,чтобы были только значения "0"и"1" или "да"и"Нет"?
Хочу использовать в таблице переменные логического типа, но не нашла ничего про логический тип в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.