使用MATLAB实现二进制数字频带系统2DPSK,完成基带信号产生、差分变换、调制解调、抽样判决、码反变换等功能。

2DPSK —— 二进制差分相移键控

码率:24Kbps
信道:高斯信道
解调采用相干解调
画出相应时域和频域波形图

RB=24000;    %码率
fs=48000; %采样率48Khz
T=1; %采样时间1S
j=fs*T; %采样点个数
i=10; %显示码元数
t=linspace(0,1,j);
fc=48000000; %载波频率 48Mhz
fm=i/5;
W=2*fm;%产生基带信号(随机)
a=round(rand(1,i));
st1=t;
for n=1:10if a(n)<1for m=j/i*(n-1)+1:j/i*nst1(m)=0;endelsefor m=j/i*(n-1)+1:j/i*nst1(m)=1;endend
end
figure(1);
subplot(511);
st1_compared=st1;
plot(t*10/RB,st1); %因为显示十个码元,所以只需要横坐标囊括十个码元周期
title('绝对码');
axis([0,10/RB,-2,2]);%差分变换
%设0为参考位
b=zeros(1,i);%全零矩阵
if(a(1)==0)b(1)=0;
elseb(1)=1;
end
for n=2:10if a(n)==b(n-1)b(n)=0;elseb(n)=1;end
end
st1=t;
for n=1:10if b(n)==0for m=j/i*(n-1)+1:j/i*nst1(m)=0;endelsefor m=j/i*(n-1)+1:j/i*nst1(m)=1;endend
end
subplot(512);
plot(t*10/RB,st1);
title('相对码st1');
axis([0,10/RB,-2,2]);st2=t;
for k=1:jif st1(k)==1st2(k)=0;elsest2(k)=1;end
end
subplot(513);
plot(t*10/RB,st2);
title('相对码反码st2');
axis([0,10/RB,-2,2]);%载波信号
s1=sin(2*pi*fc*t);
subplot(514);
plot(t/j,s1);
axis([0,2/fc,-2,2]);
title('载波信号s1');s2=sin(2*pi*fc*t+pi);%移了一个相位
subplot(515);
plot(t/j,s2);
axis([0,2/fc,-2,2]);
title('载波信号s2');

%信号调制
d1=st1.*s1;
d2=st2.*s2;
figure(2);
subplot(411);
plot(t*10/RB,d1);
title('st1*s1');
subplot(412);
plot(t*10/RB,d2);
title('st2*s2');
e_dpsk=d1+d2;
subplot(413);
plot(t*10/RB,e_dpsk);
axis([0,10/RB,-2,2]);
title('调制后波形');
[f0,af0]=T2F(t,e_dpsk);
plot(f0*j,abs(af0)); %频域波形的横坐标应该为f0乘上采样点数
title('调制后频域波形');
axis([-2*fc,2*fc,-0.1,0.3]);%加噪
noise=normrnd(0,1,1,j);
dpsk=e_dpsk+noise;%加入噪声
subplot(414);
plot(t,dpsk);
axis([0,10/RB,-2,2]);
title('加噪声后信号');
[f1,af1]=T2F(t,dpsk);
plot(f1*j,abs(af1));
axis([-2*fc,2*fc,-0.1,0.3]);
title('加噪声后频域波形');

%相干解调
dpsk=dpsk.*s1;%与载波s1相乘
figure(3);
subplot(311);
plot(t*10/RB,dpsk);
axis([0,10/RB,-5,5]);
title('与载波相乘后时域波形');subplot(312);
[f,af]=T2F(t,dpsk);%傅里叶变换
plot(f*j,abs(af));
axis([-3*fc,3*fc,-0.1,0.3]);
title('与载波相乘后频域波形');[t,dpsk]=lpf(f,af,W);%通过低通滤波器,滤除部分噪声
subplot(313);
plot(t*10/RB,dpsk);
axis([0,10/RB,-2,2]);
title('低通滤波后波形');
[f_end,af_end]=T2F(t,dpsk);%傅里叶变换
plot(f_end*j,abs(af_end));
axis([-2*fc,2*fc,-0.1,0.3]);
title('低通滤波后频域波形');

%抽样判决
%正值判成1,负值判成0
st=zeros(1,i);%%全零矩阵
for m=0:i-1if dpsk(1,m*4800+2400)<0st(m+1)=0;for j=m*4800+1:(m+1)*4800dpsk(1,j)=0;endelsefor j=m*4800+1:(m+1)*4800st(m+1)=1;dpsk(1,j)=1;endend
end
figure(4);
subplot(311);
plot(t*10/RB,dpsk);
axis([0,10/RB,-2,2]);
title('抽样判决后波形')%码反变换
dt=zeros(1,i);%%全零矩阵
dt(1)=st(1);
for n=2:10if (st(n)~=st(n-1))dt(n)=1;elsedt(n)=0;end
end
st=t;
for n=1:10if dt(n)<1for m=j/i*(n-1)+1:j/i*nst(m)=0;endelsefor m=j/i*(n-1)+1:j/i*nst(m)=1;endend
end
subplot(312);
plot(t*10/RB,st);
axis([0,10/RB,-2,2]);
title('码反变换后波形');subplot(313);
plot(t*10/RB,st1_compared);
title('原绝对码');
axis([0,10/RB,-2,2]);


用到的自定义函数代码如下:

