1. Trang chủ
  2. » Luận Văn - Báo Cáo

Mã hóa truyền và giải mã tín hiệu âm thanh thời gian thực trên matlab

20 4 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Mã hóa truyền và giải mã tín hiệu âm thanh thời gian thực trên matlab
Tác giả Lê Văn Thuận, Hoàng Nam Phong
Người hướng dẫn ThS. Trần Mạnh Hoàng GV Nghĩa
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Xử lý tín hiệu số - Viễn thông
Thể loại Báo cáo bài tập lớn
Năm xuất bản 2012
Thành phố Hà Nội
Định dạng
Số trang 20
Dung lượng 514,89 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Sự phát triển của của công nghệ vi điện tử và máy tính cùng với sự phát triển của thuật toán tính toán nhanh đã làm phát triển mạnh mẽ các ứng dụng của XỬ LÝ SỐ TÍN HIỆU Digital Signal

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN TỬ - VIỄN THÔNG

BÁO CÁO BÀI TẬP LỚN

MÔN XỬ LÝ SỐ TÍN HIỆU

Đề tài:

Mã hóa, truyền và giải mã tín hiệu âm thanh thời

gian thực trên Matlab

Sinh viên thực hiện: Lê Văn Thuận 20092625

Hoàng Nam Phong 20092004 Lớp ĐTVT3 – K54

Giảng viên hướng dẫn : ThS Trần Mạnh Hoàng

Hà Nội, 11-2012

Trang 2

Mục lục

PHẦN A :Mở đầu 3

PHẦN B: Nội dung 4

I Phần mềm Matlab trong môi trường Windows 4

1) Matlab là gì 4

2) MATLAB System 4

3) Tổng quan môi trường làm việc của Matlab 5

II Nội dung bài tập lớn 6

1) Khối lượng tử hóa tín hiệu 7

2) Nén tín hiệu 9

3) Khối Integer to Bit Converter 10

4)Khối mã chập 10

5) Khối điều chế QPSK 12

6) Kênh truyền cộng nhiễu AWGN (ADDITIVE WHITE GAUSSIAN NOISE) 13

7) Khối giải điều chế QPSK 14

8) Khối giải mã mã chập 15

9) Khối giải mã Bit to Integer Converter 15

10) Khối giải mã lượng tử hóa DPCM 16

11) Khối giãn tín hiệu 16

12) Khảo sát tỷ lệ lỗi bit trong đường truyền 17

PHẦN C:KẾT LUẬN 20

Trang 3

PH N A :M đ u ẦN A :Mở đầu ở đầu ầu

Xử lý tín hiệu số (Digital Signal Processing -DSP) hay tổng quát hơn, xử lý tín hiệu rời rạc theo thời gian (Discrete-Time Signal Processing -DSP) là một môn học cơ sở khôngthể thiếu được cho ngành Điện tử - Viễn thông Tín hiệu liên tục theo thời gian (tín hiệu tương tự) cũng được xử lý một cách hiệu quả theo qui trình: biến đổi tín hiệu tương tự thành tín hiệu số (biến đổi A/D), xử lý tín hiệu số (lọc, biến đổi, tách lấy thông tin, nén, lưu trữ, truyền, ) và sau đó, nếu cần, phục hồi lại thành tín hiệu tương tự (biến đổi D/A) để phục vụ cho các mục đích cụ thể Các

hệ thống xử lý tín hiệu số, hệ thống rời rạc, có thể là phần cứng hay phần mềm hay kết hợp cả hai Xứ lý tín hiệu số có nội dung khá rộng dựa trên một cơ sở toán học tương đối phức tạp Nó

có nhiều ứng dụng đa dạng, trong nhiều lĩnh vực khác nhau Nhưng các ứng dụng trong từng lĩnh vực lại mang tính chuyên sâu Có thể nói, xử lý tín hiệu số ngày nay đã trở thành một ngành khoa học chứ không phải là một môn học

Sự phát triển của của công nghệ vi điện tử và máy tính cùng với sự phát triển của thuật toán

tính toán nhanh đã làm phát triển mạnh mẽ các ứng dụng của XỬ LÝ SỐ TÍN HIỆU (Digital

Signal Proccessing) Hiện nay, xử lý tín hiệu số đã trở thành một trong những ứng dụng cơ bản

cho kỹ thuật mạch tích hợp hiện đại với các chip có thể lập trình ở tốc độ cao

Trong lĩnh vực xử lý tín hiệu âm thanh,tiếng nói thì ứng dụng của xử lý số tín hiệu là rất rộng, trong đó có: nhận dạng tiếng nói, người nói; tổng hợp tiếng nói, biến văn bản thành tiếng nói; kỹ

thuật âm thanh số ;…Do vậy nhóm em đã chọn đề tài 4: Mã hóa, truyền và giải mã tín hiệu âm

thanh thời gian thực Matlab để thực hiện bài tập lớn.

Nhóm em xin gửi lời cảm ơn đến thầy Trần Mạnh Hoàng và Anh Nghĩa đã trực tiếp hướng dẫn, giúp đỡ chúng em hoàn thành bài báo cáo này

Trang 4

PH N B: N i dung ẦN A :Mở đầu ội dung

I Ph n m m Matlab trong môi tr ầu ềm Matlab trong môi trường Windows ường Windows ng Windows

1) Matlab là gì

MATLAB là một công cụ tính toán toán học MATLAB có thể được sửdụng để tính toán, nó cũng cho phép chúng ta vẽ các biểu đồ, đồ thị theo nhiều cách khác nhau Giống như một

chương trình phần mềm, chúng ta có thể tạo, thực thi và lưu một dãy các lệnh để máy tính có thể chạy tự động

Matlab còn là một ngôn ngư lập trình cấp cao cho mục đích tính toán kỹ thuật Chương trình tích hợp tính toán, đồ họa và lập trình trong một môi trường để sử dụng mà tất cả các vấn đề lời giải được biểu diễn dưới dạng các ghi chú toán học

Matlab là một hệ thống tương tác mà tất cả các phần tử dữ liệu cơ bản là một mảng không yêu cầu về mặt kích thước Đây là một thuận lợi cho phép người sử dụng giải quyết các bài toán trong kỹ thuật, đặc biết với tín hiệu âm thanh có tần số lấy mẫu lớn nên số mẫu cần xử lý là rất lớn

Tóm lại, như là một môi trường dùng để lập trình hay tính toán, MATLAB được thiết kế để làm việc với những tập dữ liệu đặc biệt chẳng hạn như ma trận, vector, hình ảnh hay tệp âm thanh

2) MATLAB System

Matlab gồm 5 thành phần chính là:

Development Environment : Tập hợp tất cả các công cụ và những tiện ích cho phép

người dùng sử dụng các hàm và file Matlab Phần lớn các công cụ này là giao tiếp người dùng bao gồm: Matlab Desktop và Command Window, Command History, Edit and Debugger, Workspace, trình duyệt hỗ trợ sử dụng help

The MATLAB Mathematical Function Library: Đây là thư viện tập hợp các giải thuật

tính toán được tập hợp trong các hàm cơ bản như: sum,sin,cosin, và số phức cho đến các hàm phức tạp như: nghịch đảo ma trận, trị riêng và các vecto riêng của ma trận, biến đổi Fourier rời rạc

Lập trình trong môi trường Matlab : Lập trình với Matlab Matlab là ngôn ngữ lập trình

cấp cao thực thi theo các đoạn lệnh, các hàm, cấu trúc dữ liệu, cho phép xây dựng các chương trình từ đơn giản đến phức tạp

Graphics : Matlab đã mở rộng các khả năng cho việc thể hiện vector và ma trận dưới

dạng đồ thị cũng như ký hiệu và in ấn chúng Matlab cung cấp các hàm nâng cao cho việc thể hiện dữ liệu 2,3 chiều, xử lý ảnh, âm thanh, chuyển động, đồ thị Ngoài ra Matlab còn cung cấp cho người sử dụng các hàm giao tiếp giữa người dùng và ứng dụng

Trang 5

The Matlab Application program Interface(API): Đây là thư viện cho phép người

dùng tạo ra những chương trình bằng ngôn ngữ C hoặc Fortran tương tác với Matlab

3) T ng quan môi tr ổng quan môi trường làm việc của Matlab ường Windows ng làm vi c c a Matlab ệc của Matlab ủa Matlab

Giao diện chính của phần mềm

Khởi động Matlab bằng cách nháy đúp vào biểu tượng Matlab trên màn hình

Muốn thoát ra khỏi chương trình nhập lệnh exit trong Command Window hoặc chọn Exit từ Menu File trên Desktop

