Efekty gitarowe

background image

Wzmacniacz gitarowy

Prezentacja druga

Praca

Dyplomowa

background image

2 z 11

Cel Projektu

Zaprojektowad urządzenie elektroniczne
pozwalające wzmocnid sygnał z gitary
elektrycznej, przetworzyd go i podad na
zewnętrzny głośnik.

background image

3 z 11

Moduł 4 Efekty

• C2000 32-bit Real-time CPU Peripheral Kit

background image

4 z 11

Efekt opóźniający

Echo – jedna przeszkoda, filtr I rzędu, SOI lub

NOI

Pogłos – wiele przeszkód, kilka filtrów

połączonych równolegle

Flanger – wartośd opóźnienia = sinus(f)
Vibrato – flanger bez oryginalnego sygnału
Chór – wartośd opóźnienia = zmienna losowa

background image

5 z 11

Pogłos – Implementacja programowa

short Filter_comb(short delay_in_sample,

int

mode,short

*

buf,

int

*

pointer,

int

table_size)

{
short delay_out_sample;

float

BL

=

0

;

float

FB

=

0

;

float

FF

=

0

;


// filtr FIR

if

(mode

==

0

)

{
BL

=

1

;

FB

=

0

;

FF

=

adc_value2

/

ADC_MAX;

}

// Filtr IIR

else

if

(mode

==

1

)

...

// Filtr ALLPASS

else

if

(mode

==

2

)

...

// obliczenie równania różnicowego filtru uniwersalnego

if

(

*

pointer

+

1

>

=

table_size)

{
delay_out_sample

=

BL

*

(delay_in_sample

+

FB

*

buf[

*

pointer

+

1

-

table_size])

+

FF

*

buf[

*

pointer

+

1

-

table_size];


buf[

*

pointer]

=

delay_in_sample

+

FB

*

buf[

*

pointer

+

1

-

table_size];

}

else

{
delay_out_sample

=

BL

*

(delay_in_sample

+

FB

*

buf[

*

pointer

+

1

])

+

FF

*

buf[

*

pointer

+

1

];


buf[

*

pointer]

=

delay_in_sample

+

FB

*

buf[

*

pointer

+

1

];

}

pointer

++

;

// inkrementacja wskaźnika aktualnej pozycji w buforze

if

(

*

pointer

==

table_size)

*

pointer

=

0

;


return

delay_out_sample;

}

short

Reverb

(short sample_in)

{
short sample_out;

//obliczenie wczesnych odbić za pomocą filtrów grzebieniowych
sample_out=0.25*

Filter_comb

(sample_in,1,buf_delay1,&head_1, BUF_SIZE1)

+0.25*

Filter_comb

(sample_in,1,buf_delay2,&head_2, BUF_SIZE2)

+0.25*

Filter_comb

(sample_in,1,buf_delay3,&head_3, BUF_SIZE3)

+0.25*

Filter_comb

(sample_in,1,buf_delay4,&head_4, BUF_SIZE4);


// obliczenie ogona pogłosowego
sample_out=

Filter_comb

(sample_out,2,buf_delay5,&head_5, BUF_SIZE5);

sample_out=0.5*sample_in+0.5*

Filter_comb

(sample_out,2,buf_delay6,&head_6,BUF_SIZE5);


return sample_out;

}

background image

6 z 11

Inne – Implementacja programowa

short Delay_effect(short delay_in_sample, type_delay mode)
{
short delay_out_sample;
...
unsigned

int

delay_change;

if

(mode

!=

OFF)

{

// wybór efektu, ustawienie odpowiednich parametrów filtru uniwersalnego

if

(mode

==

ECHO)

{

//ustawienie parametrów filtru uniwersalnego

BL

=

1

;

FF

=

0

;

FB

=

0.75

*

adc_value2

/

ADC_MAX;

delay_change

=

(

int

)((adc_value1

+

100

)

/

100

);

}

else

if

(mode

==

VIBRATO)

{
...
flanging_freq

=

(

9

*

adc_value2

/

ADC_MAX

+

1

)

*

0.5

;

//0.5 - 5Hz

flanging_range

=

(

int

)(

100.0

*

adc_value1

/

ADC_MAX)

/

10

;

//zakres 110-220 (5ms-10ms)

delay_change

=

(

int

)(BUF_SIZE

-

10

-

((

sin

(

2

*

M_PI

*

del_count

*

flanging_freq

/

22050

)

+

1

)

/

2

)

*

flanging_range);

del_count

++

;

if

(del_count >

=

22050

/

flanging_freq) del_count

=

0

;


}

else

if

(mode

==

FLANGER)

{
...
}

else

if

(mode

==

CHORUS)

{

//ustawienie parametrów filtru uniwersalnego

...

if

(chorus_flag_up

==

TRUE)

{
rand_value

=

rand_value

+

(((double)(

rand

()

%

100

)

/

20000000

)

+

0.000005

);

}

else

rand_value

=

rand_value

-

(((double)(

rand

()

%

100

)

/

20000000

)

+

0.000005

);


//ograniczenie wartości rand_value od 0 do 1

if

(rand_value>

1

)

{
chorus_flag_up

=

FALSE;

rand_value

=

1

;

}

if

(rand_value<

=

0

)

{
chorus_flag_up

=

TRUE;

rand_value

=

0

;

}

delay_change

=

(

int

)BUF_SIZE

-

20

-

rand_value

*

flanging_range;

}

// oblieczenie równania różnicowego filtru uniwersalnego

delay_out_sample

=

BL

*

(delay_in_sample

+

FB

*

buf_delay[head

+

delay_change])

+

FF

*

buf_delay[head

+

delay_change];

...
}

else

return

delay_in_sample;


return

delay_out_sample;

}

