matlab仿真 信道(上)

news2024/9/21 14:39:48

(内容源自详解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、10
  
    msg_gr=grayencod(msg+1);%加1是因为matlab中的数组索引值不能是0,所以+1确保索引值是正整数
    msg_tx=pskmod(msg_gr,M);%4PSK就是QPSK
    msg_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、10
  
    msg_gr=grayencod(msg+1);%加1是因为matlab中的数组索引值不能是0,所以+1确保索引值是正整数
    msg_tx=pskmod(msg_gr,M);%4PSK就是QPSK
    msg_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.coloradmin.cn/o/1908252.html

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

相关文章

基于flask的猫狗图像预测案例

📚博客主页:knighthood2001 ✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下) 🎃知识星球:【认知up吧|成长|副业】介绍 ❤️如遇文章付费,可先看…

遥感分类产品精度验证之TIF验证TIF

KKB_2020.tif KKB_2020_JRC.tif kkb.geojson 所用到的包:(我嫌geopandas安装太麻烦colab做的。。 import rasterio import geopandas as gpd import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.metrics import c…

【Threejs进阶教程-着色器篇】3. Uniform的基本用法2与基本地球昼夜效果

Uniform的基本用法2 关于本Shader教程前两篇地址,请按顺序学习本篇使用到的资源用uniform传递纹理代码分析texture类型的uniform在shader中接收uniformtexture2D()处理图片压缩修改wrapS和wrapT 切换成夜景效果切换Mix() 昼夜切换升级改动代码效果分析解决球体分界线…

Linux dig命令常见用法

Linux dig命令常见用法 一、dig安装二、dig用法 DIG命令(Domain Information Groper命令)是常用的域名查询工具,通过此命令,你可以实现域名查询和域名问题的定位,对于网络管理员和在域名系统(DNS)领域工作的小伙伴来说,它是一个非…

【大模型LLM面试合集】大语言模型架构_attention

1.attention 1.Attention 1.1 讲讲对Attention的理解? Attention机制是一种在处理时序相关问题的时候常用的技术,主要用于处理序列数据。 核心思想是在处理序列数据时,网络应该更关注输入中的重要部分,而忽略不重要的部分&…

YOLOv8改进 | 注意力机制| 引入多尺度分支来增强特征表征的注意力机制 【CVPR2021】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效…

顶会FAST24最佳论文|阿里云块存储架构演进的得与失-5.其他话题分享

4.1 可用性威胁与解决方案 挑战1:BlockServer故障影响众多VD 问题描述:单个BlockServer的故障可能会影响到多个虚拟磁盘(VDs)的正常运作,这是由于传统架构中BlockServer承担了过多的职责,其稳定性直接关系…

Eyes Wide Shut Exploring the Visual Shortcomings of Multimodal LLMs

Eyes Wide Shut? Exploring the Visual Shortcomings of Multimodal LLMs 近两年多模态大模型(Multimodal LLM,MLLM)取得了巨大的进展,能够基于图片与人类对话,展现出强大的识别甚至推理能力。然而,在某些…

字符串操作(CC++)

字符串操作 1. C语言基本使用字符串操作函数 2. C3. 对比 C语言和C在字符串操作上有很大的不同,这主要是因为C标准库提供了更强大、更易于使用的字符串类(std::string),而C语言主要依赖字符数组和一系列标准库函数(如s…

Halcon Ean13 一维码读取

一 EAN码介绍 1 EAN码定义: EAN码是国际物品编码协会制定的一种商品用条码,通用于全世界。EAN码符号有标准版(EAN-13)和缩短版(EAN-8)两种。标准版表示13位数字,又称为EAN13码,缩短版表示8位数…

SSM慢性病患者健康管理系统-计算机毕业设计源码04877

目 录 摘要 1 绪论 1.1 研究意义 1.2研究目的 1.3论文结构与章节安排 2 慢性病患者健康管理系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分…

day02_员工管理

文章目录 新增员工需求分析和设计代码开发功能测试代码完善录入的用户名已存在,抛出异常后没有处理新增员工的时候,创建人id和修改人id设置为了固定值ThreadLocal(面试题) 分页查询问题解决 启用禁用员工账号需求和分析代码设计 编…

分享外贸工作中常用英文标准表达和英文语句

常用英文表达 报拉格斯最低到岸价 quote the lowest price CIF Lagos经营纺织品多年 be in the line of textiles for many years货物受欢迎 the goods are very popular with customers / have met with a warm reception /be well received/accepted/ enjoy a wide populari…

2024年7月2日~2024年7月8日周报

目录 一、前言 二、完成情况 2.1 吴恩达机器学习系列课程 2.1.1 分类问题 2.1.2 假说表示 2.1.3 判定边界 2.2 学习数学表达式 2.3 论文写作情况 2.3.1 题目选取 2.3.2 摘要 2.3.3 关键词 2.3.4 引言部分 2.3.4 文献综述部分 三、下周计划 3.1 存在的问题 3.2 …

Nacos注册中心相关错误记录

文章目录 1,com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:jar:unknown was not found1.1 定位及解决方案1.2,简要说明dependencyManagement的作用 2,nacos启动失败2.1 解决方案 1,com.alibaba.cloud:spring-c…

七大AI绘画软件大比拼!高效且免费!

在当今数字时代,人工智能技术广泛应用于各个行业,包括艺术创作。人工智能绘画软件可以帮助艺术家更快、更有效地创作。然而,市场上人工智能绘画软件的选择也令人眼花缭乱。那么,哪种人工智能绘画软件更好呢?需要明确的…

《UDS协议从入门到精通》系列——图解0x84:安全数据传输

《UDS协议从入门到精通》系列——图解0x84:安全数据传输 一、简介二、数据包格式2.1 服务请求格式2.2 服务响应格式2.2.1 肯定响应2.2.2 否定响应 Tip📌:本文描述中但凡涉及到其他UDS服务的,均提供专栏内文章链接跳转方式以便快速…

平安消保在行动 | 守护每一个舒心笑容 不负每一场双向奔赴

“要时刻记得以消费者为中心,把他们当做自己的朋友,站在他们的角度去思考才能更好地解决问题。” 谈及如何成为一名合格的消费者权益维护工作人员,平安养老险深圳分公司负责咨诉工作的庞宏霄认为,除了要具备扎实的专业技能和沟通…

大舍传媒:如何在海外新闻媒体发稿报道摩洛哥?

引言 作为媒体行业的专家,我将分享一些关于在海外新闻媒体发稿报道摩洛哥的干货教程。本教程将带您深入了解三个重要的新闻媒体平台:Mediterranean News、Morocco News和North African News。 地中海Mediterranean News Mediterranean News是一个知名…

景芯SoC训练营DFT debug

景芯训练营VIP学员在实践课上遇到个DFT C1 violation,导致check_design_rule无法通过,具体报错如下: 遇到这个问题第一反映一定是确认时钟,于是小编让学员去排查add_clock是否指定了时钟,指定的时钟位置是否正确。 景芯…