Sari la conținut
ELFORUM - Forumul electronistilor

Matlab


Vizitator sorinietc

Postări Recomandate

Vizitator sorinietc

Buna ziua, Vreau sa fac un sintetizator audio cu FPGA. Am scris codul pentru fiecare nota muzicala in parte in Matlab si vreau sa convertesc codul matlab in verilog sau vhdl. Am incercat direct din matlab si m-a batut.. nu reusesc.. imi tot cere ceva de functii.. Intreb aici poate stie cineva o metoda mai simpla, sau cineva care poate explica mai precis pasii care trebuiesc facuti. Multumesc !

Link spre comentariu
  • Răspunsuri 6
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • cirip

    1

  • belasajgo

    1

  • Ionut Pavel

    1

Top autori în acest subiect

Imagini postate

  • 2 săptămâni mai târziu...
Vizitator sorinietc

Liniile de cod de mai sus le-am scris in matlab cu scopul obtinerii unui sunet la frecventa de 329.6 Hertz, frecventa ce corespunde notei muzicale "Mi". Vreau sa il convertesc in cod verilog pentru a realiza o aplicatie cu fpga. Am scris codul in matlab pentru ca este mai usor si am vazut ca se poate converti. Intampin greutati deoarece pentru a-l converti in verilog, programul trebuie sa fie functie si nu script. Am urmat pasii pentru a realiza o functie cu acel program: function [y,Fs]=MI(T,f,a) %[parametrii de iesire : y,Fs] = numele functiei (Parametrii de intrare :T,f,a) asa imi arata modelul functieiFs = 8000;T =2;t = 0:(1/Fs):T;f = 329.6;a = 0.5;y = a*sin(2*pi*f*t); sound(y, Fs);end programul in matalab imi reda sunetul exact ca si in varianta de mai sus, dar ma atentioneaza in legatura cu parametrii de intrare. Am facut un print in care se vede atentionarea si cum ma sfatuiesc sa inlocuiesc. Inlocuiesc si cand optez pentru obtiunea de a verifica "Check Code Generation Readiness" se opreste la pasul 4 dupa cum se vede in cel de-al doilea print. La acelasi pas 4 si cu aceeasi mentiune se opreste si daca incerc "Check Code Generation Readiness" pentru primul program unde nici macar nu am functie, e script.

Link spre comentariu

Salut,

 

Intai si intai, uite ce am gasit in situl matlab:

http://www.mathworks.com/help/simulink/ ... eener.html

 

Desi nu am facut niciodata conversie din Matlab in Verilog, am oarece cunostinte despre ambele si nu cred ca orice functie matlab se poate transpune in cod verilog. Cred ca asta e problema. In situl de mai sus arata cum se depaneaza, dar daca functia nu poate fi convertita, asta e.

 

Pe de alta parte, functia sinus este extrem de costisitoare ptr a fi implementata in hardware. Cel mai simplu in cazul tau este sa folosesti o ecuatie recursiva de gradul 2 ptr oscilator. Nu ai nevoie decat de 2 inmultiri si o adunare. Pot sa iti dau ecuatia exacta, daca esti interesat.

 

Inca ceva. Scopul forumului este ca informatia sa fie publica. De aceea discutiia "la umbra" pe e-mail este nepotrivita. Aboneaza-te la subiect si vei primi un mail cand se mai posteaza ceva.

Link spre comentariu

Trebuie sa fie neaparat matlab->verilog?Tie de fapt iti trebuie un modul DDS (google verilog DDS, gasesti ceva pe fpga4fun).Daca folosesti ceva de pe la xilinx vezi ca iti genereaza ISE un DDS de toata frumuseatea, pe ce rezolutie si frecevente vrei tu. Eu l-am folosit la sinteza RF si functioneaza de minune.apropo, asta nu prea e functie e mai mult programul principalFunction [y,Fs]=MI(T,f,a) %[parametrii de iesire : y,Fs] = numele functiei (Parametrii de intrare :T,f,a) asa imi arata modelul functieiFs = 8000;T =2; //vine din afarat = 0:(1/Fs):T; f = 329.6; //vine din afaraa = 0.5; //vine din afaray = a*sin(2*pi*f*t);sound(y, Fs);end Variabilele vin din parametri de intrare, degeaba ai parametri de intrare daca ii schimbi in functie.Deci daca vrei sa modularizezi programul folosesti functii. Programul ar trebui sa arate cam asa:function y = MI(Fs,T,f,a) %functiile sunt module cu intrari si iesirit = 0:(1/Fs):T;y = a*sin(2*pi*f*t);end%mainFs = 8000;T =2; f = 329.6; a = 0.5;sound(MI(Fs,T,f,a), Fs);Oricum slabe sanse ca functia sa fie implementabila in verilog prin transformare directa (valori in floating point, variabile de tip vector, fpga-ul nu stie ce e aia sound(y,Fs))

Link spre comentariu
Vizitator sorinietc

Multumesc pentru sfaturi si pareri.Imi cer scuze pentru intentia de discutie la "umbra", nu a fost cu intentie. Cu matlabul am lasat-o moarta pana la urma..mi-am intrebat si o serie de profi si majoritatea mi-au spus ca nu stiu, ca nu au facut niciodata si alte lucruri de genul.Mi-am bagat un pic urechile in limbajul verilog si teoretic am facut cam tot ce trebuie. Am facut cu divizori de frecvente pana la o frecventa apropiata.Am facut si legaturile, mai trebuie sa implementez pe placuta, dar saptamana viitoare de acum cand o sa ajung la laborator. Stima!

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări