Автор Тема: Vocoder-и за линукс?  (Прочетена 8547 пъти)

Naka

  • Напреднали
  • *****
  • Публикации: 3395
    • Профил
Re: Vocoder-и за линукс?
« Отговор #15 -: Mar 10, 2016, 12:57 »
Това на Scilab - xcos ми се вижда слабичко. Даже едно ФФТ не можах да намеря :'( - изглежда че проекта е още в много начална фаза или липсват модули или пък е комерсиално и трябва нещо да купиш.....

А пък gnuradio-companion изглежда много хубаво - поне това което гледам в YouTube може да върши работа и за всякакви DSP - не само за радио - и със сигурност бих го подминал, (ако не беше го посочил) заради думичката 'radio' в името му. Не ги е срам.......

---
Мен много ме интересува как влияе фазово честотната характеристика (ФЧХ) на възприемането на речта?
Това е нещо което винаги се подминава навсякъде по литературата с лека ръка. Обикновенно казват, че 'фазата' не носила информация, не се възприемала от ухото и чертаят само спектрограми (АЧХ).

А пък на друго място прочетох че ухото не било чувствително към 'фазата' обаче ако имало изменения (скок на фазата) веднага се усещало ??? ??? Обаче има и едно такова свойство на ФФТ, че ако има закъснял или избързал сигнал това това е аналогично на умножение на фазата с число. https://www.dsprelated.com/freebooks/mdft/Shift_Theorem.html - е не може човека да не може да усети че има забавяне на сигнала? - значи трябва да влияе и то много.

Та ми идва на акъла да пробвам някой ден това: Сигнал --> FFT --> зануляване(унищожаване) на фазата --> IFFT --> Сигнал
Дали ще се чуе същото?

Идва ми  друга идея за скрамблер. Ако размениш фазата с амплитудата какво ще стане? Сигнал --> FFT --> swap(A,φ) --> IFFT --> Сигнал

Или пък вокодерски ефекти с манупулация на фазата?
« Последна редакция: Mar 10, 2016, 15:50 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Vocoder-и за линукс?
« Отговор #16 -: Mar 11, 2016, 00:52 »
Не съм особено запознат с биологията на слуховия апарат, но може би (звучи поне логично) - слуховите рецептори регистрират амплитудата на звука, там колко силно се опънало тъпанчето и съответно изменението на фазата няма значение - щом със същата честота и еднакво силно се регистрира звука, значи трябва да звучи еднакво. Ма това е само теория де, нямам никаква идея. Може и да не е така, не знам.

gnuradio си е по-скоро общ DSP фреймуърк наистина - работи еднакво добре с дискретизирани floating point стойности (аудио), така и с комплексни (I/Q от софтуерните радиа).

Нямам идея по отношение на фазата на звука и как се възприема от човека. Но подобно на радиовълните, със сигурност звуковите вълни по същият начин биха произели "странни" резултати при събиране на една и съща вълна с нейното "копие" лекинко фазово отместено - в смисъл ще се бият там в зависимост от изместването или тотално ще се нулират, или ще се усилват. Някъде из някакъв измислен новинарски сайт бях чел за гениалното откритие на някакви големи глави че най-добрият начин да откажеш някой да говори е като възпроизведеш казаното с малко забавяне, обаче не знам колко "малко" е това малко и дали става въпрос за фазово взаимодействие или е далеч по-голям интервал и ефектът е просто достатъчно дразнещ че човека забравя какво е искал да каже.
Активен

"Knowledge is power" - France is Bacon

Naka

  • Напреднали
  • *****
  • Публикации: 3395
    • Профил
Re: Vocoder-и за линукс?
« Отговор #17 -: Mar 11, 2016, 11:19 »
Не съм особено запознат с биологията на слуховия апарат, но може би (звучи поне логично) - слуховите рецептори регистрират амплитудата на звука.

Ухото (ушният нерв) прави 'фурие преобразуване' -поне така казват.

Състоял се от поредица от реснички, които трептят (Се задействат от) различна честота. Т.е. по скоро прилича на множество банд пасс филтри позиционирани един след друг. И всяка група от реснични е свързана с нервни влакна.
« Последна редакция: Mar 11, 2016, 11:45 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

4096bits

  • Напреднали
  • *****
  • Публикации: 6152
    • Профил
Re: Vocoder-и за линукс?
« Отговор #18 -: Mar 11, 2016, 14:24 »
Gnuradio го зная от много време, но когато за първи път разбрах за това нящо, ми се видя прекалено сложно, а и тогава английския ми беше меко казано, незадоволителен. А много искам да го поразуча. Страхотни нещица могат да се сглобят на това.
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Vocoder-и за линукс?
« Отговор #19 -: Mar 12, 2016, 02:03 »
Като цяло мога само да подкрепям заниманията с gnuradio, а иначе е сложно и за мен, в смисъл това е софтуер с доста широка аудитория и би било леко странно ако си добре запознат с всичките му страни  достатъчно добре. Ако ти се занимава и доколкото мога, бих помогнал, но все пак и аз съм си ламер, така че не очаквай чудеса :)
Активен

