LU-DSP-b

From DiLab
Revision as of 10:17, 16 June 2022 by Leo (talk | contribs) (MD_Synth)
Jump to: navigation, search

Īssaites: Kalendārs | Uzdevumi | Resursi | Šodiena: 28.03.24 : Rītdiena: 29.03.24 (ja ir lekcija)

Digitālā (ciparu) signālu apstrāde

LU DF bakalauru kurss.

  • Pasniedzējs Leo Seļāvo [vards.uzvards @gmail.com].

Mērķi

  • Iepazīties ar Digitālās Signālu Apstrādes pielietojumiem un principiem. Praktiskas darbības ar signālu apstrādi. Sistēmu Matlab un Octave iepazīšana un programmēšana tajās.

Motivācija

"Think how electronics has changed the world in the last 50 years. DSP will have the same role over the next 50 years. Learn it or be left behind!" - Steve Smith, autors "DSP Guide"

Mājas darbi un citi iesniedzamie darbi

  • Iesniegšanas termiņa laiks ir attiecīgajā dienā līdz dienas beigām, ja netiek noteikts cits termiņš.
  • Ja darbs tiek iesniegts ar novēlošanos, rezultāts tiek samazināts par 50%. Ja darbs iesniegts vairāk kā nedēļu pēc termiņa, pasniedzējs darbu var nepieņemt.
  • Darbi iesniedzami elektroniski, E-studijās, izņemot ja prasīts cits iesniegšanas veids.
  • Teksts noformējams PDF faila formātā. Piemēram MD2 fails būtu sekojošs: DSP_MD2_Vards_Uzvards.pdf
  • Ja iesniedzami vairāk par vienu failu, tie arhivējami ZIP formātā, sekojoši: DSP_MD2_Vards_Uzvards.zip Atspiežot šo failu tam jārada direktorija ar tādu pašu nosaukumu, kur atrodas visi faili.

Vērtējums kursā

Kursa galējais vērtējums sastāv no sekojošām komponentēm:

  • 10% - dalība lekcijās un diskusijās
  • 20% - mājas darbi, praktiskie darbi un testi
  • 20+20% - divi kontroldarbi semestra vidū
  • 30% - rakstisks gala eksāmens
  • Obligāta kursa aptaujas anketas aizpildīšana LUIS sistēmā


Kalendārs

Datums Tēma, saturs Uzdevumi

11.02.22

Digitālā signālu apstrāde, ievads.


DSP (Digital Signal Processing) ievadlekcija. DSP definīcija un pielietojumi.

Lasāmviela un resursi:

18.02.22

Statistika, varbūtība, trokšņi un gadījumsignāli


Analogais-ciparu pārveidotājs (ADC jeb ACP modelis) jeb signālu mērīšana (ciparu signāls = signālu diskretizācija + kvantēšana). Signālu klasifikācijas un galvenie parametri (vidējā vērtība, vidējā kvadrātiskā vērtība, SNR, enerģija, jauda, min un max vērtība, dinamiskais diapazons u.c.).

Lasāmviela un resursi:

25.02.22

Matlab un Octave


Svarīgāko Octave komandu apskats (ar kurām var konstruēt signālapstrādes algoritmus). Praktiskais darbs ar Octave.

  • OCTAVE instalējama Ubuntu sistēmā sekojoši:
sudo apt install octave
  • Octave darbināšana
    • grafiskā redaktora režīmā: octave --gui
    • terminālī: octave vai octave-cli

04.03.22

Lineāras sistēmas un signālu klasifikācija


Signālu klasifikācija un galvenie parametri (vidējā vērtība, vidējā kvadrātiskā vērtība, SNR, enerģija, jauda, min un max vērtība, dinamiskais diapazons u.c.).

Lasāmviela un resursi:

11.03.22

Konvolūcija


Konvolūcija un tās īpašības

Lasāmviela un resursi:

Termiņš MD_Sys (nav jāiesniedz, tiks pārrunāts lekcijā)

18.03.22

KD1

Vidus semestra kontroldarbs KD-1.

Lasāmviela un resursi:

  • KD1

25.03.22

Ievads digitālajos filtros, Moving average filtrs

Digitālie filtri, kustīgā vidējā (moving average) filtrs.

Lasāmviela un resursi:

01.04.22

Prakse ar Octave, skaņa