background image

7 z 11

Efekty modulujące

Tremolo –Modulacja amplitudy za pomocą

sygnału sinusoidalnego. Częstotliwośd do 20Hz

Ring modulator –Modulacja amplitudy za

pomocą sygnału sinusoidalnego. Częstotliwośd
kilka kHz.


Modulacja amplitudowa – w tym przypadku
wymnożenie próbek obu sygnałów

background image

8 z 11

Efekty Modulujące

implementacja programowa

short Tremolo(short sample_in)
{
short sample_out;

float

volume;

float

volume_freq

=

14

*

adc_value2

/

ADC_MAX

+

0.2

;

// częstotliwość modulacji od 0.2 do 14.2 Hz

float

volume_range

=

(

float

)adc_value1

/

ADC_MAX;

// głębokość modulacji od 0 do 1


volume

=

((

sin

(

2

*

M_PI

*

del_count

*

volume_freq

/

22050

)

+

1

)

/

2

)

*

volume_range

+

(

1

-

volume_range);

del_count

++

;

if

(del_count >

=

22050

/

volume_freq) del_count

=

0

;


sample_out

=

sample_in

*

volume;


return

sample_out;

}

short RingModulator(short sample_in, short mode)
{
short sample_out;

float

mod;

float

freq;

int

freq_shift

=

980

*

((

float

)(adc_value1)

/

ADC_MAX)

+

20

;

// f sterowania obwiednią


if

(mode

==

0

) freq

=

max

/

3

+

freq_shift;

else

if

(mode

==

1

) freq

=

790

*

((

float

)(adc_value2)

/

ADC_MAX)

+

10

;


mod

=

sin

(

2

*

M_PI

*

del_count

*

freq

/

22050

);

// obliczenie sinusoidy modulującej

del_count

++

;

if

(del_count >

=

22050

/

freq) del_count

=

0

;


sample_out

=

sample_in

*

mod;

// wymnożenie sygnału wejściowego razy próbke sinusoidy


return

sample_out;

}

background image

9 z 11

Przester

Przester – kolokwialne określenie efektu

nasycenia wzmacniacza.

• Distortion – klasyczny przester
• Overdrive – algorytm Overdrive’a. Wydzielenie

kilku poziomów mocy sygnału.

background image

10 z 11

Distortion – Implementacja

programowa

short Distortion(short sample_in, short distortion_type)
{

float

gain

=

(

4

*

(

float

)adc_value1

/

ADC_MAX)

+

1

;


if

(distortion_type

==

1

)

{
sample_in

=

sample_in

*

gain;

if

(sample_in > LEVEL) sample_in

=

LEVEL;

else

if

(sample_in<

-

LEVEL) sample_in

=

-

LEVEL;

}

else

if

(distortion_type

==

2

)

...

else

if

(distortion_type

==

6

)

{

if

(sample_in <

0

) sample_in

=

sample_in

*

gain;

if

(sample_in <

-

LEVEL) sample_in

=

-

LEVEL

-

sample_in ;

}

else

if

( distortion_type

==

7

)

//fuzz

{
sample_in

=

sample_in

*

gain;

if

(sample_in > LEVEL

/

5

)sample_in

=

LEVEL

/

5

;

else

if

(sample_in <

-

2

*

LEVEL) sample_in

=-

2

*

LEVEL;

}

else

sample_in

=

sample_in;

return

sample_in;

}

background image

11 z 11

Dziękuję za uwagę

Krzysztof Jóźwiak

179767


Wyszukiwarka

Podobne podstrony:
(gitarowe efekty dzwiekowe) LYPA5WOT6LXUS2ABG2DDYNYFYFLTRUHYAMI2OMQ
(gitarowe efekty dzwiekowe)
EFEKTY GLOWNE I INTERAKCJE PREZENTACJA
9 Kryteria efektywności
BIOCHEMICZNE EFEKTY STRESU (2B)
Wyklad13 efektywnosc cr (1)
Efektywność rynku
Ocena efektywnosci gosp
Psychologia społeczna Szkolenia Turek wykład 7 Ocena efektywnosci szkolen
Efektywne zarządzanie projektami
Efektywność
106 Efektywnosc wykorzystania Nieznany (2)
Miary efektywnosci RTS3 id 2984 Nieznany
C++ 50 efektywnych sposobów na udoskonalenie Twoich programów
04 Rozdział 03 Efektywne rozwiązywanie pewnych typów równań różniczkowych
efekty energetyczne
Naprężenia efektywne
Berlińska J Zwiększenie efektywności
Analiza ekonomiczna ocena efektywności inwestycji

więcej podobnych podstron