function [f,sf]= T2F(t,st)
%利用FFT计算信号的频谱并与信号的真实频谱的抽样比较。
%定义了函数T2F,计算信号的傅立叶变换。
dt = t(2)-t(1);
T=t(end);
df = 1/T;
N = length(st);
f=-N/2*df : df : N/2*df-df;
sf = fft(st);
sf = T/N*fftshift(sf);
endfunction [t,st]=F2T(f,sf)
%定义了函数F2T,计算信号的反傅立叶变换。
df = f(2)-f(1);
Fmx = ( f(end)-f(1) +df);
dt = 1/Fmx;
N = length(sf);
T = dt*N;
%t=-T/2:dt:T/2-dt;
t = 0:dt:T-dt;
sff = fftshift(sf);
st = Fmx*ifft(sff);
endfunction [t,st]=lpf(f,sf,B)
%定义了函数lpf,低通滤波
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

数字2DPSK频带传输系统的设计(文内附完整代码)相关推荐

  1. 五子棋java百度文库_JAVA课程设计 五子棋(内附完整代码).doc

    JAVA课程设计 五子棋(内附完整代码) JAVA课程设计 设计题目:五子棋游戏 简要的介绍五子棋 五子棋的起源 五子棋,又被称为"连五子.五子连.串珠.五目.五目碰.五格.五石.五法.五联 ...

  2. CV项目肢体动作识别(三)内附完整代码和详细讲解

    CV项目肢体动作识别(三)内附完整代码和详细讲解 首先我还是给出完整的代码,然后再进行详细的讲解.这一次我们用模块化的思想,把一个功能模块化(moudle),这种思想在工程中非常常见,在分工中你需要做 ...

  3. html页面数字滚动,Vue.js大屏可视化数据数字滚动翻转跳转效果(通俗易懂附完整代码)...

    原文:Vue.js大屏可视化数据数字滚动翻转跳转效果(通俗易懂附完整代码) 大屏数字滚动翻转效果来源于最近工作中element后台管理页面一张大屏的UI图,该UI图上有一个模块需要有数字往上翻动的效果 ...

  4. 吴恩达机器学习python实现(6):SVM支持向量机(文末附完整代码)

    所有的数据来源:链接:https://pan.baidu.com/s/1vTaw1n77xPPfKk23KEKARA 提取码:5gl2 1 Support Vector Machines 1.1 Pr ...

  5. 基于 java Spring Boot 框架的人事管理系统的设计与实现 附完整代码+论文+ppt

    内容摘要: 人事管理在政府机关和企事业单位中占有极其重要的地位,各部门岗位之间协作和工效的提高,是人事管理的基本要求.本设计旨在实现微型人事管理信息系统,功能主要由人事在线通信.员工资料.人事信息管理 ...

  6. C++实践项目一:学生信息管理系统(内附完整代码)

    引言 这几乎是任何一门语言的经典案例. 管理信息系统. MIS(管理信息系统--Management Information System)系统 ,是一个由人.计算机及其他外围设备等组成的能进行信息的 ...

  7. 基于java考研线上自习室 App 的设计与实现附完整代码

    摘要 2022年考研即将开始报名,2021 年暑假的复习也是至关重要的.很多同学在暑假决定回家复习,可是回家复习的效率普遍不高,这是缺乏同学之间相互督促相互进步的结果.本项目就是为了解决这个问题,基于 ...

  8. 使用Mongoose populate实现多表关联存储与查询,内附完整代码

    文章目录 使用Mongoose populate实现多表关联与查询 一. 数据模型创建 1. 创建一个PersonSchema 2. 创建一个StorySchema 3. 使用Schema创建对应的m ...

  9. vue-srr 实现原理内附完整代码( vuex、vue-router、syncData )

    vue-ssr demo 链接 https://github.com/zenghao1998/vue-ssr/tree/main Vue SSR 什么是 SSR 服务端渲染:凡是是从服务器返回的htm ...

最新文章

  1. About Javascript MVC
  2. 深度解析 H.265 视频解决方案
  3. mac如何修改php.ini,mac 如何修改php.ini
  4. php接收流文件,PHP传输文件流及文件流的保存
  5. boost源码剖析之:多重回调机制signal(上)
  6. 算法正确性和复杂度分析
  7. 关于春招 秋招面试的一些经验
  8. python变量类型是动态的_【Python】python动态类型
  9. matlab实验题目,MATLAB实验题目
  10. 写论文的第三天 自建zookeeper集群
  11. hnu 暑期实训之挖掘机技术哪家强
  12. python win32转pdf 横版_Python调用Win32com实现Office批量转PDF
  13. 计算机英语听力速记...,2019考研计算机英语听力速记技巧
  14. 在 visual studio 中添加 ILDASM 工具
  15. Expo大作战(四十一)【完】--expo sdk 之 Assets,BarCodeScanner,AppLoading
  16. nohup与前台后台操作
  17. 辞职信辞职信辞职信辞职信
  18. 是怎么回事?沉浸式体验反倒是局限虚拟现实
  19. python企业微信回调_Python微信企业号开发之回调模式接收微信端客户端发送消息及被...
  20. Visual C++游戏编程基础之多背景循环动画

热门文章

  1. 视觉技术中的图像采集卡
  2. LFS学习系列3 — 前言
  3. 开源分享 | java项目 | 亲戚计算器
  4. 初级项目管理培训心得
  5. 灵活搭建50方局域网视频会议基本系统
  6. windows的命令行工具和DOS工具的区别
  7. dijkstra标号法表格_Dijkstra算法详细讲解
  8. Failed to load ‘D:\note\笔记\javaweb\webpack\webpack.config.js‘ config
  9. python word2vector 词 财务报告 指数_使用Python可视化Word2vec的结果
  10. gzh模板消息内外网穿透问题