Praktiskā nodarbība. Izmantojot Octave, konstruēt algoritmu, kas apstrādā audio failu.

  • Uzdevumi, Octave vidē
    • Izgriež 1 sekundi no skaņas
    • Nospēlēt oktāvu
    • Atskaņot skaņu kas sastāv no 3 sinusoīdām ar maināmu frekvenci un amplitūdu
    • Piemērot ADSR skaņas avotam, piemēram, sinusoīdai
    • Izveidot savu sintētiskās skaņas instrumentu

Resursi:

08.04.22

Audio signāli

Audio uztvere in apstrāde

Lasāmviela un resursi:


22.04.22

Attēlu signāli

Attēlu uztvere un apstrāde

Lasāmviela un resursi:

29.04.22

Prakse ar Octave, attēli

Speciāla attēlu apstrāde.

Praktiskā nodarbība. Attēlu apstrāde.

06.05.22

KD2

Vidus semestra kontroldarbs KD2

  • Praktisku uzdevumu risināšana ar Octave.
  • Audio un attēlu apstrāde.
  • KD2

13.05.22

Furjē transformācija. Diskrētā Furjē transformācija

Video materiāls

Lasāmviela un resursi:

20.05.22

FIR un IIR


Rekursīvie filtri. FIR un IIR signālu filtri. Signālu filtrācija frekvenču apgabalā.

Pratiskais darbs: Izmantojot Octave, izveidot Short-time DFT jeb spektrogrammu runas signālam.


Lasāmviela un resursi:

27.05.22

Filtru salīdzinājums

Lasāmviela un resursi:

03.06.22

Kopsavilkums

Lasāmviela un resursi:

10.06.22

Eksāmens
Laiks: 08:30
Vieta: E-studijas un tiešsaiste.

Uzdevumi

MD1

Analizēt nejaušu skaitļu (RND) un to summas histogrammu sekojošiem gadījumiem:

  1. RND
  2. RND + RND
  3. RND + RND + RND + RND

Pētījumu veikt vismaz 100000 nejaušiem skaitļiem.

Ar RND saprotam funkciju, kas katrā izsaukumā atgriež nejaušu skaitli no 0 līdz 1.0.

Katram no iepriekš minētajiem gadījumiem uzrakstīt programmu, kas izrēķina un uzzīmē histogrammu.

Programmu ieteicams rakstīt Octave vidē, bet šoreiz atļauts arī kādā citā jums pazīstamā valodā.

E-studijās kā MD1 iesniegt PDF failu ar risinājumu, kurā katram no gadījumiem doti:

  • Programma, kas ģenerē histogrammu
  • Histogramma
  • Secinājumi, kas sanāca, un kāpēc tā.

MD_Sys

Mērķis: Treniņš lineāru un laika invariantu sistēmu atpazīšanā un pierādīšanā.

Uzdevums

  1. Pierādīt, ka sekojošas sistēmas ir (vai nav) lineāras.
  2. Pierādīt, ka sekojošas sistēmas ir (vai nav) laika invariantas.
  • y[n] = x[n] + 3
  • y[n] = x[n] * x[n]
  • y[n] = x[n] + x[n + 1]

Šis uzdevums paredzēts treniņam, un nav obligāti jāiesniedz.

MD_Octave

Mērķis: Apgūt un praktizēties Octave vides un valodas lietošanā.

Uzdevums

Atrisināt Octave vidē sekojošus uzdevumus:

1. Izdomāt īsu bet efektīvu Octave komandu (izteiksmi), kas izmantojot dažādus operatorus izveido sekojošu matricu A:

    1     3     5     7     9    11
    1     4     9    16    25    36
    4     8    16    32    64   128

2. Izdomāt tādas matricas B, C un D, lai tās reizinot ar A iegūst sekojošo:

  • A * B = ( A kolonnu 2 un 5 summa )
  • C * A = ( A matricas otrā rinda )
  • D * A = ( A matrica kurā 1 un 2 rindas ir samainītas vietām )

3. Izdomāt vektora matricas (tikai viena rinda vai viena kolonna) S, T, V un W tādas, lai to reizinājumi būtu sekojoši:

  • S * T =
1 2 3
1 2 3
  • V * W =
1 1
2 2
3 3

