%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SYN - Témata pro 2. cvičení: % Číslicové signály a tabulková syntéza % 1. října 2025 % Roman Čmejla %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Skript vyžaduje soubor: banjo.wav % %% ----------------------------------------------------------- % PŘÍKLAD 2.1: Harmonické signály % % a) Vygenerujte a vykreslete 20 ms sinusového signálu o frekvenci 440 Hz % a vzorkovací frekvenci 8 kHz. % b) Vygenerujte a vykreslete 4 periody sinusového signálu o frekvenci 440 Hz % a vzorkovací frekvenci 8 kHz. % c) Vygenerujte a vykreslete 25 vzorků sinusového signálu o frekvenci 440 Hz % a vzorkovací frekvenci 8 kHz. %% ----------------------------------------------------------- % PŘÍKLAD 2.2: Generování telefonních tónů % a) Oznamovací tón (Dial Tone): % F = [425 0 425 0 ]; [Hz] % T = [0.33 0.33 0.66 0.66 ]; [s] % b) Vyzváněcí tón (Ringing Tone): % F = [425 0]; [Hz] % T = [1 3]; [s] % c) Obsazovací tón (Intercept Tone): % F = [950 0 1400 0 1800 0 ]; [Hz] % T = [0.33 0.03 0.33 0.03 0.33 1.25]; [s] % d) Zaneprázdněný tón (Busy Tone): % F = [425 0]; [Hz] % T = [0.33 0.42]; [s] %% ----------------------------------------------------------- % PŘÍKLAD 2.3: Hudební stupnice % a) Napište funkci `tone = note(key, duration)`, která vygeneruje harmonický signál % odpovídající pozici klávesy na klaviatuře. % b) Pomocí funkce `note.m` vygenerujte hudební stupnici. %% ----------------------------------------------------------- % PŘÍKLAD 2.4: Tónová volba (Tone Dialing) % Tónová volba – DTMF (Dual-Tone Multi-Frequency) % % Při stisku tlačítka na telefonu se generuje signál obsahující % dvě frekvence podle tabulky. % | f [Hz] | 1209 | 1336 | 1477 | % |--------|------|------|------| % | 697 | 1 | 2 | 3 | % | 770 | 4 | 5 | 6 | % | 852 | 7 | 8 | 9 | % | 941 | * | 0 | # | % % Frekvence v tabulce jsou zvoleny tak, aby žádná frekvence nebyla: % • násobkem (harmonickou) jiné frekvence, % • rozdílem dvou frekvencí, % • součtem libovolné kombinace frekvencí. % % a) Napište funkci `tones = DTMFdial(numbers)`, kde `numbers` je % vstupní vektor čísel v rozsahu 1 až 12 (11 = '*' a 12 = '#'), % a výstupní vektor `tones` obsahuje odpovídající DTMF signály % (fs = 8 kHz) o délce 0.1 sekundy. % b) Vygenerujte, vykreslete a přehrajte DTMF signály. %% ----------------------------------------------------------- % PŘÍKLAD 2.5: Tabulková syntéza (Wavetable Synthesis) % % a) Vygenerujte jednu periodu sinusového signálu s frekvencí `f0` % a převeďte ji na jednu periodu sinusového signálu s frekvencí `f1`. % % b) Vygenerujte jednu periodu sinusového signálu s frekvencí `f0` % a převeďte ji na signál libovolné délky s frekvencí `f1`. % % c) Vygenerujte jednu periodu sinusového signálu s frekvencí `f0` % a převeďte ji na signál libovolné délky s frekvencí `f1` % s využitím lineární interpolace.% %% ----------------------------------------------------------- % PŘÍKLAD 2.6: Banjo % Pomocí tabulkové syntézy vygenerujte zvuk banja. %% ----------------------------------------------------------- % PŘÍKLAD 2.7: Banjo - stupnice % Generujte zvuk banja v rozsahu tří oktáv (po půltónech). %% ----------------------------------------------------------- % PŘÍKLAD 2.8: Blinkr % Pomocí tabulkové syntézy vygenerujte zvuk automobilového blinkru. % (A) „mechanický“ klik: krátká vysokofrekvenční složka + exponenciální útlum % (B) „elektronické“ tikání: krátký trojúhelník + exponenciální obálka (jemnější) % (C) „metronomické“ pípnutí: krátká sinusová „kapka“ %% ----------------------------------------------------------- % PŘÍKLAD 2.9: Couvání – pípání (bursts) % Vygenerujte výstražné pípání pro couvání: sled pulzů (bursts). % (A) základní opakující se pulzy (1000 Hz, 100 ms, perioda 600 ms) % (B) urgentnější – kratší mezery, lehký stoupající chirp v pulzu %% ----------------------------------------------------------- % PŘÍKLAD 2.10: Volnoběh motoru % Jednoduchá wavetable syntéza s využitím funkce tabsynth % (jedna tabulka = výdech „puf“ výfuku, rozvinutá podle f_fire) % Výpočet zážehové frekvence (firing frequency) % 2T: zážeh každý cyklus -> f_fire = rpm/60 * cyl % 4T: zážeh ob-cyklus -> f_fire = rpm/60 * (cyl/2) % % V tabulce je jeden výdech (puf) = okno ~30 ms (tlumený sin 80–150 Hz) % → opakováním tabulky rychlostí f_fire vzniká zvuk motoru