normal_post - SOS σε εργασια στο matlab. in Computers Αποστολέας Θέμα: SOS σε εργασια στο matlab.  (Αναγνώστηκε 2640 φορές)

0 μέλη και 1 επισκέπτης διαβάζουν αυτό το θέμα.

Αποσυνδεδεμένος Tablet

  • Συναλλαγές: (2)
  • Musician
  • *
  • avatar_14001 - SOS σε εργασια στο matlab. in Computers
  • Μηνύματα: 110
  • Karma: 0
xx - SOS σε εργασια στο matlab. in Computers
SOS σε εργασια στο matlab.
« στις: 16:34 - 04/02/10 »
Χερετω ολους.Εχω μια εργασια στο matlab και θα ηθελα τη βοηθεια καποιου που γνωριζει.
Σε 3 πραγματα.

1)Θελω να δημιουργησω μουσικο κομματι εχοντας μια συναρτηση tone.m  για τις μουσικες νοτες(μου δινεται παρτιτουρα) και μια adsr για να εφαρμοσω την περιβαλλουσα.
2)Εχω να δημιουρφησω ενα ψηφιακο υψηπερατο φίλτρο με συχνοτητα αποκοπης 500 Hz
και να φιλτράρω το παραπάνω μουσικό κομματι.
3)Θελω να εμφανισω την αποκριση συχνότητας του φίλτρου καθως και την γραφική παράσταση στο πεδιο συχνότητας του παραπανω κομματιου πριν και μετα το φιλτράρισμα.

Τα φωτα σας αν εχετε την καλοσύνη..Χανω το μαθημα...... :(

Linkback: http://www.noiz.gr/index.php?topic=174632.0
Gaping the mind..

Αποσυνδεδεμένος theoctapus

  • Συναλλαγές: (3)
  • Star
  • ****
  • index - SOS σε εργασια στο matlab. in Computers
  • Μηνύματα: 6466
  • Karma: 3
xx - SOS σε εργασια στο matlab. in Computers
Απ: SOS σε εργασια στο matlab.
« Απάντηση #1 στις: 16:51 - 04/02/10 »
Για check this out

http://www.mathworks.com/access/helpdesk/help/toolbox/filterdesign/ref/fdesign.highpass.html

Δυστυχώς έχω να πιάσω matlab τουλαχιστον μια τετραετία, οπότε...
Ο Αριστοτέλης γίνεται κτήμα του Γερμανού που τον μελετά, όχι του Έλληνα που τον αγνοεί

Αποσυνδεδεμένος Tablet

  • Συναλλαγές: (2)
  • Musician
  • *
  • avatar_14001 - SOS σε εργασια στο matlab. in Computers
  • Μηνύματα: 110
  • Karma: 0
xx - SOS σε εργασια στο matlab. in Computers
Απ: SOS σε εργασια στο matlab.
« Απάντηση #2 στις: 19:01 - 04/02/10 »
Kατι βοήθησε  βέβαια κάθε βοήθεια δεκτή

Αποσυνδεδεμένος harilatron

  • Moderator
  • Συναλλαγές: (2)
  • *****
  • avatar_2628 - SOS σε εργασια στο matlab. in Computers
  • Μηνύματα: 8973
  • Karma: 1
  • Φύλο: Άντρας
xx - SOS σε εργασια στο matlab. in Computers
Απ: SOS σε εργασια στο matlab.
« Απάντηση #3 στις: 19:21 - 04/02/10 »
1. H tone.m τι κάνει? Την έχετε? Τι ορίσματα παίρνει? (Ρίξτην ενα copy-paste... attachment   δεν μπορεί να μπει...)

2. Δες τα tutorial στο σχετικό toolbox (filter design νομίζω λέγεται).

3. Το πρώτο γίνεται αν ξέρεις το φίλτρο, το δεύτερο θα χρειαστείς τους FFT του κομματιού και του επεξεργασμένου.

Αποσυνδεδεμένος tanS

  • Συναλλαγές: (1)
  • Musician
  • *
  • Μηνύματα: 108
  • Karma: 0
xx - SOS σε εργασια στο matlab. in Computers
Απ: SOS σε εργασια στο matlab.
« Απάντηση #4 στις: 19:49 - 04/02/10 »
Χερετω ολους.Εχω μια εργασια στο matlab και θα ηθελα τη βοηθεια καποιου που γνωριζει.
Σε 3 πραγματα.

1)Θελω να δημιουργησω μουσικο κομματι εχοντας μια συναρτηση tone.m  για τις μουσικες νοτες(μου δινεται παρτιτουρα) και μια adsr για να εφαρμοσω την περιβαλλουσα.
2)Εχω να δημιουρφησω ενα ψηφιακο υψηπερατο φίλτρο με συχνοτητα αποκοπης 500 Hz
και να φιλτράρω το παραπάνω μουσικό κομματι.