Khi khởi động Matlab giao diện chính sẽ mở ra như hình trên, giao diện này chứa các công cụ(giao tiếp với người dùng) để quản lý tập tin, biến và các ứng dụng phụ trợ khác

Command Window

Help Browser

Current Directory Browser

Command history

WorkSpace Browser

Editor/Debugger

Trang 6

II N i dung bài t p l n ội dung ập lớn ớn

Đề tài: Mã hóa, truyền và giải mã tín hiệu âm thanh thời gian thực Matlab

Sơ đồ khối của quá trình thực hiện:

Tổng quan:

Do tín hiệu âm thanh thu được trên máy tính đã được lấy mẫu với chu kỳ lấy mẫu cho trước nên ta bỏ qua khối lấy mẫu

Tín hiệu sau khi lượng tử hóa được các chỉ số Index và Quant_out Mã hóa các Index bằng bộ

mã hóa Integer to Bit Converter, sau đó cho các bít nhị phân đi qua bộ mã hóa bằng mã chập (Convolutional Encoder) với tốc độ R = ½ nghĩa là số bít ra gấp 2 lần số bit đầu vào Tiếp tục điều chế QPSK tín hiệu trước khi đưa lên kênh truyền cộng nhiễu AWGN Channel Thực hiện giả mã lần lượt QPSK, mã chập, mã nhị phân là lượng tử hóa ta sẽ được tín hiệu tín hiệu có được tín hiệu bên thu

Sử dụng các lệnh sau để đọc vào 1 file âm thanh wav:

[filename,pathname]=uigetfile('*.wav');

[signal Srate nBits] = wavread([pathname,filename]);

Trang 7

signal là một ma trận lưu dữ liệu âm thanh; nếu wav-file là mono thì signal là vector cột, còn

stereo thì nó là ma trận có 2 cột

Srate là tốc độ lấy mẫu của file này.

nBits là số bit dùng để lưu một mẫu dữ liệu.

filename đưa vào là file Test.wav đi kèm.

Khảo sát tín hiệu đưa vào:

Mp = max(signal);

bits = 8;%Dùng 8 bit để mã hóa 1 mẫu

levels = 2^bits;%So mau 8 bit mã hóa được

step_size = (2*Mp)/levels;%Bước nhảy cho mỗi khoảng

codebook = [-Mp+step_size:step_size:Mp]; % Số đại diện cho mỗi khoảng trong phần

%partition

partition = [-Mp+2*step_size:step_size:Mp] %Chia tín hiệu thành 256 khoảng

%Chia tín hiệu thành các frame, mỗi frame có chứa 1024 mẫu

frame = reshape(signal,1024,length(signal)/1024);

%frame là một ma trận có 1024 hàng và length(signal)/1024 cột

k = length(signal)/1024;

1) Kh i l ối lượng tử hóa tín hiệu ượng tử hóa tín hiệu ng t hóa tín hi u ử hóa tín hiệu ệc của Matlab

Lượng tử hoá là quá trình rời rạc hoá tín hiệu về mặt biên độ, cụ thể là thay thế tất cả các giá trị của tín hiệu nằm trong một khoảng xác định nào đó thành một giá trị duy nhất Miền giá trị của tín hiệu được chia thành một số hữu hạn các khoảng chia Nhưvậy, độ lớn của tín hiệu sau khi lượng tử chỉ có thể nhận một trong số hữu hạn các giá trị cho trước

Tập hợp các khoảng chia gọi là sự phân hoạch của tín hiệu (partition) Tập các giá trị thay thế cho mỗi khoảng chia gọi là bộ mã (codebook)

MATLAB biểu diễn phân hoạch của tín hiệu bằng một vector mà các phần tử của nó là các điểm ranh giới giữa hai khoảng chia liên tiếp Ví dụ, nếu tín hiệu có miền xác định là R, được phân hoạch thành các khoảng (-∞, 0], (0,2], (2,4] và (4,+∞) thì có thể biểu diễn sự phân hoạch này bằng vector:

Trang 8

>> partition = [0,2,4];

Tương ứng với vector phân hoạch tín hiệu là vector biểu diễn bộ mã tín hiệu Các phần tử của

nó là các giá trị thay thế trong mỗi khoảng chia tương ứng của phân hoạch Nếu ta thay thế các giá trị trong khoảng (-∞, 0] bằng -1, các giá trị trong khoảng (0,2] bằng 1, các giá trị trong khoảng (2,4] bằng 3 và các giá trị trong khoảng (4, +∞] bằng 5 thì vector biểu diễn bộ mã sẽ là:

