Tải bản đầy đủ (.docx) (14 trang)

Bài tập lớn Mô phỏng hệ thống truyền thông

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (533.36 KB, 14 trang )

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA VIỄN THÔNG 1

BÀI TẬP LỚN
Môn: MÔ PHỎNG HỆ THỐNG TRUYỀN THÔNG
Giảng viên: Ngô Thị Thu Trang

Vũ Văn Cường – D14VT03
MSV- B14DCVT185

Hà Nội, 2017
0


Nội dung
I.

Nhiệm vụ 1............................................................................................3
1. Chương trình mô phỏng......................................................................4
1.1. Tín hiệu đầu vào...........................................................................4
1.2. Qúa trình nén................................................................................4
1.3. Quá trinh giải nén.........................................................................5
1.4. Quá trình lượng tử hóa và mã hóa PCM........................................5
1.5. Giải mã PCM..................................................................................5
1.6. Vẽ tín hiệu sau khi giải mã............................................................6
1.7. Vẽ phổ...........................................................................................6
1.8. Xác định sai số..............................................................................6
2. Chạy và đưa ra kết quả......................................................................6
2.1. Tín hiệu đầu vào...........................................................................7
2.2. Quá trình nén................................................................................7
2.3. Mã hóa PCM..................................................................................8


2.4. Giải mã PCM..................................................................................9
2.5. Giải nén.........................................................................................9
2.6. Biểu diễn sai số...........................................................................10
3. Nhận xét...........................................................................................10

II.

Nhiệm vụ 2..........................................................................................11
1. Chương trình mô phỏng....................................................................11
1.1. Chương trình chính.....................................................................11
1.2. Bộ lọc butterwflt........................................................................12
1.3. Kênh AWGN.................................................................................12
1.4. Bộ chuyển chuỗi bit thành mã đường AMI..................................12
2. Kết quả mô phỏng............................................................................13

1


I.

Nhiệm vụ 1

Mô phỏng quá trình PCM 8 bít cho tín hiệu tương tự, trong đó tín hiệu
tương tự đầu
vào được mô tả bởi công thức sau:

Với lần lượt là [1, 2, 1], lần lượt là 1000Hz,8000Hz,5000Hz
Cụ thể:

Tín

hiệu
tương
tự

Bộ nén

Bộ
lượng
tử hóa

Bộ mã
hóa

Chuỗi
bit

Sơ đồ khối quá trình nén luật µ(255) và điều chế PCM.
Các bước thực hiện:
Bước 1: Nén biên độ tín hiệu theo luật µ(255). Tần số lấy mẫu fs = 4fmax = 4.8000 =
32000(Hz).Ta được y(t) là tín hiệu nén của x(t).
Bước 2 : Lượng tử hóa đều tín hiệu vừa nén y(t). Với 8 bit/mức => ta sẽ có 2^8=256
mức.
Bước 3 : Mã hóa các mức bằng phương pháp điều mã xung PCM. Tín hiệu ra sau khi
PCM là các khối code 8 bit.
1. Chương trình mô phỏng
1.1. Tín hiệu đầu vào
function [x] = tinhieuvao(f1,f2,f3) %f1,f2,f3 tần số theo MSV
( MSV = 185)
fs=32000; % Tần số lấy mẫu bằng 4 lần tần số max ( max = 8000hz)
Ts=1/fs;

t=0:Ts:3/f1;

2


x1=cos(2*pi*f1*(t+t.^2));
x2=2*cos(2*pi*f2*(t-t.^2));
x3=cos(2*pi*f3*(t+t.^2));
x=x1+x2+x3;
plot(t,x)
title('Tin Hieu Tuong Tu');
xlabel('Time(s)');
ylabel('Amplitude');
grid on;

1.2.

Qúa trình nén

function [y,amax] = mulaw(x,mu)%Hàm nén
%x- Chuỗi tín hiệu đầu vào
%mu-Tham số nén của bộ nén mu=255.
%out-Chuỗi tín hiệu đầu ra của bộ nén
amax = max(abs(x)); % Biên độ cực đại của tín hiệu vào
xn = x/amax; % Chuẩn hóa tín hiệu vào
y = sign(x).*log(1+mu*abs(xn))/log(1+mu);
y = y*amax;%Tín hiệu ra
end

1.3.


Quá trinh giải nén

function [ out ] = GiaiNen( in )
%Giải nén tín hiệu
%in Là tín hiệu đưa vào giải nén
%Sử dụng nén theo luật mu voi hệ số mu = 255
mu=255;
V = max(in); %Biên độ lớn nhất của tín hiệu
out = compand(in,mu,V,'mu/expander'); %Nen TH theo mu
end

1.4.

Quá trình lượng tử hóa và mã hóa PCM

