Bài thực hành xử lý tín hiệu số với Matlab - Bài 2
Ứng dụng phép biến đổi Fourier rời rạc (DFT) phân tích phổ cho tín hiệu rời rạc có chiều dài hữu hạn:
Hàm phân tích phổ fft.
Cú pháp thường dùng: X=fft(x).
Với x là tín hiệu rời rạc có chiều dài N, X là DFT của x, số mẫu của X cũng bằng N.
Để lấy phổ biên độ, sử dụng hàm abs(X); phổ pha- dùng hàm angle(X).
HỌC VIỆN KỸ THUẬT QUÂN SỰ KHOA VÔ TUYẾN ĐIỆN TỬ BÀI THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ VỚI MATLAB – BÀI 2 HÀ NỘI - 2013 BÀI THỰC HÀNH 2: Ứng dụng phép biến đổi Fourier rời rạc (DFT) phân tích phổ cho tín hiệu rời rạc có chiều dài hữu hạn: Hàm phân tích phổ fft. Cú pháp thường dùng: X=fft(x). Với x là tín hiệu rời rạc có chiều dài N, X là DFT của x, số mẫu của X cũng bằng N. Để lấy phổ biên độ, sử dụng hàm abs(X); phổ pha- dùng hàm angle(X). Bài 1: Mỗi học viên lấy ngày, tháng, năm sinh của mình để tạo ra dãy rời rạc theo qui tắc sau: Năm – tháng - ngày sinh. Sau đó sử dụng DFT phân tích phổ cho dãy này. Vẽ các đồ thị và ghi chú đầy đủ theo hướng dẫn, bao gồm cả tên học viên. Tên học viên là: ĐẶNG SONG TOÀN, sinh năm 1980, tháng 05, ngày 10 thì dãy rời rạc là x= [1 9 8 0 0 5 1 0] Bài làm : Nhập ngày tháng năm sinh vào 1 dãy x theo yêu cầu ta có: >>x=[1 9 8 0 0 5 1 0] ; >> X=fft(x) X = Columns 1 through 5 24.0000 3.8284 - 9.8284i -8.0000 -14.0000i -1.8284 + 4.1716i -4.0000 Columns 6 through 8 -1.8284 - 4.1716i -8.0000 +14.0000i 3.8284 + 9.8284i >>pho_bien_do=abs(X) pho_bien_do = 24.0000 10.5477 16.1245 4.5547 4.0000 4.5547 16.1245 10.5477 >>pho_pha=angle(X) pho_pha = 0 -1.1994 -2.0899 1.9839 3.1416 -1.9839 2.0899 1.1994 * Nhận xét : tín hiệu là thực nên phổ biên độ là đối xứng. Sử dụng hàm stem để vẽ đồ thị phổ biên độ và phổ pha : >>stem(pho_bien_do) >>title('pho bien do,DANG SONG TOAN, 10/05/1980'); Hình 13: Phổ biên độ >>stem(pho_pha) >> title('pho pha,DANG SONG TOAN, 10/05/1980'); Hình 14 Phổ pha. Khi thực hiện DFT, ta nhận được các mẫu phổ cách nhau một quãng bằng (tính theo tần số chuẩn hóa). Số thứ tự của các mẫu phổ bắt đầu từ 0à7. Như vậy ta cần tạo ra lưới tần số (tương tướng với số đo của trục hoành) như sau: Trên matlab ta thực hiện các lệnh sau: >>f=2*pi/8*[0:1:7] f = 0 0.7854 1.5708 2.3562 3.1416 3.9270 4.7124 5.4978 >> stem(f,pho_bien_do) >> title('pho bien do,DANG SONG TOAN, 10/05/1980'); >>xlabel('tan so chuan hoa f'); Hình 15: Phổ biên độ với trục hoành là tần số chuẩn hóa >> stem(f,pho_pha) >> title('pho pha,DANG SONG TOAN, 10/05/1980'); >>xlabel('tan so chuan hoa f'); Hình 16: Phổ pha với trục hoành là tần số chuẩn hóa Bài 2 : - Hãy nêu rõ tác dụng và ý nghĩa của các dòng lệnh phân tích phổ cho tín hiệu thoại. Vì sao lại chỉ cần lấy một nửa số mẫu? - Mỗi học viên tự tạo một file .wav , sau đó thực hiện phân tích phổ cho file này. Vẽ đồ thị phổ biên độ theo hướng dẫn. Nội dung file: “ Tên tôi là…….. . Lớp…….”. Bài làm : MatLab làm việc với file âm thanh có phần mở rộng là “wav”, mã hóa kiểu PCM (Pulse Code Modulation). Để thực hành phần này, file âm thanh, chẳng hạn example.wav, cần phải được copy vào thư mục hiện hành. Thư mục hiện hành thông thường là thư mục WORK, hoặc thư mục MATLAB…(copy file vào thư mục Matlab ở Document). Lý do khi phân tích phổ ta chỉ cần lấy một nửa số mẫu là: âm thanh ( tiếng nói ) là tín hiệu thực nên phổ của chúng có tính đối xứng, do đó khi thực hiện phân tích phổ ta chỉ cần lấy một nửa số mẫu là được. Chẳng hạn thư mục hiện hành là MATLAB có chứa file âm thanh song toan.wav , file này mang nội dung: “Tên tôi là ĐẶNG SONG TOÀN lớp ra đa 1 - Bài tập xử lý tín hiệu số”. Sử dụng lệnh wavread để đọc file: >> [s,fs]= wavread(‘song toan.wav’); hoặc >> [s,fs]= wavread(‘song toan’); (Lưu ý đặt dấu ; đằng sau lệnh!) Sau khi thực hiện lệnh này, biến s chứa dữ liệu âm thanh, biến fs chứa tần số rời rạc hóa. Để xem tần số rời rạc hóa, ta nhập vào: >>fs Fs=8000 Như vậy file âm thanh song toan.wav có tần số rời rạc hóa bằng 8Khz. Bây giờ thực hiện phân tích phổ cho tín hiệu s: Trên cửa sổ lệnh Matlab ta gõ các lệnh sau: >> N=length(s); >> M=round(N/2); >> S=fft(s); >> f=fs*(1:M)/N; % Lấy ra lưới tần số vật lý ( đo bằng Hz) >> PhoBD=abs(S); >> Pho=PhoBD(1:M);% Chỉ lấy một nửa số mẫu. >> plot(f,Pho) >> title('pho cua file am thanh Song toan.wav,DANG SONG TOAN M-T-A'); Ta nhận được : Đồ thị phổ âm thanh như sau: Hình 17: Phổ pha âm than * Nhận xét: Từ hình trên ta nhận thấy phổ của file âm thanh song toan.wav tập trung chủ yếu ở khu vực 500-1000 Hz, tần số cực đại của phổ khoảng 4000 Hz.
File đính kèm:
- Bài thực hành xử lý tín hiệu số với Matlab - Bài 2.doc