Jednym z wielu zastosowań procesorów sygnałowych jest cyfrowa generacja sygnałów analogowych.
1. Sygnał sinusoidalny:
Przykładowy kod programu:
#define M_2PI 6.28318530717958647692
#define FS 48000
void main ( void )
{
float output, t, A, f, dt;
A=10000; // Amplituda
f=1000; // Czestotliwosc [Hz]
dt=f/(float)FS;
init_codec();
user_tx_ready = 0;
t=0;
for(;;)
{
user_rx_ready = 1;
idle();
while (user_tx_ready);
//---------------- Tu wpisz swoj kod -------------------
output=A*sin(M_2PI*t);
t+=dt;
if(t>=1)
t=0;
//------------------------------------------------------
user_tx_buf[RIGHT_CHNL] = output;
user_tx_buf[LEFT_CHANL] = output;
user_tx_buf[TAG] = DOUT_TAG;
user_tx_ready = 1;
};
}
2. Sygnał piłokształtny narastający
Przykładowy kod programu:
#define M_2PI 6.28318530717958647692
#define FS 48000
void main ( void )
{
float output, t, A, f, dt;
A=10000; // Amplituda
f=1000; // Częstotliwość [Hz]
dt=2*f/(float)FS;
init_codec();
user_tx_ready = 0;
t=0;
for(;;)
{
user_rx_ready = 1;
idle();
while (user_tx_ready);
//---------------- Tu wpisz swoj kod -------------------
output=A*t;
t+=dt;
if(t>=1)
t=-1;
//------------------------------------------------------
user_tx_buf[RIGHT_CHNL] = output;
user_tx_buf[LEFT_CHANL] = output;
user_tx_buf[TAG] = DOUT_TAG;
user_tx_ready = 1;
};
}
3. Zadania:
Uruchom i sprawdź działanie programów z punktu 1 i 2
Wykorzystując gotowy szkielet programu napisz programy generujące następujące przebiegi:
Przebieg piłokształtny opadający
Przebieg trójkątny
Przebieg prostokątny o zmiennym współczynniku wypełnienia (0 -100%)
Dla przebiegu sinusoidalnego napisz „wobulator” czyli przestrajanie częstotliwości w czasie np. od 20Hz -20kHz z zadanym skokiem częstotliwości.
Napisz program umożliwiający „programowanie” kształtu przebiegu wyjściowego. Wskazówka, należy wykorzystać tablicę np.:
float signal[10]={0, 1000, -100,-25000, 30000,…};
Szkielet programu dostępny jest tutaj:
Procesory Sygnałowe
Laboratorium 2 - Generacja sygnałów 3
©D. Król, R. Wielgat - PWSZ Tarnów