Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Результаты реализации звуковых эффектов в среде MatLab и на сигнальном процессоре DSP ⇐ ПредыдущаяСтр 5 из 5
Результаты приведены в приложении В, а также представлены в презентации к данной курсовой работе. Краткое руководство пользователя
Для удобства представления результатов работы программ, они были оформлены в презентацию, которая разработана в среде MS PowerPoint. Презентация имеет удобный и интуитивно понятный интерфейс. В неё вынесены методы наложения звуковых эффектов, использованных в курсовой работе, а также результаты – wav-файлы, которые можно прослушать, нажав кнопку . Смена слайдов осуществляется при нажатии кнопок вперед или назад, размещенных в правом нижнем углу. Заключение
В данной курсовой работе необходимо была разработана в MatLab и CCS система, реализующая звуковые музыкальные эффекты в реальном времени. В ходе разработки были выявлены основные достоинства и недостатки реализации в различных средах. Так, основной недостаток обработки сигналов на цифровом сигнальном процессоре заключается в том, что процессор не позволяет обрабатывать вектора, длиннее, чем 7000 отсчетов, что и было указано выше. Вследствие этого, не все эффекты удалось реализовать, а реализованные проигрывали в качестве звука эффектам, синтезированным на языке Matlab. Эти недостатки можно устранить, если изменить частоту дискретизации музыкального файла. Библиографический список
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=[z x1' z z z z z z z z]; %задержки исходного сигнала y2=[z z x2' z z z z z z z]; y3=[z z z x3' z z z z z z]; y4=[z z z z x4' z z z z z]; y5=[z z z z z x5' z z z z]; y6=[z z z z z z x6' z z z]; y7=[z z z z z z z x7' z z]; y8=[z z z z z z z z x8' z]; y9=[z z z z z z z z z x9'];
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; } ПРИЛОЖЕНИЕ В |
Последнее изменение этой страницы: 2020-02-16; Просмотров: 135; Нарушение авторского права страницы