Matlab Audio
Transcript of Matlab Audio
![Page 1: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/1.jpg)
HƯỚNG DẪN THỰC HÀNH
Dương Chí Nhân
Quách Khả Gia
Bộ môn Khoa học máy tính
Khoa Công nghệ thông tin
![Page 2: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/2.jpg)
Nội dung•Đ
ọc ghi file audio (wav).
•Hiển thị sóng
•Một số thao tác với phần hiển thị sóng
•Chuyển đổi sáng miền tần số DCT, DFT.
![Page 3: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/3.jpg)
Đọc file wav
Để đọc/load một file audio (.wav) dùng hàm wavread với cú pháp như sau:◦ y = wavread(filename) ◦ [y, Fs, nbits] = wavread(filename) ◦ [y, Fs, nbits, opts] = wavread(filename)
Trong đó◦y: dữ liệu các sample của file wav◦Fs : sample rate (Hz)◦nbits: số lượng bit trên 1 sample◦opts: 1 cấu trúc lưu những thông tin khác của file
wav
![Page 4: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/4.jpg)
Đọc file wav
Ví dụ:
Fs
nbits
![Page 5: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/5.jpg)
Đọc file wav
size = wavread(filename, 'size')
siz = [samples channels]
![Page 6: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/6.jpg)
Lấy thông tin khác của file wav
[m d] = wavfinfo(filename)◦m : chuỗi cho biết có phải đây là file wav hay
không◦d: thông tin về số lượng sample và số channel
của file
![Page 7: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/7.jpg)
Ví dụ đọc và play file wav// hfile lưu đường dẫn đến file wav
hfile = 'H:\Vi toi la chang ngoc.wav';
// đọc file wav
[y, Fs, nbits, readinfo] = wavread(hfile);
// play file wav
p = audioplayer(y, Fs);
play(p);
// stop file wave
stop(p);
![Page 8: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/8.jpg)
ghi file wav
Để ghi/lưu một file audio (.wav) dùng hàm wavwrite có cú pháp như sau:
wavwrite(y,filename)wavwrite(y,Fs,filename)wavwrite(y,Fs,N,filename)
![Page 9: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/9.jpg)
Ví dụ ghi file wav
// đường dẫn đến file wav
hfile = 'H:\Vi toi la chang ngoc.wav';
// đọc file wave
[y, Fs, nbits, readinfo] = wavread(hfile);
// đường dẫn file wav lưu
hfile1 = 'H:\Vi toi la chang ngoc1.wav';
// ghi file wave
wavwrite(y, Fs, hfile1)
![Page 10: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/10.jpg)
Hiển thị sóngĐể hiển thị sóng của một file wav, bạn có thể dùng plot
với cú pháp như sau◦ plot(Y)
Ví dụ:
// tên file wave
hfile = 'handel.wav';
// đọc file wave
[y, Fs, nbits, readinfo] = wavread(hfile);
// hiển thị sóng
plot(y)
![Page 11: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/11.jpg)
Một số thao tác khi hiển thị sóng
http://www.mathworks.com/support/2009a/matlab/7.8/demos/LinkedPlotsAndDataBrushing.html
![Page 12: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/12.jpg)
Chuyển đổi sang miền tần số DCTĐể chuyển tín hiệu một chiều sang miền tần số DCT,
dùng hàm dct với cú pháp như sau:
y = dct(u)
◦ u : tín hiệu một chiều.◦ y : kết quả biến đổi dct2 trả về.
Ví dụ:
// phát sinh mảng tín hiệu 1 chiều
a = rand(100,1);
// biến đổi dct 1 chiều
y0 = dct(a);
figure,plot(abs(y0)),title('abs(DCT)');
![Page 13: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/13.jpg)
Chuyển đổi sang miền tần số DCTĐể biến đổi ngược lại từ miền DCT, dùng hàm idct với
cú pháp như sau:
y = idct(u)
◦ u : tín hiệu trong miền dct.◦ y : kết quả trả về của biến đổi dct ngược.
Ví dụ:
// biến đổi dct ngược
arec0 = idct(y0);
figure,plot(abs(arec0)),title('abs(IDCT)');
![Page 14: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/14.jpg)
Chuyển đổi sang miền tần số DCTĐể chuyển tín hiệu 2-chiều sang miền tần số DCT, dùng
hàm dct2 với cú pháp như sau:
y = dct2(u)
◦ u : tín hiệu 2-chiều.◦ y : kết quả biến đổi dct2 trả về.
Ví dụ:
// load một ảnh màu
RGB = imread('Love friend.jpg');
I = rgb2gray(RGB); // chuyển ảnh màu sang gray
J = dct2(I); // biến đổi dct2
// hiển thị log của abs(J)
imshow(log(abs(J)),[]), colormap(jet(64)), colorbar
![Page 15: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/15.jpg)
Chuyển đổi sang miền tần số DCTĐể biến đổi ngược lại từ DCT, dùng hàm idct2 với cú
pháp như sau:
y = idct2(u)
◦ u : tín hiệu 2-chiều từ miền dct.◦ y : kết quả biến đổi dct ngược trả về.
Ví dụ: (tiếp ví dụ trước)
K = idct2(J); // biến đổi dct2 ngược
figure, imshow(I) // hiển thị ảnh I
figure, imshow(K,[0 255]) // hiển thị ảnh biến đổi ngược lại
![Page 16: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/16.jpg)
Chuyển đổi sang miền tần sốChuyển tín hiệu 1 chiều sang miền tần số fourier rời rạc
(DFT), dùng hàm fft với cú pháp như sau:
y = fft(u)◦ u : vector cần chuyển sang DFT.◦ y: kết quả biến đổi DFT.
Ví dụ
// phát sinh mảng tín hiệu 1 chiều
a = rand(100,1);
// biến đổi fft
y0 = fft(a);
figure,plot(abs(y0)),title('abs(DFT)');
![Page 17: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/17.jpg)
Chuyển đổi sang miền tần sốĐể biến đổi ngược lại từ miền tần số fourier rời rac
(DFT), dùng hàm ifft với cú pháp như sau:
y = ifft(u)◦ u : vector biểu diễn giá trị ở miền DFT.◦ y: kết quả biến đổi DFT ngược.
Ví dụ: (tiếp ví dụ trước)
// biến đổi ifft ngược
arec0 = ifft(y0);
figure,plot(abs(arec0)),title('abs(IDFT)');
![Page 18: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/18.jpg)
Chuyển đổi sang miền tần sốChuyển tín hiệu 2 chiều sang miền tần số fourier rời rac
(DFT), dùng hàm fft2 với cú pháp như sau:
y = fft2(u)◦ u : tín hiệu 2 chiều cần chuyển sang DFT.◦ y: kết quả biến đổi DFT.
Ví dụ
// phát sinh mảng tín hiệu 1 chiều
a = rand([100,100]);
// biến đổi fft2
y0 = fft2(a);
![Page 19: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/19.jpg)
Chuyển đổi sang miền tần sốĐể biến đổi ngược lại từ miền tần số fourier rời rạc
(DFT), dùng hàm ifft2 với cú pháp như sau:
y = ifft2(u)◦ u : tín hiệu 2 chiều ở miền DFT.◦ y: kết quả biến đổi DFT ngược.
Ví dụ: (tiếp ví dụ trước)
// biến đổi fft2 ngược
arec0 = ifft2(y0);
![Page 20: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/20.jpg)
Các bộ lọc
Để lọc trên tín hiệu một chiều, người ta dùng hàm filter với cấu trúc như sau
y = filter(b,a,X)[y,zf] = filter(b,a,X)[y,zf] = filter(b,a,X,zi)y = filter(b,a,X,zi,dim)[...] = filter(b,a,X,[],dim)
![Page 21: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/21.jpg)
Ví dụ lọc tín hiệu 1 chiềuhfile = 'handel.wav';
[y, Fs, nbits, readinfo] = wavread(hfile);
// ma trận lọc
windowSize = [0.2 0.2 0.2 0.2 0.2];
// lọc
z = filter(windowSize,1,y);
// hiển thi kết quả
figure, plot(y)
figure, plot(z)
![Page 22: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/22.jpg)
Các bộ lọc
Để lọc trên tín hiệu hai chiều, người ta dùng hàm filter2 với cấu trúc như sau
Y = filter2(h,X) Y = filter2(h,X,shape)
![Page 23: Matlab Audio](https://reader033.fdocuments.in/reader033/viewer/2022061200/54766735b4af9f9a6d8b45da/html5/thumbnails/23.jpg)
Ví dụ lọc tín hiệu 2 chiềuhfile = 'handel.wav';
[y, Fs, nbits, readinfo] = wavread(hfile);
// ma trận lọc
windowSize = [0.2 0.2 0.2 ; 0.2 0.2 0.2];
// lọc
z = filter2(windowSize,y);
// hiển thi kết quả
figure, plot(y)
figure, plot(z)