单极性非归零NRZ码、双极性非归零NRZ码、2ASK、2FSK、2PSK、2DPSK及MATLAB仿真

  这篇博客是用MATLAB仿真观察二进制数字信号码元速率和它的带宽的关系。书上给了数字基带信号和频带信号的功率谱密度,但是我还没搞明白FFT与功率谱密度的关系,所以博客里图片的信号幅值就不要纠结啦,看包络形状和带宽就行。如果有明白FFT与功率谱密度的关系的朋友看到博客,请留言告诉我。

单极性非归零NRZ码

  在表示一个码元时,二进制符号1和0分别对应基带信号的正电平和零电平,在整个码元持续时间,电平保持不变。发1和发0等概率时,单极性非归零NRZ信号的功率谱密度为 P s ( f ) = 1 4 T b S a 2 ( π f T b ) + 1 4 δ ( f ) P_s(f)=\frac{1}{4}T_{b}Sa^{2}(\pi fT_{b})+\frac{1}{4}\delta (f) Ps(f)=41TbSa2(πfTb)+41δ(f) T b ( s ) T_b(s) Tb(s) 是码元宽度,码元速率 R B = 1 T b ( B a u d ) R_B=\frac{1}{T_b}(Baud) RB=Tb1(Baud)。功率谱的带宽近似为 f b = 1 T b ( H z ) f_b=\frac{1}{T_b}(Hz) fb=Tb1(Hz)(Sa函数第一零点)。
  下图为单极性非归零NRZ码的幅频特性,用MATLAB的fft函数计算的(下同),码元速率 R B = 100 B a u d R_B=100Baud RB=100Baud,抽样频率 f s = 5000 H z f_s=5000Hz fs=5000Hz,由于fft函数计算结果是对称的,所以只画了一半的图像。可以看到0频率处有一个冲激信号,第一个零点在100 H z Hz Hz处。
在这里插入图片描述

双极性非归零NRZ码

  二进制符号1和0分别对应基带信号的正电平和负电平, 双极性非归零NRZ码具有直流分量小、抽样判决门限为0、可以在电缆等不接地线上传输等优点。 发1和发0等概率时,双极性非归零NRZ码的功率谱密度为 P s ( f ) = T b S a 2 ( π f T b ) P_s(f)=T_{b}Sa^{2}(\pi fT_{b}) Ps(f)=TbSa2(πfTb) 带宽近似为 f b = 1 T b f_b=\frac{1}{T_b} fb=Tb1
  下图为双极性非归零NRZ码的幅频特性,也是用fft函数计算的, R B = 100 B a u d R_B=100Baud RB=100Baud f s = 5000 H z f_s=5000Hz fs=5000Hz。可以看到0频率处没有冲激信号,第一个零点在100 H z Hz Hz处。
在这里插入图片描述

二进制幅度键控(2ASK)

  2ASK是利用代表数字信息的0或1的基带矩形脉冲去键控一个连续的高频载波,使载波时断时续地输出。2ASK信号可以表示为 s 2 A S K ( t ) = s ( t ) c o s ( ω c t ) s_{2ASK}(t)=s(t)cos(\omega_ct) s2ASK(t)=s(t)cos(ωct) ω c \omega_c ωc是载波角频率, s ( t ) s(t) s(t)为单极性非归零NRZ矩形脉冲序列。
  2ASK信号的频谱类似AM信号的频谱,都是将低频信号的频谱搬移到载波频率的位置,带宽是低频信号带宽的两倍,即 B 2 A S K = 2 f b = 2 T b = 2 R B B_{2ASK}=2f_b=\frac{2}{T_b}=2R_B B2ASK=2fb=Tb2=2RB 2ASK的频带利用率为 η = R B B 2 A S K = 1 2 B a u d / H z \eta=\frac{R_B}{B_{2ASK}}=\frac{1}{2}Baud/Hz η=B2ASKRB=21Baud/Hz
  下图为2ASK信号的幅频特性, R B = 100 B a u d R_B=100Baud RB=100Baud f s = 5000 H z f_s=5000Hz fs=5000Hz f c = 1000 H z f_c=1000Hz fc=1000Hz。可以看到1000 H z Hz Hz频率处有一冲激信号,主瓣的第一个零点在1100 H z Hz Hz和900 H z Hz Hz处,带宽为200 H z Hz Hz