>> codebook = [-1,1,3,5];

Như trên đã đề cập, thông thường người ta sẽ phân hoạch miền xác định của tín hiệu thành 2^v khoảng, sau đó mỗi khoảng tín hiệu sẽ được lượng tử hoá, sau đó mã hoá bằng một từ mã nhị phân có chiều dài v bit Phương pháp lượng tử hoá này được gọi là phương pháp điều mã xung (Pulse Code Modulation) Phương pháp này không cần đòi hỏi bất kỳ thông tin nào về tín hiệu ở các thời điểm trước đó Trong thực tế, vì tín hiệu thường thay đổi chậm từ thời điểm lấy mẫu này sang thời điểm lấy mẫu kế tiếp nên nếu ta thực hiện lượng tử và mã hoá các giá trị sai biệt giữa thời điểm hiện tại với thời điểm trước đó thì sẽ tốn ít giá trị hơn so với mã hoá đầy đủ độ lớn của tín hiệu Trên cơ sở này, ta có một phương pháp lượng tử hoá mới, gọi là lượng tử hoá tiên đoán, trong đó giá trịcủa tín hiệu ở thời điểm hiện tại sẽ được tính thông qua một số các giá trị của tín hiệu ở các thời điểm quá khứ Tiêu biểu cho loại lượng tử hoá này là kỹ thuật điều mã xung vi sai (DPCM – Differential Pulse Code Modulation)

Để thực hiện mã hoá DPCM, ta không những phải xác định sự phân hoạch và bộ mã lượng tử

mà còn phải xác định hàm dự đoán, để dự đoán giá trị của tín hiệu ở thời điểm hiện tại Thông thường, người ta sử dụng hàm dự đoán tuyến tính:

y(k) = p(1)x(k-1) + p(2)x(k-2) + + p(m-1)x(k-m+1) + p(m)x(k-m) (14.1)

trong đó x là tín hiệu gốc còn y(k) là giá trịdự đoán của x(k); p là một vector gồm các hằng số thực

Thay vì lượng tử hoá tín hiệu x, ta sẽ thực hiện lượng tử hoá tín hiệu sai số dự đoán y – x m được gọi là bậc dự đoán Trường hợp đặc biệt m = 1 được gọi là điều chế delta

Trong MATLAB Communications Toolbox, hàm dự đoán được sửdụng là hàm dự đoán tuyến tính như trên và được biểu diễn bằng vector:

>> predictor = [0, p(1), p(2), p(3), , p(m-1), p(m)]

Sử dụng hàm dpcmenco thực hiện quá trình mã hóa với quant là vector chứa các giá trị lượng

tử còn index là vector chứa các chỉ số tương ứng trong bộ mã.

Code Matlab:

function [index,sig_quants] = DPCM(sig_comp,bits)

Trang 9

% Luong tu hoa DPCM voi tin hieu sig_comp sau khi nen

% bits la so bit bieu dien 1 mau

%Su dung ham du doan la y(k) = x(k-1)

predictor = [0 1]; % Ham du doan delta bac 1

[index,sig_quants] = dpcmenco(sig_comp,codebook,partition,predictor);

end

2) Nén tín hi u ệc của Matlab

Trong các ứng dụng xử lý tín hiệu thoại (speech processing), trước khi lượng tử hoá, người ta thường thực hiện nén (compress) tín hiệu theo hàm logarithm, mục đích là để tín hiệu ở mức biên

độ nhỏ sẽ thay đổi nhiều mức hơn so với ở các giá trị biên độ lớn, do đó sai số lượng tử tương đối ở các mức biên độ nhỏ và lớn sẽ không chênh lệch nhau nhiều như đối với trường hợp không nén

Để khôi phục lại đúng tín hiệu ban đầu thì sau khi giải mã, ta phải đưa qua một bộ giãn tín hiệu (expander) có đặc tuyến truyền đạt là nghịch đảo của đặc tuyến của bộ nén (compressor)

Sự kết hợp của bộ nén và bộ giãn tín hiệu gọi chung là bộ nén giãn tín hiệu (compander) Hai luật nén giãn thường được sửdụng trong xử lý tín hiệu thoại là luật μ dùng ở Bắc Mỹ và luật A dùng ở châu Âu:

Luật µ :

max max

