# FPGA, CPLD, 74xx loģikas >  Audio kontrolieris

## rich

Pirms kāda laika uzrakstīju kodu un notestēju priekš audio kontroliera - Wm8731.
WM8731 - 24 bitu adc/dac var izvēlēties dažādas diskretizācijas frekvences, pat līdz 96khz
skaņu var regulēt gan ieejā, gan izejā (noderīga lieta, ja ieejā nāk pārāk spēcīgs signāls, var vājināt, lai nepārslogotu ADC),
balanss, ir baypass mode utt.
kopumā priekš spēlēšanās tīri jauks instrumentiņš  :: 
Kontrolieri var konfigurēt gan caur I2c gan SPI (bet DE1 development board WM8731 nokonfigurēts tā, ka atbalsta tikai I2C virknes protokolu), tamdēļ tika uzrakstits kods tieši priekš I2C  :: 

Tātad, kas ir izdarīts :
     1) I2C virknes interface;
     2) left justified interface, lai iegūtu ciparotos datus (no labā un kreisā kanāla) (WM8731 atbalsta arī right justified, DSP, I2S saskarnes);
     3) pārveidoju virknes ciparotos datus paralēlajos datos;
     3) tad bija uztaisīti filtri (megawizard) izvēlējos virknes FIr filtrus, jo tie mazāk resusrsu aizņem (manā gadījumā bija 96khz un 24 biti, tamdēļ filtra    frekvence bija jāuzceļ 96khz*25, lai filtrs spētu saformēt/apstrādāt datus);
     4) pedējais bija paralēlos datus atkal pārveidot virknes datos un barot iekšā DAC;
     5) ā un protams ir podziņas, ar kurām var mainīt skaļumu :P 
Kopējā bilde ir pārāk liela (no quartus block diagrammas viedokļa, tamdēļ nolēmu nelikt)

Pēc kāda mēneša varbūt sākšu upgrade savam projektam, pieliekot FFT
Doma ir izveidot raksturlīkni priekš FFT, kuru var mainīt, tad veic IFFT un no tās viņš rēķina filtra koeficientus un ielādē FIR filtrā, respektīvi filtram jābūt ar augstu kārtu, piemēram, sākot no 1024 kārtas, tad pie 96khz diskretizācijas frekvences spektra izšķirtspēja būs ap 92 Hz, ja nemaldos  :: 
tādā veidā būtu reāli izveidot vienu filtru (priekš viena kanāla), ar kura palīdzību varētu kontrolēt frekvences

kopumā kopējā bilde man ir skaidra, kas un kā jādara, bet ja ir ieteikumi lūdzu, svaiga kritika nenāk par ļaunu  :: 

Varbūt kādam noderēs
Ja ir kādi jautājumi mēģināšu atbildēt un izstāstīt, kā tas tika panākts

----------


## ansius

divi jautājumi:
*) aizture?
*) un fāzu nobīde?

----------


## Delfins

man tāds čista primitīvs jautājums - ko es varu izdarīt tik uberkrutu ar šo iekārtu? resp. jēga no tā pasākuma [praktiskā pielietojuma piemērs]?

----------


## rich

Ansius
  Aizture katram kanālam ir viena takts (96khz), to es parbaudīju, kad formēju datus no virknes uz paralelo un pēc tam no paralēla uz virknes
  Fāze nobīde ir, jo izmantoju battervorta filtrus


Delfins

  Emm tu jautā par to altera DE1 development board?
Ja tā, tad vari apgūt daudz maz FPGA valodas kā verilog un VHDL, ā un tur var ielikt nios proci sanāk ka vari rakstīt progas jau priekš proča
Šīs protams nav tas labākais boards, bet iesākumam atliektiem galiem pietiek, gan VGA (4 biti uz krāsu) moduli var uzrakstīt, gan MP3, kameru
tad, kad esi uz tā boarda daudz maz notestēji, vari veidot autonomu ierīci, kurai būs tikai tādas detaļas, kuras tu izmantoji savā projektā, manā gadījumā FPGa mikrene audio kodaks Wm8731 pogas, lcd nu kkaa ta  ::

----------


## ansius

fāzu nobīdes ir slikta lieta. ar to ari atšķiras draņķīga tehnika no labas. laba fāzes signāliem nečakarē.

par latency, nu neticu kad sāksies nopietna apstrāde tik mazu latency dabūsi. Krutākajai digitālajai skaņu pultij ir 3ms ne mazāk, lai gan vidēji tas svārstās no 5-7ms citiem ražotājiem. pie tam atceries ka tev gadījumā ja apstrādā vienu kanālu un otru nē, un pēc tam miksē kopā, tev jāņem vērā apstrādes laiks un jāaiztur arī otrs kanāls, savādāk radusies fāzu nobīde miksējot signālus radīs frekvenču līknes kropļojumus. Iepazīsties ar efektu Chorus, flanger un phaser darbības principiem, uz reiz paliks skaidrs.

----------


## rich

Cik man zināms cilvēks taču fāzes izmaiņas nedzird.
To problēmu varētu atrisināt pielietojot nevis battervorta, bet gan Beseļa filtru, ja nemaldos, tad tieši šim bija lineāra fāzes frekvenču raksturlīkne
runājot par to aizturi, ka biju teicis auzturi biju izmērījis tieši FPGA iekšienē, kad datus saformēju no virknes uz pralalēlo un otrādāk , gan jau, ka pašā čipā ir aizture
bet tieši, ka filtrā rodas aizture vajadzētu iedziļināties, jo izmantoju virknes fir filtrus tur ir augstāka clk frekvence, līdz ar to tas varētu paspēt laikā saformēt izejas signālus, žēl, ja nebūtu web edition versija, varētu caur signal tap analyzer paskatīties, nevajadzētu man te spriedelēt  :: 

  Vispār jau laba doma par to, ka varētu apstrādāt tikai vienu kanālu tad summēt utt (nebiju līdz tam aizdomājies) un klāt vēl pievienot kkādas fīčas, bet tas ar laiku, pagaidām būs jātiek skaidrībā ar FFT un IFFT, lai varētu uztaisīt ekvalaizeru

P.S. paldies par ideju un padomu  ::

----------


## ansius

> Cik man zināms cilvēks taču fāzes izmaiņas nedzird.


 Jā un nē. Cilvēks nedzird kā aizbīdās fāze, taču fāzes nobīdes kā jau teicu izraisa frekvenču līknes kropļojumus ja tiek jaukti signāli kopā (kas notiek kaut vai akustiski, ja cilvēks dzird abas tumbas un vienaa pusē piem. fāze bīdās kādam komponentam). Tā pat cilvēks uztver fāzu nobīdi vienādiem signāliem, jo pēc tā + frekvenču raksturlīknes mūsu smadzenes nosaka objekta atrašanās vietu. Tie kas nodarbojas ar apskaņošanu vai mūziku uz reiz sapratīs ka fāzu nobīdes ir ļoti riebīga lieta. lai arī lielākā daļa tautas tiešām nedzird.

----------


## rich

mkey ņemšu vērā, ja kko tādu veidošu!

----------


## Vikings

Katrā ziņā interesants projekts. Būtu interesanti apskatīt bdf faila screenshotu.  ::

----------


## rich

[attachment=2:18ratye4]serial_to_parallel.jpg[/attachment:18ratye4]

----------

