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:\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:\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:\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