function [code,vq] = uniform_pcm(x,M)
% x = y – Đầu ra của bộ giải nén
% M = Số mức lượng tử M=32
% code = Mã đầu ra
% vq = Tín hiệu lượng tử trước khi mã hóa
Nb = log2(M);
Amax = max(abs(x));
delta = 2*Amax/(M-1);
Mq = -Amax:delta:Amax;
Ml = 0:M-1;
vq = zeros(size(x));
xcode = vq;
for k = 1:M
ind = find(x > Mq(k)-delta/2 & x <= Mq(k)+delta/2);

vq(ind) = Mq(k);
xcode(ind) = Ml(k);
end
code = de2bi(xcode,Nb,'left-msb');% Chuyển các mức lượng tử thành
mã nhị phân
figure
stairs(vq,'r');
axis([0 length(vq) min(vq)-1 max(vq)+1]);
grid on;

3


1.5.

Giải mã PCM

function [ dcode,xq ] = d_PCM( Amax,code,M )
% Amax = amax- biên độ cực đại của tín hiệu vào
% code mã đầu vào bộ giải mã
% M mức lượng tử
% dcode mã đầu ra bộ giải mã
% xq tín hiệu lượng tử sau giải mã
dcode=bi2de(code,'left-msb');
[a,b]=size(dcode);
delta = 2*Amax/(M-1);
Mq = -Amax:delta:Amax;
xq = zeros(1,a*b);
for k = 1:length(xq)
xq(k)=Mq(dcode(k)+1);

end
figure
stairs(xq,'g');
axis([0 length(xq) min(xq)-1 max(xq)+1]);
grid on;
end

1.6.

Vẽ tín hiệu sau khi giải mã

plot(out2);
grid
error=((norm(x)-norm(out2))/sqrt(length(x)))^2; %Sai số
sqnr = 20*log10(norm(x)-norm(x-out2)); % Tỷ số tín hiệu trên nhiễu

1.7.

Vẽ phổ

f = [1000 8000 5000 ];
subplot(3,1,1);
[f,Xf] = spectrocal(t,x);
semilogy(f,Xf);grid; % Phổ của tín hiệu gốc
title('Pho tin hieu goc');
subplot(3,1,2);
[f,Yf] = spectrocal(t,vq);
semilogy(f,Yf);grid; % Phổ tín hiệu lượng tử hóa
title('Pho tin hieu luong tu hoa');
subplot(3,1,3);

[f,Zf] = spectrocal(t,xq2);
semilogy(f,Zf);grid; % phổ tín hiệu khôi phục
title('Pho tin hieu khoi phuc');

1.8.

Xác định sai số

fs=32000;
Ts=1/fs;
t=0:Ts:3/1000;
xq3 = invmulaw(vq,255);
xq3 = xq3*amax;
error = (x-xq3).^2;
% Xác định sai số
plot(t,error); % Biểu diễn sai số
title('Sai so','fontsize',13);
xlabel('time (s)'); ylabel('error');
Trong đó hàm invmulaw
function x = invmulaw(y,mu)
% The inverse of mu-law nonlinearity
% mu - mu constant
% y - compressed input
% x - expanded output

4


x = sign(y).*((1+mu).^abs(y)-1)/mu;
end


2. Chạy và đưa ra kết quả

Kết quả chương trình

2.1. Tín hiệu đầu vào
Chạy chương trình trong command window

Tín hiệu đầu vào

5


2.2.

Quá trình nén

Kết quả sau khi nén

2.3.

Mã hóa PCM
Tín hiệu sau khi mã hóa PCM

6


Tín hiệu sau lượng tử và tín hiệu gốc

2.4.


Giải mã PCM

Trong đó: - dcode: mã đầu ra bộ giải mã
- xq2: tín hiệu lượng tử hóa sau khi được giải mã
2.5.

Giải nén

Out2: Tín hiệu khôi phục lại
Vẽ tín hiệu sau khi giải nén

7


Tín hiệu sau khi giải nén

Tín hiệu sau khôi phục và tín hiệu gốc

2.6.

Biểu diễn sai số
Sai số

8


3. Nhận xét
- Thực hiện mô phỏng ta thấy mã hóa PCM có tổn thất
- Sai số lớn khi biên độ tín hiệu thay đổi lớn, sai số nhỏ khi biên độ tín hiệu ít có

sự thay đổi
- Tín hiệu khôi phục có dạng tương tự tín hiệu gốc.
II.

Nhiệm vụ 2
Sơ đồ hệ thống

Tínhiệu Mã
TínHiệu
BộLọc Kênh
mãhóa đường
SauGiải
Phát AWGN
PCM AMI

Mô phỏng hệ thống truyền dẫn số băng gốc cho tín hiệu được mã hóa PCM
đã thực hiện trong nhiệm vụ 1. Mã đường lưỡng cực cho hệ thống mình mô
phỏng

9


1. Chương trình mô phỏng
1.1.
Chương trình chính
f1=1000; %Tần số ở các thành phần
f2=8000;
f3=5000;
fs=32000;
Ts=1/fs; % Vecto thời gian

