Xử lý âm thanh khoa học, Phần II - Cách thực hiện Xử lý tín hiệu toán học cơ bản trong tệp âm thanh bằng Ubuntu với Octave 4.0

theanh

Administrator
Nhân viên
Trong hướng dẫn trước, chúng ta đã thấy các bước đơn giản để đọc, ghi và phát lại các tệp âm thanh. Chúng ta thậm chí đã thấy cách tổng hợp một tệp âm thanh từ một hàm tuần hoàn như hàm cosin. Trong hướng dẫn này, chúng ta sẽ thấy cách thực hiện phép cộng vào tín hiệu, nhân tín hiệu (điều chế) và áp dụng một số hàm toán học cơ bản để xem tác động của chúng lên tín hiệu gốc.


Cộng tín hiệu​

Tổng của hai tín hiệu S1(t) và S2(t) tạo ra tín hiệu R(t) có giá trị tại bất kỳ thời điểm nào là tổng của các giá trị tín hiệu được cộng tại thời điểm đó. Giống như thế này:



R(t) = S1(t) + S2(t)



Chúng ta sẽ tạo lại tổng của hai tín hiệu trong Octave và xem hiệu ứng đồ họa. Đầu tiên, chúng ta sẽ tạo hai tín hiệu có tần số khác nhau để xem tín hiệu thu được từ tổng đó.


Bước 1: Tạo hai tín hiệu có tần số khác nhau (tệp ogg)​

Mã:
>> sig1='cos440.ogg'; %đang tạo tệp âm thanh @440 Hz
>> sig2='cos880.ogg'; %đang tạo tệp âm thanh @880 Hz
>> fs=44100; %đang tạo các giá trị tham số (Chu kỳ, tần số lấy mẫu và tần số góc)
>> t=0:1/fs:0.02;
>> w1=2*pi*440*t;
>> w2=2*pi*880*t;
>> audiowrite(sig1,cos(w1),fs); %đang ghi hàm cos(w) vào các tệp đã tạo
>> audiowrite(sig2,cos(w2),fs);

Ở đây chúng ta sẽ vẽ cả hai tín hiệu.

Biểu đồ tín hiệu 1 (440 Hz)
Mã:
>> [y1, fs] = audioread(sig1);
>> plot(y1)


Biểu đồ tín hiệu 2 (880 Hz)
Mã:
>> [y2, fs] = audioread(sig2);
>> plot(y2)




Bước 2: Thêm hai tín hiệu​

Bây giờ chúng ta thực hiện tổng của hai tín hiệu được tạo ở bước trước.
Mã:
>> sumres=y1+y2;
>> plot(sumres)
Biểu đồ tín hiệu kết quả






Hiệu ứng Octaver

Trong Octaver, âm thanh do hiệu ứng này tạo ra là đặc trưng vì nó mô phỏng nốt nhạc do nhạc sĩ chơi, ở quãng tám thấp hơn hoặc cao hơn (tùy theo chương trình đã lập trình), kết hợp với âm thanh của nốt nhạc gốc, tức là hai nốt nhạc có âm thanh giống hệt nhau.


Bước 3: Thêm hai tín hiệu thực (ví dụ với hai bản nhạc)​

Với mục đích này, chúng ta sẽ sử dụng hai bản nhạc Gregorian Chants (lấy mẫu giọng nói).



Bản nhạc Avemaria

Đầu tiên, sẽ đọc và biểu đồ Avemaria track:
Mã:
>> [y1,fs]=audioread('avemaria_.ogg');
>> plot(y1)




Bản nhạc Hymnus

Bây giờ, sẽ đọc và vẽ một bản nhạc hymnus
Mã:
>> [y2,fs]=audioread('hymnus.ogg');
>> plot(y2)

Bản nhạc Avemaria + Hymnus
Mã:
>> y='avehymnus.ogg';
>> audiowrite(y, y1+y2, fs);
>> [y, fs]=audioread('avehymnus.ogg');
>> plot(y)



