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选择器 用于活动链接

更加优雅的下载文件 --- http header Content-Disposition 学习

更加优雅的下载文件 --- http header Content-Disposition 学习 在响应头中在请求头中a 标签的 download 属性小结 Content-Disposition 在响应头中,告诉浏览器如何处理返回的内容,在表单提交中,说明表单字段信息。 在响应头中 用在响应头中…

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实现的在线代码仓库…

GEE代码实例教程详解:长时间序列NDVI分析

简介 本篇博客将介绍如何使用Google Earth Engine (GEE) 对长时间序列的Landsat数据进行归一化植被指数(NDVI)分析。通过此分析,可以监测和评估1982年至2024年间的植被变化趋势。 背景知识 Landsat数据集 Landsat是美国地质调查局和美国航…

Spring Security的Filter

Spring Security 是一个功能强大的、高度可定制的身份验证和访问控制框架,它为基于 Java 的应用程序提供了全面的安全解决方案。在 Spring Security 中,过滤器(Filter)扮演着非常重要的角色,它们被用来拦截请求并应用安…

React@16.x(52)Redux@4.x(1)- 核心概念

目录 1,MVC2,前端MVC的困难3,Flux4,Redux 1,MVC 是一个解决方案,用于降低 UI 和数据关联的复杂度。 在早期前后端未做分离时,服务端会响应一个完整的HTML,包含页面需要的所有数据。而…

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

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

C++ this指针的作用

this指针的作用 隐式存在:在每个非静态成员函数中,this 指针隐式存在,无需声明。指向对象实例: this 指针指向调用成员函数的对象。成员访问:成员函数通过 t his 指针隐式访问对象的数据成员和函数成员。类型&#xf…

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

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

BP神经网络的实践经验

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

小山菌_代码随想录算法训练营第四十二天| 121. 买卖股票的最佳时机 、

121. 买卖股票的最佳时机 文档讲解&#xff1a;代码随想录. 买卖股票的最佳时机 视频讲解&#xff1a;动态规划之 LeetCode&#xff1a;121.买卖股票的最佳时机1 状态&#xff1a;已完成 代码实现 class Solution { public:int maxProfit(vector<int>& prices) {// …

windows obdc配置

进入控制面板&#xff1a; 进入管理工具&#xff1a;

java解析请求的字符串参数Content-Disposition: form-data;和拼接的键值对

项目场景&#xff1a; 获取到http请求的参数&#xff0c;已经被字符串接收了&#xff0c;需求是需要从字符串中解析出来。 一种情况是&#xff1a;Content-Disposition: form-data; name"userCode" 另一种是&#xff1a;key1value1&key2value2&key3value3…

代码随想录算法训练营第六十二天 | 108. 冗余连接、109. 冗余连接II、复习

108. 冗余连接 题目链接&#xff1a;https://kamacoder.com/problempage.php?pid1181 文档讲解&#xff1a;https://www.programmercarl.com/kamacoder/0108.%E5%86%97%E4%BD%99%E8%BF… 思路 从前向后遍历每一条边&#xff08;因为优先让前面的边连上&#xff09;&#xff0…

Simple_ReAct_Agent

参考自https://www.deeplearning.ai/short-courses/ai-agents-in-langgraph&#xff0c;以下为代码的实现。 Basic ReAct Agent(manual action) import openai import re import httpx import os from dotenv import load_dotenv, find_dotenvOPENAI_API_KEY os.getenv(OPEN…

java 实现人脸特征提取

1. 安装必要的库 确保你已经安装了JPEG库、BLAS和LAPACK库。在Ubuntu或Debian系统上&#xff0c;可以使用以下命令安装&#xff1a; sudo apt-get update sudo apt-get install libjpeg-dev libblas-dev liblapack-dev 在CentOS或Fedora系统上&#xff0c;可以使用以下命令安…

Numpy数组基础操作

1.创建数组 import numpy as np # ————创建数组———— np.array([1,2,3,4]) np.array(range(10))# 迭代对象 np.array([i for i in range(10) if i%20]) #列表&#xff0c;[]列表推导式返回列表 np.array([i for i in range(10) if i%20]) #()# 生成器&#xff0c;列表推…