matlab仿真 信道(上)

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

1.加性高斯白噪声信道(AWGN )

clear all
t=0:0.001:10;
x=sin(2*pi*t);%原始信号
snr=20;%设定加性白噪声的功率
y1=awgn(x,snr);%在原始信号上叠加白噪声
subplot(2,1,1);plot(t,x);title('正弦信号x');
subplot(2,1,2);plot(t,y1);title('叠加了高斯白噪声后的正弦信号');
z=y1-x;
var(z);%计算方差figure
y2=awgn(x,snr,10);%在y1的基础上设定了输入信号的功率为10
subplot(2,1,1);plot(t,x);title('正弦信号x');
subplot(2,1,2);plot(t,y2);title('叠加了高斯白噪声后的正弦信号');figure
y3=awgn(x,snr,'measured');%将10改为measured,添加的噪声功率根据实际的信号功率计算得到
subplot(2,1,1);plot(t,x);title('正弦信号x');
subplot(2,1,2);plot(t,y3);title('叠加了高斯白噪声后的正弦信号');y4=awgn(x,snr,'measured',10)%添加随机数种子,当种子相同时,产生的加性白噪声的结果相同,所以y4和y6相同
y5=awgn(x,snr,'measured',9)
y6=awgn(x,snr,'measured',10)

 

 

clear all
nSamp=8;%矩形脉冲的取样点数,基带脉冲就是数字信号,每个数字信号都采用8个采样点
numSymb=200000; %每种信噪比下传输的符号数
M=4;%QPSK的符号类型数
SNR=-3:3;%信噪比的范围
grayencod=[0 1 3 2];%gray编码形式,00,01,11,10
for ii=1:length(SNR)%每个信噪比都循环一次msg=randsrc(1,numSymb,[0:3]);%产生发送符号,因为采用QPSK进行调制,每2个比特映射一个发送符号,因此共有4种类型%的发送符号,分别用0-3代表发送比特00、01、11、10msg_gr=grayencod(msg+1);%加1是因为matlab中的数组索引值不能是0,所以+1确保索引值是正整数msg_tx=pskmod(msg_gr,M);%4PSK就是QPSKmsg_tx=rectpulse(msg_tx,nSamp);%矩形脉冲成形函数,每个脉冲用8个采样点进行采样msg_rx=awgn(msg_tx,SNR(ii),'measured');%添加高斯白噪声msg_rx_down=intdump(msg_rx,nSamp);%匹配滤波相干解调%y = intdump(x,nsamp) 对信号 x 进行一个符号周期的积分,然后将平均后的一个值输出到 Y 中。对于二维信号,函数将每列视为一个通道%个人理解是将8个采样点中的平均值作为解调的结果,与rectpulse函数对应msg_gr_demod=pskdemod(msg_rx_down,M);%qpsk解调,与pskmod函数相对应[dummy graydecod]=sort(grayencod);%[B,I] = sort(___) 还会为上述任意语法返回一个索引向量的集合。I 的大小与 A 的大小相同,%它描述了 A 的元素沿已排序的维度在 B 中的排列情况。例如,如果 A 是一个向量,则 B = A(I)。I是索引数组graydecod=graydecod-1;%索引数组[1-4]->[0-3]msg_demod=graydecod(msg_gr_demod+1);%gray解码,用索引数组进行映射实现gray的反映射[errorBit BER(ii)]=biterr(msg,msg_demod,log2(M));[errorSym SER(ii)]=symerr(msg,msg_demod);%BER和SER的求解
end
scatterplot(msg_tx(1:100));
title('发射信号星座图');
xlabel('同相分量');
ylabel('正交分量');
scatterplot(msg_rx(1:100));
title('接收信号星座图');

2.加性高斯白噪声信道(randn )

 

clear all
t=0:0.001:10;
x=sin(2*pi*t);
px=norm(x).^2/length(x);%计算信号x的功率
snr=20;%信噪比,dB形式
pn=px./(10.^(snr./10));%db公式:10 lg(SNR)=DB,倒推得到噪声公式
n=sqrt(pn)*randn(1,length(x));%由噪声功率得到高斯白噪声序列,因为计算功率时需要幅度平方,所以在求幅度时需要功率开根号
y=x+n;
subplot(2,1,1);plot(t,x);title('正弦信号x');
subplot(2,1,2);plot(t,y);title('叠加了高斯白噪声的正弦信号');var(n);

