Wprowadzenie do dzisiejszej tematyki     Tematem dzisiejszych zajęć będą najmocniejsze strony Matlaba i jego darmowych zamienników czy odpowiedników. Do tych najmocniejszych stron należy zarówno możliwość wszechstronnej pracy zarówno z dźwiękiem, jak i z szeroko rozumianym obrazem. W związku z tym należy przygotować materiał do dzisiejszych zajęć. Na początek warto sprowadzić ( i rozpakować ) dwa skrypty - programy, z którymi będziemy dziś pracować :

 

 


  Jeżeli podczas dzisiejszych zajęć pracujemy w innym podkatalogu ( folderze ) niż podczas zajęć ubiegłotygodniowych, to warto również ściągnąć pliki 'dźwiękowe' i tekstowe pliki 'widmowe', z którymi mieliśmy do czynienia na ubiegłotygodniowych zajęciach :

 

 

 

 

 

 




 

      Generacja dźwięku Matlabie i w "jemu podobnych"     Znane niektórym z Was tradycyjne języki programowania, jak Pascal czy język C++ pozwalają jedynie na wygenerowanie tonu o określonej częstotliwości i określonym czasie trwania. Możliwości Matlaba , jak i jego darmowych "współbraci", są pod tym o wiele bardziej rozwinięte. W Matlabie można generować dźwięki o dowolnym przebiegu ( o czym za chwilę ), można je rejestrować np. z mikrofonu ( funkcja wavrecord ), można wczytywać z pliku i zapisywać do pliku ( o czym również będzie mowa w dalszej części opracowania ). Na początek zajmiemy się możliwością generowania dźwięków trochę bardziej złożonych niż ton ton prosty. Będziemy generować ton poddawany bądź modulacji amplitudowej bądź modulacji częstotliwościowej. Przebieg poddany modulacji amplitudowej opisany jest wzorem następującym :

  Wyrażenie opisujące ton zmodulowany amplitudowo

  Natomiast przebieg poddany modulacji częstotliwościowej opisywany jest z kolei wyrażeniem następującym :

  Wyrażenie opisujące ton zmodulowany częstotliwościowo

  Parametr ω lub ω 0 to częstotliwość nośna , parametr Ω to tzw. częstotliwość modulacji ( zazwyczaj dużo mniejsza od częstotliwości nośnej 0 ; parametr m to tzw. głębokość modulacji ; z kolei parametr Δ ω to tzw. dewiacja częstotliwości. Stosunek tej dewiacji do częstotliwości nośnej będziemy w dalszym toku rozważań nazywać dewiacją względną. Omówiony przed chwilą przykład świadczy o tym, że w Matlabie ( w odróżnieniu od typowych języków programowania ) możemy generować przebiegi opisane dowolnie złożonym wyrażeniem matematyczny. Oto wgląd do skryptu generującego te tony zmodulowane :

 

 


  We wyrażeniu opisującym ton tak czy inaczej zmodulowany musi byc obecny pewien "parametr uzgadniający" gwarantujący tożsamość zadanej częstotliwości z faktyczna częstotliwością tonu generowanego przez komputer. Ten parametr uzgadniający to tzw. "częstotliwość próbkowania" , obecna w programie - skrypcie jako zmienna Fs .
  W konstrukcji skryptu UniModul.m zwraca uwagę pewna nowość ; zamiast wielokrotnego wprowadzania danych wejściowych ( wartość obu częstotliwości oraz cyfry kodującej wybrany rodzaj modulacji ) przy pomocy wielokrotnie ( trzykrotnie ) wywoływanej funkcji input wprowadzono wszystkie niezbędne dane "grupowo" przy pomocy jednokrotnie użytej funkcji o nazwie inputdlg. Argumentem wejściowym funkcji inputdlg jest `tablica komórkowa` ( poznana na poprzednich zajęciach ) ; argumentem wyjściowym funkcji inputdlg jest również tablica komórkowa. Funkcje tego typu, co inputdlg , przynależą do tzw. "Graphic User Interface" ( GUI ) Matlaba , czyli wyodrębnionego podzestawu narzędzi, pozwalającego na redagowanie programów w "stylu Windows". Oto kilka linków na temat owego GUI :

  Jeśli chodzi o darmowe zamienniki ( odpowiedniki ) Matlaba , to w darmowym ( i wspominanym na wcześniejszych zajęciach ) pakiecie Scilab istnieje funkcja o nazwie x_mdialog i o właściwościach bardzo podobnych do właściwości funkcji inputdlg.
  Do odtworzenia dźwięku ( np. na słuchawkach ) wykorzystano funkcję o nazwie soundsc ; funkcja o nazwie soundsc jest dostępna również w darmowym pakiecie Octave ; w naszym programie oprócz funkcji soundsc równie dobrze można było wykorzystać funkcję o nazwie wavplay lub funkcję o nazwie sound ; ta ostatnia funkcja ( tj. funkcja o nazwie sound ) dostępna jest równiez w darmowych odpowiednikach - zamiennikach Matlaba :

  Do zapisu wygenerowanego przebiegu do pliku we formacie WAV posłużyła funkcja o nazwie wavwrite. Funkcja o takiej samej nazwie ( tj. funkcja wavwrite ) występuje również w darmowych zamiennikach - odpowiednikach Matlaba :

  Do zamiany wczytanej przez funkcję inputdlg wejściowej tablicy komórkowej na docelową tablicę numeryczną ( liczbową ) w nowszych wersjach Matlaba mogłaby posłużyć funkcja o nazwie cell2mat ; funkcja ta posiada swoje odpowiedniki w darmowych zamiennikach Matlaba :

 

  Propozycje ćwiczeń "własnych" :

  ( propozycje od najłatwiejszej do najtrudniejszej )




 

      Grafika w Matlabie     Z tym programowym modulatorem warto trochę poeksperymentować. Może się okazać, że modulacja częstotliwości może być praktycznie nieodróżnialna od modulacji amplitudy, jeśli są spełnione określone warunki. Podstawowy warunek to taki, w którym częstotliwość modulacji jest dużo większa od wartości dewiacji częstotliwości ( częstotliwość modulacji powinna być rzędu przynajmniej kilkudziesięciu [ Hz ). Wówczas przebieg poddany modulacji FM jest nie do odróżnienia słuchem od przebiegu poddanego modulacji AM ; ponadto oba przebiegi mają wówczas bardzo podobne ( prawie identyczne ) widma. Dlatego warto byłoby przygotować ( z myślą o przyszłych zajęciach z psychoakustyki ) jakieś narzędzie ( np. jakiś program ), które pozwoli ustawić obok siebie zarówno przebieg czasowy ( oscylogram ), jak i widmo przebiegu poddanego takiej czy innej modulacji. Takim narzędziem - programem jest program - skrypt o nazwie DuoView.m :

 

 


  Program ten wczytuje pliki dźwiękowy ( we formacie WAV ) przydatny do generowania oscylogramu ( na podstawie ciągu jego próbek ) ; program wczytuje również plik graficzny ( w dowolnym formacie ) zawierający zapis widma tego przebiegu.
  Do wczytania ciągu próbek z pliku we formacie WAV służy funkcja o nazwie wavread ; funkcja ta posiada swoje odpowiedniki w przypadku darmowych zamienników Matlaba :

  Matlab może oczywiście wyznaczyć widma takich czy innych sygnałów, ale te sposoby będą omawiane na zajęciach z analizy sygnałów ( które czekają Państwa w przyszłym semestrze ). Dlatego w toku bieżących zajęć widma sygnałów ( np. tonów poddawanych takiej czy innej modulacji ) będziemy generować przy pomocy programu o ( znanej skądinąd ) nazwie Audacity. Widma wygenerowane przez program Audacity nalezy następnie schwytać i zapisać do pliku we wybranym formacie graficznym. Do przeprowadzenia tego "schwytania" i zapisu do pliku może posłużyć jeden z darmowych programów graficznych : IrfanView lub XnView. Program DuoView na podstawie tych plików tworzy "dwupanelowy" rysunek, w którym w jednym z jego "paneli" ( okienek ) umieszczone jest widmo, natomiast w drugim "panelu" ( okienku ) umieszczony jest przebieg czasowy ( czyli oscylogram ). Można oczywiście poeksperymentować również ze szumami kolorowymi i ich widmami, z którymi mieliśmy do czynienia na ubiegłotygodniowych zajęciach. Do sporządzania takiego wielopanelowego ( wielokienkowego ) obrazka w Matlabie służy funkcja o nazwie subplot ; funkcja o takiej samej nazwie i o takim samym działniu dostępna jest również w darmowych zamiennikach - odpowiednikach Matlab :

  Grafikę obsługiwaną przez program Matlab można podzielić na : grafikę wewnętrzną i grafikę zewnętrzną. Grafika wewnętrzna to sporządzanie wykresów ( np. oscylogramów ) na podstawie danych wczytanych z plików "niegraficznych" ( np. z plików tekstowych, plików 'dźwiękowych' czy plików Excela ) ; graficzna zewnętrzna to odtwarzanie rysunków zamieszczanych w plikach graficznych rozmaitych formatów. Podstawowym narzędziem grafiki "wewnętrznej" jest funkcja o nazwie plot służąca do sporządzania wykresów dwuwymiarowych. Funkcja ta posiada swoje odpowiedniki ( o takiej samej nazwie ) w darmowych zamiennikach Matlaba ( w programach : Octave , FreeMat oraz SysQuake ) :

  W przypadku darmowego pakietu Scilab jest dostępna funkcja o nazwie plot2d o identycznym zastosowaniu i o prawie identycznej składni jak w przypadku Matlaba. Do obsługi grafiki "zewnętrznej", czyli do odtwarzania obrazków zawartych w plikach graficznych służą w Matlabie funkcje następujące : imread , image , imagesc , imshow oraz imageview. Niektóre spośród tych funkcji są dostępne również w przypadku darmowych odpowiedników - zamienników Matlaba ; w przypadku pakietu Octave mamy dostęp do funkcji : imread oraz imshow ; natomiast w przypadku darmowego pakietu FreeMat mamy do czynienia z funkcjami : imread oraz imagesc . W przypadku darmowego pakietu Scilab nie mamy do czynienia z tego rodzaju wyspecjalizowanymi funkcjami "obrazkowymi" ; zamiast nich mamy dostęp do uniwersalnej funkcji winopen, która otwiera wszelkie pliki "medialne", tj. pliki graficzne, pliki we formacie HTML , pliki we formacie PDF , pliki z prezentacjami, itp. Funkcja o takiej samej nazwie winopen i o takich samych, potężnych możliwościach dostępna jest również w najnowszych wersjach Matlaba. Sporządzony wykres lub rysunek ( również wielopanelowy ) może być przez Matlaba zapisany do pliku przy pomocu funkcji saveas ( w darmowym pakiecie Scilab do tego samego celu służy funkcja o nazwie xsave ). Funkcja saveas zapisuje wykresy i rysunki w specyficznym, charakterystycznym tylko dla Matlaba formacie FIG. Pliki w tym formacie mogą być otwierane przy wykorzystaniu funkcji openfig. Podczas jednej sesji Matlaba można przygotować wiele rysunków ; dlatego też kolejno przygotowywanym rysunkom przypisywane są numery porządkowe, zwane "uchwytami" ( ang. handle ). Wartość "uchwytu" ostatnio sporządzonego rysunku pokazuje funkcja o nazwie gcf. W przypadku "schowania" ostatnio utworzonego rysunku można go przywrócić na ekran przy pomocy funkcji o nazwie shg.

 

  Propozycje ćwiczeń "własnych" :

  ( propozycje od najłatwiejszej do najtrudniejszej )