usp=sharing Thực hiện đọc và chuyển đổi file nhạc yêu cầu thành chuỗi bit nhị phân làm nguồn tin đầu vào cho nhiệm vụ 2 và thực hiện ngược lại chuyển đổi chuỗi bit nhị phân thu được thàn
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA VIỄN THÔNG I
BỘ MÔN TÍN HIỆU VÀ HỆ THỐNG
BÀI TẬP LỚN: MÔ PHỎNG HỆ THỐNG TRUYỀN THÔNG
Họ và tên: Tạ Xuân Hùng
Mã sinh viên: B20DCVT179 Nhóm lớp học: 05
Giảng viên: Ngô Thu Trang
Hà Nội – 2023
Trang 2I.Nhiệm vụ 1:
1.Đề bài 1.1 Mô tả nhiệm vụ:
Đọc và xử lý nguồn tin là một file nhạc AssigmentD20.wav File này có thể lấy
về theo địa chỉ dưới đây:
https://drive.google.com/file/d/1fown391kGSUhlZA6L8eIjS1Oh_JCjyW/view? usp=sharing
Thực hiện đọc và chuyển đổi file nhạc yêu cầu thành chuỗi bit nhị phân làm nguồn tin đầu vào cho nhiệm vụ 2 và thực hiện ngược lại chuyển đổi chuỗi bit nhị phân thu được thành file nhạc
1.2 Yêu cầu:
a Mô tả phương pháp thực hiện chuyển đổi file nhạc yêu cầu thành chuỗi nhị phân và ngược lại
b Viết chương trình MATLAB thực hiện chuyển đổi file nhạc AssigmentD20.wav thành chuỗi tín hiệu nhị phân và ngược lại Có thể xây dựng dưới dạng hàm chuyển đổi để sử dụng trong các chương trình khác
c Xác định các thông số về file nhạc cần chuyển đổi
1.3 Gợi ý:
Một số hàm công cụ tiện ích trong thư viện Audio Processing Toolbox có thể cần sử dụng để thực hiện nhiệm vụ (để biết chi tiết hơn về từng câu lệnh, sử dụng help): audioread – đọc dữ liệu từ file nhạc
audiowrite – ghi file nhạc audioinfo – thông tin về file nhạc unit16 – chuyển kiểu dữ liệu về unit16
2.Bài làm
a Mô tả phương pháp thực hiện chuyển đổi file nhạc yêu cầu thành chuỗi nhị phân và ngược lại
Phương pháp thực hiện chuyển đổi file nhạc yêu cầu thành chuỗi nhị phân có thể được thực hiện như sau:
Trang 33.Chuyển đổi số nguyên này thành các chuỗi nhị phân Để làm được điều này, ta cần biết kích thước của số nguyên (8 bit, 16 bit, 32 bit, 64 bit, ) để có thể chia các bit ra và chuyển đổi sang nhị phân
4.Ghi chuỗi nhị phân vào file mới
Phương pháp thực hiện chuyển đổi chuỗi nhị phân thành file nhạc có thể được thực hiện như sau:
1.Đọc chuỗi nhị phân vào chương trình Chuỗi nhị phân này được đọc từ file hoặc được nhập vào từ bàn phím
2.Chuyển đổi chuỗi nhị phân thành số nguyên Để làm được điều này, ta cần biết kích thước của số nguyên (8 bit, 16 bit, 32 bit, 64 bit, ) để có thể ghép các bit lại thành các số nguyên
3.Chuyển đổi số nguyên thành sóng âm thanh Sóng âm thanh có thể được biểu diễn dưới dạng các số nguyên có giá trị trong khoảng từ -32768 đến 32767 4.Ghi sóng âm thanh vào file mới Để làm được điều này, ta sử dụng một thư viện ghi file âm thanh như librosa, pydub, soundfile,
b Viết chương trình MATLAB thực hiện chuyển đổi file nhạc AssigmentD20.wav thành chuỗi tín hiệu nhị phân và ngược lại Có thể xây dựng dưới dạng hàm chuyển đổi để sử dụng trong các chương trình khác
Viết chương trình MATLAB thực hiện chuyển đổi file nhạc AssigmentD20.wav thành chuỗi tín hiệu nhị phân
% Đọc thông tin file nhạc
info = audioinfo( 'C:\Users\Admin\Downloads\AssigmentD20.wav' );
Fs = info.SampleRate;
% Đọcc tín hiệu âm thanh
[x, Fs] = audioread( 'C:\Users\Admin\Downloads\AssigmentD20.wav' );
% Chuyển đổii tín hiệu âm thanh sang số nguyên 16 bit
x = int16(x*(2^15));
% Chuyển đổi từng giá trị số sang chuỗi tín hiệu nhị phân
nbits = 16; % Số bit của giá trị số nguyên 16 bit
n = length(x);
bits = zeros(n, nbits);
for i = 1:n
bits(i, :) = fliplr(bitget(x(i), 1:nbits));
end
bits = bits(:)'; % Chuyển sang dạng vector
% Ghi chuỗi tín hiệu nhị phân vào file mới
fid = fopen( 'C:\Users\Admin\Downloads\AssigmentD20.bin' , 'w' );
fwrite(fid, bits, 'uint8' );
fclose(fid);
Trang 4 chuyển đổi chuỗi tín hiệu nhị phân trong file "AssignmentD20.bin" thành tín hiệu âm thanh:
% đọc chuỗi tín hiệu nhị phân từ file
fileID = fopen( 'C:\Users\Admin\Downloads\AssigmentD20.bin' , 'r' );
binSignal = fread(fileID, 'ubit1' );
fclose(fileID);
% Chuyển đổi chuỗi nhị phân thành chuỗi tín hiệu âm thanh
fs = 44100; % tần số lấy mẫu
y = binSignal' * 2 - 1; % chuẩn hóa chuỗi nhị phân về dạng [-1,1]
audiowrite( 'C:\Users\Admin\Downloads\AssigmentD20new.wav' , y, fs);
Trang 5c Xác định các thông số về file nhạc cần chuyển đổi.
Câu lệnh độc thông tin file audio info = audioinfo('C:\Users\Admin\Downloads\AssigmentD20.wav');
Thông số:
CompressionMethod : không nén NumChannels (số kênh): 2 kênh SampleRate (tốc độ lấy mẫu): 8000 (Hz) TotalSamples (tổng số mẫu): 268237 Duration (thời lượng file): 33.5296 (s) BitsPerSample (số bit trên một mẫu): 16 Thực hiện nhiệm vụ
[x, Fs] = audioread('C:\Users\Admin\Downloads\AssigmentD20.wav');
Kết quả thu được
Trang 6a.Các biến trả về
b.Dãy nhị phân thu được
c.File audio thu được sau khi chuyển đổi
II, Nhiệm vụ 2
1.Đề bài 1.1 Mô tả nhiệm vụ:
Mô phỏng hệ thống truyền dẫn số tại tốc độ dữ liệu N Mb/s, với N là số cuối cùng của mã số sinh viên (nếu số đó là 0 thì sẽ lựa chọn số liền kề bên cạnh) Nguồn tin của hệ thống được lấy từ file nhạc thực hiện trong nhiệm vụ 1, trong trường hợp không thực hiện lấy nguồn tin từ nhiệm vụ 1 được hãy thay thế bằng một chuỗi tín hiệu nhị phân ngẫu nhiên tương đương Mỗi sinh viên sẽ lựa chọn một trong các kĩ thuật điều chế sau cho hệ thống mô phỏng của mình:
- Điều chế M-QAM nếu số cuối cùng trong mã sinh viên là lẻ, với M = 16 nếu
số liền kề là lẻ và M = 4 nếu số liền kề là chẵn
- Điều chế M-DPSK nếu số cuối cùng trong mã sinh viên là chẵn, với M = 4 nếu số liền kề là lẻ và M = 2 nếu số liền kề là chẵn
Sử dụng mô hình mô phỏng tương đương băng gốc, tín hiệu phát có thể được biểu diễn như sau:
Trang 7trong đó dk là các kí hiệu (symbol) phức được xác định từ chuỗi bản tin đầu vào
và kỹ thuật điều chế; Tsym là chu kỳ của symbol; f0 là pha của tín hiệu phát và p(t) xác định dạng xung được phát, với:
với Es là năng lượng mỗi symbol
1.2 Yêu cầu:
a Mô tả hệ thống mô phỏng bằng sơ đồ khối và xác định các tham số của hệ thống,
có thể bao gồm cả các bộ lọc sử dụng để có được bộ thu tối ưu
b Bằng việc sử dụng MATLAB, viết chương trình mô phỏng hệ thống truyền dẫn
số sử dụng kỹ thuật điều chế đã lựa chọn trên kênh AWGN với nguồn tín hiệu là tín hiệu thu được ở nhiệm vụ 1 Ước tính xác suất lỗi tại các mức tỉ số tín hiệu trên nhiễu SNR lần lượt bằng 2, 5 và 10 dB theo phương pháp Monte Carlo
c Biểu diễn biểu đồ chòm sao, dạng sóng tín hiệu, mẫu mắt và phổ của tín hiệu tại
các điểm sau trên hệ thống: đầu ra bộ điều chế, sau khi truyền qua kênh AWGN tại SNR = 5dB, sau khi được xử lý và khôi phục tại bộ thu
d So sánh file nhạc được khôi phục sau khi truyền qua hệ thống mô phỏng tại các mức SNR yêu cầu
2.Bài làm 2.1: Phương pháp thực hiện mô phỏng
a Sơ đồ khối và các tham số hệ thống
Trang 8Sơ đồ bộ điều chế và giải điểu chế 16-QAM Các tham số hệ thống:
- Kỹ thuật điều chế: 16-QAM
- Tốc độ bit: 9 Mb/s
- Chu kỳ tín hiệu
- Chu kỳ bit
Sơ đồ khối của giải điều chế 16-QAM theo môn Kỹ thuật thông tin vô tuyến:
Trang 92.2.1 Hàm con vẽ đồ thị
function [] = DrawMission2(binary_data)
fs = 15e6;
st_fft=fft(binary_data);
st_fft=fftshift(st_fft);
st_fft_fre=fs/2*linspace(-1,1,length(st_fft));
figure plot(st_fft_fre,abs(st_fft));
grid;
title('Bieu do pho tin hieu');
xlabel('Frequency');
ylabel('Amplitude');
end
2.2.2 Hàm con điều chế 16 -QAM (mã sv 179)
function [Sig] = Modulation16QAM(binary_data)
M = 16; % Bac dieu che
N = 9*10^6; % Toc do du lieu
NumBit = length(binary_data); % So bit truyen
bp = 1/N; % Chu ki bit
Tsym = bp*log2(M); % Chu ki ki hieu
sr = 1/Tsym; % Toc do ki hieu
fc = sr*log2(M); % Tan so song mang
Es = 10; % Nang luong
t = Tsym/100:Tsym/100:Tsym; % Thoi gian
ss = length(t);
binary_data = reshape(binary_data,[],log2(M)); % chuyen
ve ma tran x 2
binary_data = bi2de(binary_data); % Chuyen cac bit nhi phan ve
QAM_Mod = qammod(binary_data,M); % Thiet ke theo symbol
I_Am = real(QAM_Mod); % Gia tri bien do cua I (phan thuc)
Q_Am = imag(QAM_Mod); % Gia tri bien do cua Q (phan ao)
Sig = []; % Mang luu song truyen di
I_Sig = []; % Mang luu song truyen I
Q_Sig = []; % Mang luu song truyen Q
for k = 1:1:length(I_Am)
I = I_Am(k)*cos(2*pi*fc*t); % Phan tu song I
Q = Q_Am(k)*sin(2*pi*fc*t); % Phan tu song Q
S = I + Q; % Song truyen di
Sig = [Sig S];
I_Sig = [I_Sig I];
Q_Sig = [Q_Sig Q];
end
% Ve bieu do chom sao sau khi dieu che
Trang 10title('Bieu do chom sao sau khi dieu che');
tt = Tsym/100:Tsym/100:Tsym*length(I_Am); figure;
subplot(3,1,1);
plot(tt,I_Sig);
title('Dang song I theo ki hieu');
xlabel('Thoi gian(sec)');
ylabel('Bien do(volt)');
subplot(3,1,2);
plot(tt,Q_Sig);
title('Dang song Q theo tin hieu');
xlabel('Thoi gian(sec)');
ylabel('Bien do(volt)');
subplot(3,1,3);
plot(tt,Sig);
title('Dang song truyen di sau dieu che'); xlabel('Thoi gian(sec)');
ylabel('Bien do(volt)');
end
2.2.3 Hàm con giải điều chế 16 -QAM
function [binary_data] = baitaploncaub(Sig)
% Ham con giai dieu che IQ su dung M-QAM
% Dau vao la song toi
% Dau ra la day bit nhi phan
M = 16; % Bac dieu che
N = 9*10^6; % Toc do du lieu
bp = 1/N; % Chu ki bit
Tsym = bp*log2(M); % chu ki ki hieu
sr = 1/Tsym; % symbol rate
fc = sr*log2(M); % Tan so song mang
t = Tsym/100:Tsym/100:Tsym; % Thoi gian
ss = length(t);
Demod_I_Mes = [];
Demod_Q_Mes = [];
Demod_I_Sig = [];
Demod_Q_Sig = [];
Trang 11m1 = y1.*Sig((n-(ss-1)):n); % Nhan voi thanh phan trucgiao
m2 = y2.*Sig((n-(ss-1)):n);
z1 = trapz(t,m1); % Tinh tich phan trong 1 chu ki
z2 = trapz(t,m2);
zz1 = round(2*z1/Tsym); % Lam tron so
zz2 = round(2*z2/Tsym);
Demod_I_Mes = [Demod_I_Mes zz1]; % Luu gia tri
Demod_Q_Mes = [Demod_Q_Mes zz2];
Demod_I_Sig = [Demod_I_Sig m1];
Demod_Q_Sig = [Demod_Q_Sig m2];
end
phan ao
clear i
clear j
for k=1:1:length(Demod_I_Mes) QAM_Demod(k) = Demod_I_Mes(k) + 1i*Demod_Q_Mes(k);
end
scatterplot(QAM_Demod,1,0,'or');
title('Bieu do chom sao sau khi dieu che');
QAM_Demod = qamdemod(QAM_Demod,M);
figure;
% Ve Song I sau khi nhan truc giao
subplot(2,1,1);
plot(Demod_I_Sig,'linewidth',2);
title(' Song I sau khi tach');
xlabel('n(discrete time)');
ylabel(' magnitude');
%Ve song Q sau khi nhan truc giao
subplot(2,1,2);
plot(Demod_Q_Sig,'linewidth',2);
title(' Song Q sau khi tach ');
xlabel('n(discrete time)');
ylabel(' magnitude');
bi_in = de2bi(QAM_Demod);
binary_data = reshape(bi_in,[],1);
end
2.2.4 Hàm con gây nhiễu
function [Sig_Noise] = AWGNChanel(Sig,SNRdB)
% Day la ham AWGN
% Tin hieu dau vào
Trang 12% Sig– Tin hieu dau vào
% SNRdB - Muc SNR dB
% Sig_Noise – Tin hieu nhieu dau ra
SNR = 10^(SNRdB/10);
VarN = var(Sig)/SNR;
if (isreal(Sig)) Sig_Noise = Sig + sqrt(VarN)*randn(size(Sig));
else
Sig_Noise = Sig + sqrt(VarN/2)*(randn(size(Sig))+j*randn(size(Sig)));
end end
2.2.5 Hàm con vẽ biểu đồ chòm sao nhiễu
function [] = StarError(Data)
% Hàm con ve bieu do chom sao sau khi qua kenh AWGN
M = 4;
Data = reshape(Data,[],log2(M)); % chuyen ve ma tran x 2
Data = bi2de(Data); % Chuyen cac bit nhi phan ve
QAM_Mod = qammod(Data,M); % Thiet ke theo symbol
Data_Noise = AWGNChanel(QAM_Mod,2); % Gay nhieu
h = scatterplot(Data_Noise,1,0,'x');% Ve cac diem nhieu
hold on; scatterplot(QAM_Mod,1,0,'or',h); % Ve chong cac diem dung len
title('Bieu do chom sao cua tin hieu sau khi qua kenh AWGN');
end
2.2.6 Thực hiện nhiệm vụ
Trang 132.3 Kết quả thu được
Biểu đồ chòm sao sau khi điều chế
Trang 15Dạng sóng sau điều chế 4-QAM
Mật độ phổ tín hiệu phát sau điều chế
Trang 16Mật độ phổ tín hiệu phát sau điều chế
Trang 17Mật độ phổ tín hiệu sau nhiễu
sóng I và Q sau khi điều chế