Fórum témák

» Több friss téma
Fórum » DSP - Miértek, hogyanok
Lapozás: OK   3 / 3
(#) gtk válasza Szabi1 hozzászólására (») Márc 4, 2016 /
 
Jo hogy nyitottad ezt a temat, de a kerdes nem annyira DSP.
(#) Szabi1 válasza gtk hozzászólására (») Márc 4, 2016 /
 
Szétnéztem online és rájöttem, hogy olcsóbb volna megvenni a miniDSP-t kit-et, összekötni raspberryvel, beleszerelni szépen 1U rack-be, felszerelni szépen neutrik XLR csatikkal és hálózatról vezérelhető, sőt még van 3 USB periféria.
(#) gtk válasza Szabi1 hozzászólására (») Márc 4, 2016 /
 
Igen, van amit mar nem erdemes kitalalni, csak megismerni
(#) Szabi1 hozzászólása Jún 8, 2016 /
 
Sziasztok! Van egy ilyen DSP kit-em: Bővebben: Link Az volna a kérdésem, hogy hogyan tudnák vele "beszélgetni" SigmaDSP szoftwerrel (ez a DSP kit az ADAU1701 ic-n alapul, azt hiszem I2C csatlakozó van neki, de a programnak valami USBi interfész kellene)?
(#) Szabi1 válasza Szabi1 hozzászólására (») Jún 8, 2016 /
 
Feltétlen meg kell vásárolni ezt a kütyüt? Bővebben: Link Vagy elég volna egy sima I2C to USB adapter?
(#) gtk hozzászólása Márc 7, 2017 /
 
Sziasztok,
Ehhez a DSP-hez milyen fordito letezik ? Valahogy nem akadok ra meg a TI oldalan sem.
TMS320C6726
(#) Szabi1 hozzászólása Márc 25, 2017 /
 
Sziasztok! Adott egy ADAU1701 DSP, és az volna a kérdésem hogy MP9 lábra (AUX ADC0) rákötöttem egy potméter középső lábát, másik kettőt az 5V és GND-be, de ha a programba beállítom hogy hangerő szabályzó legyen, akkor teljes kitekerésnél max -12dB jelszint jön ki. Próbáltam 5V helyett 3V-ot úgy nem ad ki semmit. A firmware-t simgastudioval írtam az eepromba, ott volt egy olyan lehetőség, hogy volume control --> ext. gain control, a slew rate-et 12 nek hagytam, kijelöltem a GPIO-bol az ADC0-át és hozzácsatoltam a slew rate blokk-hoz
A hozzászólás módosítva: Márc 25, 2017
(#) Rober_4 válasza Szabi1 hozzászólására (») Aug 1, 2017 /
 
Sikerült megoldanod? Kíváncsi lennék mi lett belőle...
(#) Szabi1 válasza Rober_4 hozzászólására (») Aug 3, 2017 /
 
Igen, A poti 0-5V ot szabályoz a GPIO lábra, a programban pedig a beolvasott aux adc értéket megszoroztam egy konstansal, és az az érték megyen az ext. gain control blokkba. A konstans értékét úgy célszerű megválasztani, hogy generálsz egy szinusz jelet, átviszed a gain control blokkon, a végén meg jelszintet mérsz. Ha a poti max álláson van és a kimeneti gain 0dB és nem hallgató torzítás, nem megy 0dB felé az erősítés akkor jó a konstans érték
(#) Szabi1 hozzászólása Dec 21, 2018 /
 
Sziasztok! Elsősorban elnézést szeretnék kérni, de a DSP topik egyszerűen kihalt, s most nagyon sűrgősen kellene válasz.
Szóval Adott egy ilyen KIT Bővebben: Link sajnos nem nagyon értem a nyelvet ahogy az íródott. A kithez még kötöttem egy opampokból álló áramkört, hogy balanced in és out legyen XLR csatin, a fő DSP modulon a kvarcot kicseréltem 12.288Mhz-re, hogy működjön 48khz-en a mintavételi frekvencia. Az egész egy 1U dobozban foglal el helyet, két darab crown macrotech végfokot hajt.
Most eljött a pillanat, hogy szeretném használni a SPDIF In-t. Van benne egy WM8804 ic, ami a SPDIF jelet alakítaná I2S-re, a DSP-n van I2S in és out is.
A master clock-ot mindenképp az a WM8804 ic kell adja amelyik az I2S in-re van kötve, és ha ő adja akkor működhet 48khz mintavételi frekvenciával a DAC? A spdif bemenő jelet egy PCM2704 usb kit szolgáltatná. Mi lenne a helyes jumper konfiguráció a SPDIF kártyán?
(#) Rober_4 hozzászólása Ápr 25, 2021 /
 
Sziasztok a vs1053-al foglalkozott-e már valaki?
Van egy ilyen lapkám:
Vs1053
Összekötöttem egy Arduino Nano-val.
Szépen üzemel is, de lenne pár kérdésem ezzel kapcsolatban:
-A belső frekvenciáját gondolom a kvarc adja meg, ami a lapkán van. Az, ha minden igaz 12MHz-es.
A gyári adatlap szerint, viszont alacsony sebességen, a MIDI polifónia nagyon gyér (2-3 hang), illetve a MIDI reverb effekt sem indul be.
Ugye az SPI frekvenciáját tudom változtatni, de ha jól gondolom, az az Arduino frekvenciájából osztódik (16MHz-nél: SPI_CLOCK_DIV16 azaz 1MHz), és nem hinném, hogy köze lenne a vs órajeléhez, meg ugye annak csak a kommunikációhoz van köze.
Másrészt a vs regisztereit tudom írni, az arduinos példányon keresztül, erre egy példa:
  1. VSWriteRegister(addr, val >> 8, val & 0xFF);

Ezzel esetleg érek valamit?
Ugye a dokumentációban a csatolt linken a 37. oldalaon, beállítgat bizonyos regisztereket a ]frekvencia függvényében...
Minden segítség jól jön, köszönöm!

vs1053]Bővebben: Link
A hozzászólás módosítva: Ápr 27, 2021
Moderátor által szerkesztve
(#) Rober_4 válasza Rober_4 hozzászólására (») Ápr 25, 2021 /
 
Tehát ezt szeretném valahogy megvalósítani: (42. oldal alja)
"Example: If SCICLOCKF is 0x9BE8, SCMULT = 4, SCADD = 3 and SCFREQ = 0x3E8 = 1000.This means that XTALI =1000×4000+8000000= 12 MHz. The clock multiplier is set to3.5×XTALI=42MHz, and the maximum allowed multiplier that the firmware may automatically choose to use is(3.5 + 2.0)×XTALI= 66MHz."
(#) Rober_4 válasza Rober_4 hozzászólására (») Ápr 25, 2021 /
 
Valami ilyesmit szeretnék megvalósítani:
(De lehet ez is csak az SPI frekvenciáját változtatja meg...)
A hozzászólás módosítva: Ápr 25, 2021
(#) Rober_4 válasza Rober_4 hozzászólására (») Ápr 26, 2021 /
 
Közben én egy két dologgal kísérleteztem ma. Ugye alapból a vs1053-hoz lehet két függvénytárat letölteni pl. van egy 1053sdfat függvénytár Arduino-ra, illetve az Adafruit-os. Körülbelül mindkettő ugyanazt csinálja, hogy mp3-lejátszót csinál az eszközből, ami nekem nem nagyon jön be.
Ezen az oldalon egy SPI-os midiGM szintetizátort csinálnak belőle, ami nekem nagyon megtetszett. Illetve nem használ külső függvénytárat! Alapból a szabványos SPI-os kommunikációt használja, és a VSWriteRegister, és a VSLoadUserCode függvényei a hardverspecifikusak.
Ugye a VSWriteRegister-rel tudom írni az adatlapon bemutatott regisztereket. Nekem sikerült is a VOL(0xB) és aBASS(0x2) regisztereket elérnem. A VOL regiszterben a két oldal hangerejét lehet változtatni 0-FF-ig. A BASS regiszter elvileg a magas és mély hangszín kiemelésére szolgál. 4-4-4-4 biten megadva az értékeket. (frekvencia, level)Ezek teljesen jól működnek nekem eddig. A többi regiszternél viszont nem egyszerű az írás, mivel sokszor csak egy adott biten tárolnak információkat, és ahhoz, hogy azt megváltoztassam, előbb ki kell olvasnom az adott regiszter értékét, és azt vagyolni az én értékemmel. Ehhez pedig nem ált rendelkezésemre VSReadRegister függvény.
Most a write és az adatlap alapján ezt sikerült összehoznom, most tesztelem:
Ez volt a write:
  1. void VSWriteRegister(unsigned char addressbyte, unsigned char highbyte, unsigned char lowbyte) {
  2.   while (!digitalRead(VS_DREQ)) ; //Wait for DREQ to go high indicating IC is available
  3.   digitalWrite(VS_XCS, LOW); //Select control
  4.   //SCI consists of instruction byte, address byte, and 16-bit data word.
  5.   SPI.transfer(VS_WRITE_COMMAND); //Write instruction
  6.   SPI.transfer(addressbyte);
  7.   SPI.transfer(highbyte);
  8.   SPI.transfer(lowbyte);
  9.   while (!digitalRead(VS_DREQ)) ; //Wait for DREQ to go high indicating command is complete
  10.   digitalWrite(VS_XCS, HIGH); //Deselect Control
  11. }

És ez lenne a read:
  1. unsigned int VSReadregister(unsigned char reg)
  2. {
  3.   unsigned char inHigh;
  4.   unsigned char inLow;
  5.    while (!digitalRead(VS_DREQ)) ; //Wait for DREQ to go high indicating IC is available
  6.   digitalWrite(VS_XCS, LOW); //Select control
  7.   //SCI consists of instruction byte, address byte, and 16-bit data word.
  8.   SPI.transfer(VS_READ_COMMAND); //Read instruction
  9.   SPI.transfer(reg);
  10.   inHigh=SPI.transfer(0xff);
  11.   inLow=SPI.transfer(0xff);
  12.   while (!digitalRead(VS_DREQ)) ; //Wait for DREQ to go high indicating command is complete
  13.   digitalWrite(VS_XCS, HIGH); //Deselect Control
  14.   return (unsigned short)(inHigh<<8)+inLow;
  15. }

Kis különbség van a típusokban. Ugye a write egy alsó és egy felső bájtot kap meg. A read viszont egy int típusú adattal tér vissza. Mivel 16bites regiszterekről van szó, ezért ez megfelelőnek tűnik így.
(#) Rober_4 válasza Rober_4 hozzászólására (») Ápr 26, 2021 /
 
Úgy néz ki, hogy működik a read, bár 1-2 teszten vagyok csak túl:
Ugye kiolvastam az SCIMODE regiszter értékét és ezt kaptam:
B0100100000000000
Ugye az adatlap szerint, a 14-es és a 11-es bit van bekapcsolva, tehát native SPI módban van az eszköz, illetve a line csatlakozó az aktív.
Megpróbáltam bebillenteni a 15. bitet, mely a 24..26 MHz-es órajelnél kell beállítani, és lefeleződött a kimeneti mintavételi frekvenciám, egész űrhangja lett az eszköznek...
A hozzászólás módosítva: Ápr 26, 2021
(#) Rober_4 válasza Rober_4 hozzászólására (») Ápr 27, 2021 /
 
Közben lehet működik a sebesség többszörözése.
Ha minden igaz sikerült megértenem az adatlapon írtakat, és beállítanom nagyobb frekvenciára. Az egy sáv polifóniája nem változott, az ugyanúgy 1-2-3 hang. Viszont, ha több csatorna szól egyszerre, nem csuklik meg a hangszer hangja. A SCICLOCKF regisztert az adatlap ajánlása szerint állítottam be, amit már fentebb bemásoltam:hivatkozás
A következő kódot küldtem el a regiszternek.

  1. VSWriteRegister(0x03, B01001000,B01000000);
  2. Serial.println("regiszterművelet");
  3. int data=VSReadregister(0x3);
  4. Serial.println(data);

A kiolvasás visszaadta a beállított értéket. A változás egyébként nem annyira szembetűnő a működésen, de nem csuklik meg a MIDI dob egyidejű lejátszáskor, ha másik MIDI csatorna hangszerén játszom.
A hozzászólás módosítva: Ápr 27, 2021
(#) Rober_4 válasza Rober_4 hozzászólására (») Ápr 28, 2021 /
 
Annyi megjegyzés még, hogy egy picit elcsúszott a hangmagasságom a MIDI hangszíneknél. Valószínűleg a SCFREQ-nál ezért lehet 10biten szabályozni a frekvenciát, hogy finomhangolható legyen a valódi mintavételezés időzítése.
Kezd a dolog számomra egyre érdekesebbé válni, és megtetszeni, és remélem jól értelmezem az adatlapot...
Ami viszont elengedhetetlennek látszik,hogy valóban ki tudjuk használni ezt a VS1053-as DSP-ét, hogy az SCI wram-ot elérjük. Ugye van egy SCIWramaddress regiszterem. Ha ide beírok egy címet, akkor elvileg tudom írni és olvasni, a hozzá tartozó adatot. Na itt elérhetővé válnának a speciális funkciók,mint ami engem érdekel, a MIDI reverb, illetve akár kész program is feltölthető lehet. Természetesen a dsp a saját fejlesztő környezetével is programozható(VLSI Solution), de akkor meg kell venni egy fejlesztőhardvert, ami ugye pénzbe kerül, ami nincs...
(#) Skori hozzászólása Szept 15, 2021 /
 
Egy barátom adau1701-et használ, i2c buszon vezérli. Hangerő állításkor (a hangerő paraméter átküldésekor) időnként hatalmasat pattan a hang. Létezik erre valamilyen megoldás? Mi okozhat ilyet?
(#) Rober_4 válasza Skori hozzászólására (») Okt 18, 2021 /
 
Ugye tudni kellene, hogy melyik regiszternek milyen adatokat küld hangerőállításkor.
Lehet nem mindegyik regiszter 0-127-ig állítható, hanem mondjuk 0-100-ig, vagy -27-100-ig stb. Mert ugye ugyanannak a regiszternek, lehetnek egyes bitjei más-más funkciókért felelősek. Ezt az adatlapból ki lehet elvileg nézni. Ha lib-et használ hozzá, akkor ennek jónak kellene lennie, de akkor is tesztelném a helyébe, hogy melyik konkrét értéknél van a pattanás. Tehát első hallásra, nem annyi bites a küldött adat, mint amennyit a regiszter szeretne...
Honnan tudott 1701-est szerezni? Irigykedem!
A hozzászólás módosítva: Okt 18, 2021
(#) Rober_4 válasza Rober_4 hozzászólására (») Okt 18, 2021 /
 
Esetleg a bal-jobb csatorna kavar be, mint külön regiszterérték... Az adatlapból ki kellene, hogy derüljenek a volume regiszter paraméterei...
Másrészt az i2c-nek módosítható a frekvenciája, érdemes lassúbb értékekkel is kísérleteznie...
A hozzászólás módosítva: Okt 18, 2021
(#) tothtechnika2 válasza Skori hozzászólására (») Okt 23, 2021 /
 
Az a kérdés, hogy ilyenkor hol van az SdrLab barátunk, mint a dsp-k fő szakértője?
(#) ZsoltyFM válasza tothtechnika2 hozzászólására (») Ápr 28, 2022 /
 
Üdv Mindenki, és Gábor! :Đ

Hosszú ideje már, hogy nem igazán ténykedek ezen a fórumon, és más fórumokon sem igazán vagyok aktív tag, inkább csak esetenként megfigyelő.
Nemrégiben viszont ráérős pillanatomban, és kissé nosztalgikus hangulatomban eszembejutottak azok az időszak amikor elég aktivan zajlottak az eszmecserék Gáborral, és akkor már miért is ne kérdezzem meg tőle, hogy mi újság vele, és mivel is foglalatoskodik mostanság. Most ennek az lett a következménye, hogy bogarat ültetett a fülembe ezekkel a DSP-kkel, és be is rendeltem kínából két modult, egy ADAU1404, és ADAU1452-vel szereltet.
Olvastam viszont valahol itt is, és Gábor is említette, hogy a DSP-ben lévő értékek változtatásakor kattanás lép fel, ami talán érthető is, ha hirtelen nagy mértékű változás történik a feldolgozásban. Ha nem írok hülyeséget, akkor erre olvastam valami olyasféle megoldást, hogy minden változtatás alkalmával, az aktuális munkaértékhez képes kis lépésekben ciklikusan kel az értékek változtatását átküldeni, míg nem elérjük a tényleges célértéket. Tehát az időben elnyújtott, és kissebb mértékű változás elvileg nem okoz durva kattanást. Mivel még nem rendelkezem ilyen modullal, így nem volt alkalmam kipróbálni.
Programozó gyanánt egy ESP-t próbálok majd ki.

Ezt sikeresen feltöltöttem egy ESP32 modulra, és kapcsolódni is tudok rá de nem tudom, hogy működik e: ESP TCPi
A hozzászólás módosítva: Ápr 28, 2022
(#) Rober_4 válasza ZsoltyFM hozzászólására (») Máj 4, 2022 /
 
Ha van processzorteljesítmény, vagy eltárolva 1-2 görbetípus, akkor én inkább görbével közelíteném! Illetve a legjobb megoldás, ha megfelelően nagy felbontásban tudod a dsp értékeit változtatni, ezt kellene elérni!
Fejlesztgetek szabadidőmben egy fm szintetizátort, és amikor 1-1 hangerőállítást lineáris egyenessel próbáltam kellően finoman megvalósítani, azzal azt értem el, hogy a dolog nem 1 nagyot, hanem két kicsit roppant, ami akusztikailag nem bizonyult jobbnak, hiába nézett ki jobban a görbe.
Egyébként ha létezik gyors algoritmus ezeknek a zenei tüskéknek az eltávolítására utólag, az engem is érdekel...
(#) Rober_4 hozzászólása Jan 15, 2023 /
 
Sziasztok! Implementáltam ezt a kódot ESP32-re. Egész számos audió bufferem van. Szépen működik! Változtatható frekvenciával és jósági tényezővel. Hátha valakinek jól jön. A bufferbe változó az aktuális bufferértéket tartalmazza az adott minta ciklus alatt. Ez az egy dolog, ami egy global változó, minden mást intéz a függvény, ha meghívjuk a parametereq függvényt! természetesen valamikor előtte, amikor még ráért az eszköz az eqkiszámol függvényt illik meghívni, de természetesen ezt nem kell minden mintánál!

  1. //init variable
  2. float Fs = 48000;
  3. float Pi = 3.141592;
  4. float f0 = 100;
  5. float Q = 10;
  6.  
  7. //parametric eq init:
  8. void eqkiszamol() {
  9.   w0 = 2 * Pi * f0 / Fs;
  10.   alpha = sin(w0) / (2 * Q);
  11.   a0 = (1 + alpha) * 100 ;
  12.   a1 = (-2 * cos(w0)) * 100;
  13.   a2 = (1 - alpha) * 100;
  14.   b0 = ((1 + cos(w0)) / 2) * 100;
  15.   b1 = (-(1 + cos(w0))) * 100;
  16.   b2 = ((1 + cos(w0)) / 2) * 100;
  17. }
  18.  
  19. //parametric eq counts actual value:
  20. int16_t PrevSample[3];
  21. int16_t lastbuffer;
  22. int16_t lastlastbuffer;
  23.  
  24. //parametric eq function
  25. void parametereq() {
  26.   PrevSample[2] = PrevSample[1];
  27.   PrevSample[1] = PrevSample[0];
  28.   PrevSample[0] = bufferbe;
  29.   bufferbe = ( b0 / a0 * PrevSample[0]) +
  30.              (b1 / a0 * PrevSample[1]) +
  31.              (b2 / a0 * PrevSample[2]) -
  32.              (a1 / a0 * lastbuffer) -
  33.              (a2 / a0 * lastlastbuffer);
  34.   lastlastbuffer = lastbuffer;
  35.   lastbuffer = bufferbe;
  36. }
A hozzászólás módosítva: Jan 15, 2023
Következő: »»   3 / 3
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem