(代码在最下方)
一、实验目的:掌握2ASK/2FSK/2PSK/2DPSK的调制解调实现流程
二、实验内容:
- 完成2ASK相干解调的收发端完整程序,并画出已调制信号波形,功率谱密度波形,接收端各关键点波形。
- 分别完成2FSK包络检波的收发端完整程序,并画出已调制信号波形,功率谱密度波形,接收端各关键点波形。
- 分别完成2FSK相干解调的收发端完整程序,并画出已调制信号波形,功率谱密度波形,接收端各关键点波形。
- 完成2PSK相干解调的收发端完整程序,并画出已调制信号波形,功率谱密度波形,接收端各关键点波形。
- 分别完成2DPSK差分相干解调(非相干解调)的收发端完整程序,并画出已调制信号波形,功率谱密度波形,接收端各关键点波形。
- 分别完成2DPSK相干解调的收发端完整程序,并画出已调制信号波形,功率谱密度波形,接收端各关键点波形。
三、实验步骤:
- 设定发送信源为8个随机生成的比特,0,1等概率分布。
- 码元速率设置为RB,2ASK和2PSK的载波频率为3RB,2FSK调制其载波频率f1=3RB和f2=6RB,采样频率为60RB。SNR设置为15dB.
- 依次在matlab中实现实验内容中的全部调制解调过程。
四、实验结果及分析
2ASK相干解调的收发端程序
%2ASK想干解调的收发端程序
clear ;
close all;
clc;
figure(1);
%%调制
M=8; %产生码元数
Rb=200;%码元速率
fs=60*Rb;%采样频率
L=60; %每码元复制L次
fc=3*Rb; %载波频率
Ts=1/Rb; %每个码元的宽度,即码元的持续时间
Rb=1/Ts; %码元速率1K
dt=Ts/L; %采样间隔
TotalT=M*Ts; %总时间
t=0:dt:TotalT-dt; %时间
SNR=15;% 信噪比15db
%产生单极性波形
wave=randi([0,1],1,M); %产生二进制随机码,M为码元个数
fz=ones(1,L); %定义复制的次数L,L为每码元的采样点数
x1=wave(fz,:); %复制的第1行复制L次
dnrz=reshape(x1,1,L*M); %产生单极性不归零矩形脉冲波形
zb=cos(2*pi*fc*t);
ask2=dnrz.*zb; %2ASK的模拟调制
subplot(7,1,1)
plot(dnrz)
title('单极性不归零矩形脉冲')
%axis([0,TotalT,-0.1,1.1])
subplot(7,1,2)
plot(ask2);
title('2ASK信号波形')
%axis([0,TotalT,-1.1,1.1]);
%已调信号通过含有高斯白噪声的信道
tz=awgn(ask2,SNR); %信号ask2中加入白噪声,信噪比为SNR=15dB
subplot(7,1,3);
plot(tz);
%axis([0,TotalT,-1.5,1.5]);
title('通过高斯白噪声信道后的信号');
%%
%%解调
% load Num_lpass 低通滤波器
% load NUm_bpass 带通滤波器
load Num_bpass.mat;
load Num_lpass.mat;
%带通滤波
y_bpass=conv(tz,Num_bpass);
subplot(7,1,4);
plot(y_bpass);
title("经带通滤波后的信号");
%相乘
bfil_order=length(Num_bpass);
lfil_order=length(Num_lpass);
bf_valnum=(bfil_order-1)/2;
lf_valnum=(lfil_order-1)/2;
y_bpass_v=y_bpass(bf_valnum+1:end-bf_valnum);%掐头去尾
y_mul=y_bpass_v.*zb;
subplot(7,1,5);
plot(y_mul);
title("乘以想干载波后的信号");
%低通滤波
y_lpf=conv(y_mul,Num_lpass); %低通滤波
y_lpf_v=y_lpf(lf_valnum+1:end-lf_valnum);%掐头去尾
subplot(7,1,6);
plot(y_lpf_v);
title("经低通滤波后的信号");
%抽样判决
y_chou=y_lpf_v(L/2:L:end);%抽样点波形
y_dec=(y_chou>max(y_chou)/2);%判决输出
y_dec_exp=repmat(y_dec,L,1);
y_dec_out=reshape(y_dec_exp,1,L*M);
subplot(7,1,7);
plot(y_dec_out);
title("判决后的波形");
figure(2);
%2ASK信号的功率谱密度
P=(abs(fft(ask2))).^2;
P_d=fftshift(P);
plot(P_d);
xlabel('频率');
ylabel('功率(dB)');
title("功率谱密度");
%%
2PSK相干解调的收发端程序
%2PSK相干解调的收发端程序
clear ;
close all;
clc;
figure(1);
%%调制
M=8; %产生码元数
Rb=200;%码元速率
fs=60*Rb;%采样频率
L=60; %每码元复制L次
fc=3*Rb; %载波频率
Ts=1/Rb; %每个码元的宽度,即码元的持续时间
Rb=1/Ts; %码元速率1K
dt=Ts/L; %采样间隔
TotalT=M*Ts; %总时间
t=0:dt:TotalT-dt; %时间
SNR=15;% 信噪比15db
%产生单极性波形
wave=randi([0,1],1,M); %产生二进制随机码,M为码元个数
fz=ones(1,L); %定义复制的次数L,L为每码元的采样点数
x1=wave(fz,:); %复制的第1行复制L次
dnrz=reshape(x1,1,L*M); %产生单极性不归零矩形脉冲波形
zb_1=sin(2*pi*fc*t);
zb_2=sin(2*pi*fc*t+pi);
psk2=dnrz.*zb_1+(~dnrz).*zb_2; %2ASK的模拟调制
subplot(7,1,1)
plot(dnrz)
title('单极性不归零矩形脉冲')
%axis([0,TotalT,-0.1,1.1])
subplot(7,1,2)
plot(psk2);
title('2PSK信号波形')
%axis([0,TotalT,-1.1,1.1]);
%已调信号通过含有高斯白噪声的信道
tz=awgn(psk2,SNR); %信号psk2中加入白噪声,信噪比为SNR=15dB
subplot(7,1,3);
plot(tz);
%axis([0,TotalT,-1.5,1.5]);
title('通过高斯白噪声信道后的信号');
%%
% load Num_lpass 低通滤波器
% load NUm_bpass 带通滤波器
load Num_bpass.mat;
load Num_lpass.mat;
%带通滤波
y_bpass=conv(tz,Num_bpass);
subplot(7,1,4);
plot(y_bpass);
title("经带通滤波后的信号");
%相乘
bfil_order=length(Num_bpass);
lfil_order=length(Num_lpass);
bf_valnum=(bfil_order-1)/2;
lf_valnum=(lfil_order-1)/2;
y_bpass_v=y_bpass(bf_valnum+1:end-bf_valnum);%掐头去尾
y_mul=y_bpass_v.*zb_1;
subplot(7,1,5);
plot(y_mul);
title("乘以想干载波后的信号");
%低通滤波
y_lpf=conv(y_mul,Num_lpass); %低通滤波
y_lpf_v=y_lpf(lf_valnum+1:end-lf_valnum);%掐头去尾
subplot(7,1,6);
plot(y_lpf_v);
title("经低通滤波后的信号");
%抽样判决
y_chou=y_lpf_v(L/2:L:end);%抽样点波形
y_dec=(y_chou>max(y_chou)/2);%判决输出
y_dec_exp=repmat(y_dec,L,1);
y_dec_out=reshape(y_dec_exp,1,L*M);
subplot(7,1,7);
plot(y_dec_out);
title("判决后的波形");
figure(2);
%2PSK信号的功率谱密度
P=(abs(fft(psk2))).^2;
P_d=fftshift(P);
plot(P_d);
xlabel('频率');
ylabel('功率(dB)');
title("功率谱密度");
%%
2FSK相干解调
%2FSK相干解调
clear all;
close all;
clc;
figure(1);
%%调制
M=8; %产生码元数
Rb=200;%码元速率
fs=60*Rb;%采样频率
L=60; %每码元复制L次
fc1=3*Rb; %载波频率
fc2=6*Rb; %载波频率
Ts=1/Rb; %每个码元的宽度,即码元的持续时间
Rb=1/Ts; %码元速率1K
dt=Ts/L; %采样间隔
TotalT=M*Ts; %总时间
t=0:dt:TotalT-dt; %时间
SNR=15;% 信噪比15db
wave=randi([0,1],1,M); %产生二进制随机码,M为码元个数
fz=ones(1,L); %定义复制的次数L,L为每码元的采样点数
x1=wave(fz,:); %复制的第1行复制L次
dnrz=reshape(x1,1,L*M); %产生单极性不归零矩形脉冲波形
subplot(4,1,1)
plot(dnrz)
title('单极性不归零矩形脉冲');
%2FSK的波形
zb_1=cos(2*pi*fc1*t);
zb_2=cos(2*pi*fc2*t); %2fsk
fsk_2=dnrz.*zb_1+(~dnrz).*zb_2;
subplot(4,1,2);
plot(fsk_2);
title("2FSK信号波形");
%已调信号通过含有高斯白噪声的信道
tz=awgn(fsk_2,SNR); %信号fsk2中加入白噪声,信噪比为SNR=15dB
subplot(4,1,3);
plot(tz);
title('通过高斯白噪声信道后的信号');
%%
%解调
% load Num_lpass 低通滤波器
% load NUm_bpass 带通滤波器w1
% load Num_bpass2 带通滤波器W2
load Num_bpass.mat;
load Num_bpass2.mat
load Num_lpass.mat
bfil_order1=length(Num_bpass);
bfil_order2=length(Num_bpass2);
lfil_order=length(Num_lpass);
bf_valnum1=(bfil_order1-1)/2;
bf_valnum2=(bfil_order2-1)/2;
lf_valnum=(lfil_order-1)/2;
%W1
y_bpass1=conv(tz,Num_bpass); %带通滤波
y_bpass1_v=y_bpass1(bf_valnum1+1:end-bf_valnum1);
y_mul1=y_bpass1_v.*zb_1; %相乘
y_lpf1=conv(y_mul1,Num_lpass);%低通滤波
y_lpf1_v=y_lpf1(lf_valnum+1:end-lf_valnum);%掐头去尾
%W2
y_bpass2=conv(tz,Num_bpass2); %带通滤波
y_bpass2_v=y_bpass2(bf_valnum2+1:end-bf_valnum2);
y_mul2=y_bpass2_v.*zb_2; %相乘
y_lpf2=conv(y_mul2,Num_lpass);%低通滤波
y_lpf2_v=y_lpf2(lf_valnum+1:end-lf_valnum);%掐头去尾
%抽样判决
y_chou1=y_lpf1_v(L/2:L:end);
y_chou2=y_lpf2_v(L/2:L:end);
y_dec=(y_chou1>y_chou2);%判决输出
y_dec_exp=repmat(y_dec,L,1);
y_dec_out=reshape(y_dec_exp,1,L*M);
subplot(4,1,4);
plot(y_dec_out);
title("判决后的波形");
figure(2)
%2ASK信号的功率谱密度
P=(abs(fft(fsk_2))).^2;
P_d=fftshift(P);
plot(P_d);
xlabel('频率');
ylabel('功率(dB)');
title("功率谱密度");
FSK包络检波法
%FSK包络检波法
clear ;
close all;
clc;
figure(1);
%%调制
M=8; %产生码元数
Rb=200;%码元速率
fs=60*Rb;%采样频率
L=60; %每码元复制L次
fc1=3*Rb; %载波频率
fc2=6*Rb; %载波频率
Ts=1/Rb; %每个码元的宽度,即码元的持续时间
Rb=1/Ts; %码元速率1K
dt=Ts/L; %采样间隔
TotalT=M*Ts; %总时间
t=0:dt:TotalT-dt; %时间
SNR=15;% 信噪比15db
wave=randi([0,1],1,M); %产生二进制随机码,M为码元个数
fz=ones(1,L); %定义复制的次数L,L为每码元的采样点数
x1=wave(fz,:); %复制的第1行复制L次
dnrz=reshape(x1,1,L*M); %产生单极性不归零矩形脉冲波形
subplot(4,1,1)
plot(dnrz)
title('单极性不归零矩形脉冲');
%2FSK的波形
zb_1=cos(2*pi*fc1*t);
zb_2=cos(2*pi*fc2*t); %2fsk
fsk_2=dnrz.*zb_1+(~dnrz).*zb_2;
subplot(4,1,2);
plot(fsk_2);
title("2FSK信号波形");
%已调信号通过含有高斯白噪声的信道
tz=awgn(fsk_2,SNR); %信号fsk2中加入白噪声,信噪比为SNR=15dB
subplot(4,1,3);
plot(tz);
title('通过高斯白噪声信道后的信号');
%%
%解调
% load Num_lpass 低通滤波器
% load NUm_bpass 带通滤波器w1
% load Num_bpass2 带通滤波器W2
load Num_bpass.mat;
load Num_bpass2.mat
load Num_lpass.mat
bfil_order1=length(Num_bpass);
bfil_order2=length(Num_bpass2);
lfil_order=length(Num_lpass);
bf_valnum1=(bfil_order1-1)/2;
bf_valnum2=(bfil_order2-1)/2;
lf_valnum=(lfil_order-1)/2;
%W1
y_bpass1=conv(tz,Num_bpass); %带通滤波
y_bpass1_v=y_bpass1(bf_valnum1+1:end-bf_valnum1);
y_bao1=abs(y_bpass1_v); %全波整流
y_lpf1=conv(y_bao1,Num_lpass);%低通滤波
y_lpf1_v=y_lpf1(lf_valnum+1:end-lf_valnum);%掐头去尾
%W2
y_bpass2=conv(tz,Num_bpass2); %带通滤波
y_bpass2_v=y_bpass2(bf_valnum2+1:end-bf_valnum2);
y_bao2=abs(y_bpass2_v); %全波整流
y_lpf2=conv(y_bao2,Num_lpass);%低通滤波
y_lpf2_v=y_lpf2(lf_valnum+1:end-lf_valnum);%掐头去尾
%抽样判决
y_chou1=y_lpf1_v(L/2:L:end);
y_chou2=y_lpf2_v(L/2:L:end);
y_dec=(y_chou1>y_chou2);%判决输出
y_dec_exp=repmat(y_dec,L,1);
y_dec_out=reshape(y_dec_exp,1,L*M);
subplot(4,1,4);
plot(y_dec_out);
title("判决后的波形");
figure(2)
%2ASK信号的功率谱密度
P=(abs(fft(fsk_2))).^2;
P_d=fftshift(P);
plot(P_d);
xlabel('频率');
ylabel('功率(dB)');
title("功率谱密度");
DPSK相干解调
%%
%DPSK相干解调
clear ;
close all;
clc;
figure(1);
%%调制
M=8; %产生码元数
Rb=200;%码元速率
fs=60*Rb;%采样频率
L=60; %每码元复制L次
fc=3*Rb; %载波频率
Ts=1/Rb; %每个码元的宽度,即码元的持续时间
Rb=1/Ts; %码元速率1K
dt=Ts/L; %采样间隔
TotalT=M*Ts; %总时间
t=0:dt:TotalT-dt; %时间
SNR=15;% 信噪比15db
%产生单极性波形
wave=randi([0,1],1,M); %产生二进制随机码,M为码元个数
fz=ones(1,L); %定义复制的次数L,L为每码元的采样点数
x1=wave(fz,:); %复制的第1行复制L次
dnrz=reshape(x1,1,L*M); %产生单极性不归零矩形脉冲波形
subplot(9,1,1)
plot(dnrz)
title("绝对码");
%差分编码
dnrz_delta=zeros(1,M);
if(wave(1)==0)
dnrz_delta(1)=0;
else
dnrz_delta(1)=1;
end
for i=2:M
dnrz_delta(i)=xor(dnrz_delta(i-1),wave(i));
end
fz_1=ones(1,L);
x2=dnrz_delta(fz_1,:);
dnrz_delta_f=reshape(x2,1,L*M);
subplot(9,1,2);
plot(dnrz_delta_f);
title("相对码");
%2psk 调制
zb_1=sin(2*pi*fc*t);
zb_2=sin(2*pi*fc*t+pi);
dpsk=dnrz_delta_f.*zb_1+(~dnrz_delta_f).*zb_2;
subplot(9,1,3);
plot(dpsk);
title("DPSK信号波形");
%已调信号通过含有高斯白噪声的信道
tz=awgn(dpsk,SNR); %信号dpsk中加入白噪声,信噪比为SNR=15dB
subplot(9,1,4);
plot(tz);
title('通过高斯白噪声信道后的信号');
%%
%查分相干解调
load Num_bpass.mat;
load Num_lpass.mat;
%带通滤波
y_bpass=conv(tz,Num_bpass);
subplot(9,1,5);
plot(y_bpass);
title("经带通滤波后的信号");
%相乘
bfil_order=length(Num_bpass);
lfil_order=length(Num_lpass);
bf_valnum=(bfil_order-1)/2;
lf_valnum=(lfil_order-1)/2;
y_bpass_v=y_bpass(bf_valnum+1:end-bf_valnum);%掐头去尾
y_bpass_v_delay=zeros(length(y_bpass_v),1);
y_bpass_v_delay(L+1:length(y_bpass_v))=y_bpass_v(1:length(y_bpass_v)-L);
y_mul=y_bpass_v.*zb_1;
subplot(9,1,6);
plot(y_mul);
title("经过相乘器后的信号");
%低通滤波
y_lpf=conv(y_mul,Num_lpass); %低通滤波
y_lpf_v=y_lpf(lf_valnum+1:end-lf_valnum);%掐头去尾
subplot(9,1,7);
plot(y_lpf_v);
title("经低通滤波后的信号");
%抽样判决
y_chou=y_lpf_v(L/2:L:end);%抽样点波形
y_dec=(y_chou>max(y_chou)/2);%判决输出
y_dec_exp=repmat(y_dec,L,1);
y_dec_out=reshape(y_dec_exp,1,L*M);
subplot(9,1,8);
plot(y_dec_out);
title("判决后的波形");
%码反变换
%y_dec(1:M)=~y_dec(1:M);
disp(y_dec);
y_dec_f=zeros(1,M);
if(y_dec(1)==0)
y_dec_f(1)=0;
else
y_dec_f(1)=1;
end
for i=2:M
y_dec_f(i)=xor(y_dec(i-1),y_dec(i));
end
fz_2=ones(1,L);
x3=y_dec_f(fz_2,:);
y_dec_f_F=reshape(x3,1,L*M);
subplot(9,1,9);
plot(y_dec_f_F);
title("码反变换后的波形")
figure(2);
%2PSK信号的功率谱密度
P=(abs(fft(dpsk))).^2;
P_d=fftshift(P);
plot(P_d);
xlabel('频率');
ylabel('功率(dB)');
title("功率谱密度");
DPSK非相干解调
%%
%DPSK非相干解调
clear ;
close all;
clc;
figure(1);
%%调制
M=8; %产生码元数
Rb=200;%码元速率
fs=60*Rb;%采样频率
L=60; %每码元复制L次
fc=3*Rb; %载波频率
Ts=1/Rb; %每个码元的宽度,即码元的持续时间
Rb=1/Ts; %码元速率1K
dt=Ts/L; %采样间隔
TotalT=M*Ts; %总时间
t=0:dt:TotalT-dt; %时间
SNR=15;% 信噪比15db
%产生单极性波形
wave=randi([0,1],1,M); %产生二进制随机码,M为码元个数
fz=ones(1,L); %定义复制的次数L,L为每码元的采样点数
x1=wave(fz,:); %复制的第1行复制L次
dnrz=reshape(x1,1,L*M); %产生单极性不归零矩形脉冲波形
subplot(8,1,1)
plot(dnrz)
title("绝对码");
%差分编码
dnrz_delta=zeros(1,M);
if(wave(1)==0)
dnrz_delta(1)=0;
else
dnrz_delta(1)=1;
end
for i=2:M
dnrz_delta(i)=xor(dnrz_delta(i-1),wave(i));
end
fz_1=ones(1,L);
x2=dnrz_delta(fz_1,:);
dnrz_delta_f=reshape(x2,1,L*M);
subplot(8,1,2);
plot(dnrz_delta_f);
title("相对码");
%2psk 调制
zb_1=sin(2*pi*fc*t);
zb_2=sin(2*pi*fc*t+pi);
dpsk=dnrz_delta_f.*zb_1+(~dnrz_delta_f).*zb_2;
subplot(8,1,3);
plot(dpsk);
title("DPSK信号波形");
%已调信号通过含有高斯白噪声的信道
tz=awgn(dpsk,SNR); %信号dpsk中加入白噪声,信噪比为SNR=15dB
subplot(8,1,4);
plot(tz);
title('通过高斯白噪声信道后的信号');
%%
%查分相干解调
load Num_bpass.mat;
load Num_lpass.mat;
%带通滤波
y_bpass=conv(tz,Num_bpass);
subplot(8,1,5);
plot(y_bpass);
title("经带通滤波后的信号");
%相乘
bfil_order=length(Num_bpass);
lfil_order=length(Num_lpass);
bf_valnum=(bfil_order-1)/2;
lf_valnum=(lfil_order-1)/2;
y_bpass_v=y_bpass(bf_valnum+1:end-bf_valnum);%掐头去尾
%y_bpass_v_delay=zeros(length(y_bpass_v),1);
%y_bpass_v_delay(L+1:length(y_bpass_v))=y_bpass_v(1:length(y_bpass_v)-L);
%y_mul=y_bpass_v.*zb_1;
delay_t=zeros(1,length(y_bpass_v));
delay_t(L+1:length(y_bpass_v))=y_bpass_v(1:length(y_bpass_v)-L);
y_mul=delay_t.*y_bpass_v;
subplot(8,1,6);
plot(y_mul);
title("经过相乘器后的信号");
%低通滤波
y_lpf=conv(y_mul,Num_lpass); %低通滤波
y_lpf_v=y_lpf(lf_valnum+1:end-lf_valnum);%掐头去尾
subplot(8,1,7);
plot(y_lpf_v);
title("经低通滤波后的信号");
%抽样判决
y_chou=y_lpf_v(L/2:L:end);%抽样点波形
y_dec=(y_chou>max(y_chou)/2);%判决输出
y_dec_exp=repmat(y_dec,L,1);
y_dec_out=reshape(y_dec_exp,1,L*M);
subplot(8,1,8);
plot(y_dec_out);
title("判决后的波形");
figure(2);
%2PSK信号的功率谱密度
P=(abs(fft(dpsk))).^2;
P_d=fftshift(P);
plot(P_d);
xlabel('频率');
ylabel('功率(dB)');
title("功率谱密度");