[Báo cáo] Bài tập lớn Thông tin vô tuyến: Truyền tín hiệu giữa 2 máy tính qua âm thanh
1. Trường Đại Học Bách Khoa Hà Nội
Viện Điện Tử - Viễn Thông
====o0o====
Báo cáo môn Thông tin vô tuyến
Đề tài:Truyền tín hiệu giữa hai máy tính
Qua âm thanh
Giáo viên hướng dẫn:TS.Nguyễn Quốc Khương
Họ và tên MSSV Lớp sinh viên
Nguyễn Mạnh Thế 20112240 ĐTTT 6 -K56
Dương Văn Hoàn 20111601 ĐTTT 8 -K56
Lê Doãn Hoàng 20112606 ĐTTT 1 -K56
Đào Minh Ngọc 20111905 ĐTTT10- K56
2. Thông tin vô tuyến
2
Mục Lục
I. Lời nói đầu: .....................................................................................................3
II. Nội dung bài tập lớn : ..................................................................................3
1. Sơ đồ khối của quá trình thực hiện điều chế FSK ...........................................3
2. Bộ phát: .........................................................................................................4
Khối I: Khối mã hóa kênh truyền (mã chập)......................................................4
Khối II: Khối điều chế (FSK)............................................................................4
3. Bộ thu: ...........................................................................................................5
Khối III: Giải điều chế (Giải điều chế FSK)......................................................5
Khối IV: Khối giải mã kênh (Giải mã chập - Thuật toán Viterbi)......................5
III. Source Code..................................................................................................6
IV. Kết quả : .......................................................................................................9
V. Kết luận:........................................................................................................11
VI. Tài liệu tham khảo:....................................................................................11
3. Thông tin vô tuyến
3
I. Lời nói đầu:
- Trong việc thiết kế các hệ thống thông tin vô tuyến, việc phân tích hệ thống thông qua
mô phỏng giúp các nhà thiết kế tối ưu và thử nghiệm các hệ thống với chi phí nhỏ nhất
trước khi đưa hệ thống thử nghiệm ra thế giới thực.
- Một trong các công cụ rất hữu hiệu cho việc phân tích và mô phỏng hệ thống được sử
dụng rất rộng rãi trên thế giới đó là phần mềm matlab.Lý do tại sao matlab lại tìm được sự
ứng dụng rộng rãi như vậy là vì Matlab là một công cụ rất mạnh để thực hiện các phép
biến đổi toán học.
II. Nội dung bài tập lớn :
1. Sơ đồ khối của quá trình thực hiện điều chế FSK
Chuyển ký tự
thành bit
Mã hóa kênh
Mã chập
Điều chế FSK
Giải điều chế FSK
Giải mã kênh
Viterbi
Chuyển bit thành
ký tự
Nhập ký tự từ
bàn phím
Xuất ra màn hình
Kênhtruyền
- Tổng quan: Chuỗi bit đầu vào sẽ được chuyển qua khối mã hóa kênh truyền, mục đích là
để giúp phát hiện lỗi sai và sửa sai khi truyển qua kênh truyền. Chuỗi bit sau khi qua khối
mã hóa sẽ đi vào khối điều chế FSK. Khối điều chế sẽ nhân tín hiệu với sóng mang để
giúp mang tin tức truyền đi xa trong kênh truyền. Ở đây, để thu đúng chuỗi bit ở bộ thu
thì còn phải đồng bộ chuỗi bit, nghĩa là thêm các bit đồng bộ vào. Ở phía phát quá trình
ngược lại so với ở phía thu.Chuỗi bit qua bộ giải điều chế, giải mã chập (thuật toán
viterbi) và cuối cùng thu được chuỗi bit như ban đầu.
- Các thông số đầu vào
Tốc độ bit: truyền có dây: 100bit/s.
Tần số sóng mang: 1000Hz và 3000Hz
Fs = 10000;
4. Thông tin vô tuyến
4
2. Bộ phát:
Khối I: Khối mã hóa kênh truyền (mã chập)
- Mã chập là phương pháp mã hóa sửa sai quan trọng. Khác với mã khối, mã chập là loại
mã có nhớ.
- Mã chập được tạo ra bằng cách cho chuỗi thông tin truyền qua hệ thống 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ã hóa có k bit ngõ vào và đầu ra bộ mã chập có n bit ngõ ra .Tốc độ mã là
R=k/n.Số ô nhớ của bộ ghi dịch là m×k và gọi L là chiều dài ràng buộc của mã chập với
L=k(m-1).
Code:
>>L=3;
>>G =[5 7];
>>trellis = poly2trellis (L,G);
>>sig_conv = convenc(sig_bin,trellis);
>>bitin = sig_conv;
Khối II: Khối điều chế (FSK)
Code:
%FSK
>>vbit=100;
>>t=0.0001:.0001:vbit/10000;
>>f1=1000;
>>f2=3000;
>>FS=10000;
>>AR=[];
>>AI=[];
>>carrierR=[];
>>carrierI=[];
%Chen bit dong bo
>>bk=[0 1 1 1 1 1 1 0 bitin 0 1 1 1 1 1 1 0];
%Nhan song mang
>>for a=1:1:length(bk)
>>s=cos(2*pi*f1*t);
>>c=cos(2*pi*f2*t);
>>R=bk(a)*ones(1,vbit);
>>I=(-bk(a)+1)*ones(1,vbit);
>>AR=[AR R];
>>AI=[AI I];
>>carrierI=[carrierI c];
>>carrierR=[carrierR s];
5. Thông tin vô tuyến
5
>>end
%Cong song mang
>>ASK1=AR.*carrierR;
>>ASK2=AI.*carrierI;
>>fsk1 =ASK1+ASK2;
3. Bộ thu:
Khối III: Giải điều chế (Giải điều chế FSK)
>>recFSK = audiorecorder (FS,16,1,1);
>>recordblocking(recFSK,8);
>>FSK=getaudiodata(recFSK);
>>parang=[0.9,1.1];
>>Wn1=f1*parang/(FS/2);
>>BP1=fir1(101,Wn1,'bandpass');
>>Wn2=f2*parang/(FS/2);
>>BP2=fir1(101,Wn2,'bandpass');
>>x1=filter(BP1,1,FSK);
>>x2=filter(BP2,1,FSK);
>>y1=hilbert(x1);
>>y2=hilbert(x2);
>>envy1=abs(y1);
>>envy2=abs(y2);
>>c1= (min (envy1) +max (envy1))/2;
>>c2= (min (envy2) +max (envy2))/2;
>>FSK1=envy1>c1;
>>FSK2=envy2>c2;
>>FSKOUT=FSK1>FSK2;
Khối IV: Khối giải mã kênh (Giải mã chập - Thuật toán Viterbi)
- 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ã
Code:
>>L=3;
>>G =[5 7];
>>trellis = poly2trellis (L,G);
>>sig_conv=reshape(bitout3,[],1)';
>>sig_out = vitdec(sig_conv,trellis,len,'trunc','hard');
6. Thông tin vô tuyến
6
III. Source Code
Code bộ phát:
clear all
%Nhap ky tu dau vao
inp=input('Nhap chuoi ky tu: ','s');
%Chuyen ky tu thanh chuoi bit
sig_bin=reshape((dec2bin(inp)-'0'),1,[]);
%Ma vong
L=3;
G =[5 7];
trellis = poly2trellis (L,G);
sig_conv = convenc(sig_bin,trellis);
bitin = sig_conv;
%FSK
vbit=100;
t=0.0001:.0001:vbit/10000;
f1=1000;
f2=3000;
FS=10000;
AR=[];
AI=[];
carrierR=[];
carrierI=[];
%Chen bit dong bo
bk=[0 1 1 1 1 1 1 0 bitin 0 1 1 1 1 1 1 0];
%Nhan song mang
for a=1:1:length(bk)
s=cos(2*pi*f1*t);
c=cos(2*pi*f2*t);
R=bk(a)*ones(1,vbit);
I=(-bk(a)+1)*ones(1,vbit);
AR=[AR R];
AI=[AI I];
carrierI=[carrierI c];
carrierR=[carrierR s];
end
%Cong song mang
ASK1=AR.*carrierR;
ASK2=AI.*carrierI;
fsk1 =ASK1+ASK2;
%Ve ti hieu ra
figure(1)
subplot(4,1,1)
stem(sig_bin);
title('Chuoi bit')
xlabel('time')
subplot(4,1,2)
plot(ASK1,'r')
title('Bit1')
xlabel('time')
7. Thông tin vô tuyến
7
ylabel('amplitube')
subplot(4,1,3)
plot(ASK2,'g')
title('Bit0')
xlabel('time')
ylabel('amplitube')
subplot(4,1,4)
plot(fsk1,'m')
title('AFK Signal')
xlabel('time')
ylabel('amplitube')
%Phat tin hieu
sound(fsk1,FS)
Code bộ thu:
vbit=100;
f1=1000;
f2=3000;
FS=10000;
%Thu
recFSK = audiorecorder (FS,16,1,1);
recordblocking(recFSK,8);
FSK=getaudiodata(recFSK);
parang=[0.9,1.1];
Wn1=f1*parang/(FS/2);
BP1=fir1(101,Wn1,'bandpass');
Wn2=f2*parang/(FS/2);
BP2=fir1(101,Wn2,'bandpass');
x1=filter(BP1,1,FSK);
x2=filter(BP2,1,FSK);
y1=hilbert(x1);
y2=hilbert(x2);
envy1=abs(y1);
envy2=abs(y2);
c1= (min (envy1) +max (envy1))/2;
c2= (min (envy2) +max (envy2))/2;
FSK1=envy1>c1;
FSK2=envy2>c2;
FSKOUT=FSK1>FSK2;
%Cat bit dong bo dau va cuoi 0 1 1 1 1 1 1 0
for i=1:1:length(FSKOUT)/vbit
bitout(i)=FSKOUT(vbit*i);
end
for i=1:1:length(bitout)-8
if
(bitout(i)==0)&&(bitout(i+1)==1)&&(bitout(i+2)==1)&&(bitout(i+3)==1)&&(bitout(i+4)==1)&&(bi
tout(i+5)==1)&&(bitout(i+6)==1)&&(bitout(i+7)==0)
bitout2=bitout(i+8:end);
break;
end
8. Thông tin vô tuyến
8
end
for j=length(bitout2):-1:8
if (bitout2(j)==0)&&(bitout2(j-1)==1)&&(bitout2(j-2)==1)&&(bitout2(j-3)==1)&&(bitout2(j-
4)==1)&&(bitout2(j-5)==1)&&(bitout2(j-6)==1)&&(bitout2(j-7)==0)
bitout3=bitout2(1:j-8);
break;
end
end
%Ve tin hieu ra
figure(2)
subplot(5,1,1)
plot(FSK)
title('Received signal')
xlabel('time')
ylabel('amplitube')
subplot(5,1,2)
plot(envy1,'r')
title('Bit 1')
xlabel('time')
ylabel('amplitube')
subplot(5,1,3)
plot(envy2,'g')
title('Bit 0')
xlabel('time')
ylabel('amplitube')
subplot(5,1,4)
plot(FSKOUT,'m')
title('Demodulated signal')
xlabel('time')
ylabel('amplitube')
subplot(5,1,5)
stem(bitout3);
title('Bit out')
xlabel('time')
%%
len = 2;
%Ma vong
L=3;
G =[5 7];
trellis = poly2trellis (L,G);
sig_conv=reshape(bitout3,[],1)';
sig_out = vitdec(sig_conv,trellis,len,'trunc','hard');
outp=char(bin2dec(num2str(reshape(sig_out,[],7)))');
fprintf('Ky tu nhan duoc la: %s n',outp);
9. Thông tin vô tuyến
9
IV. Kết quả :
Hình 1: Tín hiệu truyền đi
Hình 2: Tín hiệu nhận được
10. Thông tin vô tuyến
10
Hình 3: Giao diện bên phát
Hình 4: Giao diện bên thu
11. Thông tin vô tuyến
11
V. Kết luận:
- Thông qua bài tập lớn này giúp chúng em hiểu hơn về quá trình truyền tín hiệu
trong thông tin vô tuyến và thành thạo hơn với phần mềm matlab.Chúng em xin
cảm ơn thầy Nguyễn Quốc Khương đã giúp đỡ chúng em trong quá trình hoàn
thành báo cáo bài tập lớn này.
VI. Tài liệu tham khảo:
1. ”Matlab và ứng dụng trong viễn thông” .TS. Phạm Hồng Liên, Đặng
Ngọc Khoa, Trần Thanh Phương.
2. “Xử lí tín hiệu và lọc số”. Nguyễn Quốc Trung
3. “Xử lí tín hiệu số”. Quách Ngọc Tuấn
4. “Các bài tập Matlab về thông tin vô tuyến ”. Cheng-Xiang Wang, PGS.TS
Nguyễn Văn Đức.