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

Mục lục

I. Giới thiệu đề tài: 3

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

Khối 1:Nén tín hiệu 4

Khối 2:Lượng tử hóa tín hiệu 6

Khối 3:Integer to Bit Converter 8

Khối 4:Mã chập 8

Khối 5: Điều chế QPSK 9

Khối 6:Kênh truyền cộng nhiễu AWGN (ADDITIVE WHITE GAUSSIAN NOISE) 10

Khối 7: Giải điều chế QPSK 12

Khối 8:Giải mã mã chập 12

Khối 9: Giải mã Bit to Integer Converter 13

Khối 10 : Giải mã lượng tử hóa DPCM 13

Khối 11: Giãn tín hiệu 14

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

III. KẾT LUẬN 17

IV. TÀI LIỆU THAM KHẢO: 17

 

 

docx17 trang | Chuyên mục: MATLAB | Chia sẻ: dkS00TYs | Lượt xem: 4484 | Lượt tải: 1download
Tóm tắt nội dung Đề 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, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ature Phase Shift Keying, gọi là điều chế pha cầu phương (điều chế pha vuông góc). QPSK là 1 kỹ thuật điều chế tín hiệu số, mã hóa 2 bit thành 1 symbol.
 Sơ đồ nguyên lý bộ điều chế QPSK sử dụng một trong 4 pha lệch nhau 900.
 Tín hiệu băng gốc được đưa vào bộ biến đổi nối nối tiếp thành song song. Đầu ra được 2 luồng số liệu có tốc độ bit giảm đi 1 nửa, đồng thời biến đổi tín hiệu đơn cực thành tín hiệu . Hai sóng mang đưa tới 2 bộ trộn làm lệch pha nhau 900. Tổng hợp tín hiệu đầu ra 2 bộ trộn ta được tín hiệu QPSK.
 Trong Matlab sử dụng hàm pskmod với số mức điều chế là 4 để thực hiện điều chế QPSK. Trước khi điều chế thì phải đưa 2 bit thành các ký tự từ 0 đến 3.
Code Matlab cho hàm QPSK
function sig_mod = QPSK(sig_conv)
%Dieu che QPSK cho tin hieu da dc ma chap
%Chuyen doi 2 bit thanh cac ky hieu
k = 2;%2bit/1ky tu
x = bi2de(reshape(sig_conv,k,length(sig_conv)/k).','left-msb'); 
sig_mod = pskmod(x,4);
end
Khối 6:Kênh truyền cộng nhiễu AWGN (ADDITIVE WHITE GAUSSIAN NOISE)
 Với một kênh thông tin cơ bản, tín hiệu tin tức sau khi điều chế sẽ được gửi đi trên kênh 
truyền. Trong thực tế tín hiệu khi truyền trên kênh truyền sẽ chịu tác động bởi các yếu tố của 
kênh truyền làm cho tín hiệu thu được không còn giống hoàn toàn tín hiệu phát. Tuỳ theo các 
dạng môi trường truyền khác nhau và các hệ thống thông tin khác nhau, sự tác động nói trên 
sẽ có những đặc trưng khác nhau. MATLAB cho phép người sử dụng mô phỏng ba loại kênh 
truyền cơ bản, đó là: kênh truyền với nhiễu AWGN, kênh truyền fading và kênh truyền đối 
xứng nhị phân.
 Kênh truyền AWGN là dạng kênh truyền có nhiễu cộng, trắng và phân bố theo hàm Gauss. 
Như vậy, một tín hiệu khi truyền qua kênh truyền này sẽ phải thêm vào một tín hiệu ngẫu 
nhiên không mong muốn phân bố theo hàm Gauss:
 Kênh truyền AWGN trong MATLAB được mô phỏng bằng hàm awgn. Hàm này sẽ cộng nhiễu Gauss vào một tín hiệu cho trước (có thể là tín hiệu thực hay phức), mức công suất nhiễu do người sử dụng quy định thông qua hai thông số nhập: 
- Mức công suất tín hiệu phát (đơn vịmặc định là dBW, hoặc có thểdùng đơn vị W) 
- TỷsốSNR (đơn vị mặc định là dB) 
Cú pháp của hàm awgn như sau: 
>> awgn(X,SNR,SigPower,State,PowerType) 
Trong đó: X là tín hiệu phát 
SNR là tỷ số công suất tín hiệu trên nhiễu (tính bằng dB) 
SigPower cho biết công suất tín hiệu vào (dBW), hoặc nếu SigPower = ‘measured’thì MATLAB sẽ đo công suất tín hiệu phát trước khi cộng nhiễu 
State cho biết trạng thái của bộ phát tín hiệu ngẫu nhiên 
PowerType chỉ ra đơn vịcủa SNRvà SigPowerlà đơn vịdecibel (‘dB’) hay đơn vị tuyến tính(‘linear’) 
 Ba thông số cuối không nhất thiết phải đưa vào, trong trường hợp không có các thông số này thì xem như công suất tín hiệu phát bằng 0 dBW và đơn vị của SNR là dB.
Code Matlab cho kênh AWGN:
function sig_noise = awgnchan(sig_mod)
%Cho tin hieu sau khi da dieu che vao kenh truyen cong nhieu AWGN
%Kenh truyen AWGN la kenh truyen nhieu trang va phan bo Gauss
%Gia su kenh truyen co nang luong bit tren mat do cong suat nhieu Eb/N0 =
%9dB
M = 4; %Dieu che QPSK
k = log2 (M);
nsamp = 1;
EbNo = 9;%Don vi dB
SNR = EbNo + 10*log10 (k) - 10*log10 (nsamp);
sig_noise = awgn(sig_mod,SNR,'measured');
end
Khối 7: Giải điều chế QPSK
Sơ đồ nguyên lý:
 Hai sóng mang chuẩn vào bộ trộn sau khi đã qua được đồng bộ với tín hiệu vào và qua các bộ lọc thông thấp sẽ thu được tín hiệu .Qua mạch logic sẽ được các tín hiệu đơn cực.
 Trong Matlab, để giải điều chế QPSK dùng hàm Z = pskdemod(Y,M,PHASE) với M = 4 là số mức điều chế, PHASE là pha ban đầu.
Code Matlab cho hàm giải điều chế:
function sig_demod = DeQPSK(sig_noise)
%Giai ma QPSK tin hieu sau khi cong nhieu
%Su dung ham pskdemod
sig_demod = pskdemod(sig_noise,4);
end
Khối 8:Giải mã mã chập
 Thuật toán Viterbi là một giải pháp được sử dụng phổ biến để giải mã chuỗi bit được mã hóa bởi bộ mã hóa mã chập. Thuật toán Viterbi có thể dùng để giải mã những chuỗi bit mà được mã hóa bởi bất cứ bộ mã chập nào.
 Tín hiệu sau khi mã hóa được đi qua kênh truyền sau đó đến bộ thu, tại đây tin hiệu được lượng tử hóa trước khi sử dụng thuật toán viterbit để giải mã.
 Sử dụng quyết định cứng với hàm videc để giải mã
len = 2;%Chieu dai traceback để giải mã
decbits = vitdec(encbits,trellis,len,’trunc’,’hard’,3);
Code Matlab cho hàm giải mã:
function sig_deconv = DeConv(sig_demod)
%DeConv khoi giai ma ma chap voi toc do R = 1/2
%Su dung hàm vitdec voi quyet dinh cung
%Dau vao la tin hieu sau khi giai dieu che QPSK
z = de2bi(sig_demod,'left-msb'); %Chuyen doi ky tu thanh cac bit nhi phan
z = reshape(z.',prod(size(z)),1); %Chuyen doi ma tran thanh 1 vecto
L = 3;
G = [5 7];
trellis = poly2trellis(L,G);
len = 2;
sig_deconv = vitdec(z,trellis,len,'trunc','hard');
end
Khối 9: Giải mã Bit to Integer Converter
 Khối này chuyển đổi từng 8 bit nhị phân thành các chỉ số index có giá trị từ 0 – 255.
Code Matlab cho hàm này:
function index = Decoder(sig_deconv)
%Bien doi 1 chuoi nhi phan thanh so thuc
%8 bit la 1 ky tu
z = reshape(sig_deconv,8,length(sig_deconv)/8);
z = z’;
index = bi2de(z,'left-msb');
end
Khối 10 : Giải mã lượng tử hóa DPCM
 Để thực hiện giải mã hoá DPCM, xác định sự phân hoạch với giá trị chỉ số index đầu vào và hàm dự đoán, để dự đoán giá trị của tín hiệu ở thời điểm hiện tại. Chúng ta sẽ sử dụng lại hàm dự đoán đã dùng ở phần mã hóa là: y = x(k-1). Trường hợp đặc biệt này m = 1 được gọi là điều chế delta.
predictor = [0 1]; % Hàm dự đoán y(k)=x(k-1)
[sig, quant] = dpcmdeco(index, codebook, predictor);
sig là tín hiệu tin tức được khôi phục còn quant là tín hiệu sai số dự đoán.
Code Matlab cho hàm:
function [sig,quants] = DeDPCM(index,codebook)
%Ham giai ma luong tu hoa DPCM
%Hàm du đoán y(k)=x(k-1)
predictor = [0 1];
[sig,quants] = dpcmdeco(index, codebook, predictor);
end
Khối 11: Giãn tín hiệu
 Tín hiệu trước khi lượng tử hóa đã được nén theo luật A, nên sau khi giải mã lượng tử hóa ta sẽ giãn tín hiệu để được tín hiệu thu được.
A = 87.6; %Thông số cho bộ giãn tín hiệu theo luật A
sig_r = compand(sig_quant,Mu,max(sig_quant),'mu/expander');
sig_quant là tín hiệu sau khi giải mã lượng tử hóa DPCM
Code Matlab:
function [sig_r] = expander(sig_quant)
%Ham giai nen theo luat A
A = 87.6; %Thong so A cua bo giai nen
sig_r = compand(sig_quant,A,max(sig_quant),'A/expander');
end
Khảo sát tỷ lệ lỗi bit trong đường truyền
 Sử dụng hàm bitter trong Matlab sẽ so sánh hai tập dữ liệu nhị phân cho trước và trả về số bit lỗi và tỷ lệ lỗi bit.
[number_of_errors,bit_error_rate] = biterr(sig_enc,sig_deconv);
 Phương sai:
dictor_r = sum((signal_r – signal).^2)/length(signal_r);
Với signal_r là tín hiệu thu được bên thu.
Code Matlab cho toàn chương trình:
>> %Đọc vào 1 tín hiệu âm thanh wav đã được lấy mẫu 16 bit với tần số lấy mẫu 8000Hz
>> [filename,pathname]=uigetfile('*.wav');
>> [signal Srate nBits] = wavread([pathname,filename]);
>> %File được đọc vào là BTL.wav
>> %Khảo sát tín hiệu signal
>>l = length(signal);
>>k = mod(l,1024);%Đảm bảo độ dài của signal là bội của 1024
>>signal = signal([1:l-k],1);% Loại bỏ k phần tử dư
>> 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;
>> %Thuc hiên LTH,Nén ,mã hóa, điều chế , truyền, giải điều chế
>> %từng frame một với frame(:,j) lấy tất cả các phần tử của cột thứ j
>> %Vòng lặp
>> for i = 1:k
sig_t = frame(:,i);%Chọn frame thứ i
sig_comp = compressor(sig_t);%Thuc hien nen
[index,sig_quant] = DPCM(sig_comp,codebook,partition);
sig_enc = Encoder(index);%Chuyen các chỉ số index sang chuỗi số nhị phân
sig_conv = EnConv(sig_enc);%Ma chap
sig_mod = QPSK(sig_conv);%Điều chế QPSK với pha 0
sig_noise = awgnchan(sig_mod);%Đưa tín hiệu đã điều chế lên kênh truyền AWGN
sig_demod = DeQPSK(sig_noise);%Giai điều chế QPSK
sig_deconv = DeConv(sig_demod);%Giải mã mã chập
index_out = Decoder(sig_deconv);%Chỉ số đầu ra
sig_dequant = DeDPCM(index_out,codebook);% giải mã lượng tử hóa
sig_r = expander(sig_dequant);% Giải nén
%sig_r là tín hiệu đầu ra ứng vào frame thứ i đầu vào
%Tính tỉ lệ lỗi bit trên mỗi frame[number_of_errors,bit_error_rate] = biterr(sig_conv,decodmsg)
[number_of_errors,bit_error_rate] = biterr(sig_enc,sig_deconv);
N_er(i) = number_of_errors;
B_er(i) = bit_error_rate;
%Phương sai trong mỗi frame
sig_r = sig_r’;
dictor(1,i) = sum((sig_r – sig_t).^2)/length(sig_r);
signal_re (:,i) = sig_r;%tín hiệu thu được đưa vào một cột của ma trận signal_r
end
>>%Kết thúc vòng lặp. Tín hiệu nhân được ở bên thu nằm trong ma trận signal_r
>>signal_r = reshape(signal_re,prod(size(signal_re)),1);%Chuyển ma trận về ma trận 1 cột
>>%Vẽ N_er và B_er
>>subplot(2,1,2);plot(B_er);title(‘Ty le loi bit tren moi frame’);xlabel(‘frame’);ylabel(‘Ty le bit loi’);
>>sound(signal_r);%Phát tín hiệu thu được
Kết quả:
Khi tín hiệu âm thanh đưa vào là file road.wav
Nhận xét: 
KẾT LUẬN
Độ dài của tín hiệu đầu vào càng lớn thì thời gian xử lý càng lâu.
Tỷ lệ lỗi bit tuân theo phân bố Gauss, với tỷ số Eb/No càng nhỏ thì tỷ lệ lỗi bit càng lớn.
Với Eb/No < 10dB thì nên sử dụng phương pháp điều chế BPSK, còn 10 < Eb/No < 17 thì sử dụng điều chế QPSK.
Tín hiệu thu được gần giống với tín hiệu phát đi nhưng có nhiễu là không đáng kể khi tỷ số Eb/No lớn.
TÀI LIỆU THAM KHẢO:
Nguyễn Quốc Trung:Xử lý tín hiệu và lọc số.
Quách Tuấn Ngọc:Xử lý tín hiệu số.

File đính kèm:

  • docxĐề 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.docx