3.simulink中的AWGN模块仿真

(见下一篇)

4.多径衰落信道

(这里的书上的定义较多,此处不进行摘录)

 

fuction [h]=rayleigh(fd,t)
%该程序利用改进的jakes模型来产生单径的平坦型瑞利衰落信道
%输入变量说明
%fd:信道的最大多普勒频移,单位HZ
%t:信号的抽样时间序列
%h:输出的瑞利信道函数,是一个时间函数复序列%假设的入射波数目N=40;wm=2*pi*fd;%每个象限的入射波数目即振荡器数目N0=N/4;%信道函数的实部Tc=zeros(1,length(t));%信道函数的虚部Ts=zeros(1,length(t));%归一化功率系数P_nor=sqrt(1/N0);%区别各条路径的均匀分布随机相位theta=2*pi*rand(1,1)-pi;for ii=1:N0%第i条入射波的入射角alfa(ii)=(2*pi*ii-pi+theta)/N%对每个子载波而言在(-pi,pi)之间均匀分布的随机相位fi_tc=2*pi*randn(1,1)-pi;fi_ts=2*pi*randn(1,1)-pi;%计算冲击响应函数Tc=Tc+cos(cos(alfa(ii))*wm*t+fi_tc);Ts=Ts+cos(cos(alfa(ii))*wm*t+fi_ts);end%乘归一化功率系数得到传输系数h=P_nor*(Tc+j*Ts);

 这里的代码是书上直接给出的,本人还不能理解,这里直接将其作为产生瑞利衰落的已知函数进行使用(后面瑞利衰落信号的产生都需要用到这个代码

clear all
fd=10;
ts=1/1000;
t=0:ts:1;
h1=rayleigh(fd,t);fd=20;
h2=rayleigh(fd,t);
subplot(2,1,1),plot(20*log10(abs(h1(1:1000))));
title('fd=10Hz时的信道功率曲线')
xlabel('时间');ylabel('功率')
subplot(2,1,2),plot(20*log10(abs(h2(1:1000))));%20lg()是信道公式
title('fd=20Hz时的信道功率曲线')
xlabel('时间');ylabel('功率')

 

clear all
nSamp=8;%矩形脉冲的取样点数,基带脉冲就是数字信号,每个数字信号都采用8个采样点
numSymb=10000; %每种信噪比下传输的符号数
M=4;%QPSK的符号类型数
SNR=-3:3;%信噪比的范围
ts=1/(numSymb*nSamp);
t=(0:numSymb*nSamp-1)*ts;
grayencod=[0 1 3 2];%gray编码形式,00,01,11,10
for ii=1:length(SNR)%每个信噪比都循环一次msg=randsrc(1,numSymb,[0:3]);%产生发送符号,因为采用QPSK进行调制,每2个比特映射一个发送符号,因此共有4种类型%的发送符号,分别用0-3代表发送比特00、01、11、10msg_gr=grayencod(msg+1);%加1是因为matlab中的数组索引值不能是0,所以+1确保索引值是正整数msg_tx=pskmod(msg_gr,M);%4PSK就是QPSKmsg_tx=rectpulse(msg_tx,nSamp);%矩形脉冲成形函数,每个脉冲用8个采样点进行采样h=rayleigh(10,t);msg_tx1=h.*msg_tx;msg_rx=awgn(msg_tx,SNR(ii));%添加高斯白噪声msg_rx1=awgn(msg_tx1,SNR(ii));%添加高斯白噪声msg_rx_down=intdump(msg_rx,nSamp);%匹配滤波相干解调msg_rx_down1=intdump(msg_rx1,nSamp);msg_gr_demod=pskdemod(msg_rx_down,M);msg_gr_demod1=pskdemod(msg_rx_down1,M);[dummy graydecod]=sort(grayencod);graydecod=graydecod-1;%索引数组[1-4]->[0-3]msg_demod=graydecod(msg_gr_demod+1);msg_demod1=graydecod(msg_gr_demod1+1);[errorBit BER(ii)]=biterr(msg,msg_demod,log2(M));[errorBit1 BER1(ii)]=biterr(msg,msg_demod1,log2(M));[errorSym SER(ii)]=symerr(msg,msg_demod);[errorSym SER1(ii)]=symerr(msg,msg_demod1);
end
figure
semilogy(SNR,BER,'-ro',SNR,SER,'-r*',SNR,BER1,'-r.',    SNR,SER1,'-r^')
legend('AWGN信道BER','AWGN信道SER','瑞利衰落+AWGN信道BER','瑞利衰落+AWGN信道SER')
title('QPSK在AWGN和瑞利衰落信道下的性能')
xlabel('信噪比(dB)')
ylabel('误符号率和误比特率')

 

这里和4.6不同的地方在于,我们在采用瑞利噪声时需要设置时间变量,这里题目已经写明信号的抽样时间间隔为1/80000s,

因为我们每个脉冲设置8个抽样点,这里发送时间只有一秒,所以就是在1秒钟发送10000个符号,每个符号采样8次,所以每次差1/80000秒,也就是信号的抽样时间间隔(这里个人理解书上的题目可能是多写了一个0,那里的多普勒频移也是多写了一个0).

之后就是瑞利衰落的影响是乘性干扰,所以这里采用点乘的方式将瑞利干扰叠加在信号上。

 个人理解为,

rayleigh函数施加影响需要点乘

rayleighchan函数需要利用filter进行滤波,两者函数底层代码的实现方式不同,所以使用的方式也不同

5.simulink中的多径衰落信道模块仿真

(见下一篇文章)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS技巧:清除浏览器默认样式,让你的页面全由你做主!

莫名其妙的的问题哪里来? 你有没有过写了半天样式,却发现总有些与你想要的效果不同的地方:input带个黑框框,list 的小圈圈,锚点的文字颜色,莫名其妙多出来的一两个像素的距离。。 回到20年前,我刚刚接触…

HBuilder X 小白日记03-用css制作简单的交互动画

:hover选择器,用于选择鼠标指针浮动在上面的元素。 :hover选择器可用于所有元素,不只是链接 :link选择器 设置指向未被访问页面的链接的样式 :visited选择器 用于设置指向已被访问的页面的链接 :active选择器 用于活动链接

DBA 数据库管理

数据库:存储数据的仓库 数据库服务软件: 关系型数据库: 存在硬盘 ,制作表格的 数据库的参数 [rootmysql50 ~]# cat /etc/my.cnf.d/mysql-server.cnf 主配置文件 [mysqld] datadir/var/lib/mysql 存放数据库目录…

【小鸡案例】表单focus和blur事件用法

input中有2个属性,一个是focus获取焦点,一个是blur失去焦点。获取焦点就是我们点击输入框时输入框被选中;失去焦点即点击输入框以外的区域,今天就用这两种属性做一个点击输入框的动画效果。 先写个输入框,代码如下&am…

GitLab介绍,以及add an SSH key

GitLab GitLab 是一个用于仓库管理系统的开源项目,现今并在国内外大中型互联网公司广泛使用。 git,gitlab,github区别 git 是一种基于命令的版本控制系统,全命令操作,没有可视化界面; gitlab 是一个基于git实现的在线代码仓库…

Spring的AOP进阶。(AOP的通知类型、通知顺序、切入点表达式和连接点。)

3. AOP进阶 AOP的基础知识学习完之后,下面我们对AOP当中的各个细节进行详细的学习。主要分为4个部分: 通知类型通知顺序切入点表达式连接点 我们先来学习第一部分通知类型。 3.1 通知类型 在入门程序当中,我们已经使用了一种功能最为强大…

武汉免费 【FPGA实战训练】 Vivado入门与设计师资课程

一.背景介绍 当今高度数字化和智能化的工业领域,对高效、灵活且可靠的技术解决方案的需求日益迫切。随着工业 4.0 时代的到来,工业生产过程正经历着前所未有的变革,从传统的机械化、自动化逐步迈向智能化和信息化。在这一背景下&…

BP神经网络的实践经验

目录 一、BP神经网络基础知识 1.BP神经网络 2.隐含层选取 3.激活函数 4.正向传递 5.反向传播 6.不拟合与过拟合 二、BP神经网络设计流程 1.数据处理 2.网络搭建 3.网络运行过程 三、BP神经网络优缺点与改进方案 1.BP神经网络的优缺点 2.改进方案 一、BP神经网络基…

windows obdc配置

进入控制面板: 进入管理工具:

transformer网络学习

Transformer encoder-decoder模型之间共享的是Encoder最后一层输出的hidden-state。 GitHub - huggingface/transformers: 🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX. Bert2Bert中,Encoder的hidden-state同…

昇思25天学习打卡营第10天|ShuffleNet图像分类

ShuffleNet网络结构 ShuffleNet是一种专为移动设备设计的、计算效率极高的卷积神经网络(CNN)架构。其网络结构的设计主要围绕减少计算复杂度和提高模型效率展开,通过引入逐点分组卷积(Pointwise Group Convolution)和…

AutoX.js从某音分享链接解析出视频ID

背景 从某音分享的链接中解析出数字的videoID,用来做评论Intent跳转 思路 基本所有的短链接都是302跳转或者js跳转,熟悉http协议都知道,当状态码为302,从headers中提取Location即刻获得视频的原链接 链接中就带有videoId 要注意…

【大模型LLM面试合集】大语言模型基础_Word2Vec

Word2Vec 文章来源:Word2Vec详解 - 知乎 (zhihu.com) 1.Word2Vec概述 Word2Vec是google在2013年推出的一个NLP工具,它的特点是能够将单词转化为向量来表示,这样词与词之间就可以定量的去度量他们之间的关系,挖掘词之间的联系。 …

Java之父James Gosling宣布正式退休 创造无数人的饭碗

编程语言Java的创始人,被誉为“Java之父”的James Gosling,近日在社交媒体上宣布了自己正式退休的消息。Gosling表示:“我终于退休了。做了这么多年的软件工程师,现在是时候享受人生了。”他透露,在亚马逊的过去7年是非…

提高LabVIEW软件通用性的方法

提高LabVIEW软件通用性的方法 在使用LabVIEW开发软件时,提高软件的通用性非常重要。通用性意味着软件可以在不同的应用场景中使用,具备高度的适应性和灵活性,从而提高软件的价值和用户满意度。以下从多个角度详细探讨如何提高LabVIEW软件的通…

太实用了吧?手把手教你华为eNSP模拟器桥接真实网络!

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 晚上好,我的网工朋友。 今天聊聊eNSP桥接正式网络,就是把eNSP桥接进真实的网络,利用我们的物理网卡通过实体路…

Unity Text Mesh Pro 中英文混编自动换行问题

问题描述 使用TextMeshPro 输入中英文时,在一行内 输入中英文,当英文部分超过第一行剩余位置时,整个英文部分都会自动换行 问题截图: 期待截图: 问题说明 因为 TextMeshPro识别中文后会带换行符。 解决方案 修改…

人员定位系统的功能,你知道多少呢?

在此前的文章中,说到了人员定位系统用于化工厂定位这一用途来完善工厂管理,但同时,基于人员定位系统的强大功能,该系统的应用范围也要宽范的多,那么,本篇文章就来为大家介绍一下吧。 人员定位系统的功能简介…

C++、QT企业管理系统

目录 一、项目介绍 二、项目展示 三、源码获取 一、项目介绍 人事端: 1、【产品中心】产品案列、新闻动态的发布; 2、【员工管理】新增、修改、删除、搜索功能;合同以图片的方式上传 3、【考勤总览】根据日期显示所有员工上班、下班时间…

[每周一更]-(第104期):Go中使用Makefile的经验

文章目录 1. 项目结构2. Makefile的基础知识什么是 Makefile 3. Go项目的Makefile示例4. 详细解释每个Makefile目标5. 使用Makefile执行常见任务 在Go项目中,使用Makefile可以简化和自动化常见的开发和部署任务,如编译、测试、格式化和清理。深入认识及实…