matlab audio

23
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

Upload: thien-phu

Post on 27-Nov-2014

123 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Matlab Audio

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

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

Đọ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

Đọc file wav

Ví dụ:

Fs

nbits

Page 5: Matlab Audio

Đọc file wav

size = wavread(filename, 'size')

siz = [samples channels]

Page 6: Matlab Audio

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

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

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

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

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 12: Matlab Audio

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

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

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

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

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

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

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

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

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

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

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

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)