Ieteikumi

  • Risinājumus saglabāt failā md_octave.m
  • Octave skriptus (faila-vārds.m failus) var darbināt ar run faila-vārds.m
  • Lai rakstītu komentārus, Octave valodā jālieto % rindas sākumā
  • Kāpināšanas operatori ir ^ un .^
  • Transponēšanas operācija ir .'
  • Vektora matrica ir vienas dimensijas matrica, piemēram, ar tikai vienu kolonnu vai tikai vienu rindu.


Iesniegt

Risinājumu (md_octave.m failu) iesniegt e-Studijās MD_Octave sadaļā. Risinājuma failā jābūt komentētam skriptam, kas definē visas matricas A, B, C, D, S, T, V un W.

MD_Audio

Izmantojot Octave, konstruēt algoritmu, kas izgriež pauzes runas signālam.

Skaņas faili, piemēram:

Darbības plāns:

  1. Ielasīt audio failu
  2. Izveidot filtra kodolu lai nofiltrētu augstfrekvenču troksni, "pīķus" signālā, it īpaši paužu laikā
  3. pielietot šo filtru izmantojot konvolūciju
  4. uzlikt slieksni filtrētajam audio signālam: pauzes uz 0, pārējais uz 1.
  5. kombinējot oriģinālo un filtrēto signālus, konstruēt jaunu signālu bez pauzēm.

Ieteikumi

  • Risinājumus saglabāt failā md_audio.m
  • Rakstiet kodā arī komentārus
  • Audio failu var ielasīt no faila un rakstīt failā ar komandām audioread un audiowrite
  • Vairāk informāciju par komandām var uzzināt ar help nezināmā-komanda
  • Reizēm ir Noderīgi apskatīties uz signāla grafiku ar komandu plot(matrica). Ja vēlaties apskatīt vairākus grafikus vienlaicīgi, tad pirms plot() komandas dodiet komandu figure();

Iesniegt

Risinājumu (md_audio.m failu) iesniegt estudijās MD_Audio sadaļā.

MD_Synth

Izmantojot Octave, uzrakstīt funkcijas vairākiem skaņas efektiem.

Turpmākajos uzdevumos:

  • 'sample' ir skaņas matrica (viena kolonna ar mērījumiem - "samples"). Līdzīgi kā lasīts ar audioread, bet viens kanāls.
  • 'fs' ir sample-rate, piemēram 44100.
  • 'len' ir skaņas ilgums, sekundēs

Uzdevumi

  1. Izgriež 1 sekundi no skaņas
    • Funkcija onesec(sample, fs) - kas atgriež vektora matricu kas veidota no 'sample'
  2. Nospēlēt oktāvu: 8 skaņas no Do līdz Do, katru noti 0.25 sekundes ilgi.
    • Funkcija oneoctave(fs) - kas atgriež matricu ar skaņu.
  3. Atskaņot skaņu kas sastāv no 3 sinusoīdām ar maināmu frekvenci un amplitūdu
    • Funkcija sine3(f1, f2, f3, a1, a2, a3, fs, len) - kur f* ir frekvences un a* ir amplitūdas.
  4. Piemērot ADSR skaņas avotam, piemēram, sinusoīdai
    • Funkcija adsr(sample, fs, attack, decay, sustain, release) - kas pielieto ADSR "envelope" effektu signālam. "a,d,s,r" parametru summai jābūt 1.
  5. Izveidot sintētiskās skaņas instrumentu, pēc savas radošās izvēles.
    • Funkcija mysynth(freq, fs) - kas ņem vērā pamata frekvenci freq efektam un atgriež skaņas matricu. Matricas garums atkarīgs no jūsu efekta garuma.

Resursi

  • Envelope, ADSR
  • Digital sound and music - sadaļa 6.7.1 - par skaņas sintēzi.
  • Ģenerēto skaņu iespējams rakstīt audio failā ar audiowrite funkciju.
  • Skaņu iespējams atspēlēt arī no Octave. Sīkāk skat help audioplayer

Iesniegt

  • md_synth.m failu ar visām funkcijām
  • Estudijās, MD_Synth sadaļā.

Piemēri

Piemērs, kurā tiek ģenerēts 1 sekundi garš mazās oktāvas La signāls un saglabāts kā skaņas fails

// Example, La=220Hz, 1 second
fs = 44100;
freq = 220;
samples_per_period = fs/freq;
step = 2*pi / samples_per_period;
limit = fs/step;
t = 0: step: limit;
s = sin(t);
stereo = [s', s']
audiowrite ("la.ogg", stereo, fs);

