Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
2019:audio-resample [2020/01/20 17:56] Filip Šterc [Implementace] |
2019:audio-resample [2020/01/20 19:41] (aktuální) Filip Šterc [Schéma zapojení] |
||
---|---|---|---|
Řádek 52: | Řádek 52: | ||
===== Schéma zapojení ===== | ===== Schéma zapojení ===== | ||
- | signál ze zvukové karty počítače je v napěťovém rozmezí (-1 - 1) V. Použitý procesor však zvládá zpracovávat pouze kladná napětí, proto je třeba úroveň signálu nejdříve zvednout nad zem. Toto lze snadno vyřešit pomocí sériového kondenzátoru a napěťového děliče, který úroveň signálu posune na úroveň poloviny napájecího napětí 3V. | + | Signál ze zvukové karty počítače je v napěťovém rozmezí (-1 - 1) V. Použitý procesor však zvládá zpracovávat pouze kladná napětí, proto je třeba úroveň signálu nejdříve zvednout nad zem. Toto lze snadno vyřešit pomocí sériového kondenzátoru a napěťového děliče, který úroveň signálu posune na úroveň poloviny napájecího napětí 3V. |
{{2019:sch_xsterc02.png?500}} | {{2019:sch_xsterc02.png?500}} | ||
- | Při výběru hodnot kondenzátoru, je třeba brát ohled na frekvenci signálu. Pro signál se toto zapojení jeví jako filtr horní propusti s odpory zapojenými paralelně, proto pro vybrané hodnoty je mezní frekvence f<sub>mez</sub> = 1/(2*pi*0,5R*C) = 28,9 Hz. Pro člověka je slyšitelný pouze zvuk v rozmezí 16 Hz - 20 kHz, tudíž kromě malé krajní oblasti mezi (16 - 29) Hz, slyšitelný signál může projít beze změny. ¨ | + | Při výběru hodnot kondenzátoru, je třeba brát ohled na frekvenci signálu. Pro signál se toto zapojení jeví jako filtr horní propusti s odpory zapojenými paralelně, proto pro vybrané hodnoty je mezní frekvence f<sub>mez</sub> = 1/(2*pi*0,5R*C) = 28,9 Hz. Pro člověka je slyšitelný pouze zvuk v rozmezí 16 Hz - 20 kHz, tudíž kromě malé krajní oblasti mezi (16 - 29) Hz, slyšitelný signál může projít beze změny. |
===== Implementace ===== | ===== Implementace ===== | ||
Řádek 86: | Řádek 86: | ||
for(uint16_t i = 0; i < DAC_BUFFER_LEN*2; i+=2){ //inkrementování read pointeru +2 pro decimaci 2* | for(uint16_t i = 0; i < DAC_BUFFER_LEN*2; i+=2){ //inkrementování read pointeru +2 pro decimaci 2* | ||
- | sum = 0; | + | sum = 0; |
- | out = 0; | + | out = 0; |
- | readBuf = i + 246; //uložení ukazatele pro ctení | + | readBuf = i + 246; //uložení ukazatele pro ctení |
- | for(uint8_t j = 0; j < FIR_LENGTH; j++){ //rekonstrukce interpolovaného signálu | + | for(uint8_t j = 0; j < FIR_LENGTH; j++){ //rekonstrukce interpolovaného signálu |
- | sum += upsample_buffer[readBuf-j]*fxcoef[j]; | + | sum += upsample_buffer[readBuf-j]*fxcoef[j]; |
- | } | + | } |
- | if(sum > 4095){ //prevedení na 32 bit hodnotu požadovanou DAC, se saturací | + | if(sum > 4095){ //prevedení na 32 bit hodnotu požadovanou DAC, se saturací |
- | out = 4095; | + | out = 4095; |
- | }else if(sum < 0){ | + | }else if(sum < 0){ |
- | out = 0; | + | out = 0; |
- | }else{ | + | }else{ |
- | out = (uint32_t)(sum); | + | out = (uint32_t)(sum); |
- | } | + | } |
dac_buffer[dac_buff_side*DAC_BUFFER_LEN + (i>>1)] = out; | dac_buffer[dac_buff_side*DAC_BUFFER_LEN + (i>>1)] = out; | ||
- | } | + | } |
} | } | ||
</code> | </code> | ||
+ | |||
+ | ===== Video ===== | ||
+ | Na následujícím videu je ukázána funkčnost tohoto projektu při zpracování signálu o frekvenci 1 kHz. Na osciloskopu jsou zobrazeny signály od vrchu dolů:\\ CH3 - vstupní signál na pinu PA1,\\ CH1 - nepřevzorkovaný výstupní signál na pinu PA4,\\ CH2 - převzorkovaný výstupní signál na pinu PA5.\\ | ||
+ | Na nastavení osciloskopu je možné si všimnou, že i přes to, že se signály zdají být podobné, tak převzorkovaný signál na CH2 má rozlišení pouze 200mV/div, oproti ostatním s 500mV/div. Tato nižší amplituda je vlastností interpolace, kdy je prováděna rekonstrukce signálu odfiltrováním přebytečných kopií spektra, což způsobí pokles energie signálu (pro interpolaci 3x, pokles energie na 1/3). Pokud by bylo požadavkem zachování amplitudy signálu, bylo by třeba převzorkovaný signál vynásobit třemi, což ale vede i ke zvýšení šumu signálu. | ||
+ | |||
+ | [[https://www.youtube.com/watch?v=_VB4ujhArGU|Video ukázka]] | ||
===== Soubory ===== | ===== Soubory ===== | ||
- | == STM32CubeIDE projekt == | + | == EmBitz projekt == |
{{2019:xsterc02_projekt_mpoa.zip}} | {{2019:xsterc02_projekt_mpoa.zip}} | ||