t=0:Ts:3/f1;
x1=cos(2*pi*f1*(t+t.^2));
x2=2*cos(2*pi*f2*(t-t.^2));
x3=cos(2*pi*f3*(t+t.^2));
x = x1+x2+x3;
mu = 255; % Hệ số nén
M = 32; % Số mức lượng tử
[y,amax] = mulaw(x,mu); % Nén biên độ
[code,yq] = uniform_pcm(y,M); % Lượng tử hóa PCM
code1 = code'; % Chuyển vị
code2 = reshape(code1,1,length(t)*5); % Chuyển sang vectow hàng
[t,y,code3] = amicode(code2,1e6,430,'NRZ'); % Chuyển chuỗi bit qua mã đường
AMI
yp = butterwflt(y,2,0.2,1/28); % Tín hiệu qua bộ lọc butterwflt
SNRdB =[1 3 6]; % SNR tính theo dB
for i=1:3
SNR(i) = 10^(SNRdB(i)/10); % SNR tinh theo lần
varn(i) = var(code2)/SNR(i);
end
yNoise1 = addnoise(code2,varn(1)); % Tín hiệu + Nhiễu SNR = 1 dB
yNoise2 = addnoise(code2,varn(2)); % Tín hiệu + Nhiễu SNR = 3 dB
yNoise3 = addnoise(code2,varn(3)); % Tín hiệu + Nhiễu SNR = 6 dB
yt1 = yNoise1 > 1/2; % Ngưỡng quyết định là 1/2
yt2 = yNoise2 > 1/2; % Ngưỡng quyết định là 1/2
yt3 = yNoise3 > 1/2; % Ngưỡng quyết định là 1/2
BER1 = sum(xor(yt1,code2)); % BER tại SNR= 1 dB
BER2 = sum(xor(yt2,code2)); % BER tại SNR= 3 dB
BER3 = sum(xor(yt3,code2)); % BER tại SNR= 6 dB

1.2.


Bộ lọc butterwflt

function y = butterwflt(x,n,B,Ts)
% B – Băn thông bộ lọc
% Ts – Tần số lấy mẫu
% n - filter order
% y – Chuỗi đầu ra
Ns = length(x);
f = [0:Ns/2-1 -Ns/2:-1]/(Ns*Ts);
Xf = fft(x);
Hf = 1./(1+(f./(2*pi*0.7*B)).^(2*n));
Yf = Xf.*Hf;
y = ifft(Yf);
end

1.3.

Kênh AWGN

function yNoise = addnoise(yClean,VarN)
% This function adds Gaussian noise into
% the input signal.
% yClean - the input signal
% VarN - the variance of noise
% yNoise - the noisy signal output
if (isreal(yClean))
yNoise = yClean + sqrt(VarN)*randn(size(yClean));

10



else

yNoise = yClean + sqrt(VarN/2)*(randn(size(yClean))
+j*randn(size(yClean)));
end

1.4.

Bộ chuyển chuỗi bit thành mã đường AMI

function [t,y,code] = amicode(d,R,Ns,type)
% d – chuỗi dữ liệu
% R – tốc độ dữ liệu
% Ns – Tổng số mẫu biểu diễn
% t – vector thời gian
% y – vector mẫu đầu ra
% type – kiểu mã (NRZ - 'NRZ' or RZ - 'RZ')
Tb = 1/R; % chu kỳ bit
Nb = length(d); % số lượng bit
Timewindow = Nb*Tb;
ts = Timewindow/(Ns-1); % vecto thời gian lấy mẫu
t = 0:ts:Timewindow; % vecto thời gian
y = zeros(size(t)); % vecto mẫu đầu ra
code = [];
if nargin <=3
type = 'NRZ';
end
s = 1;

for k = 1:Nb
if d(k) == 0 % nếu là bit 0
code(k) = 0; % biểu diễn là 0
else
% nếu là bit 1
s = s+1;
if mod(s,2)==0 % bit chẵn thì được biểu diễn là 1
code(k) = 1;
else
% bit lẻ được biểu diễn là -1 đan xen nhau
code(k) = -1;
end
end
end
for k = 1:Ns
n = fix(t(k)/Tb)+1;
if n >= Nb
n = Nb;
end
switch (type)
case 'NRZ'
y(k) = code(n);
case 'RZ'
if mod(t(k),Tb)<=Tb/2
y(k) = code(n);
else
y(k) = 0;
end
end
end

y(end)=0;

2. Kết quả mô phỏng

11


Nhận xét:
Tín hiệu thu được số lỗi bit ứng với từng SNR trên kênh truyền là:
BER= 59 tại SNR = 1dB
BER= 31 tại SNR= 3 dB
BER= 9 tại SNR = 6 dB

Nhận xét: SNR càng lớn tức tín hiệu thu được ít nhiễu thì tỷ lệ lỗi bit càng giảm và
ngược lại

12


13



×