2 P S K 2PSK 2PSK, 2 D P S K 2DPSK 2DPSK编码的 M A T L A B MATLAB MATLAB仿真
有具体实验需求可私聊定制
文章目录
2 P S K 2PSK 2PSK
- 2 P S K 2PSK 2PSK即为二进制相移键控,它用两个初相相隔为180的载波来传递二进制信息。所以也被称为BPSK。
相移键控是利用载波的相位变化来传递数字信息,而振幅和频率保持不变。
- 2 P S K 2PSK 2PSK信号的时域表达式为:
e 2 p s k ( t ) = A c o s ( ω c t + ϕ n ) e_{2psk(t)=Acos(\omega_{c}t+\phi_{n})} e2psk(t)=Acos(ωct+ϕn)
- 由于表示信号的两种码元的1波形相同,极性相反,故 2 P S K 2PSK 2PSK信号一般可以表述为一个双极性全占空矩形脉冲序列与一个正弦载波相乘,即
e 2 p s k ( t ) = ∑ n a n g ( t − n T s c o s ω c t ) e_{2psk(t)}=\sum_{n}a_{n}g(t-nT^{s}cos\omega_{c}t) e2psk(t)=n∑ang(t−nTscosωct)
-
发送为二进制符号“0”时( 取+1,), 取0相位;发送为二进制符号“1”时( 取-1,), 取Π相位。这种以载波的不同相位直接去表示相应二进制数字信号的调制方式,称为二进制绝对相移方式。
-
2 P S K 2PSK 2PSK的功率谱密度为:
P 2 p s k ( f ) = 1 4 [ P s ( f + f c ) P s ( f − f c ) ] P_{2psk(f)}=\frac14[P_{s(f+f_{c})}P_{s}(f-f_{c})] P2psk(f)=41[Ps(f+fc)Ps(f−fc)]
-
2 P S K 2PSK 2PSK信号的调制方法分为模拟调制方法和数字调制方法。
-
2 P S K 2PSK 2PSK信号的解调通常采用相干解调法。假设相干载波的基准相位与 2 P S K 2PSK 2PSK信号的调制载波的基准相位一致(通常默认为0相位)。但是,由于在 2 P S K 2PSK 2PSK的载波恢复过程中存在着的相位模糊(,即恢复的本地载波与所需的相干载波可能同相,也有可能相反,这种相位关系的不确定性将会造成解调出的数字基带信号与发送的数字基带信号正好相反,即“1”变为“0”,“0”变为“1”,判决器输出数字信号全部出错。这种现象称为 2 P S K 2PSK 2PSK方式的“倒 ”现象或“反相工作”。这也是 2 P S K 2PSK 2PSK方式在实际中很少采用的主要原因。另外,在随机信号码元序列中,信号波形有可能出现长时间连续正弦波形,致使在接收端无法辨识信号码元的起止时刻。为了解决上述问题,可以采用差分相移键控(DPSK)体制。
2 D P S K 2DPSK 2DPSK
-
2 P S K 2PSK 2PSK信号中,相位的变化时以未调载波的相位作为参考基准的。又称为绝对相移。因此具有 0 0 0、 π \pi π模糊性,导致借条过程中出现“反相工作”现象,恢复出的数字信号“ 1 1 1”,“ 0 0 0”倒置,从而致使 2 P S K 2PSK 2PSK难以实际应用。为了克服此缺点,提出了二进制差分相移键控( 2 D P S K 2DPSK 2DPSK)方式。
-
2 D P S K 2DPSK 2DPSK是利用前后相邻码元的载波相对相位变化传递数字信息,所以又称为相对相移键控。假设 δ ϕ \delta\phi δϕ为当前码元的载波相位差,可定义一种数字信息与 δ ϕ \delta\phi δϕ之间的关系为:
Δ ϕ = { 0 : 表示数字信息“ 0 ” π : 表示数字信息“ 1 ” \Delta\phi = \left\{ \begin{array}{lr} 0 & : 表示数字信息“0”\\ \pi & : 表示数字信息“1” \end{array} \right. Δϕ={0π:表示数字信息“0”:表示数字信息“1”
二进制数字信息 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|
2 D P S K 2DPSK 2DPSK信号相位( 0 0 0) | π \pi π | 0 0 0 | 0 0 0 | π \pi π | π \pi π | π \pi π | 0 0 0 | π \pi π | π \pi π |
或( π \pi π) | 0 0 0 | π \pi π | π \pi π | 0 0 0 | 0 0 0 | 0 0 0 | π \pi π | 0 0 0 | 0 0 0 |
(a)相对码 | 1 | 1 | 0 | 1 | |
---|---|---|---|---|---|
(b)绝对码 | 0 | 1 | 0 | 0 | 1 |
- 在接收端只能采用相干解调。 2 D P S K 2DPSK 2DPSK信号先经过带通滤波器,滤除调制信号频带以外的在信道中混入的噪声,此后该信号分为两路,一路延时一个码元的时间后与另一路的信号相乘,再经过低通滤波器去除高频成分,得到包含基带信号的低频信号,将其送入抽样判决器中进行抽样判决,抽样判决器的输出即为原基带信号。
实验结果
2 P S K 2PSK 2PSK调制解调
上图为信噪比分别在 15 d B 15dB 15dB, 0 d B 0dB 0dB, − 15 d B -15dB −15dB时的调制波形,解调波形,信源以及译码序列
2 D P S K 2DPSK 2DPSK调制解调
上图分别为信噪比在 15 d B 15dB 15dB, 0 d B 0dB 0dB, − 15 d B -15dB −15dB时的信源序列,译码序列,调制波形以及解调波形
误码率
第一个图为误码率在对数坐标系下的曲线,第二个图为误码率在直角坐标系下的曲线,可以看出在误码率水平较高的时候并不能看出两种编码的误码率关系,但当误码率逐渐降低的时候,两种调制方式的误码率逐渐趋近于 2 P S K 2PSK 2PSK误码率为 2 D P S K 2DPSK 2DPSK误码率的2倍,同样,误码率也和滤波器性能有关。
代码
2 P S K 2PSK 2PSK
clc
clear
N = 10000 % 码元数
fs = 900000 % 采样频率
source = randi([0, 1], 1, N); % 信源
AMI = source
AMI(AMI==0) = -1
T = 1/9000; % 单个码元持续时间
rate = 2; % 载波频率与码元频率之比
fc = rate*(1/T); % 载波频率
t = (0:N*fs*T-1)/fs; % 时间刻度
L = fs*T;
t_decode = (0:(N*fs*T+L/2-1))/fs;
decode_2ASK = zeros(1, N);
carrier = sin(2*pi*fc*t); % 载波
Ori = reshape((repmat(source', 1, (fs*T)))', 1, N*fs*T);
s = reshape((repmat(AMI', 1, (fs*T)))', 1, N*fs*T);
ASK_res = carrier.*s;
% 计算信号的傅里叶变换
Y = fft(ASK_res);
% 计算双侧频谱 P2。然后基于 P2 和偶数信号长度 L 计算单侧频谱 P1。
P2 = abs(Y/(N*fs*T));
P1 = P2(1:N*fs*T/2+1);
P1(2:end-1) = 2*P1(2:end-1);
% 定义频域 f 并绘制单侧幅值频谱 P1。与预期相符,频率和幅值与理论相同
f = fs*(0:(N*fs*T/2))/(N*fs*T);
s_awgn = awgn(ASK_res, -15);
Rp=5; % 通带纹波系数
Rs=6; % 阻带衰减系数
Wp=14000; % 通带截止频率
Fs=12000; % 阻带起始频率
Wp1=[12000 24000];
Fs1=[16000 20000];
Wp1=Wp1/(fs/2);
Fs1=Fs1/(fs/2);
[n1,Wn1]=buttord(Wp1,Fs1,Rp,Rs);
[b1,a1]=butter(n1,Wn1);
de_car1=filter(b1,a1,s_awgn);
m = de_car1.*carrier
figure
subplot(3,1,1);plot(t, de_car1);axis([0,10*T,-1.5,1.5]);
subplot(3,1,2);plot(t, m);axis([0,10*T,-1.5,1.5]);
Wp=Wp/(fs/2); % 通带截止频率
Fs=Fs/(fs/2); % 阻带起始频率
% 计算滤波器的最低阶数n和3dB截止频率Wn
[n,Wn]=buttord(Wp,Fs,Rp,Rs);
% 计算系统函数H(z)的分子、分母多项式系数
[b,a]=butter(n,Wn);
y=filter(b,a,m); % filter函数实现IIR滤波器的直接形式
subplot(3,1,3);plot(t, y);axis([0,10*T,-1.5,1.5]);
for i = 1:N
if y(L*i-L/2)>=0
decode_2ASK(i)=1;
else
decode_2ASK(i)=0;
end
end
source;
decode_2ASK;
de_2ASK = [zeros(1, L/2), reshape(repmat(decode_2ASK', 1, L)', 1, N*L)];
k = xor(source, decode_2ASK);
error = length(find(k(1,:)==1))/N;
disp('误码率:')
disp(error)
figure;
subplot(3, 1, 1); plot(t, s); axis([0, 10*T, -1.5, 1.5])
subplot(3, 1, 2); plot(t, ASK_res); axis([0,10*T,-1.5,1.5])
subplot(3, 1, 3); plot(t, s_awgn); axis([0,10*T,-3,3])
% subplot(3,1,3); plot(f,P1); xlabel('f (Hz)'); title('X(t)的单边幅值谱')
figure;
subplot(3,1,1);plot(t, s_awgn);axis([0,10*T,-5,7]);
% subplot(4,1,2);plot(t, x);axis([0,10*T,-2,5]);
subplot(3,1,2);plot(t, y);axis([0,10*T,-1.5,1.5]);
subplot(3,1,3);plot(t_decode, de_2ASK);axis([0,10*T,-0.5,1.5]);
figure;
ax.TitleHorizontalAlignment = 'center';
subplot(4, 1, 1); plot(t, ASK_res); axis([0,10*T,-1.5,1.5]);
subplot(4, 1, 2);plot(t, y, 'r');axis([0,10*T,-1.5,1.5]);
subplot(4, 1, 3); plot(t, s); axis([0, 10*T, -1.5, 1.5]);
subplot(4, 1, 4);plot(t_decode, de_2ASK, 'r');axis([0,10*T,-0.5,1.5]);
sgtitle('-15dB')
2 D S P K 2DSPK 2DSPK
2DPSK
clc
clear
N = 10000 % 码元数
fs = 900000 % 采样频率
error_all = zeros(1, 3000)
source = randi([0, 1], 1, N); % 信源
rel_code = zeros(1, N+1) % 相对码初始化
for q = 2:(N+1)
rel_code(q) = mod((source(q-1)+rel_code(q-1)), 2);
end
source
rel_code
rel_code(rel_code==0) = -1
T = 1/9000; % 单个码元持续时间
rate = 2; % 载波频率与码元频率之比
fc = rate*(1/T); % 载波频率
t = (0:(N+1)*fs*T-1)/fs; % 时间刻度
t1 = (0:fs*T-1)/fs; % 绝对码时间刻度
t2 = (fs*T:(N+1)*fs*T-1)/fs;
L = fs*T;
t_decode = (0:(N*fs*T+L/2-1))/fs;
decode_2ASK_rel = zeros(1, N+1);
decode_2ASK = zeros(1, N);
carrier = sin(2*pi*fc*t); % 载波
Ori = reshape((repmat([0, source]', 1, (fs*T)))', 1, (N+1)*fs*T);
% s = reshape((repmat(AMI', 1, (fs*T)))', 1, N*fs*T);
s = reshape((repmat(rel_code', 1, (fs*T)))', 1, (N+1)*fs*T);
ASK_res = carrier.*s;
s_awgn = awgn(ASK_res, 15);
x = abs(s_awgn); % 加噪,全波整流
Rp=5; % 通带纹波系数
Rs=6; % 阻带衰减系数
Wp=14000; % 通带截止频率
Fs=12000; % 阻带起始频率
Wp1=[12000 24000];
Fs1=[16000 20000];
Wp1=Wp1/(fs/2);
Fs1=Fs1/(fs/2);
[n1,Wn1]=buttord(Wp1,Fs1,Rp,Rs);
[b1,a1]=butter(n1,Wn1);
de_car1=filter(b1,a1,s_awgn);
m = de_car1.*carrier
Wp=Wp/(fs/2); % 通带截止频率
Fs=Fs/(fs/2); % 阻带起始频率
% 计算滤波器的最低阶数n和3dB截止频率Wn
[n,Wn]=buttord(Wp,Fs,Rp,Rs);
% 计算系统函数H(z)的分子、分母多项式系数
[b,a]=butter(n,Wn);
y=filter(b,a,m); % filter函数实现IIR滤波器的直接形式
figure
%subplot(4,1,1);plot(t, de_car1);axis([0,10*T,-1.5,1.5]);
subplot(3,1,1);
plot(t1, de_car1(1: fs*T), 'b:'); hold on; plot(t2, de_car1(fs*T+1: end)); axis([0,10*T,-1.5,1.5]);
subplot(3,1,2);
plot(t1, m(1: fs*T), 'b:'); hold on; plot(t2, m(fs*T+1: end)); axis([0,10*T,-1.5,1.5]);
subplot(3,1,3);
plot(t1, y(1: fs*T), 'b:'); hold on; plot(t2, y(fs*T+1: end)); axis([0,10*T,-1.5,1.5]);
for i = 2:(N+1)
if y(L*i-L/2)>=0
decode_2ASK_rel(i)=1;
else
decode_2ASK_rel(i)=0;
end
end
source;
decode_2ASK_rel;
decode_2ASK = xor(decode_2ASK_rel(1:end-1), decode_2ASK_rel(2:end))
decode_2ASK;
decode_2DPSK_ = [0 decode_2ASK];
de_2ASK = [zeros(1, L/2), reshape(repmat(decode_2ASK_rel', 1, L)', 1, (N+1)*L)];
result = reshape(repmat(decode_2DPSK_', 1, L)', 1, (N+1)*L);
k = xor(source, decode_2ASK);
error = length(find(k(1,:)==1))/N;
disp('误码率:')
disp(error)
figure;
subplot(3, 1, 1);
plot(t1, Ori(1: fs*T), ':'); hold on; plot(t2, Ori(fs*T+1: end)); axis([0, 10*T, -0.5, 1.5])
subplot(3, 1, 2);
plot(t1, ASK_res(1: fs*T), ':'); hold on; plot(t2, ASK_res(fs*T+1: end)); axis([0,10*T,-1.5,1.5])
figure;
subplot(4, 1, 1);
plot(t1, Ori(1: fs*T), '-.'); hold on; plot(t2, Ori(fs*T+1: end), 'b'); axis([0, 10*T, -0.5, 1.5])
subplot(4, 1, 2);
plot(t1, result(1: fs*T), '-.'); hold on; plot(t2, result(fs*T+1: end), 'r'); axis([0, 10*T, -0.5, 1.5])
subplot(4, 1, 3);
plot(t1, ASK_res(1: fs*T), '-.'); hold on; plot(t2, ASK_res(fs*T+1: end), 'b'); axis([0,10*T,-1.5,1.5])
subplot(4,1,4);
plot(t1, y(1: fs*T), '-.'); hold on; plot(t2, y(fs*T+1: end), 'r'); axis([0,10*T,-1.5,1.5]);
sgtitle('15dB')
figure;
subplot(3, 1, 1);
plot(t1, Ori(1: fs*T), '-.'); hold on; plot(t2, Ori(fs*T+1: end), 'b'); axis([0, 10*T, -0.5, 1.5])
subplot(3, 1, 2);
plot(t1, s(1: fs*T), '-.'); hold on; plot(t2, s(fs*T+1: end), 'b'); axis([0, 10*T, -1.5, 1.5])
subplot(3, 1, 3);
plot(t1, ASK_res(1: fs*T), '-.'); hold on; plot(t2, ASK_res(fs*T+1: end), 'b'); axis([0,10*T,-1.5,1.5])
误码率曲线
2PSK
clc
clear
N = 500 % 码元数
fs = 900000 % 采样频率
error_all_2PSK = zeros(1, 3000)
error_all_2DPSK = zeros(1, 3000)
laji_2PSK = zeros(1, 3000)
laji_2DPSK = zeros(1, 3000)
T = 1/9000; % 单个码元持续时间
rate = 2; % 载波频率与码元频率之比
fc = rate*(1/T); % 载波频率
t = (0:N*fs*T-1)/fs; % 时间刻度
L = fs*T;
t_decode = (0:(N*fs*T+L/2-1))/fs;
decode_2PSK = zeros(1, N);
carrier = sin(2*pi*fc*t); % 载波
rel_code = zeros(1, N+1); % 相对码初始化
t_2DPSK = (0:(N+1)*fs*T-1)/fs; % 时间刻度
%***************滤波器参数*****************
Rp=5; % 通带纹波系数
Rs=6; % 阻带衰减系数
Wp1=[12000 24000];
Fs1=[16000 20000];
Wp1=Wp1/(fs/2);
Fs1=Fs1/(fs/2);
[n1,Wn1]=buttord(Wp1,Fs1,Rp,Rs);
[b1,a1]=butter(n1,Wn1);
% de_car1=filter(b1,a1,s_awgn); % 2PSK
% m = de_car1.*carrier;
Wp=14000; % 通带截止频率
Fs=12000; % 阻带起始频率
Wp=Wp/(fs/2); % 通带截止频率
Fs=Fs/(fs/2); % 阻带起始频率
% 计算滤波器的最低阶数n和3dB截止频率Wn
[n,Wn]=buttord(Wp,Fs,Rp,Rs);
% 计算系统函数H(z)的分子、分母多项式系数
[b,a]=butter(n,Wn);
% filter函数实现IIR滤波器的直接形式
% y=filter(b,a,m); % 2PSK
for z = 1:3000%3000
z;
SNR = -15+0.01*z;
source = randi([0, 1], 1, N); % 信源
AMI = source;
AMI(AMI==0) = -1;
2DPSK初始化
% rel_code = zeros(1, N+1); % 相对码初始化
for q = 2:(N+1)
rel_code(q) = mod((source(q-1)+rel_code(q-1)), 2);
end
rel_code(rel_code==0) = -1;
decode_2DPSK_rel = zeros(1, N+1);
decode_2DPSK = zeros(1, N);
carrier_2DPSK = sin(2*pi*fc*t_2DPSK); % 载波
Ori_2DPSK = reshape((repmat([0, source]', 1, (fs*T)))', 1, (N+1)*fs*T);
s_2DPSK = reshape((repmat(rel_code', 1, (fs*T)))', 1, (N+1)*fs*T);
DPSK_res = carrier_2DPSK.*s_2DPSK;
s_awgn_2DPSK = awgn(DPSK_res, SNR);
Ori = reshape((repmat(source', 1, (fs*T)))', 1, N*fs*T);
s = reshape((repmat(AMI', 1, (fs*T)))', 1, N*fs*T);
PSK_res = carrier.*s;
s_awgn = awgn(PSK_res, SNR); % 加高斯白噪声
x = abs(s_awgn); % 全波整流
de_car1=filter(b1,a1,s_awgn); % 2PSK
m = de_car1.*carrier;
y=filter(b,a,m); % 2PSK
2DPSK
de_car1_2DPSK=filter(b1,a1,s_awgn_2DPSK);
m_2DPSK = de_car1_2DPSK.*carrier_2DPSK;
y_2DPSK=filter(b,a,m_2DPSK); % filter函数实现IIR滤波器的直接形式
for i_2DPSK = 2:(N+1)
if y_2DPSK(L*i_2DPSK-L/2)>=0
decode_2DPSK_rel(i_2DPSK)=1;
else
decode_2DPSK_rel(i_2DPSK)=0;
end
end
% source;
decode_2DPSK_rel;
for p = 2:(N+1)
decode_2DPSK(p-1) = mod((decode_2DPSK_rel(p)+decode_2DPSK_rel(p-1)), 2);
end
% decode_2DPSK;
de_2DPSK = [zeros(1, L/2), reshape(repmat(decode_2DPSK_rel', 1, L)', 1, (N+1)*L)];
k_2DPSK = xor(source, decode_2DPSK);
error_2DPSK = length(find(k_2DPSK(1,:)==1))/N;
laji_2DPSK(z) = length(find(k_2DPSK(1,:)==1));
for i = 1:N
if y(L*i-L/2)>=0
decode_2PSK(i)=1;
else
decode_2PSK(i)=0;
end
end
source;
decode_2PSK;
de_2ASK = [zeros(1, L/2), reshape(repmat(decode_2PSK', 1, L)', 1, N*L)];
k = xor(source, decode_2PSK);
error = length(find(k(1,:)==1))/N;
error_all_2PSK(z) = error;
error_all_2DPSK(z) = error_2DPSK;
laji_2PSK(z) = length(find(k(1,:)==1));
end
figure;
plot((-15+0.01):0.01:15, error_all_2PSK, 'b-'); hold on;
plot((-15+0.01):0.01:15, error_all_2DPSK, 'r-'); hold on;
xlabel('信噪比/dB'); ylabel('误码率');
rate = sum(laji_2PSK)/sum(laji_2DPSK)
figure;
semilogy((-15+0.01):0.01:15, error_all_2PSK); hold on;
semilogy((-15+0.01):0.01:15, error_all_2DPSK); hold on;
legend({'\it2PSK', '\it2DPSK'}, 'Location', 'northeast');
xlabel('信噪比/dB'); ylabel('误码率');