"Knowledge is power" - France is Bacon

4096bits

  • Напреднали
  • *****
  • Публикации: 6152
    • Профил
Re: Vocoder-и за линукс?
« Отговор #20 -: Mar 12, 2016, 11:54 »
Проблема при мен е сложен. Нарича се "какво по-напред"  :'(
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

Naka

  • Напреднали
  • *****
  • Публикации: 3395
    • Профил
Re: Vocoder-и за линукс?
« Отговор #21 -: Mar 16, 2016, 10:55 »
Успях да направя FFT - IFFT и на изхода да излезе абсолютно същият звук като от входа.

Много е важно всеки отчет от изхода от IFFT да се раздели на N (1/1024). Защото в противен случай сигнала излиза 1024 пъти по голям (вместо +-1v pp  +-1000v pp) звуковата карта се насища и нищо няма да чуете - ще чуете само пращения. Това е явно особеност на гнурадио и тяхната IFFT имплементация. Във формулата за  IFFT има отпред 1/N *... Но те явно са го пропускат.

Но тази постановка така като е - и тя не е съвсем вярна (въпреки че се чува точно същото) защото не използва прозорец (използва правоъгален прозорец). взимат се първите 0-1023 отчета, след това следващите 1024-2047, след това следващите и т.н.

А на мен ми трябва вектора от 1024 очета да се шифтва (застъпва) напред със някаква стойност
например на всеки 256 отчета. както е показaно тук: https://cnx.org/contents/PmFjFoIu@5/Short-Time-Fourier-Transform Едва след като успея да го направя така, ще има смисъл да се прилага истинска прозоречна функция (Blackman-harris)



Но не мога да разбера как това може да стане с гнурадио-К. Имат блок [stream-to-vector]. как може да се направи така че този 1024 вектор да се плъзга напред с накакво отместване.

Как може - има ли такъв блок в който може да се дефинира произволна матемтическа функция - с различни аргументи и да се приложи върху всеки елемент на [1024 вектора]? Например измислям си функция - може и да е сложен филтър и я прилагам върху целят спектър. Гледам има блок [transcedental] Обаче доколкото разбирам вътре може да се опише само една единствена функция - например Sin()?
« Последна редакция: Mar 16, 2016, 18:05 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

4096bits

  • Напреднали
  • *****
  • Публикации: 6152
    • Профил
Re: Vocoder-и за линукс?
« Отговор #22 -: Mar 16, 2016, 21:56 »
Добре де! Проверих малко резултати през Гого. Не може да не си попаднал на това
http://www.sirlab.de/linux/descr_vocoder.html
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Vocoder-и за линукс?
« Отговор #23 -: Mar 16, 2016, 22:29 »
Цитат
Но не мога да разбера как това може да стане с гнурадио-К. Имат блок [stream-to-vector]. как може да се направи така че този 1024 вектор да се плъзга напред с накакво отместване.

За съжаление поне аз не се сешам как би могло да стане това. Вероятно може би ако трябва да се презастъпват "наполовина" може да се измисли нещо "умно" с помощта на keep M in N и interleave блоковете, обаче аз пак не се сещам как би станало.

Цитат
Как може - има ли такъв блок в който може да се дефинира произволна матемтическа функция - с различни аргументи и да се приложи върху всеки елемент на [1024 вектора]? Например измислям си функция - може и да е сложен филтър и я прилагам върху целят спектър. Гледам има блок [transcedental] Обаче доколкото разбирам вътре може да се опише само една единствена функция - например Sin()?


Защо, firdes е доста гъвкаво нещо и е наготово. Иначе математическите оператори сигурно си ги видял вече де.
Активен

"Knowledge is power" - France is Bacon

4096bits

  • Напреднали
  • *****
  • Публикации: 6152
    • Профил
Re: Vocoder-и за линукс?
« Отговор #24 -: Mar 16, 2016, 23:02 »
Доколкото се вижда тук:
https://github.com/gnuradio/gnuradio

има модул dr-vocoder

Не върши ли работа
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

Naka

  • Напреднали
  • *****
  • Публикации: 3395
    • Профил
Re: Vocoder-и за линукс?
« Отговор #25 -: Mar 17, 2016, 11:45 »
Цитат
Как може - има ли такъв блок в който може да се дефинира произволна матемтическа функция - с различни аргументи и да се приложи върху всеки елемент на [1024 вектора]? Например измислям си функция - може и да е сложен филтър и я прилагам върху целят спектър. Гледам има блок [transcedental] Обаче доколкото разбирам вътре може да се опише само една единствена функция - например Sin()?

Защо, firdes е доста гъвкаво нещо и е наготово. Иначе математическите оператори сигурно си ги видял вече де.

Е аз само дадох пример. Нямам намерение да правя филтър по този начин. Освен това цифровият филтър работи във временната област, а аз искам да си правя 'извращенията' в честотната област.

В този ред на мисли има ли начин да си дефинираш твой блок отделно, със входове и изходи - например някъде надолу отделно по листа. И след това да го използваш където ти трябва. Понеже няма такъв 'универсален' математически блок, явно трябва да го направя с много отделни [transcedental] [add] * и т.н. - и ще стане много голям и заплетен.


Не мога също да разбера какво означава 'Vec Length' в [stream to vector] а и не само там. стои си на 1.
« Последна редакция: Mar 17, 2016, 11:56 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Vocoder-и за линукс?
« Отговор #26 -: Mar 17, 2016, 12:34 »
Може, C++ API-то не е много сложно, аз съм си правил собствени блокове. Има и документация и някакви скриптове дето ти създават първоначалния проект с наготово класовете, билд скриптовете и xml-ите дето описват блока, остава само да напишеш методите и да си дефинираш входовете и изходите в xml-ите.

А иначе, stream_to_vector e "децимиращ" блок, т.е произвежда по-малко item-и, отколкото му идват и оттам двата му параметъра единствено контролират съотношението "входни item-и/изходни вектори", в повечето случаи няма смисъл да е нещо различно от 1, освен ако предполагам не те мързи да делиш. Не знам какво трябва да се случи ако вход делено на изход дава остатък, вероятно последният генериран вектор ще се пад-ва с нулеви стойности, никога не съм пробвал.

P.S примерен OOT gnuradio блок: https://github.com/gat3way/gr-ale  - можеш да видиш xml-а в grc/ и самата имплементация е в lib/decode_ff_impl.cc

Между другото е мърлява работа набързо колкото да сработи, примерно няма писани тестове, общоприетата именна конвенция не е спазвана 100%, xml-а не е попълнен по всички правила и почти нищо не е документирано, но пък онагледява горе-долу как изглежда нов custom блок.
« Последна редакция: Mar 17, 2016, 12:40 от gat3way »
Активен

"Knowledge is power" - France is Bacon

Naka

  • Напреднали
  • *****
  • Публикации: 3395
    • Профил
Re: Vocoder-и за линукс?
« Отговор #27 -: Mar 17, 2016, 14:15 »
За отместването на вектора ето какво ми идва на ум --- обаче все още не е вярно -стрелката е червена. Трябва още накакъв блок () дето да може да обедини няколко вектора (4)  в един сигнал. четирите вектора така както са, се появяват в различни моменти от времето и би трябва да могат някакси да се обединят, да следват един след друг --- обаче не знам с какъв блок.
Активен

Perl - the only language that looks the same before and after encryption.

Naka

  • Напреднали
  • *****
  • Публикации: 3395
    • Профил
Re: Vocoder-и за линукс?
« Отговор #28 -: Mar 20, 2016, 17:27 »
Е това е много интересно. http://arss.sourceforge.net/examples.shtml

Xa :D пуснах Lena.mp3 от въпросната страница и на спектрографа наистина излезе самата Лена. :o
Трябва обаче да се пуска на 512 точково fft (защото височината на картинката е 256) (на чернобялата спектрограма от ГНУаудио това по абцисата е честота, въпреки че пише време.)

« Последна редакция: Mar 21, 2016, 19:28 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

ЗибелтБг

  • Напреднали
  • *****
  • Публикации: 1302
  • Distribution: Kubuntu 14.04 Realtime 3.12.0-rt2 JACK Audio Connection Kit
  • Window Manager: KDE 4.13.3 !!! VLC-настр-Аудио-SRC-Sinc function(best quality)
  • М
    • Профил
    • WWW
Re: Vocoder-и за линукс?
« Отговор #29 -: May 06, 2016, 16:36 »
Ето Ви как става ревербератор-много е забавно! ;D



« Последна редакция: May 08, 2016, 13:41 от ЗевсБг »
Активен

Кубунту  със Realtime Kernel дава звук, който няма нищо общо с другите дистрибуции...Линукс е за галеници на Боговете-не е за простосмъртни...при прекомпилиране-make menuconfig, Under ‘Processor type and features’, Scroll  down to ‘Timer Frequency’ and set this to 1,000Hz!!! за 3.12 иска lzop