源代码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 单极性归零NRZ码、双极性非归零NRZ码、2ASK、2FSK、2PSK、2DPSK的产生
% 观察二进制数字信号码元速率和它的带宽的关系
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
clear all;
close all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 参数设置
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fs = 8000; % 采样频率
fc1 = 200; % 载波频率
fc2 = 800; % 载波频率
RB = 1e2; % 码元速率
my_count=fs/RB; % 一个码元的采样点数
M = 2; % 二进制调制
N = 100; % 码元数
count=my_count*N; % 总的采样点数
t = 0:1/fs:(count-1)/fs; % 信号持续时间
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 产生原始信号
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% randi函数:生成0 1的单极性序列
% 第一个参数:生成随机序列的最大值 第2个参数:行数 第3个参数:列数
s = randi([0,1],N,1); % 基带序列
y1 = zeros(1,count); % 单极性不归零信号( 0和+1表示数字信息)
y2 = zeros(1,count); % 双极性不归零信号(-1和+1表示数字信息)
y3 = zeros(1,count); % 差分信号
% 1对应π,0对应0
last_bit = -1; % 初始值为-1
for n = 0:N-1
y1((n*my_count+1):((n+1)*my_count)) = s(n+1); % 内插
if s(n+1) == 1
y2((n*my_count+1):((n+1)*my_count)) = 1; % 双极性不归零信号
last_bit = -last_bit;% 取反
y3((n*my_count+1):((n+1)*my_count)) = last_bit; % 如果基带信号为1,y3=1
else % s(n+1) == 0
y2((n*my_count+1):((n+1)*my_count)) = -1;
y3((n*my_count+1):((n+1)*my_count)) = last_bit; % 如果之前s的值有过1,那么last_bit的值就会取一次反
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 单极性归零信号( 0和+1表示数字信息)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
S = fftshift(fft(y1));
L=length(y1);
P=abs(S)/L;
f=(0:L-1)*fs/L-fs/2;
figure(1)
subplot(2,1,1);
stem(t,y1);grid minor;
title('单极性归零基带信号时域波形');
subplot(2,1,2);
plot(f,P);grid minor;
xlabel('f/Hz');ylabel('频谱');
title('单极性归零基带信号频谱');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2ASK调制
% 当幅度=1时,与载波相乘 当幅度=0时,0
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
s_ask = y1.*cos(2*pi*fc2*t);
S_ask = fftshift(fft(s_ask));
P_ask=abs(S_ask)/L;
figure(2)
subplot(2,1,1);
plot(t,s_ask);grid minor;
title('2ASK信号时域波形');
subplot(2,1,2);
plot(f,P_ask);grid minor;
xlabel('f/Hz');ylabel('频谱');
title('2ASK信号频谱');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2FSK调制
% 当幅度=1时,与载波f1相乘;当幅度=0时,与载波f2相乘
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
s_fsk = y1.*cos(2*pi*fc1*t) + (~y1).*sin(2*pi*fc2*t);
S_fsk = fftshift(fft(s_fsk));
P_fsk=abs(S_fsk)/L;
figure(3)
subplot(2,1,1);
plot(t,s_fsk);grid minor;
title('2FSK信号时域波形');
subplot(2,1,2);
plot(f,P_fsk);grid minor;
xlabel('f/Hz');ylabel('频谱');
title('2FSK信号频谱');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 双极性归零信号(-1和+1表示数字信息)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
S = fftshift(fft(y2));
P=abs(S)/L;
figure(4);
subplot(2,1,1);
stem(t,y2);grid minor;
title('双极性归零基带信号时域波形');
subplot(2,1,2);
plot(f,P);grid minor;
xlabel('f/Hz');ylabel('频谱');
title('双极性归零基带信号频谱');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% BPSK信号
% 相移键控利用载波的变化来传递数字信息
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
s_psk = y2.*cos(2*pi*fc2*t);
S_psk = fftshift(fft(s_psk));
P_BPSK=abs(S_psk)/L;
figure(5);
subplot(2,1,1);
plot(t,s_psk);grid minor;
title('BPSK信号时域波形');
subplot(2,1,2);plot(f,P_BPSK);grid minor;
xlabel('f/Hz');ylabel('频谱');
title('BPSK信号频谱');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2DPSK信号
% 2DPSK是利用前后相邻码元的载波相对相位变化来传递数字信息
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
s_2dpsk = y3.*cos(2*pi*fc2*t);
S_2dpsk = fftshift(fft(s_2dpsk));
P_2DPSK=abs(S_2dpsk)/L;
figure(6);
subplot(2,1,1);
plot(t,s_2dpsk);grid minor;
title('2DPSK信号时域波形');
subplot(2,1,2);
plot(f,P_2DPSK);grid minor;
xlabel('f/Hz');ylabel('频谱');
title('2DPSK信号频谱');
仿真结果