Zadaci za vežbu

Zadatak 1 - Beli šum

Bafer dužine 512 odbiraka napuniti belim šumom.

Uputstvo

  • Definisati konstantu DUZINA.
  • Definisati bafer dužine DUZINA kojem je moguće pristupiti iz bilo kog dela programa (globalna promenljiva).
  • U main() funkciji u for() petlji, pozivom eksterne funkcije rand() koja se nalazi u standardnoj biblioteci stdlib.h napuniti bafer slučajnim brojevima. Brojač u for() petlji definisati kao lokalnu promenljivu.
  • Napraviti funkciju beliSum(int buf[], int duz), gde je buf[] parametar koji predstavlja bafer u koji će šum biti smešten, a duz je dužina tog bafera.

Resursi za C

Cilj

Cilj zadatka je upoznati studente sa:

  • Strukturom C jezika
  • Postavljanjem komentara
  • Definisanjem konstanti
  • Deklarisanjem globalnih promenljivih
  • Deklarisanjem lokalnih promenljivih
  • Pozivanjem eksternih funkcija
  • Deklaracijom funkcija
  • Definicijom funkcija
  • Pozivom funkcija
  • Prosledjivanjem parametara funkciji
  • Pozivanjem internih funkcija
  • Pozivanjem funkcija sa više parametara
  • Prikazom granjanja programa
  • Generisanjem signala belog šuma

Rešenje

/**************************************
 * Program za generisanje belog suma
 * Primena Digitalnih Signal Procesora
 * Oktobar 2016
 **************************************/

// Biblioteke
#include <stdlib.h>  // ukljucujem bibloteku stdlib u projekat

// Deklaracija makroa
#define DUZINA 512  // definisanje "konstante"

// Deklaracija promenljivih
int bafer[DUZINA];  // deklaracija globalne promenljive

// Deklaracija prototipova funkcija
void beliSum (int buf[], int ampl);  // deklaracija prototipa funkcije

// Glavni program
int main(void) {  // pocetak programa

    beliSum(bafer, DUZINA);  // pozivanje funkcije

    while(1);  // beskonacna petlja
}

// Definicija funkcije
void beliSum (int buf[], int duz) {
    int i;  // deklaracija lokalne promenljive

    if (duz>0) {  // provera duzine bafera
        for (i=0; i<duz; i++) {  // for petlja
            buf[i]=rand();  // pozivanje funkcije iz biblioteke stdlib
        }
    }
}

Zadatak 2 - Pojačanje signala i dodavanje DC ofseta

Napraviti dve funkcije koje će raditi sledeće:

  1. Šumu generisanom u zadatku 1 dodati ili oduzeti DC offset,
  2. Pojačati ili utišati šum generisan u zadatku 1,
  3. Izmeriti vreme rada programa,
  4. Napraviti funkciju za generisanje šuma koji ima DC ofset i pojacanje, ali da pojacanje bude tipa float,
  5. Izmeriti njeno vreme rada,
  6. Napraviti funkciju za generisanje šuma koji ima DC ofset i pojacanje, ali da pojacanje bude tipa int,
  7. Izmeriti njeno vreme rada i uporediti sa prethodnom funkciom. Funkcija koja mnozi int sa floatom bi trebalo da bude mnogo sporija.
  8. Napraviti funkciju za generisanje jednosmernog signala određene duzine,
  9. Napraviti funkciju za sabiranje dva signala i
  10. Napraviti funkciju za množenje dva signala.

Uputstvo

  • Deklarisati i definisati funkcije kao na listingu. Na listingu su date samo deklaracije prototipova funkcija koje je potrebno napraviti. Parametri buff[], a[] i b[] su signali (nizovi), parametar duz je dužina signala, parametar dc je ofset signala, a parametar ampl je pojačanje signala. Funkcija beliSum(int buf[], int duz) je funkcija iz prethodnog zadatka.
void beliSum(int buf[], int duz);
void beliSumOAi(int buf[], int duz, int dc, int amp);
void beliSumOAf(int buf[], int duz, int dc, float amp);
void dodajDC(int buf[], int duz, int dc);
void pojacaj(int buf[], int duz, float amp);
void dcSignal(int buf[], int duz, int dc);
void dodajSignal(int a[], int duz, int b[]);
void pomnoziSignal(int a[], int duz, int b[]);

void vezba1 () {  // pocetak programa
    // Deklaracija makroa
    #define DUZINA 512  // definisanje "konstante"

    // Deklaracija promenljivih
    int signal[DUZINA];  // deklaracija niza
    int dcsignal[DUZINA];

    // Zadatak 1.
    beliSum(signal, DUZINA);  // pozivanje funkcije za generisanje shuma
    // Zadatak 2.1.
    dodajDC(signal, DUZINA, -16384);  // dodavanje jednosmerne komponente signalu
    // Zadatak 2.2.
    pojacaj(signal, DUZINA, 2); // pojacanje signala
    // Zadatak 2.3.
    // Ove tri funkcije traju ....... takta kloka
    // Zadatak 2.4.
    beliSumOAf(signal, DUZINA, -16384, 2);  // generisanje suma sa ofsetom i (float) pojacanjem
    // Zadatak 2.5.
    // Vreme trajanja ove funkcije je ....... taktova kloka
    // Zadatak 2.6.
    beliSumOAi(signal, DUZINA, -16384, 2);  // generisanje suma sa ofsetom i (int) pojacanjem
    // Zadatak 2.7.
    // Vreme trajanja ove funkcije je ...... taktova kloka
    // Zadatak 2.8.
    beliSum(signal, DUZINA);  // ponovo denerisanje unipolarnog signala suma
    dcSignal(dcsignal, DUZINA, -16384);  // generisanje signala koji ima samo jednosmernu komponentu
    // Zadatak 2.9.
    dodajSignal(signal, DUZINA, dcsignal);  // sabiranje dva signala; suma i jednosmernog (modulacija)
    // Zadatak 2.10.
    dcSignal(dcsignal, DUZINA, 2);  // menjanje dcsignal-a
    pomnoziSignal(signal, DUZINA, dcsignal);  // mnozenje dva signala; suma i jednosmernog (modulacija)

    while(1);  // beskonacna petlja
}

Zadatak 3 (2018) - Množenje i sabiranje dve matrice

Implementirati algoritme za množenje i sabiranje dve kvadratne matrice.

Ko je zaboravio kako se množe matrice, predlažem da pogleda na mathsisfun.com sajtu. Kada množenje kvadratnih matrica proradi, prepraviti funkciju tako da parametri budu dve strukture koje predstavljaju ne kvadratne matrice i u sebi sadrže dvodimenzionalni niz i dimenzije matrice (broj redova i broj kolona).

Elementi matrice CijC_{ij} koja je proizvod matrica AikA_{ik} i BkjB_{kj}, jednaki su skalarnom proizvodu i-te vrste matrice AA i j-te kolone matrice BB.

Cij=k=1naikbkj C_{ij} = \sum_{k=1}^{n} a_{ik}b_{kj}

Rešenje

Ukoliko se rešenje ne vidi kako treba, uraditi refreš stranice ili klknuti na link.


Zadatak 4 - Manipulacija signalom

  • Pronaći srednju vrednost signala šuma.
  • Pronaći najveći i najmanji odbirak signala.
  • Invertovati redosled odbiraka signala.
  • Sortirati odbirke signala u neopadajućem poretku, primenom bilo kog algoritma.

Napomena: Rešeni zadaci 1, 2 i 3 se nalaze na GitHub repozitorijumu PDSPlib.

results matching ""

    No results matching ""