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.
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 đó.
Ở đây chúng ta sẽ vẽ cả hai tín hiệu.
Biểu đồ tín hiệu 1 (440 Hz)
Biểu đồ tín hiệu 2 (880 Hz)
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ản nhạc Avemaria
Đầu tiên, sẽ đọc và biểu đồ Avemaria track:
Bản nhạc Hymnus
Bây giờ, sẽ đọc và vẽ một bản nhạc hymnus
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.
Để 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)
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.
Tạo tín hiệu tần số âm thanh có tần số 220Hz.
Bước 2:
Tạo tín hiệu điều chế tần số cao hơn là 22000 Hz.
Bước 3:
Nhân và vẽ đồ thị hai tín hiệu.
R(t) = K*F(t)
Biểu đồ tín hiệu gốc
Biểu đồ tín hiệu giảm biên độ 0,2
Biểu đồ tín hiệu giảm biên độ 0,5
Biểu đồ tín hiệu có pha đảo ngược
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.
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)
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);
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.