Με ενδιαφέρει και εμένα το θέμα αυτό , γι αυτό αν είναι ευκολο δώσε τις συναρτήσεις στο function σου , να δω αν μπορω να σε βοηθήσω.

infectme247

  • Επισκέπτης
  • Συναλλαγές: (0)
xx - SOS σε εργασια στο matlab. in Computers
Απ: SOS σε εργασια στο matlab.
« Απάντηση #5 στις: 19:56 - 04/02/10 »
φίλε μου, θεωρητικά μπορώ να σε βοηθήσω και στα 3 που ρωτάς, αλλά εσύ μάλλον θέλεις κώδικα, και εγώ δεν έχω ιδέα από matlab. Μόνο mathematica.
Παλιά την είχα ψάξει πολύ με realtime ψηφιακά φίλτρα, αλλά δεν θυμάμαι και πολλά πλέον. Όλο και θα έχω κάπου κάτι ξεχασμένο, θα ψάξω. Είχα πολύ υλικό στα favourites αλλά μετά το τελευταίο format αγνοείται η τύχη τους!! :-/

1. Τι ακριβώς θέλεις από την tone.m; Απλό ημίτονο θα βγάζει? Η adsr απλά θα δίνει έναν συντελεστή ο οποιός θα πολλαπλασιάζεται με το output της tone.m?

2. Το φίλτρο που θέλεις θα έχει τη γενική μορφή y[n] = a*x[n] + b*x[n-1], όπου y θα είναι τα φιλτραρισμένα samples, x τα source samples, και a,b σταθερές που καθορίζουν την απόκριση του φίλτρου. Θα πρέπει να κάνεις μια λούπα ίση με τον αριθμό των samples, όπου θα γράφεις στην θέση "i" της εξόδου y[ i ], την τιμή a*x[ i ] + b*x[i-1].

3. Η συχνοτική απόκριση δίνεται από έτοιμο τύπο για αυτή τη μορφή φίλτρου, μπορείς να την κάνεις plot κατευθείαν. Για την συχνοτική παράσταση του κομματιού -όπως είπε και harilatron- θα χρειαστείς κάποιον αλγόριθμο fourier (πχ FFT)
 

Αποσυνδεδεμένος Tablet

  • Συναλλαγές: (2)
  • Musician
  • *
  • avatar_14001 - SOS σε εργασια στο matlab. in Computers
  • Μηνύματα: 110
  • Karma: 0
xx - SOS σε εργασια στο matlab. in Computers
Απ: SOS σε εργασια στο matlab.
« Απάντηση #6 στις: 20:32 - 04/02/10 »
Παιδια πραγματικα με σωνετε ολοι κανω attachment την εργασια.
Eυχαριστω και παλι

infectme247

  • Επισκέπτης
  • Συναλλαγές: (0)
xx - SOS σε εργασια στο matlab. in Computers
Απ: SOS σε εργασια στο matlab.
« Απάντηση #7 στις: 20:33 - 04/02/10 »
Βρήκα κάτι που είχα φτιάξει, είναι σε mathematica. Δείχνει πώς μπορείς να πάρεις την συχνοτική απόκριση και την απόκριση φάσης, για αυτόν τον τύπο φίλτρου.

Κώδικας: [Επιλογή]
a = .75;
b = .25;
T = 1./44100;
Gain[ω_] := (a + b)^2 - 4 a b Sin[ω T/2] + (a^2 - b^2) Sin[ω T]
Phase[ω_] := ArcTan[(b Sin[ω T])/(a + b Cos[ω T])]


gn = {};
pf = {};
For[f = 0, f < 22050, f += 20,
  pg = {f, Gain[2 π f]};
  pph = {f, Phase[2 π f]};
  AppendTo[gn, pg];
  AppendTo[pf, pph];
  ];


ListLinePlot[gn]
ListLinePlot[pf]

Βέβαια, αυτό είναι lowpass φίλτρο. Νομίζω ότι το high pass προκύπτει αν αντικαταστήσεις το ω με 1/ω ή 1-ω στoν τύπο του gain και του phase, αλλά δεν είμαι σίγουρος. Η πρώτη εικόνα είναι η απόκριση συχνοτήτων, και η δεύτερη η απόκριση φάσης. Αν θες διπλάσια db/oct, εφαρμόζεις ξανά το φίλτρο στην έξοδο.

Δες επίσης το http://en.wikipedia.org/wiki/High-pass_filter, έχει έτοιμο παράδειγμα highpass φίλτρου.

Αποσυνδεδεμένος Tablet

  • Συναλλαγές: (2)
  • Musician
  • *
  • avatar_14001 - SOS σε εργασια στο matlab. in Computers
  • Μηνύματα: 110
  • Karma: 0