sgn ln(1 )

x x

Theo các chuẩn ởBắc Mỹ, giá trịcủa μ là 255 Max x và Max y lần lượt là các giá trị dương lớn nhất của x và y

Luật A:

max max

max max

1 ln

1 ln[ ( / )]

sgn

1 ln

A x x

A y

A x x

A



max max

1 0

1

1

x

x

A x

với A là hắng số Giá trịchuẩn của A là 87.6

MATLAB cung cấp hàm compand để thực hiện nén giãn tín hiệu Hàm này hỗ trợ hai luật nén giãn A và μ nói trên

>> out = compand(in, param, v, method)

In là tín hiệu vào còn out là tín hiệu ra

Trang 10

v là biên độ đỉnh của tín hiệu vào

param là thông số của luật nén giãn (hằng sốA hoặc μ)

method có thể nhận một trong các giá trị sau:

Code Matlab:

function sig_comp = compressor(sig_t)

%Nen tin hieu truoc khi dua vao khoi luong tu hoá

%sig_t la tin hieu dua vao

%Su dung nen theo luat A voi he so A = 86.7

A = 87.6;

V = max(sig_t);

sig_comp = compand(sig_t,A,V, 'A/compressor' );

end

3) Kh i Integer to Bit Converter ối lượng tử hóa tín hiệu

Chuyển đổi các giá trị index từ 0- 255 thành các số nhị phân 8 bit

Code Matlab:

function sig_enc = Encoder(index)

%Bien doi tu ma thap phan sang nhi phan k bit

ysym = de2bi(reshape(index, 'left-msb' ); %Bien doi chuoi thap phan

%thanh chuoi bit nhi phan

sig_enc = reshape(ysym.',prod(size(ysym)),1);

end

4)Kh i mã ch p ối lượng tử hóa tín hiệu ập lớn

Mã chập là một phương pháp mã hoá sửa sai quan trọng Khác với mã khối, mã chập là loại mã

có nhớ Mặc dù, bộ mã hoá chập cũng nhận các thông điệp có số lượng ký hiệu xác định và tạo

Trang 11

ra một từ mã cũng có số ký hiệu xác định, nhưng từ mã tạo ra ở mỗi thời điểm không chỉ phụ thuộc vào các ký hiệu của thông điệp hiện tại mà còn phụthuộc vào các ký hiệu của các thông điệp đã được mã hoá trước đó

Mã chập là mã tuyến tính có ma trận sinh có cấu trúc sao cho phép mã hóa có thể xem như 1 phép lọc Mã chập được sử dụng rộng rãi trong thực tế bởi mã hóa được xem như một tập hợp các bộ lọc số tuyến tính với các mã là các đầu ra của bộ lọc được ghép xen kẽ

Bộ mã hóa cho mã chập thường được coi là một tập hợp các bộ lọc số Ví dụ:

Dòng mk đi qua 2 bộ lọc dùng chung các phần tử nhớ tạo ra 2 dòng ra

C(1)

k = mk + mk-1 + mk-2 và C(2)

k = mk + mk-2

Vì cứ mỗi bit vào lại có hai bit được mã hóa đưa ra, kết quả là ta được một mã có tốc độ R=1/2

M ã c h ậ p đ ư ợ c t ạ o r a b ằ n g c á c h c h o c h u ỗ i t h ô n g t i n t r u y ề n q u a h ệ t h ố n g

c á c thanh ghi dịch tuyến tính có số trạng thái hữu hạn Cho số lượng thanh ghi dịch

là m (cũng ký hiệu là N), bộ mã có k bit ngõ vào và đầu ra bộ mã chập có n bit ngõ ra(n hàm đại

số tuyến tính hoặc n ngõ ra cộng modulo) Tốc độ mã là R = k/n, s ố ô nhớ của bộ ghi dịch là m×k và tham số L gọi là chiều dài ràng buộc (Constraint length) của mã chập

(với L=k(m-1))

Code Matlab cho việc mã hóa mã chập:

function sig_conv = EnConv(sig_bit)

%Ham ma chap voi toc do R=1/2

%Cac da thuc sinh la G2=5, G3=7

%Chieu dai rang buoc L=3

%inpbits la tin hieu vào

L=3;

G =[5 7];

trellis = poly2trellis (L,G);

sig_conv = convenc(sig_bit,trellis);

end

Ngày đăng: 23/06/2023, 22:28

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w