Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2014:pitch-shifter

Toto je starší verze dokumentu!


Měnič základního kmitočtu audio signálu

Tomáš Smatana, ID: 136583, xsmata00@stud.feec.vutbr.cz

Zadání

Navrhněte zařízení, na jehož vstupu bude připojen zdroj audio signálu (PC, přenosný přehrávač, mikrofon, …) a na výstupu audio zesilovač (sluchátka, reproduktor). Zařízení bude v reálném čase měnit základní kmitočet signálu a tím jeho výšku (pitch shift), výstupní délka signálu zůstane stejná. Stupeň změny kmitočtu bude nastavitelný.


Úvod

Jedním z parametrů zvukového signálu je jeho výška, kterou určuje jeho základní kmitočet. Cílem tohoto projektu je vytvoření zařízení, které bude sloužit ke změně tohoto základního kmitočtu. Hlavním prvkem zařízení bude vývojový kit STM32F4-Discovery. Pomocí pomocných vstupních obvodů se ke kitu připojí libovolný zdroj zvukového signálu se standardním linkovým výstupem např. přenosný audio přehrávač a na výstup libovolný elektroakustický měnič jako třeba sluchátka. Po uvedení zařízení do provozu bude v jeho úvodní konfiguraci na jeho výstupu stejný signál jako na vstupu. Na procházející audio signál nebude mít zařízení žádný vliv. Po použití uživatelského tlačítka, kterým je vývojový kit vybaven, dojde ke změně výšky výstupního signálu. Každým stisknutím se zvýší nebo naopak sníží výška o výšku jednoho půltónu.

Princip změny základního kmitočtu

Jeden ze způsobů, jak dosáhnout změny základního kmitočtu, je rozdílná rychlost mezi nahráváním a přehráváním hudebního signálu. Např. pokud byl magnetofonový pásek nebo gramofonová deska nahrána určitou rychlostí, při jejich poslechu jinou rychlostí dojde ke změně základního kmitočtu. Pokud bude rychlost přehrávání větší, výška zvuku bude vyšší a naopak.

Obdobně to lze řešit v tomto projektu. Analogový vstupní signál se pomocí AD převodníku určitým vzorkovacím kmitočtem převede na digitální a následně se s jiným vzorkovacím kmitočtem převede pomocí DA převodníku opět na analogový. Pro řešení tohoto projektu bude vzorkovací kmitočet DA převodníku konstantní a bude se měnit pouze vzorkovací kmitočet AD převodníku.

Aby bylo možné měnit základní kmitočet oběma směry, použije se tzv. kruhový buffer. Kruhový buffer je pole buněk s jejich konstantním konečným počtem. Počet těchto buněk bude odpovídat počtu vzorků odpovídajících časové délce signálu 20ms při použitém vzorkovacím kmitočtu 44 kHz.

Kruhový buffer

Přicházející vzorky se ze vstupního signálu budou zapisovat do jednotlivých buněk. S určitým zpožděním se budou vzorky číst a následně posílat na výstup. Změnou rychlosti zapisování vzorků dojde ke změně základního kmitočtu.

Z uvedeného principu je jasné, že bude při rozdílné rychlosti čtení a zapisování docházet k vzájemnému předbíhání čtecího a zapisovacího ukazatele. Jak je ukázáno na obrázku, bude to mít vliv na průběh výstupního signálu, kde vznikne zřetelně slyšitelná nespojitost.

Výstupní signál s nespojitostí

Tento problém lze poměrně dobře zmírnit s využitím zachované části starých vzorků a jejich následném sečtení s novými vzorky. Jak by mohl vypadat výsledný průběh signálu v tomto případě lze vidět na obrázku.

Výstupní signál s řešením nespojitosti

Hardware

Pro řešení projektu je využit vývojový kit STM32F4-Discovery od firmy ST Microelectronics, který je osazen procesorem STM32F407VGT6 od stejného výrobce. Podobu vývojového kitu a jeho blokové schéma lze vidět na obrázku.

STM32F4-Discovery Blokové schéma STM32F4-Discovery

Výběr tohoto hardwaru byl tak učiněn, protože pro tento vývojový kit a procesor existuje volně šiřitelné vývojové prostředí a také, protože obsahuje pro daný účel vhodné a potřebné periferie, kterými jsou:

  • 12 bit AD převodník
  • integrovaný audio kodek CS43L22 s DA převodníkem

AD převodník

Pro převod analogového vstupního signálu na digitální je použit AD převodník integrovaný v procesoru STM32F407VGT6. Tento procesor obsahuje celkem tři dvanáctibitové převodníky, přičemž každý má 16 kanálů. Pro potřeby tohoto projektu zpracovávat dva vstupní signály (levý a pravý kanál) je použit převodník ADC1 s kanálem 1 (port PA1) a převodník ADC2 s kanálem 11 (port PC1). Protože AD převodníky zpracovávají signály s hodnotou v rozmezí mezi 0 V až napájecí napětí procesoru Vdd = 3 V a použitý vstupní signál je střídavý, je nutno zařadit před převodníky pomocný obvod, který posune stejnosměrnou složku signálu na polovinu napájecího napětí. Výsledné schéma pomocného vstupního obvodu je na obrázku. Skládá se z odporového děliče napětí, vstupním kondenzátorem pro oddělení stejnosměrné složky a ochranné zenerovy diody. Pomocný obvod je stejný pro oba zpracovávané kanály.

Výsledné schéma pomocného obvodu na vstupu AD převodníků

Audio kodek CS43L22

Po procesu zpracovaní signálu slouží pro jeho následný převod na výstupní analogový signál audio kodek CS43L22, který je integrovaný na použitém vývojovém kitu. Jeho zapojení lze vidět na blokovém schématu. Tento kodek obsahuje 24-bitový DA převodník a výstupní sluchátkový zesilovač.

Software

Blokové schéma

Software

Výsledky

Výsledná podoba realizace

Závěr

2014/pitch-shifter.1421610123.txt.gz · Poslední úprava: 2015/01/18 20:42 autor: Tomáš Smatana