xx - SOS σε εργασια στο matlab. in Computers
Απ: SOS σε εργασια στο matlab.
« Απάντηση #8 στις: 14:13 - 05/02/10 »
Oποιος βρει ακρη με την εργασια ας μου στειλει κανα pm.
:)

infectme247

  • Επισκέπτης
  • Συναλλαγές: (0)
xx - SOS σε εργασια στο matlab. in Computers
Απ: SOS σε εργασια στο matlab.
« Απάντηση #9 στις: 20:00 - 05/02/10 »
Oποιος βρει ακρη με την εργασια ας μου στειλει κανα pm.
:)

Έριξα μια ματιά στα αρχεία που ανέβασες, ανοίγουν και με απλό text editor. Αν και δεν ξέρω πως χρησιμοποιούνται μέσα απ'το interface του matlab, αλλά χονδρικά αυτό είναι το τι κάνουν...

Το tone.m
Κώδικας: [Επιλογή]
// Η συνάρτηση παίρνει δύο τιμές, έναν ακέραιο από 0 ως 87 που αντιστοιχεί στο πλήκτρο της νότας στο κλαβιέ (η A3 είναι το 49) και τη συνολική διάρκεια για τη νότα
function note=tone(key,dur)
fs=20000;  // εδώ ορίζει την δειγματοληψία σε samples ανά second
t=0:1/fs:dur;  // δημιουργεί μια λίστα με τις χρονικές τιμές σε δευτερόλεπτα για κάθε sample

// υπολογίζει την συχνότητα της νότας με βάση την A3 (440Hz) Ο τύπος προκύπτει έτσι, επειδή η συχνότητα κάθε νότας πρέπει να πολλαπλασιαστεί με 2^(1/12) για να πάρεις την επόμενη. (Αν ανέβεις μια οκτάβα, η συχνότητα γίνεται διπλάσια)
fkey=440*2^((key-49)/12); 

//επιστρέφει μια λίστα τιμών, που είναι ο ήχος της νότας με συγκεκριμένη διάρκεια.
note=sin(2*pi*fkey*t);



Το adsr.m
Κώδικας: [Επιλογή]
// ζητάει μέσω ενός dialog τις χρονικές τιμές Tattack, Tdecay και Trelease και την ένταση του Asustain
prompt={'give the ATTACK duration:','give the DECAY duration:','give the SUSTAIN amplitude:','Give the RELEASE duration:'};
name='Inputs for the ADSR';
numlines=1;
%defaultansewr={};
answer=inputdlg(prompt,name,numlines);

Tattack=str2num(answer{1});
Tdecay=str2num(answer{2});
Asustain=str2num(answer{3});
Trelease=str2num(answer{4});

// Δημιουργεί λίστες με τις χρονικές στιγμές που αντιστοιχούν σε κάθε τμήμα της περιβάλλουσας. H πρώτη λίστα 't' καλύπτει όλη την διάρκεια της νότας, η 't1' είναι οι διαδοχικές χρονικές στιγμές που αντιστοιχούν στο τμήμα attack, κτλ.
t = 0:(1/fs):dur;
t1 = 0:(1/fs):((dur*Tattack)-(1/fs));
t2=(dur*Tattack):(1/fs):((dur*Tattack+dur*Tdecay)-(1/fs));
t3=(dur*Tattack+dur*Tdecay):(1/fs):((dur-dur*Trelease)-(1/fs));
t4=(dur-dur*Trelease):(1/fs):dur;


// Δημιουργεί λίστες που είναι οι συντελεστές για την ένταση της νότας σε κάθε φάση της περιβάλλουσας. Πχ. στο attack η λίστα έχει τιμές που αυξάνουν διαδοχικά από 0 (silence) σε πλήρη ένταση (1), στο decay πέφτουν από 1 ως Αsustain, μετά μένουν σταθερά στην τιμή Asustain και μετά πέφτουν σταδιακά στο 0.
attack =1/(Tattack*dur)*t1;
decay =1+((Asustain-1)/(Tdecay*dur))*(t2-Tattack*dur);
sustain(1:(length(t3)))=Asustain;
release = Asustain-(Asustain/(dur-(dur-dur*Trelease)))*(t4-(dur-dur*Trelease));

// Ενώνει τους συντελεστές για την περιβάλλουσα σε μία λίστα
ADSR=[attack, decay, sustain, release];

// σχεδιάζει στον άξονα x τις χρονικές στιγμές για όλη τη διάρκεια της περιβάλλουσας και στον y τις αντίστοιχες εντάσεις της περιβάλλουσας.
figure, plot(t,ADSR)

// επιστρέφει τους συντελεστές για την ένταση
A=ADSR;


