实验4 调制解调的matlab实现

(代码在最下方)

一、实验目的:掌握2ASK/2FSK/2PSK/2DPSK的调制解调实现流程

二、实验内容:

  1. 完成2ASK相干解调的收发端完整程序,并画出已调制信号波形,功率谱密度波形,接收端各关键点波形。
  2. 分别完成2FSK包络检波的收发端完整程序,并画出已调制信号波形,功率谱密度波形,接收端各关键点波形。
  3. 分别完成2FSK相干解调的收发端完整程序,并画出已调制信号波形,功率谱密度波形,接收端各关键点波形。
  4. 完成2PSK相干解调的收发端完整程序,并画出已调制信号波形,功率谱密度波形,接收端各关键点波形。
  5. 分别完成2DPSK差分相干解调(非相干解调)的收发端完整程序,并画出已调制信号波形,功率谱密度波形,接收端各关键点波形。
  6. 分别完成2DPSK相干解调的收发端完整程序,并画出已调制信号波形,功率谱密度波形,接收端各关键点波形。

三、实验步骤:

  1. 设定发送信源为8个随机生成的比特,0,1等概率分布。
  2. 码元速率设置为RB,2ASK和2PSK的载波频率为3RB,2FSK调制其载波频率f1=3RB和f2=6RB,采样频率为60RB。SNR设置为15dB.
  3. 依次在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("功率谱密度");





  • 16
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值