MATLAB实现2psk,2dpsk调制解调

目录

  • 2psk
    • 设计流程
    • 代码
    • 结果
  • 2dpsk
    • 设计流程
    • 代码
    • 结果

2psk

设计流程

(1)利用rand随机产生一组元素为10的数字序列。
(2)根据2psk调制原理画调制信号。
(3)根据相干解调法,将已经调制信号,在信道引入噪声,先经过带通滤波器,再和余弦信号相乘,再经过低通滤波器,进行抽样判决,画出解调后的波形,与原始信号波形进行比较。

代码

%2PSK调制解调
clear all
close all
fs=2000;%采样频率
dt=1/2000;%采样时间
T=1;%码元宽度
f=20;%信号频率
a=round(rand(1,10));%原始数字信号
g1=a;g2=~a;
g11=(ones(1,2000))'*g1;%抽样
g1a=g11(:)';
g21=(ones(1,2000))'*g2;%抽样
g2a=g21(:)';
t=0:dt:10-dt;
t1=length(t);
psk1=g1a.*cos(2*pi*f*t);%码元0用0相位
psk2=g2a.*cos(2*pi*f*t+pi);
sig_psk=psk1+psk2;%产生2psk信号
no=0.01*randn(1,t1);%噪声
sn=sig_psk+no;
figure(1)
subplot(311),plot(t,no);title('噪声波形'),ylabel('幅度');
subplot(312),plot(t,sig_psk);title('psk信号波形'),ylabel('幅度');
subplot(313),plot(t,sn);title('经过信道后的信号'),ylabel('幅度');
%解调
bpf=fir1(101,[19/1000,21/1000]);%带通滤波器设置
H=filter(bpf,1,sn);%经过带通滤波后的信号
sw=H.*cos(2*pi*f*t);
lpf=fir1(101,[1/1000,10/1000]);%低通滤波器设置
st=filter(lpf,1,sw);
figure(2)
subplot(211),plot(t,sw);title('乘法器输出信号'),ylabel('幅度');
subplot(212),plot(t,st);title('低通滤波后输出信号'),ylabel('幅度');
%抽样判决
sig=zeros(1:t);
for i=1:length(t)
    if(st(i)>0)
        sig(i)=0;
    else
        sig(i)=1;
    end
end
figure(3)
subplot(211),plot(sig),axis([0 20000 0 2]),title('经过抽样判决后解调出的波形'),ylabel('幅度');
subplot(212),plot(g1a),axis([0 20000 0 2]),title('原始信号'),ylabel('幅度');

结果



2dpsk

设计流程

(1)利用rand随机产生一组元素为10的数字序列。
(2)根据2dpsk调制原理画调制信号。
(3)根据相干解调法,调制信号经过带通滤波器,再和余弦信号相乘,再经过低通滤波器,进行抽样判决,之后经过码反变换器,画出解调后的波形,与原始信号波形进行比较。

代码

main.m

%2DPSK调制解调
clear all
close all
i=10;
j=5000;%码元速率
fc=4;
fm=i/5;
B=2*fm;
t=linspace(0,5,j);
%产生基带信号
a=round(rand(1,i));
st1=t;
for n=1:10
    if a(n)<1
        for m=j/i*(n-1)+1:j/i*n
            st1(m)=0;
        end
    else
        for m=j/i*(n-1)+1:j/i*n
            st1(m)=1;
        end
    end
end
figure(1)
subplot(411),plot(t,st1),title('绝对码'),axis([0,5,-1,2]);
%差分变换
b=zeros(1,i);
b(1)=a(1);
for n=2:10
    if a(n)>=1
        if b(n-1)>=1
            b(n)=0;
        else
            b(n)=1;
        end
    else
        b(n)=b(n-1);
    end
end
st1=t;
for n=1:10
    if b(n)<1
        for m=j/i*(n-1)+1:j/i*n
            st1(m)=0;
        end
    else
        for m=j/i*(n-1)+1:j/i*n
            st1(m)=1;
        end
    end
end
subplot(412),plot(t,st1),title('相对码'),axis([0,5,-1,2]);
st2=t;
for k=1:j
    if st1(k)>=1
        st2(k)=0;
    else
        st2(k)=1;
    end
end
subplot(413),plot(t,st2),title('相对码的反码'),axis([0,5,-1,2]);
%载波信号
s1=sin(2*pi*fc*t);
subplot(414),plot(s1),title('载波信号');
%调制
d1=st1.*s1;
d2=st1.*(-s1);
figure(2)
subplot(411),plot(t,d1),title('st1*s1');
subplot(412),plot(t,d2),title('st1*s2');
e_dpsk=d1+d2;
subplot(413),plot(t,e_dpsk),title('调制后波形');
noise=rand(1,j);
dpsk=e_dpsk+0.5*noise;
subplot(414),plot(t,dpsk),title('加噪声信号');
%延迟单元
if dpsk(65)<0
    dpsk_delay(1:j/i)=dpsk(1:j/i);
else
    dpsk_delay(1:j/i)=-dpsk(1:j/i);
end
dpsk_delay(j/i+1:j)=dpsk(1:j-j/i);
%与未延迟信号相乘
dpsk=dpsk.*dpsk_delay;
figure(3)
subplot(311),plot(t,dpsk),title('延迟相乘后波形');
%低通滤波
[f,af]=F2T(t,dpsk);
[t,dpsk]=lpf(f,af,B);
subplot(312),plot(t,dpsk),title('通过低通滤波器波形');
%抽样判决
st=zeros(1,i);
for m=0:i-1
    if  dpsk(1,m*500+250)<0
        st(m+1)=0;
        for j=m*500+1:(m+1)*500
            dpsk(1,j)=1;
        end
    else
        for j=m*500+1:(m+1)*500
            st(m+1)=1;
            dpsk(1,j)=0;
        end
    end
end
subplot(313),plot(t,dpsk),axis([0,5,-1,2]),title('抽样判决后即解调后的波形');

F2T.m

function [t,st]=F2T(f,sf)
%傅里叶变换
df=f(2)-f(1);%频率分辨率
Fmx=f(end)-f(1)+df;%频率区间长度
dt=1/Fmx;
N=length(sf);
T=dt*N;
t=0:dt:T-dt;
sff=fftshift(sf);
st=Fmx*ifft(sff);
end

lpf.m

function [t,st]=lpf(f,sf,B)
df=f(2)-f(1);
T=1/df;
hf=zeros(1,length(f));
bf=[-floor(B/df):floor(B/df)]+floor(length(f)/2);
hf(bf)=1;
yf=hf.*sf;
[t,st]=F2T(f,yf);
st=real(st);
end

结果



《通信原理实验教程》刘佳 徐海霞

你可能感兴趣的:(matlab)