Kết quả, theo quan điểm của âm thanh, là cả hai bản nhạc sẽ nghe như được trộn lẫn.


Tích của hai tín hiệu​


Để nhân hai tín hiệu, chúng ta phải sử dụng cách tương tự như phép cộng. Hãy sử dụng cùng các tệp đã tạo trước đó.
R(t) = S1(t) * S2(t)



Mã:
>> sig1='cos440.ogg'; %đang tạo tệp âm thanh @440 Hz
>> sig2='cos880.ogg'; %đang tạo tệp âm thanh @880 Hz
>> product='prod.ogg'; %đang tạo tệp âm thanh cho sản phẩm
>> fs=44100; %đang tạo các giá trị tham số (Chu kỳ, tần số lấy mẫu và tần số góc)
>> t=0:1/fs:0.02;
>> w1=2*pi*440*t;
>> w2=2*pi*880*t;
>> audiowrite(sig1, cos(w1), fs); %ghi hàm cos(w) vào các tệp đã tạo
>> audiowrite(sig2, cos(w2), fs);
>> [y1,fs]=audioread(sig1);
>> [y2,fs]=audioread(sig2);
>> audiowrite(product, y1.*y2, fs); %thực hiện tích
>> [yprod,fs]=audioread(product);
>> plot(yprod); %vẽ tích

Lưu ý: chúng ta phải sử dụng toán hạng '.*' vì tích này được tạo thành, giá trị này đến giá trị khác, trên các tệp đối số. Để biết thêm thông tin, vui lòng tham khảo hướng dẫn sử dụng sản phẩm với ma trận Octave.


Biểu đồ tín hiệu sản phẩm kết quả​


Hiệu ứng đồ họa của việc nhân hai tín hiệu có chênh lệch tần số cơ bản lớn (Nguyên lý điều chế)​

Bước 1:

Tạo tín hiệu tần số âm thanh có tần số 220Hz.
Mã:
>> fs=44100;
>> t=0:1/fs:0.03;
>> w=2*pi*220*t;
>> y1=cos(w);
>> plot(y1);



Bước 2:

Tạo tín hiệu điều chế tần số cao hơn là 22000 Hz.
Mã:
>> y2=cos(100*w);
>> plot(y2);


Bước 3:

Nhân và vẽ đồ thị hai tín hiệu.
Mã:
>> plot(y1.*y2);




Nhân một tín hiệu với một số vô hướng​

Hiệu ứng của việc nhân một hàm với một số vô hướng tương đương với việc sửa đổi phạm vi của chúng và, trong một số trường hợp, dấu của pha. Với một số vô hướng K, tích của một hàm F(t) với số vô hướng được định nghĩa là:
R(t) = K*F(t)


Mã:
>> [y,fs]=audioread('cos440.ogg'); %creating the work files
>> res1='coslow.ogg'; 
>> res2='coshigh.ogg';
>> res3='cosinverted.ogg';
>> K1=0.2; %giá trị của các số vô hướng
>> K2=0.5;
>> K3=-1;
>> audiowrite(res1, K1*y, fs); %product function-scalar
>> audiowrite(res2, K2*y, fs);
>> audiowrite(res3, K3*y, fs);
Biểu đồ tín hiệu gốc
Mã:
>> plot(y)

Biểu đồ tín hiệu giảm biên độ 0,2
Mã:
>> plot(res1)



Biểu đồ tín hiệu giảm biên độ 0,5
Mã:
>> plot(res2)



Biểu đồ tín hiệu có pha đảo ngược
Mã:
>> plot(res3)

Kết luận​


Các phép toán cơ bản, chẳng hạn như tổng đại số, tích và tích của một hàm theo số vô hướng là xương sống của các phép toán nâng cao hơn trong số đó là phân tích phổ, điều chế biên độ, điều chế góc, v.v. Trong hướng dẫn tiếp theo, chúng ta sẽ xem cách thực hiện các phép toán như vậy và tác động của chúng lên tín hiệu âm thanh.
 
Back
Bên trên