在这里插入图片描述

二进制频移键控(2FSK)

  2FSK信号是1对应于载频 f 1 f_1 f1,0对应载频 f 2 f_2 f2 f 1 f_1 f1 f 2 f_2 f2之间的改变是瞬间完成的。2FSK信号可以表示为 s 2 F S K ( t ) = s ( t ) c o s ( ω 1 t + ϕ n ) + s ( t ) ‾ c o s ( ω 2 t + θ n ) s_{2FSK}(t)=s(t)cos(\omega_1t+\phi_n)+\overline{s(t)}cos(\omega_2t+\theta_n) s2FSK(t)=s(t)cos(ω1t+ϕn)+s(t)cos(ω2t+θn) s ( t ) s(t) s(t)为单极性非归零矩形脉冲序列, s ( t ) ‾ \overline{s(t)} s(t)为对 s ( t ) s(t) s(t)逐码取反形成的矩形脉冲序列, ϕ n \phi_n ϕn θ n \theta_n θn是第n个码元的初相位。
  2FSK可以视为两路2ASK信号的合成,其中一路以 s ( t ) s(t) s(t)为基带信号, ω 1 \omega_1 ω1为载频,另一路以 s ( t ) ‾ \overline{s(t)} s(t)为基带信号, ω 2 \omega_2 ω2为载频。因此,2FSK信号的频谱也是两个2ASK频谱之和。2FSK的带宽为为 B 2 F S K = ∣ f 2 − f 1 ∣ + 2 f b B_{2FSK}=|f_2-f_1|+2f_b B2FSK=f2f1+2fb f b = 1 T b f_b=\frac{1}{T_b} fb=Tb1是基带信号的带宽,数值上等于码元速率。
  下图为2FSK信号的幅频特 性, R B = 100 B a u d R_B=100Baud RB=100Baud f s = 5000 H z f_s=5000Hz fs=5000Hz f 1 = 1000 H z f_1=1000Hz f1=1000Hz f 2 = 2000 H z f_2=2000Hz f2=2000Hz。可以看到1000 H z Hz Hz和2000 H z Hz Hz频率处各有一个冲激信号,2FSK信号带宽为 B 2 F S K = 2000 − 1000 + 2 × 100 = 1200 H z B_{2FSK}=2000-1000+2\times100=1200Hz B2FSK=20001000+2×100=1200Hz
在这里插入图片描述

二进制相移键控(2PSK)和二进制差分相移键控(2DPSK)

  2PSK是利用载波的相位直接表示数字信息的相移方式,通常用相位0和相位π来分别表示0或1。2PSK信号可以表示为 s 2 P S K ( t ) = s ( t ) c o s ( ω c t ) s_{2PSK}(t)=s(t)cos(\omega_ct) s2PSK(t)=s(t)cos(ωct) ω c \omega_c ωc是载波角频率, s ( t ) s(t) s(t)为双极性非归零NRZ矩形脉冲序列。
  因为 s ( t ) s(t) s(t)的均值为0,2PSK可以视为抑制载波双边带调幅,2PSK的连续谱部分与2ASK的连续谱部分形状基本相同。2PSK信号的带宽为 B 2 P S K = 2 f b = 2 T b = 2 R B B_{2PSK}=2f_b=\frac{2}{T_b}=2R_B B2PSK=2fb=Tb2=2RB
频带利用率为 η 2 P S K = R B B 2 P S K = 1 2 B a u d / H z \eta_{2PSK}=\frac{R_B}{B_{2PSK}}=\frac{1}{2}Baud/Hz η2PSK=B2PSKRB=21Baud/Hz
  2DPSK是用前后码元的相对载波相位值传送数字信息,相对载波相位是指本码元与前一码元初相之差。2DPSK可以由原0、1序列的相对码(差分码)经过绝对相移键控(2PSK)而形成,2DPSK信号也可以表示为 s 2 D P S K ( t ) = s ( t ) c o s ( ω c t ) s_{2DPSK}(t)=s(t)cos(\omega_ct) s2DPSK(t)=s(t)cos(ωct) s ( t ) s(t) s(t)为差分码数字序列。
  2DPSK与2PSK有相同的带宽和频带利用率,即 B 2 D P S K = B 2 P S K B_{2DPSK}=B_{2PSK} B2DPSK=B2PSK η 2 D P S K = η 2 P S K \eta_{2DPSK}=\eta_{2PSK} η2DPSK=η2PSK
  下图为2PSK信号的幅频特性, R B = 100 B a u d R_B=100Baud RB=100Baud f s = 5000 H z f_s=5000Hz fs=5000Hz f c = 1000 H z f_c=1000Hz fc=1000Hz。可以看到1000 H z Hz Hz频率处没有冲激信号,主瓣的第一个零点在1100 H z Hz Hz和900 H z Hz Hz处,带宽为200 H z Hz Hz。2DPSK的幅频特性与2PSK相同。
在这里插入图片描述

MATLAB仿真

%% Parameter
fs = 5000;  %sampling frequency Hz
fc1 = 1000; %carrier frequency Hz
fc2 = 2000; %carrier frequency Hz
RB = 100;   %Code Rate Baud
M = 2;      %Size of signal constellation
k = log2(M);%Number of bits per symbol
N = 10000;  %Number of bits to process
n = 2^(ceil(log2(N*fs/RB)));
t = (0:n-1)./fs;       % time vector
f = (-n/2:n/2-1)*fs/n; %frequency range
%% Generate code or signal
data_in = randi([0,k],N,1);%unipolar code
unipolar_nrz_st = zeros(1,n);
bipolar_nrz_st = zeros(1,n);
% 1 δφ=π, 0 δφ=0
differencial_st = zeros(1,n);
last_bit = -1;
for i = 0:N-1
    unipolar_nrz_st((i*fs/RB+1):((i+1)*fs/RB)) = data_in(i+1);%unipolar non-zero signal
    if data_in(i+1) == 1
        bipolar_nrz_st((i*fs/RB+1):((i+1)*fs/RB)) = 1;%bipolar non-zero signal
        last_bit = -last_bit;
        differencial_st((i*fs/RB+1):((i+1)*fs/RB)) = last_bit;%differencial signal
    else
        bipolar_nrz_st((i*fs/RB+1):((i+1)*fs/RB)) = -1;
        differencial_st((i*fs/RB+1):((i+1)*fs/RB)) = last_bit;
    end
end
%% Unipolar non-zero signal
%Baseband
S = fftshift(fft(unipolar_nrz_st));
figure('Name','Unipolar non-zero signal','NumberTitle','off');
subplot(3,1,1);
plot(f,abs(S)*2/n);
grid minor;
ylim([0,0.1]);
xlabel('f/Hz');
ylabel('S(f)');
title('Baseband signal');
%2ASK
s_ask = unipolar_nrz_st.*cos(2*pi*fc1*t);
S_ask = fftshift(fft(s_ask));
subplot(3,1,2);
plot(f,abs(S_ask)*2/n);
grid minor;
ylim([0,0.1]);
xlabel('f/Hz');
ylabel('S_{2ASK}(f)');
title('2ASK');
%2FSK
s_fsk = unipolar_nrz_st.*cos(2*pi*fc1*t) + (~unipolar_nrz_st).*sin(2*pi*fc2*t);
S_fsk = fftshift(fft(s_fsk));
subplot(3,1,3);
plot(f,abs(S_fsk)*2/n);
grid minor;
ylim([0,0.1]);
xlabel('f/Hz');
ylabel('S_{2FSK}(f)');
title('2FSK');
%% Bipolar non-zero signal
%Baseband
S = fftshift(fft(bipolar_nrz_st));
figure('Name','Bipolar non-zero signal','NumberTitle','off');
subplot(3,1,1);
plot(f,abs(S)*2/n);
grid minor;
xlabel('f/Hz');
ylabel('S(f)');
title('Baseband signal');
%2PSK
s_psk = bipolar_nrz_st.*cos(2*pi*fc1*t);
S_psk = fftshift(fft(s_psk));
subplot(3,1,2);
plot(f,abs(S_psk)*2/n);
grid minor;
xlabel('f/Hz');
ylabel('S_{2PSK}(f)');
title('2PSK');
%2DPSK
s_dpsk = differencial_st.*cos(2*pi*fc1*t);
S_dpsk = fftshift(fft(s_dpsk));
subplot(3,1,3);
plot(f,abs(S_dpsk)*2/n);
grid minor;
xlabel('f/Hz');
ylabel('S_{2DPSK}(f)');
title('2DPSK');

仿真结果

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/QDchenxr/article/details/106204295