Εσύ πρέπει να δημιουργήσεις μία άδεια λίστα με θέσεις όσα τα samples για όλο το κομμάτι (αυτό θα εξαρτηθεί από το επιθυμητό tempo και αριθμό μέτρων του κομματιού) και να γράφεις σε κατάλληλες θέσεις* τις εξόδους της tone.m και adsr πολλαπλασιασμένες στοιχείο προς στοιχείο.

*Θα πρέπει να μπορείς να αντιστοιχήσεις τον μουσικό χρόνο για κάποια νότα από METΡΑ:BEAT:TETARTA TOY BEAT σε δευτερόλεπτα, και ακολούθως σε αντίστοιχο αριθμό sample. Για χρόνο 4/4 μπορείς να χρησιμοποιήσεις την έκφραση: αριθμός sample = int( fs*( 60*(4*(METRA-1) + (BEAT-1) + "TETARTA TOY BEAT"/4 ) / BPM ) )
Σε αυτόν τον αριθμό sample θα πρέπει να γράψεις την έξοδο της tone πολλαπλασιασμένη με την έξοδο της adsr με τα κατάλληλα δεδομένα για κάθε νότα.

Έτσι δημιουργείς το κομμάτι. Μετά πρέπει να υλοποιήσεις το φίλτρο και σε μια loop να γράφεις sample προς sample την φιλτραρισμένη έξοδο, σύμφωνα με τον τρόπο που ανέφερα και στο προηγούμενο ποστ. Oι σταθερές a,b θα καθορίζουν την συχνότητα αποκοπής του φίλτρου και ΘΑ ΠΡΕΠΕΙ ΝΑ ΔΙΑΒΑΣΕΙΣ ΣΧΕΤΙΚΑ ώστε να δεις πώς προκύπτουν. Είναι το άλφα και το ωμέγα του μαθήματος. Και να θυμόμουν πώς βγαίνουν  ;D δεν θα σου'λεγα...

Την συχνοτική απόκριση σου έδειξα πώς μπορείς να τη βρεις. Είναι ουσιαστικά το μέτρο της transfer function του φίλτρου σου. Για το συχνοτικό φάσμα του 'unfiltered' κομματιού, είμαι 100% σίγουρος ότι η matlab θα έχει κάποια υλοποίηση FFT. Για το φιλτραρισμένο συχνοτικό φάσμα, είτε κάνεις πάλι FFT (δηλαδή στο φιλτραρισμένο κομμάτι), είτε χρησιμοποιείς το θεώρημα της ενέλιξης που λέει ότι το φάσμα του φιλτραρισμένου σήματος θα είναι το γινόμενο του 'unfiltered' σήματος με το φάσμα του συχνοτικής απόκρισης του φίλτρου.


Δεν νομίζω να μπορώ να σε βοηθήσω περισσότερο. Καλή επιτυχία.
btw, στο doc αρχείο έλεγε ότι η προθεσμία ήταν αρχές γενάρη... ελπίζω να μην ισχύει



Share via facebook Share via linkedin Share via stumble Share via twitter

xx
Eικονα κ ηχος - επεξεργασια ηχου σε βιντεο

Ξεκίνησε από LiveFast_DieYoung

5 Απαντήσεις
3566 Εμφανίσεις
Τελευταίο μήνυμα 20:31 - 16/01/09
από LiveFast_DieYoung
xx
θερμοκρασια ssd

Ξεκίνησε από BILLYDELUXE

7 Απαντήσεις
1293 Εμφανίσεις
Τελευταίο μήνυμα 16:38 - 11/05/14
από michaeltsag
important
Λούπες με παραδοσιακά όργανα και ρυθμούς

Ξεκίνησε από rokman

34 Απαντήσεις
10368 Εμφανίσεις
Τελευταίο μήνυμα 11:38 - 20/12/09
από black_sheep
xx
προγραμμα προστασιας απο ιους

Ξεκίνησε από takis

28 Απαντήσεις
5090 Εμφανίσεις
Τελευταίο μήνυμα 17:29 - 03/06/06
από jumerang
 

Fresh

Σκεφτομαι να επενδυσω σε βυνιλιο και ηχεία από Superfunk
11:24 - 26/09/16

DOMINION | Saturday 01.10 | Death Disco από FatherDamian
01:59 - 26/09/16

COOL BRITANNIA | Friday 30.09 | Death Disco από FatherDamian
01:58 - 26/09/16

Τι μουσική ακούτε τώρα; VI από fusiongtr
01:48 - 26/09/16

Mistful - Rise Against Your Heart από vegakillerofasaint
00:00 - 26/09/16

Smart

Live

29 Sep 2016

30 Sep 2016

01 Oct 2016

02 Oct 2016

Noizbox

Αρχείο
Powered by EzPortal