matlab仿真 数字信号载波传输(上)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真   刘学勇编著第七 章内容,有兴趣的读者请阅读原书)

 

clear all
nsymbol=100000;%每种信噪比下的发送符号数
T=1;%符号周期
fs=100;%每个符号的采样点数
ts=1/fs;%采样时间间隔
t=0:ts:T-ts;%时间矢量
fc=10;%载波频率
c=sqrt(2/T)*cos(2*pi*fc*t);%载波信号(1)M=4;%4-PAM
graycode=[0 1 3 2];%格雷编码准则
EsN0=0:15;%信噪比,Es/N0
snr1=10.^(EsN0/10);%信噪比转化为线性值
msg=randi([0 3],1,nsymbol);%消息数据
msg1=graycode(msg+1);%格雷映射        
msgmod=pammod(msg1,M).';%基带4-PAM调制tx=msgmod*c;%载波调制(2)
tx1=reshape(tx.',1,length(msgmod)*length(c));
spow=norm(tx1).^2/nsymbol;%求每个符号的平均功率(3)
for indx=1:length(EsN0)sigma=sqrt(spow/(2*snr1(indx)));%加入高斯白噪声(4)rx=tx1+sigma*randn(1,length(tx1));rx1=reshape(rx,length(c),length(msgmod));y=(c*rx1)/length(c);%相关运算(5)y1=pamdemod(y,M);decmsg=graycode(y1+1);[err,ber(indx)]=biterr(msg,decmsg,log2(M));%误比特率[err,ser(indx)]=symerr(msg,decmsg);%误符号率
end
semilogy(EsN0,ber,'-ko',EsN0,ser,'-k*',EsN0,1.5*qfunc(sqrt(0.4*snr1)));(6)
title('4-PAM载波信号在AWGN信道下的性能');
xlabel('Es/N0');ylabel('误比特率和误符号率')
legend('误比特率','误符号率','理论误符号率')

(1)由式7-4可知,传输信号的波形需要乘上根号下(2/T),保证PAM信号不是带限的.

(2)由式7-6可知,调制信号等于PAM调制乘上载波信号

(3)norm是求范数,其中默认情况是求二范数,二范数求后再平方等于幅度值的平方和,即符号的能量,除以符号的长度即为符号的功率。

(4)这里是用信噪比和信号功率求出噪声幅度,首先在求功率的时候使用了幅度的平方,所以最外面需要加上根号

个人理解为在计算噪声幅度时使用的是白噪声的功率谱密度进行计算,而信噪比的计算使用的是噪声的功率,两者的关系为:白噪声的功率谱密度=噪声功率/2。

(5)rx1是已调信号,c是载波,即为对载波进行互相关运算(式7-9)

(6)见式7-12,其中由于是PAM,所以式子中的M=4

 

 

 

clear all
nsymbol=100000;%每种信噪比下的发送符号数
T=1;%符号周期
fs=100;%每个符号的采样点数
ts=1/fs;%采样时间间隔
t=0:ts:T-ts;%时间矢量
fc=10;%载波频率
c=sqrt(2/T)*exp(j*2*pi*fc*t);%载波信号c1=sqrt(2/T)*cos(2*pi*fc*t);
c2=-sqrt(2/T)*sin(2*pi*fc*t);
M=8;%8-PSK
graycode=[0 1 2 3 6 7 4 5];%格雷编码准则
EsN0=0:15;%信噪比,Es/N0
snr1=10.^(EsN0/10);%信噪比转化为线性值
msg=randi([0 7],1,nsymbol);%消息数据
msg1=graycode(msg+1);%格雷映射        
msgmod=pskmod(msg1,M).';%基带8-PSK调制tx=real(msgmod*c);%载波调制(1)
tx1=reshape(tx.',1,length(msgmod)*length(c));
spow=norm(tx1).^2/nsymbol;%求每个符号的平均功率
for indx=1:length(EsN0)sigma=sqrt(spow/(2*snr1(indx)));%加入高斯白噪声rx=tx1+sigma*randn(1,length(tx1));rx1=reshape(rx,length(c),length(msgmod));r1=(c1*rx1)/length(c1);%相关运算r2=(c2*rx1)/length(c2);%相关运算r=r1+j*r2;y=pskdemod(r,M);decmsg=graycode(y+1);[err,ber(indx)]=biterr(msg,decmsg,log2(M));%误比特率[err,ser(indx)]=symerr(msg,decmsg);%误符号率
end
ser1=2*qfunc(sqrt(2*snr1)*sin(pi/M));
ber1=1/log2(M)*ser1;    
semilogy(EsN0,ber,'-ko',EsN0,ser,'-k*',EsN0,ser1,EsN0,ber1,'-k.');
title('8-PSK载波信号在AWGN信道下的性能');
xlabel('Es/N0');ylabel('误比特率和误符号率')
legend('误比特率','误符号率','理论误符号率','理论误比特率')

8-PSK与4-PAM的区别有以下几点

首先是采用的格雷码映射方式更多了;在调制时直接与复载波相乘,在解调时则需要同时与同向载波和正交载波求互相关,构造r=r1+j*r2后才能进行psk解调。

(1)注意这里,和载波相乘后还要取实部,这里和PAM是不同的,PAM在和载波相乘后是不需要取实部的,关键在于两种信号的定义式,由式7-13可知,在与载波相乘后前面还要用Re进行处理(即取实部),而根据式7-3,PAM在与载波相乘后是不需要取实部的。

 

clear all
M=4;
msg=[1 2 3 0 3 2 1 1];%(2)
ts=0.01;
T=1;
t=0:ts:T;
x=0:ts:length(msg);
fc=1;
c=sqrt(2)*exp(j*2*pi*fc*t);%(1)
msg_psk=pskmod(msg,M).';
msg_dpsk=dpskmod(msg,M).';
tx_psk=real(msg_psk*c);
tx_psk=reshape(tx_psk.',1,length(msg)*length(t));
tx_dpsk=real(msg_dpsk*c);
tx_dpsk=reshape(tx_dpsk.',1,length(msg)*length(t));
subplot(2,1,1)
plot(x,tx_psk(1:length(x)));%(3)
title('4PSK信号波形')
xlabel('时间t'),ylabel('载波振幅')
subplot(2,1,2)
plot(x,tx_dpsk(1:length(x)))
title('4DPSK波形')
xlabel('时间t'),ylabel('载波振幅')  

(1):这里需要乘上sqrt(2/T),又因为T=1,所以直接乘上根号2

(2):这里因为已经经过gray编码了,相较于上题省略了步骤

(3):这里需要画出信号的波形,画图横坐标为t,纵坐标为载波振幅

值得注意的是,其中x的长度为801,而tx_psk的长度为808;两者不相等

首先,一个符号传递的时间为T=1秒,所以一共有8个符号(PSKMOD处理后信号的长度不变,仍然是8个),所以整个信号传输共8秒,这里的抽样时间间隔为0.01,所以理论上一共有800个点,实际上t为101,就是因为算上了0这个点,在x的向量中也算上了0这个点,所以长为801,但是在进行载波调制的时候使用的是用t构造出来的c(长度也为101)和msg_psk(长度为8)相乘,结果出现了808的长度,

本质原因是x和t两个表示时间的向量相互之间长度并不是8倍的关系

个人建议可以修改为

clear all
M=4;
msg=[1 2 3 0 3 2 1 1];
ts=0.01;%抽样时间间隔
T=1;
t=0:ts:T-ts;
x=0:ts:length(msg)-ts;
fc=1;
c=sqrt(2)*exp(j*2*pi*fc*t);
msg_psk=pskmod(msg,M).';
msg_dpsk=dpskmod(msg,M).';
tx_psk=real(msg_psk*c);
tx_psk=reshape(tx_psk.',1,length(msg)*length(t));
tx_dpsk=real(msg_dpsk*c);
tx_dpsk=reshape(tx_dpsk.',1,length(msg)*length(t));
subplot(2,1,1)
plot(x,tx_psk(1:length(x)));
title('4PSK信号波形')
xlabel('时间t'),ylabel('载波振幅')
subplot(2,1,2)
plot(x,tx_dpsk(1:length(x)))
title('4DPSK波形')
xlabel('时间t'),ylabel('载波振幅') 

这样x和dpsk的长度均为800,也比较好解释图像的物理意义,x上的两个点之间的距离就代表一个抽样时间间隔0.01,8个符号中每个符号都取样了100次,所以表示8个符号一共使用了800个点。

从此例子来看,dpsk和psk调制方式近似,只不过是使用的函数不一致,一个是pskmod,另一个是dpskmod

clear all
nsymbol=100000;
M=8;
graycode=[0 1 2 3 6 7 4 5];
EsN0=5:20;
snr1=10.^(EsN0/10);
msg=randi([0,7],1,nsymbol);
msg1=graycode(msg++1);
msgmod=dpskmod(msg1,M);
spow=norm(msgmod).^2/nsymbol;
for indx=1:length(EsN0)sigma=sqrt(spow/(2*snr1(indx)));rx=msgmod+sigma*(randn(1,length(msgmod))+j*randn(1,length(msgmod)));%(1)y=dpskdemod(rx,M);decmsg=graycode(y+1);[err,ber(indx)]=biterr(msg(2:end),decmsg(2:end),log2(M));[err,ser(indx)]=symerr(msg(2:end),decmsg(2:end));
end
ser1=2*qfunc(sqrt(snr1)*sin(pi/M));
ber1=1/log2(M)*ser1;
semilogy(EsN0,ber,'-ko',EsN0,ser,'-k*',EsN0,ser1,EsN0,ber1,'-k.');
title('8-DPSK载波调制信号在AWGN信道下的性能')
xlabel('Es/N0');ylabel('误比特率和误符号率')
legend('误比特率','误符号率','理论误符号率','理论误比特率')

 这个例子中提到了基带等效的概念,本人认为就是直接在基带信号上加上了干扰,在之前7.3的例子中,我们经过格雷映射和psk调制之后还经过了载波调制,然后干扰加上已调载波上,之后对载波进行解调,但是在此例子中,我们直接在dpsk调制之后加上了干扰,没有用信号调制载波,也就是中间省略了一些调制解调的步骤。

(1)这里注意直接在基带信号上加干扰的过程,因为我们在例7.3中加上干扰信号时已经对信号取了实部,所以可以直接加上randn(式7-3),但是本例中没有取实部,所以我们需要在实部和虚部中都加上高斯白噪声的干扰(randn)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1488583.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

百度竞价推广落地页:优化转化沟通工具的选择与应用

在百度竞价推广中,落地页作为用户点击广告后首先接触到的页面,其设计和优化对于提升转化率至关重要。而转化沟通工具的选择与应用,更是影响用户决策和行动的关键环节。百度竞价托管 www.pansem.com 将探讨在百度竞价推广落地页中,…

简单谈谈 手机版买卖现货白银的好和不好

随着科技的发展,现在买卖现货白银可以在移动设备上进行,那意味着投资者通过手机、平板电脑等都可以进行交易,这进一步解放了投资者交易的场所限制,让投资者有了更大的自由度。有条件的朋友,除了通过个人电脑做现货白银…

苹果电脑暂存盘已满怎么清理 Mac系统如何清理磁盘空间 清理MacBook

Mac电脑用户在长时间使用电脑之后,时常会看到“暂存盘已满”的提示,这无疑会给后续的电脑使用带来烦恼,那么苹果电脑暂存盘已满怎么清理呢,下面将给大家带来一些干货帮你更好地解决这个问题。 首先我们要搞明白为什么暂存盘会满&…

深度学习系列70:模型部署torchserve

1. 流程说明 ts文件夹下, 从launcher.py进入,执行jar文件。 入口为model_server.py的start()函数。内容包含: 读取args,创建pid文件 找到java,启动model-server.jar程序,同时读取log-config文件&#xff…

【Qt】Qt容器和STL容器的区别

1、简述 Qt容器和STL容器略有不同,作为一个Qter,应该知道它们之间的异同。 Qt容器官网介绍:https://doc.qt.io/qt-5/containers.html STL容器官网介绍:https://zh.cppreference.com/w/cpp/container 2、Qt容器和STL容器的对应关系 注意:QList 与 std::list 无关,QSet …

华为云依赖引入错误

问题:记录一次项目加在华为云依赖错误,如下: 错误信息:Could not find artifact com.huawei.storage:esdk-obs-java:pom:3.1.2.1 in bintray-qcloud-maven-repo (https://dl.bintray.com/qcloud/maven-repo/) 找到本地仓库&#…

随机森林+shap算法进行特征贡献性分析-完整代码数据可直接运行

直接看结果: 代码: import os import numpy as np from collections import Counter import random import pandas as pd # 导入必要的库 import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.ensemble import R…

【零基础必看的前端教程】——JavaScript(八)函数

欢迎大家打开前端的新篇章——JavaScript,JavaScript与HTML、CSS合称为前端三大件,JavaScript是前端的重中之重,小洪将继续以零基础视角,带你循序渐进学习前端知识,一看就懂,小白也能转行做前端&#xff01…

Django Web开发:构建强大RBAC权限管理系统的实战指南

文章目录 前言一、rbac 基于角色的权限管理1.acl 基于用户的权限管理2.rbac 基于角色的权限管理 二、应用示例1.配置角色资源a.分析表b.核心逻辑c.使用transfer在前端实现资源配置d.页面效果 2.登录时获取对应权限a.员工登录b.中间件c.前端请求d.效果图 3.前端-路由守卫-页面权…

1207. 有趣的数字图形IV

问题描述 输入一个整数 𝑛 ( 𝑛≤12 ),打印出如下要求的方阵: 除掉右上到左下对角线上的数外的右下半个区域中每个元素等于左边的和上面的元素之和。每个元素场宽为 5 。左上半个区域为空。 输入 一个整…

前端学习7——自学习梳理

​​​​​​jQuery 教程 | 菜鸟教程jQuery 教程 jQuery 是一个 JavaScript 库。 jQuery 极大地简化了 JavaScript 编程。 jQuery 很容易学习。 本章节的每一篇都包含了在线实例 通过本站的在线编辑器,你可以在线运行修改后的代码,并查看运行结果。 实例…

【网络】网络聊天室udp

网络聊天室udp 一、低耦合度代码1、代码2、测试结果 二、高耦合度代码1、服务端小改(1)维护一个unordered_map用户列表(2)服务端代码(3)客户端不改的情况下结果展示 2、大改客户端(udp全双工用多…

stats 监控 macOS 系统

Stats 监控 macOS 系统 CPU 利用率GPU 利用率内存使用情况磁盘利用率网络使用情况电池电量 brew install stats参考 stats github

pythonGame-实现简单的贪食蛇游戏

通过python简单复现贪食蛇游戏。 使用到的库函数: import pygame import time import random 游戏源码: import pygame import time import randompygame.init()white (255, 255, 255) yellow (255, 255, 102) black (0, 0, 0) red (213, 50, 80…

封装和桥接Unity 协程体系

简介 协程(Coroutine)在C#中是一种特殊的函数,它允许开发者编写可以暂停执行并在未来某个时刻恢复执行的代码块。协程通常用于实现异步操作,如延时执行、等待某个事件发生、或者分段执行复杂的任务。在Unity游戏引擎中&#xff0c…

go-kratos 学习笔记(7) 服务发现服务间通信grpc调用

服务发现 Registry 接口分为两个,Registrar 为实例注册和反注册,Discovery 为服务实例列表获取 创建一个 Discoverer 服务间的通信使用的grpc,放到data层,实现的是从uses服务调用orders服务 app/users/internal/data.go 加入 New…

上传文件传参 pc端vue的formData

formData let formData new FormData(); formData.append("file", blob, ref ".png"); //添加参数并且重新命名文件名称 if(ref.toString().indexOf(qrcode) > 0) formData.append(noStbg, true)//添加参数 uploadType(formData, sour…

《人工智能大语言模型技术发展研究报告(2024)》【下载】

《人工智能大语言模型技术发展研究报告(2024)》下载 自2023年起,大模型技术产品的快速迭代和升级,已经成为全球科技竞争的关键因素。由中国软件评测中心发布的《人工智能大语言模型技术发展研究报告(2024)》…

LLM - 理解 Transformer 的位置编码 sin cos 的作用与原理

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/140697827 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Transformer 模型中的位置编码是关键技术,通过为每个词嵌入向量添加位…

哈希表相关的力扣题和讲解和Java、C++常用的数据结构(哈希法)

20240725 一、什么时候适用什么样的结构。1.java中1.1 HashSet:1.2 TreeSet:1.3 LinkedHashSet:1.4 HashMap:1.5 TreeMap:1.6 LinkedHashMap:1.7 总结 2. c中2.1 std::unordered_set:2.2 std::s…