Alternatīvs risinājums šim pašam uzdevumam

fs = 44100;
freq = 220;
t = linspace(0, 1, fs);
s = sin( t * 2*pi * freq );
stereo = [s', s'];

Veids, kā spēlēt signālu no Octave:

player = audioplayer (stereo, 44100, 8);
play (player);

MD_Image

Izmantojot Octave, uzrakstīt funkcijas attēlu apstrādei.

Turpmākajos uzdevumos:

  • 'path' ir taciņa uz skaņas failu, iekļaujot faila vārdu.
  • 'img' ir 2d matrica ar (bezkrāsainu) attēlu. Katra vērtība ir vesels skaitlis no 0 līdz 255.
  • 'colorimg' ir matrica ar krāsainu RGB attēlu, līdzīgi ka IMG daļa no imread() funkcijas

Uzdevumi

  1. Ielasīt attēlu no faila (piemēram picture.jpg) un atgriezt 2D matricu ar melnbaltu attēlu.
    • Funkcija file2gray(path) - kas atgriež matricu ar attēlu, ko var rādīt ar imshow().
  2. Pielietot 2D konvolūciju attēlam. Funkcijai jāatgriež apstrādātais attēls.
    • Funkcija filter1(img, kernel) - kas atgriež matricu ar attēlu, ko var rādīt ar imshow().
  3. Pārbaudīt filtra kodolu. Ko dara sekojošais filtra kodols? Uzrakstīt funkciju kas to pārbauda, un komentāros aprakstīt rezultātu.
    • Funkcija test3(img) - kas atgriež matricu ar attēlu pēc tā apstrādes ar sekojošu filtra kodolu h:
    • h = [4 3 2; 1 0 -1; -2 -3 -4]
  4. Atrast filtru, kas veic sekojošu uzdevumu: iezīmē attēla kontūras.
    • Funkcija edgifyer(img) - kur img ir frekvences un a* ir amplitūdas.
  5. Atrast filtru, kas veic sekojošu uzdevumu: izveido attēla "negatīvu", ņemot vērā krāsas. Piemērs pozitīvam un negatīvam attēlam. Piemērs ņemts no Lunapic redaktora vietnes.
    • Funkcija negimage(colorimg) - kur img ir frekvences un a* ir amplitūdas.

Resursi

  • Funkcijas attēlu lasīšanai un rakstīšanai failos: imread(), imwrite()
  • Funkcija attēlu rādīšanai uz ekrāna: imshow()
  • 2D konvolūciju var veikt ar conv2() funkciju. Ņemiet vērā, ka tai ir trešais parametrs, ar kuru var norādīt kā rīkoties robežgadījumos. "same" ir variants kā paturēt rezultējošās matricas izmērus tādus pat kā sākotnējai.
  • Ņemiet vērā, ka ielasot attēlu no faila tam var būt triju krāsu komponentes RGB. Apstrādājot ar conv2() nepieciešams vai no to darīt katrai krāsai atsevišķi, vai melnbaltā režīmā. Te var noderēt funkcija rgb2gray()
  • Ņemiet vērā, ka imshow() funkcija sagaida attēla matricas elementus
    • robežās no 0 līdz 255 ja tiem ir uint8 tips, vai
    • robežās no 0.0 līdz 1.0, ja tie ir double.

Iesniegt

  • md_image.m failu ar visām funkcijām
  • Estudijās, MD_Image sadaļā.

Piemēri

Piemērs, kurā tiek lasīts krāsains un attēlots attēls kā melnbalts

[im, map, alpha] = imread ("lowres1.jpg");
r = im(:,:,1);
g = im(:,:,2);
b = im(:,:,3);
y = 0.299 * r + 0.587 * g + 0.114 * b;
imshow (y)

Piemērs, kā konvertēt 2D matricu b uz tipu, ko sapratis imshow() - pie nosacījuma ka elementu vērtības ir starp 0..255

a = uint8(b) 
imshow(a)

Resursi

Kursa materiāli

"The Scientist and Engineer's Guide to Digital Signal Processing, copyright ©1997-1998 by Steven W. Smith. For more information visit the book's website at: www.DSPguide.com"



Furjē transformācija

FIR & IIR

Citi resursi