Смекни!
smekni.com

Реализация звуковых эффектов (стр. 4 из 4)


Библиографический список

1. Секунов Н.Ю. Обработка звука на РС/ Н.Ю. Секунов. – СПб.: БХВ-Петербург, 2001. – 1248 с.

2. Бондарев В.Н. Цифровая обработка сигналов: методы и средства/ В.Н. Бондарев, Г. Трестер, В.С. Чернега.- Севастопололь: Изд-во СевГТУ, 1999. – 388с.

3. Методические указания к курсовому проектированию по дисциплине "Цифровая обработка сигналов"/ Сост. В.Н. Бондарев, А.Л. Овчинников, B.С. Чернега.– Севастополь: Изд-во СевНТУ, 2003. – 94с.


ПРИЛОЖЕНИЕ А

Текст программ на MatLab

1. Текст программы, реализующей эффект однократной цифровой задержки


clc;

%считываем исходный файл

[x,Fs,bits]=wavread('c:\1.wav');

N=size(x);

D=Fs*0.2; %задержка исходного сигнала

z=zeros(1, D);

xz=[z x']; %задержанный сигнал

xx=[x' z];

y=xx+0.5*xz;

wavwrite(y, Fs, bits, 'c:\odnkr_zad.wav');

%Графическое изображение исходного и задержанного сигналов во временной области

figure(1);

subplot(2,1,1);

plot(x),grid on;title('Isxodnuy signal');

axis([1 14000 -1 1]);

figure(1);

subplot(2,1,2);

plot(y),grid on;title('Zadergannuy signal');

%Записываем в отдельный файл отсчеты сигнала

fid=fopen('c:\x.dat','w');

fprintf(fid,'1651 2 0 1 %3d\n',N);

fprintf(fid,'%4d\n',x);

fclose(fid);

2. Текст программы, реализующей эффект многократной цифровой задержки с помощью трансверсального фильтра:

clc;

%считываем исходный файл

[x,Fs,bits]=wavread('c:\1.wav');

N=size(x);

%Параметры трансверсального фильтра

D1=round(Fs*0.043); a1=0.841;

D2=round(Fs*0.172); a2=0.504;

D3=round(Fs*0.01); a3=0.49;

D4=round(Fs*0.043); a4=0.379;

%Разница между длинами входного и выходного сигналов

D=round(Fs*0.268);

z1=zeros(1,D1);

z2=zeros(1,D2);

z3=zeros(1,D3);

z4=zeros(1,D4);

z=zeros(1,D);

%Сигнал в разных точках трансверсального фильтра

zx=[x', z 0];

xx=[z1 x'];

xz1=[xx z2 z3 z4]; y1=xz1*a1;

xxx=[z2 xx];

xz2=[xxx z3 z4]; y2=xz2*a2;

xxxx=[z3 xxx];

xz3=[xxxx z4]; y3=xz3*a3;

xxxxx=[z4 xxxx];

xz4=[xxxxx]; y4=xz4*a4;

y=zx+y1+y2+y3+y4;

wavwrite(y, Fs, bits, 'c:\mnog_trans.wav');

%Графическое изображение исходного и задержанного сигналов во временной области

figure(1);

subplot(2,1,1);

plot(x),grid on;title('Isxodnuy signal');

axis([1 16000 -1 1]);

figure(1);

subplot(2,1,2);

plot(y),grid on;title('Zadergannuy signal');

3. Текст программы, реализующей эффект многократной цифровой задержки с помощью рекурсивного фильтра:

clc;

%считываем исходный файл

[x,Fs,bits]=wavread('c:\1.wav');

N=size(x);

%Параметры рекурсивного фильтра

D=round(Fs*0.15); a=0.8;

z=zeros(1,D);

xx=[x' z z z z z z z z z];

x1=x*a;

x2=x1*a;

x3=x2*a;

x4=x3*a;

x5=x4*a;

x6=x5*a;

x7=x6*a;

x8=x7*a;

x9=x8*a;

y1=[zx1' zzzzzzzz]; %задержки исходного сигнала

y2=[zzx2' zzzzzzz];

y3=[zzzx3' zzzzzz];

y4=[zzzzx4' zzzzz];

y5=[zzzzzx5' zzzz];

y6=[zzzzzzx6' zzz];

y7=[zzzzzzzx7' zz];

y8=[zzzzzzzzx8' z];

y9=[zzzzzzzzzx9'];

y=xx+y1+y2+y3+y4+y5+y6+y7+y8+y9;

wavwrite(y, Fs, bits, 'c:\mnog_rec.wav');

%Графическое изображение исходного и результирующего сигналов во временной области

figure(1);

subplot(2,1,1);

plot(x),grid on;title('Isxodnuy signal');

axis([1 40000 -2 2]);

figure(1);

subplot(2,1,2);

plot(y),grid on;title('Resyltiryushiy signal');

4. Текст программы, реализующей эффект детонации:

clc;

%считываем исходный файл

[x,Fs,bits]=wavread('c:\1.wav');

N=size(x);

%Diapazon izmenenia zadergki

D=round(Fs*0.025);

z=zeros(1,D);

xx=[x' z];

for i=1:N

fn=round(D*0.5*(1+cos(2*pi*i/3)));

y(1,i)=0.5*xx(1,i)+xx(1,fn+i); %разностное уравнение

end

wavwrite(y, Fs, bits, 'c:\detonacia.wav');

%Графическое изображение исходного и результирующего сигналов во временной области

figure(1);

subplot(2,1,1);

plot(x),grid on;title('Isxodnuy signal');

figure(1);

subplot(2,1,2);

plot(y),grid on;title('Resyltiryushiy signal');

5. Текст программы, реализующей эффект хора:

clc;

%считываем исходный файл

[x,Fs,bits]=wavread('c:\1.wav');

N=size(x);

D=round(Fs*0.035);

z=zeros(1,D);

for i=1:4000

u(1,i)=x(i,1);

end;

x= [u z];

for n=1:4000

fn1=round(D*0.5*(1+cos(2*pi*n/50))); %Zadergki kagdogo instrumenta

fn2=round(D*0.5*(1+cos(2*pi*n/10)));

fn3=round(D*0.5*(1+cos(2*pi*n/100)));

fn4=round(D*0.5*(1+cos(2*pi*n/1000)));

y(1,n)=0.2*x(1,n)+0.2*x(1,fn1+n)+0.2*x(1,fn2+n)+0.2*x(1,fn3+n)+0.2*x(1,fn4+n);

end

wavwrite(y, Fs, bits, 'c:\xor.wav');

%Графическое изображение исходного и результирующего сигналов во временной области

figure(1);

subplot(2,1,1);

plot(xx),grid on;title('Isxodnuy signal');

axis([0 4000 -1 1]);

figure(1);

subplot(2,1,2);

plot(y),grid on;title('Resyltiryushiy signal');

6. Текст программы, реализующей эффект вибрато:

clc;

%считываем исходный файл

[x,Fs,bits]=wavread('c:\1.wav');

N=size(x);

D=round(Fs*0.035);

z=zeros(1,D);

x= [x' z];

for n=1:N

fn=round(D*0.5*(1+cos(2*pi*n/5))); %Zadergka

y(1,n)=0.8*x(1,fn+n);

end

wavwrite(y, Fs, bits, 'c:\vibratto.wav');

%Графическое изображение исходного и результирующего сигналов во временной области

figure(1);

subplot(2,1,1);

plot(x),grid on;title('Isxodnuy signal');

axis([0 10000 -1 1]);

figure(1);

subplot(2,1,2);

plot(y),grid on;title('Resyltiryushiy signal');

7. Текст программы, реализующей эффект компрессора:

clc;

%считываем исходный файл

[x,Fs,bits]=wavread('c:\1.wav');

N=size(x);

a=0.3;

for n=1:N

if(abs(x(n,1))<=a)

y(1,n)=x(n,1);

end;

if(abs(x(n,1))>a)

y(1,n)=x(n,1)/abs(x(n,1))*abs(x(n,1))*a;

end

end

wavwrite(y, Fs, bits, 'c:&bsol;kompress.wav');

%Графическое изображение исходного и результирующего сигналов во временной области

figure(1);

subplot(2,1,1);

plot(x),grid on;title('Isxodnuy signal');

figure(1);

subplot(2,1,2);

plot(y),grid on;title('Resyltiryushiy signal');

axis([0 10000 -1 1]);

8. Текст программы, реализующий эффект экспандера:

clc;

%считываем исходный файл

[x,Fs,bits]=wavread('c:&bsol;1.wav');

N=size(x);

a=0.3;

for n=1:N

if(abs(x(n,1))>a)

y(1,n)=x(n,1);

end;

if(abs(x(n,1))<=a)

y(1,n)=x(n,1)/abs(x(n,1))*abs(x(n,1))/a;

end

end

wavwrite(y, Fs, bits, 'c:&bsol;exspand.wav');

%Графическое изображение исходного и результирующего сигналов во временной области

figure(1);

subplot(2,1,1);

plot(x),grid on;title('Isxodnuy signal');

figure(1);

subplot(2,1,2);

plot(y),grid on;title('Resyltiryushiy signal');

axis([0 10000 -1 1]);



ПРИЛОЖЕНИЕ Б

Текст программ на Си

1. Текст программы, реализующей эффект однократной цифровой задержки:


float input_x[4000];

float output_y[6200];

void dataIN(void){}

void dataOUT(void){}

main()

{

int i;

float xx[6200];

float y1[6200];

while(1)

{

dataIN();

for (i=0; i<2200; i++)

y1[i]=0;

for (i=2200; i<6200; i++)

y1[i]=input_x[i];

for (i=0; i<4000; i++)

xx[i]=input_x[i];

for (i=4000; i<6200; i++)

xx[i]=0;

for(i=0; i<=6200; i++)

output_y[i]=xx[i]+0.5*y1[i];

dataOUT();

}

return 0;

}

2. Текст программы, реализующей эффект детонации:

float input_x[4000];

float output_y[4000];

void dataIN(void){}

void dataOUT(void){}

main()

{

int i;

float xx[6200];

float y1[6200];

int D=550;

int fn;

while(1)

{

dataIN();

for (i=0; i<4000; i++)

xx[i]=input_x[i];

for (i=4000; i<4550; i++)

xx[i]=0;

for (i=0; i<4000; i++)

{

fn=(D*0.5*(1+cos(2*3.14*i/3)));

output_y[i]=0.5*xx[i]+xx[i+fn];

}

dataOUT();

}

return 0;

}

3. Текст программы, реализующей эффект хора:

float input_x[4000];

float output_y[4000];

void dataIN(void){}

void dataOUT(void){}

main()

{

int i;

float xx[4770];

int D=770;

int fn1; int fn2; int fn3; int fn4;

while(1)

{

dataIN();

for (i=0; i<4000; i++)

xx[i]=input_x[i];

for (i=4000; i<4770; i++)

xx[i]=0;

for (i=0; i<4000; i++)

{

fn1=(D*0.5*(1+cos(2*3.14*i/50)));

fn2=(D*0.5*(1+cos(2*3.14*i/10)));

fn3=(D*0.5*(1+cos(2*3.14*i/100)));

fn4=(D*0.5*(1+cos(2*3.14*i/1000)));

output_y[i]=0.2*xx[i]+0.2*xx[i+fn1]+0.2*xx[i+fn2]+0.2*xx[i+fn3]+0.2*xx[i+fn4];

}

dataOUT();

}

return 0;

}

4. Текст программы, реализующей эффект компрессора:

float input_x[4000];

float output_y[4000];

void dataIN(void){}

void dataOUT(void){}

main()

{

int i;

float a;

a=0.3; //koefficient kompressii

while(1)

{

dataIN();

for (i=0; i<4000; i++)

{

if(abs(x[i])<=a)

y[i]=x[i];

if(abs(x[i])>a)

ourput_y[i]=(x[i]/abs(x[i]))*abs(x[i])*a

}

dataOUT();

}

return 0;

}



ПРИЛОЖЕНИЕ В

Результаты курсового проектирования

Результатами выполнении задания на курсовое проектирование являются звуковые файлы, соответствующие изменению исходного сигнала при различных эффектах. Эти файлы представлены в презентации курсового проекта. В пояснительную записку вошли графики исходного и результирующих сигналов при обработке в MatLab и на ЦСП.

1. Графики исходного и результирующего сигнала при реализации эффекта однократной задержки на MatLab и на ЦСП представлены на рисунке В.1 и В.2:

Рисунок В.1—Исходный и результирующий сигнал при однократной задержке на MatLab

Рисунок В.2—Исходный и результирующий сигнал при однократной задержки на ЦСП

2. Графики исходного и результирующего сигнала при реализации эффекта многократной задержки с помощью трансверсального и рекурсивного фильтров на MatLabпредставлены на рисунке В.3 и В.4:

Рисунок В.3—Исходный и результирующий сигнал при многократной задержке с помощью трансверсального фильтра на MatLab

Рисунок В.4—Исходный и результирующий сигнал при многократной задержке с помощью рекурсивного фильтра на MatLab

3. Графики исходного и результирующего сигнала при реализации эффекта детонации на MatLab и на ЦСП представлены на рисунке В.5 и В.6:

Рисунок В.5—Исходный и результирующий сигнал при детонации на MatLab

Рисунок В.5—Исходный и результирующий сигнал при детонации на ЦСП

4. Графики исходного и результирующего сигнала при реализации эффекта хора на MatLab и на ЦСП представлены на рисунке В.7 и В.8:

Рисунок В.7—Исходный и результирующий сигнал при реализации эффекта хора на MatLab

Рисунок В.8—Исходный и результирующий сигнал при реализации эффекта хора на ЦСП

5. Графики исходного и результирующего сигнала при реализации эффекта вибрато на MatLab представлены на рисунке В.9:

Рисунок В.9—Исходный и результирующий сигнал при реализации эффекта вибрато на MatLab

6. Графики исходного и результирующего сигнала при реализации компрессора на MatLab и на ЦСП представлены на рисунке В.10 и В.11:

Рисунок В.10—Исходный и результирующий сигнал при реализации компрессора на MatLab

Рисунок В.11—Исходный и результирующий сигнал при реализации коспрессора на ЦСП

7. Графики исходного и результирующего сигнала при реализации экспандера на MatLab В.12:

Рисунок В.12—Исходный и результирующий сигнал при реализации экспандера на MatLab