通信原理實踐(五)——2PSK 與2DPSK 通信系統


一、一些Matlab函數

image

image

image

image

 

二、2PSK調制解調,性能分析

1、2PSK調制

(1)圖示

image

(2)Matlab代碼

function [ s_t ,bb_t,bits] = psk2_module( nSym ,Rb,fs,fc,Ac )
%UNTITLED7 此處顯示有關此函數的摘要
%   此處顯示詳細說明
%nSym = 300;   % 信息長度
%Rb = 200;     % 信息速率
%fs = 48e3;    % 采樣率
%fc = 4e3;     % 載波頻率
%Ac = 1;       % 載波幅度
%s_t           % 已調波形
%bb_t          % 碼型時域波形
%bb            % 碼型

%%
%產生信號
% 隨機產生二進制信息 
bits = randint(nSym,1); 
% 產生不歸零碼
bb = 2 * bits - 1; 

%%
%產生碼型
% 每個符號包含的樣點數 
sample_bit = fs / Rb;
% 時間
t = (0:sample_bit*nSym-1)'/fs; 
% 產生不歸零碼的時域波形
bb_t = reshape(repmat(bb', sample_bit, 1), sample_bit*nSym, 1); 

%%
%調制
% 產生載波信號 
c_t = Ac*cos(2*pi*fc*t);
% 調制
s_t = bb_t .* c_t; 


end

 

2、2PSK解調

(1)圖示

image

(2)Matlab代碼

function [ bits,bb_t] = psk2_remodule( Rb,fs,fc,s_t)
%UNTITLED11 此處顯示有關此函數的摘要
%   此處顯示詳細說明
% Rb = 200;       % 信息速率 
% fs = 48e3;      % 采樣率 
% fc = 4e3;       % 載波頻率
% s_t             % 調制波形

% bit_s           % 抽樣判決之后
% bb_t            % 抽樣判決之前

r_t = s_t; 

% 每個符號包含的樣點數 
sample_bit = fs/Rb; 
% 時間 
t = (0:length(r_t)-1)'/fs; 

% 產生同頻同相載波信號 
c_t = cos(2*pi*fc*t);

% FIR群延遲,也是階數一半 
group_delay = 50; 
b = fir1(group_delay*2, Rb/(fs/2)); % 主瓣占帶寬Rb,這里可以放寬 
bb_t = filter(b,1, r_t .* c_t); % 混頻並濾波 

% 抽樣點下標 
idx_decision = round(1+group_delay+sample_bit/2):sample_bit:length(r_t); 
% 取得抽樣點 
val_decision = bb_t(idx_decision); 

% 判決
bits = zeros(length(val_decision),1); 
bits(val_decision > 0) = 1; 


end

 

3、一個demo

image

image

clc,clear;

nSym = 1000;    % 信息長度
Rb = 1e3;      % 信息速率
fs = 48e3;     % 采樣率
fc = 5e3;      % 載波頻率
Ac = 1;        % 載波幅度

%%
[s_t ,bb_t,bb] = psk2_module( nSym ,Rb,fs,fc,Ac );
t = (0 : length(s_t) - 1) / fs' ;

%%
%繪制已調波形
figure();
plot(t,s_t);
title('2PSK時域波形');
xlabel('time(t)');
ylabel('y');

%繪制功率譜
powerF_draw(s_t,fs);

%%
%發送端碼型變換后的波形
figure();
subplot(2,1,1);
plot(t,bb_t);
axis([min(t),max(t),-1.2,1.2]);
title('發送端碼型波形');
xlabel('time(t)');
ylabel('y');

%接收端抽樣判決前的波形
subplot(2,1,2);
[bits,rbb_t] = psk2_remodule(Rb,fs,fc,s_t);
plot(t,rbb_t);
title('接收端碼型波形');
xlabel('time(t)');
ylabel('y');

%%
%眼圖
eyediagram(rbb_t,4*fs/Rb); %取四個Bit
title('無信道噪聲');

%小噪聲
s_pow = sum(s_t.^2) / length(s_t);
n_pow = 0.01 * s_pow;
n_t = bandlimit_noise(length(s_t),fs,fc,2*Rb,n_pow);
[bits_low_noise,rbb_t_low_noise] = psk2_remodule(Rb,fs,fc,s_t + n_t);
eyediagram(rbb_t_low_noise,4*fs/Rb);
title('小信道噪聲');

%大噪聲
n_pow = 0.5 * s_pow;
n_t = bandlimit_noise(length(s_t),fs,fc,2*Rb,n_pow);
[bits_high_noise,rbb_t_high_noise] = psk2_remodule(Rb,fs,fc,s_t + n_t);
eyediagram(rbb_t_high_noise,4*fs/Rb);
title('大信道噪聲');

%%
%2PSK通信系統評估
snr_i = (-3:1:8)'; % SNR輸入(dB)

%計算噪聲功率
n_pow = s_pow ./ (10.^(snr_i ./ 10));

%初始化儲存
number = zeros(1,length(snr_i));
ratio = zeros(1,length(snr_i));

%計算SNR
for i=1:length(snr_i)
    n_t = bandlimit_noise(length(s_t),fs,fc,2*Rb,n_pow(i));
    [bits,rbb_t] = psk2_remodule(Rb,fs,fc,s_t + n_t);
    [number(i),ratio(i)] = symerr(bits,bb(1:nSym-1));
end

%繪圖
figure();
plot(snr_i,ratio*100);
title('誤碼率曲線');
xlabel('snr_i(dB)');
ylabel('誤碼率(%)');

 

三、2DPSK調制解調

1、2DPSK調制

function [ s_t ,bb_t,bits] = dpsk2_module( nSym ,Rb,fs,fc,Ac )
%UNTITLED7 此處顯示有關此函數的摘要
%   此處顯示詳細說明
%nSym = 300;   % 信息長度
%Rb = 200;     % 信息速率
%fs = 48e3;    % 采樣率
%fc = 4e3;     % 載波頻率
%Ac = 1;       % 載波幅度
%s_t           % 已調波形
%bb_t          % 碼型時域波形
%bits          % 碼型

%%
%產生信號
% 隨機產生二進制信息 
bits = randint(nSym,1);

%產生差分碼
bits_d = zeros(nSym+1,1);
for i=1:length(bits)
    bits_d(i+1) = mod(bits_d(i) + bits(i),2);
end

% 產生不歸零碼
bb = 2 * bits_d - 1; 

%%
%產生碼型
% 每個符號包含的樣點數 
sample_bit = fs / Rb;
% 時間
t = (0:sample_bit*(nSym+1)-1)'/fs; 
% 產生不歸零碼的時域波形
bb_t = reshape(repmat(bb', sample_bit, 1), sample_bit* (nSym+1), 1); 

%%
%調制
% 產生載波信號 
c_t = Ac*cos(2*pi*fc*t);
% 調制
s_t = bb_t .* c_t; 



end

 

2、2DPSK解調

function [ bits,bb_t] = dpsk2_remodule( Rb,fs,fc,s_t)
%UNTITLED11 此處顯示有關此函數的摘要
%   此處顯示詳細說明
% Rb = 200;       % 信息速率 
% fs = 48e3;      % 采樣率 
% fc = 4e3;       % 載波頻率
% s_t             % 調制波形

% bit_s           % 抽樣判決之后
% bb_t            % 抽樣判決之前

r_t = s_t; 

% 每個符號包含的樣點數 
sample_bit = fs/Rb; 
% 時間 
t = (0:length(r_t)-1)'/fs; 

% 產生同頻同相載波信號 
c_t = cos(2*pi*fc*t);

% FIR群延遲,也是階數一半 
group_delay = 50; 
b = fir1(group_delay*2, Rb/(fs/2)); % 主瓣占帶寬Rb,這里可以放寬 
bb_t = filter(b,1, r_t .* c_t); % 混頻並濾波 

% 抽樣點下標 
idx_decision = round(1+group_delay+sample_bit/2):sample_bit:length(r_t); 
% 取得抽樣點 
val_decision = bb_t(idx_decision); 

% 判決
bits_d = zeros(length(val_decision),1); 
bits_d(val_decision > 0) = 1; 
bits = zeros(length(bits_d)-1,1);
for i=1:length(bits)
    bits(i) = mod(bits_d(i) + bits_d(i+1),2);
end

end

 

3、一個demo

image

clc,clear;

nSym = 1000;    % 信息長度
Rb = 1e3;      % 信息速率
fs = 48e3;     % 采樣率
fc = 5e3;      % 載波頻率
Ac = 1;        % 載波幅度

%% 產生2PSK信號
[s_t,bb_t,bb] = psk2_module( nSym ,Rb,fs,fc,Ac );

%% 產生2DPSK信號
[s_d_t,bb_d_t,bb_d] = dpsk2_module( nSym ,Rb,fs,fc,Ac );

%% 繪制發送端差分編碼前后的波形
figure()
%發送端差分編碼前離散序列
subplot(2,1,1);
stem(bb_d);
axis([-5,nSym+5,-1.2,1.2]);
title('發送端差分編碼前離散序列');
xlabel('time(t)');
ylabel('y');

%發送端差分不歸零編碼后離散序列
subplot(2,1,2);
stem(bb_d_t(1:fs/Rb:length(bb_d_t)));
axis([-5,nSym+5,-1.2,1.2]);
title('發送端差分不歸零編碼后離散序列');
xlabel('time(t)');
ylabel('y');

[bits_d,rbb_d_t] = dpsk2_remodule(Rb,fs,fc,s_d_t);

%% 2PSK通信系統評估
s_pow = sum(s_t.^2) / length(s_t);
snr_i = (-3:1:8)'; % SNR輸入(dB)
%計算噪聲功率
n_pow = s_pow ./ (10.^(snr_i ./ 10));

%初始化儲存
number = zeros(1,length(snr_i));
ratio = zeros(1,length(snr_i));

%計算SNR
for i=1:length(snr_i)
    n_t = bandlimit_noise(length(s_t),fs,fc,2*Rb,n_pow(i));
    [bits,rbb_t] = psk2_remodule(Rb,fs,fc,s_t + n_t);
    [number(i),ratio(i)] = symerr(bits,bb(1:nSym-1));
end

%% 2DPSK通信系統評估
s_d_pow = sum(s_d_t.^2) / length(s_d_t);
snr_i = (-3:1:8)'; % SNR輸入(dB)

%計算噪聲功率
n_d_pow = s_d_pow ./ (10.^(snr_i ./ 10));

%初始化儲存
number_d = zeros(1,length(snr_i));
ratio_d = zeros(1,length(snr_i));

%計算SNR
for i=1:length(snr_i)
    n_d_t = bandlimit_noise(length(s_d_t),fs,fc,2*Rb,n_d_pow(i));
    [bits_d,rbb_d_t] = dpsk2_remodule(Rb,fs,fc,s_d_t + n_d_t);
    [number_d(i),ratio_d(i)] = symerr(bits_d,bb_d(1:nSym-1));
end


%繪圖
figure()
hold on;
plot(snr_i,ratio*100,'b');
plot(snr_i,ratio_d*100,'r');
title('2PSK和2DPSK誤碼率曲線對比');
xlabel('snr_i(dB)');
ylabel('誤碼率(%)');
legend('2PSK','2DPSK');


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM