当前位置: 首页 > news >正文

matlab仿真 模拟调制(上)

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

1.幅度调制

 

clear all
ts=0.0025;  %信号抽样时间间隔
t=0:ts:10-ts;%时间矢量
fs=1/ts;%抽样频率
df=fs/length(t); %fft的频率分辨率
%msg=randint(100,1,[-3,3],123)
msg=randi([-3,3],100,1);%生成消息序列
msg1=msg*ones(1,fs/10);%扩展成取样信号形式
msg2=reshape(msg1.',1,length(t));
Pm=fft(msg2)/fs%除以fs才是模拟信号的实际频谱
f=-fs/2:df:fs/2-df;
subplot(2,1,1)
plot(f,fftshift(abs(Pm)))%画出消息信号频谱
title('消息信号频谱')A=4;
fc=100;%载波频率
Sam=(A+msg2).*cos(2*pi*fc*t);%已调信号
Pam=fft(Sam)/fs;%已调信号频谱
subplot(2,1,2)
plot(f,fftshift(abs(Pam)))
title('AM信号频谱')
axis([-200 200 0 23])Pc=sum(abs(Sam).^2)/length(Sam);%已调信号功率
Ps=Pc-A^2/2;%消息信号功率
eta=Ps/Pc;%调制效率

首先是生成消息序列时的操作,我们生成的是模拟信号,所以要进行采样转化为数字信号

这里我们每隔0.1秒产生一个符号,时间长度为10s,所以一共产生100个符号,又因为采样时间为0.0025,所以我们每个符号都采样40次(0.1/0.0025),采样40次的效果就是每个序号在采样之后都出现了40次重复的情况(这里用ones实现了该效果)

将采样后的信号通过矩阵变换转成行向量。这就是采样后的数字信号。

由于时间有限,simulink的仿真内容之后有空再补

clear all
ts=0.0025;  %信号抽样时间间隔
t=0:ts:5-ts;%时间矢量
fs=1/ts;%抽样频率%msg=randint(100,1,[-3,3],123)
msg=randi([-3,3],10,1);%生成消息序列
msg1=msg*ones(1,fs/2);
msg2=reshape(msg1.',1,length(t));
subplot(3,1,1)
plot(t,msg2)
title('消息信号')
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
A=4;
fc=100;
Sam=(A+msg2).*cos(2*pi*fc*t);dems=abs(hilbert(Sam))-A;%包络检波,并且去掉直流分量subplot(3,1,2)
plot(t,dems)%画出解调后的信号
title('无噪声的解调信号')y=awgn(Sam,20,'measured');%调制信号通过AWGN信道
dems2=abs(hilbert(y))-A;%包络检波,并且去掉直流分量
subplot(3,1,3)
plot(t,dems2)
title('信噪比为20dB时的解调信号')

 

 

clear all
ts=0.0025;  %信号抽样时间间隔
t=0:ts:10-ts;%时间矢量
fs=1/ts;%抽样频率
df=fs/length(t); %fft的频率分辨率
%msg=randint(100,1,[-3,3],123)
msg=randi([-3,3],100,1);%生成消息序列
msg1=msg*ones(1,fs/10);%扩展成取样信号形式
msg2=reshape(msg1.',1,length(t));
Pm=fft(msg2)/fs%除以fs才是模拟信号的实际频谱
f=-fs/2:df:fs/2-df;
subplot(2,1,1)
plot(f,fftshift(abs(Pm)))%画出消息信号频谱
title('消息信号频谱')A=4;
fc=100;%载波频率
Sdsb=msg2.*cos(2*pi*fc*t);%已调信号
Pdsb=fft(Sdsb)/fs;%已调信号频谱
subplot(2,1,2)
plot(f,fftshift(abs(Pdsb)))
title('DSBSC信号频谱')
axis([-200 200 0 2])Pc=sum(abs(Sdsb).^2)/length(Sdsb);%已调信号频谱
Ps=sum(abs(msg2).^2)/length(msg2);%消息信号功率

 

和AM的思路一样,都是先生成消息序列,后构建数字信号

 

clear all
ts=0.0025;
t=0:ts:5-ts;
fs=1/ts;
df=fs/length(t);
f=-fs/2:df:fs/2-df;
msg=randi([-3,3],10,1);%生成消息序列
msg1=msg*ones(1,fs/2);%扩展成取样信号的形式
msg2=reshape(msg1.',1,length(t));subplot(3,1,1)
plot(t,msg2)
title('消息信号')fc=100;
Sdsb=msg2.*cos(2*pi*fc*t);%已调信号
y=Sdsb.*cos(2*pi*fc*t);%相干解调
Y=fft(y)./fs;%解调后的频谱
f_stop=100;%设计低通滤波器
n_stop=floor(f_stop/df);%
Hlow=zeros(size(f));
Hlow(1:n_stop)=2;
Hlow(length(f)-n_stop+1:end)=2;
DEM=Y.*Hlow;%通过点乘的方式使信号通过滤波器
dem=real(ifft(DEM))*fs;%最终得到的解调信号,因为刚开始构建的是实数信号,所以需要对DEM取实部。
subplot(3,1,2)
plot(t,dem);
title('无噪声的解调信号')y1=awgn(Sdsb,20,'measured');
y2=y1.*cos(2*pi*fc*t);
Y2=fft(y2)./fs;
DEM1=Y2.*Hlow;
dem1=real(ifft(DEM1))*fs;
subplot(3,1,3)
plot(t,dem1)
title('信噪比为20dB时的解调信号')

在构建低通滤波器时,思路如下(pi处是高频,2pi处是低频)

 

clear all
ts=0.0025;
t=0:ts:10-ts;
fs=1/ts;
df=fs/length(t);
f=-fs/2:df:fs/2-df;
msg=randi([-3,3],100,1);%生成消息序列
msg1=msg*ones(1,fs/10);%扩展成取样信号的形式
msg2=reshape(msg1.',1,length(t));
Pm=fft(msg2)/fs;
f=-fs/2:df:fs/2-df;
subplot(2,1,1)
plot(f,fftshift(abs(Pm)))
title('消息信号的频谱')fc=100;%载波频率
Sdsb=msg2.*cos(2*pi*fc*t);%DSB信号
Pdsb=fft(Sdsb)/fs;%DSB信号频谱f_stop=100;%低通滤波器的截止频率
n_stop=floor(f_stop/df);%floor向下取整函数
Hlow=zeros(size(f));%设计低通滤波器
Hlow(1:n_stop)=1;
Hlow(length(f)-n_stop+1:end)=1;
Plssb=Pdsb.*Hlow;%LSSB信号频谱
subplot(2,1,2)
plot(f,fftshift(abs(Plssb)))
title('已调信号频谱')
axis([-200 200 0 2])Slssb=real(ifft(Plssb))*fs;
Pc=sum(abs(Slssb).^2)/length(Slssb)%已调信号功率
Ps=sum(abs(msg2).^2)/length(msg2)%消息信号功率

 这次的代码是用滤波法实现单边带信号的,滤波的思路如下图

 

 

clear all
ts=0.0025;
t=0:ts:10-ts;
fs=1/ts;
df=fs/length(t);
f=-fs/2:df:fs/2-df;
msg=randi([-3,3],100,1);%生成消息序列
msg1=msg*ones(1,fs/10);%扩展成取样信号的形式
msg2=reshape(msg1.',1,length(t));
Pm=fft(msg2)/fs;
f=-fs/2:df:fs/2-df;
subplot(2,1,1)
plot(f,fftshift(abs(Pm)))
title('消息信号的频谱')fc=100;
s1=0.5.*msg2.*cos(2*pi*fc*t);%DSB信号
hmsg=imag(hilbert(msg2));%imag返回虚部
s2=0.5*hmsg.*sin(2*pi*fc*t);
Sussb=s1-s2;        
Pussb=fft(Sussb)/fs;
subplot(2,1,2)
plot(f,fftshift(abs(Pussb)))
title('USSB信号频谱')
axis([-200 200 0 2])Pc=sum(abs(Sussb).^2)/length(Sussb)
Ps=sum(abs(msg2).^2)/length(msg2)

这里hilbert取虚部的原因是因为,matlab中的hilbert变换是返回一个复数序列,其实部是原序列,而虚部才是要求的Hilbert变换。

clear all
ts=0.0025;
t=0:ts:5-ts;
fs=1/ts;
df=fs/length(t);
f=-fs/2:df:fs/2-df;
msg=randi([-3,3],10,1);%生成消息序列
msg1=msg*ones(1,fs/2);%扩展成取样信号的形式
msg2=reshape(msg1.',1,length(t));
Pm=fft(msg2)/fs;
f=-fs/2:df:fs/2-df;
subplot(3,1,1)
plot(t,msg2)
title('消息信号的频谱')fc=300;
s1=0.5.*msg2.*cos(2*pi*fc*t);%DSB信号
hmsg=imag(hilbert(msg2));%imag返回虚部
s2=0.5*hmsg.*sin(2*pi*fc*t);
Sussb=s1-s2; 
y=Sussb.*cos(2*pi*fc*t);
Y=fft(y)./fs;
f_stop=100;
n_stop=floor(f_stop/df);
Hlow=zeros(size(f));
Hlow(1:n_stop)=4;
Hlow(length(f)-n_stop+1:end)=4;
DEM=Y.*Hlow;
dem=real(ifft(DEM))*fs;
subplot(3,1,2)
plot(t,dem);
title('无噪声的解调信号')y1=awgn(Sussb,20,'measured');
y2=y1.*cos(2*pi*fc*t);
Y2=fft(y2)./fs;
DEM1=Y2.*Hlow;
dem1=real(ifft(DEM1))*fs;
subplot(3,1,3)
plot(t,dem1)
title('信噪比为20dB时的解调信号')

 

与DSB解调思路相同 ,都是相干解调后经过低通滤波器,取实部

相关文章:

matlab仿真 模拟调制(上)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第五章内容,有兴趣的读者请阅读原书) 1.幅度调制 clear all ts0.0025; %信号抽样时间间隔 t0:ts:10-ts;%时间矢量 fs1/ts;%抽样频率 dffs/length(t); %fft的频率分…...

【数据结构】--- 堆的应用

​ 个人主页:星纭-CSDN博客 系列文章专栏 :数据结构 踏上取经路,比抵达灵山更重要!一起努力一起进步! 一.堆排序 在前一个文章的学习中,我们使用数组的物理结构构造出了逻辑结构上的堆。那么堆到底有什么用呢&…...

0基础学会在亚马逊云科技AWS上利用SageMaker、PEFT和LoRA高效微调AI大语言模型(含具体教程和代码)

项目简介: 小李哥今天将继续介绍亚马逊云科技AWS云计算平台上的前沿前沿AI技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS上的AI软甲开发最佳实践,并应用到自己的日常工作里。本次介绍的是如何在Amazon SageMaker上…...

护网HW面试——redis利用方式即复现

参考:https://xz.aliyun.com/t/13071 面试中经常会问到ssrf的打法,讲到ssrf那么就会讲到配合打内网的redis,本篇就介绍redis的打法。 未授权 原理: Redis默认情况下,会绑定在0.0.0.0:6379,如果没有采用相关…...

C++ //练习 15.8 给出静态类型和动态类型的定义。

C Primer(第5版) 练习 15.8 练习 15.8 给出静态类型和动态类型的定义。 环境:Linux Ubuntu(云服务器) 工具:vim 解释 静态类型:在编译时已知,是在变量声明时的类型或表达式生成的…...

阿里云ECS服务器安装jdk并运行jar包,访问成功详解

安装 OpenJDK 8 使用 yum 包管理器安装 OpenJDK 8 sudo yum install -y java-1.8.0-openjdk-devel 验证安装 安装完成后,验证 JDK 是否安装成功: java -version设置 JAVA_HOME 环境变量: 为了确保系统中的其他应用程序可以找到 JDK&…...

Windows系统上使用npm来安装和配置Yarn,在VSCode中使用

一、安装Yarn 1. 安装Node.js和npm 如果还没有安装Node.js和npm,可以从Node.js官方网站下载并安装最新版本的Node.js,npm会随Node.js一起安装。 2. 使用npm安装Yarn 打开命令提示符或PowerShell,运行以下命令来全局安装Yarn: …...

Unity ColorSpace 之 【颜色空间】相关说明,以及【Linear】颜色校正 【Gamma】的简单整理

Unity ColorSpace 之 【颜色空间】相关说明,以及【Linear】颜色校正 【Gamma】的简单整理 目录 Unity ColorSpace 之 【颜色空间】相关说明,以及【Linear】颜色校正 【Gamma】的简单整理 一、简单介绍 二、在Unity中设置颜色空间 三、Unity中的Gamma…...

JavaScript的学习(二)

今天继续学习JavaScript的第二天&#xff0c;还是打基础 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title…...

【接口自动化_06课_Pytest+Excel+Allure完整框架集成】

一、logging在接口自动化里的应用 1、设置日志的配置&#xff0c;并收集日志文件 日志的设置需要在pytest.ini文件里设置。这个里面尽量不要有中文 2、debug日志的打印 pytest.ini文件的开关一定得是true才能在控制台打印日志 import allure import pytest from P06_PytestFr…...

Profibus协议转Profinet协议网关模块连接智能电表通讯案例

一、背景 在工业自动化领域&#xff0c;Profibus协议和Profinet协议是两种常见的工业通讯协议&#xff0c;而连接智能电表需要用到这两种协议之间的网关模块。本文将通过一个实际案例&#xff0c;详细介绍如何使用Profibus转Profinet模块&#xff08;XD-PNPBM20&#xff09;实…...

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(九)-无人机服务区分离

引言 本文是3GPP TR 22.829 V17.1.0技术报告&#xff0c;专注于无人机&#xff08;UAV&#xff09;在3GPP系统中的增强支持。文章提出了多个无人机应用场景&#xff0c;分析了相应的能力要求&#xff0c;并建议了新的服务级别要求和关键性能指标&#xff08;KPIs&#xff09;。…...

acrobat 中 PDF 复制时不能精确选中所选内容所在行的一种解决方法

现象&#xff1a;划取行的时候&#xff0c;自动扩展为多行 如果整段选中复制&#xff0c;粘贴后是乱码 解决步骤 识别完&#xff0c;保存 验证 可以按行复制了。 如果遇到仅使用 acrobat OCR 不能彻底解决的&#xff0c;更换其他自己熟悉的进行 OCR。...

安卓学习中遇到的问题【bug】

安卓学习中遇到的问题 1Gradle下载慢怎么办&#xff1f; Gradle下载慢怎么办&#xff1f; distributionUrlhttps://mirrors.cloud.tencent.com/gradle/gradle-7.5-bin.zip 2 Could not resolve all files for configuration ‘:classpath‘. &#xff1e; Could not resolv…...

【日常记录】【CSS】display:inline 的样式截断

文章目录 1. 案例2. css属性&#xff1a;box-decoration-break参考地址 1. 案例 现在有一篇文章&#xff0c;某些句子&#xff0c;是要被标记的&#xff0c;加一些css 让他突出一下 可以看到&#xff0c;在最后&#xff0c;断开了&#xff0c;那如若要让 断开哪里的样式 和 开始…...

数据库系统安全

数据库安全威胁 数据库作为信息系统中的核心组成部分&#xff0c;存储和管理着大量敏感和关键的数据&#xff0c;成为网络攻击者的主要目标之一。以下是常见的数据库安全威胁及其详细描述&#xff1a; 一、常见数据库安全威胁 SQL注入攻击&#xff08;SQL Injection&#xff…...

Qt MV架构-代理模型

一、基本概念 代理模型可以将一个模型中的数据进行排序或者过滤&#xff0c;然后提供给视图进行显示。 Qt中提供了QSortFilterProxyModel作为标准的代理模型来完成模型中数据的排序和过滤。 要使用一个代理模型&#xff0c;则只需要为其设置源模型&#xff0c;然后再视图中使…...

WebSocket实现群聊功能、房间隔离

引用WebSocket相关依赖 <dependency><groupId>javax.websocket</groupId><artifactId>javax.websocket-api</artifactId><version>1.1</version></dependency><dependency><groupId>org.springframework</grou…...

顶顶通呼叫中心中间件实现随时启动和停止质检(mod_cti基于FreeSWITCH)

文章目录 前言联系我们拨号方案启动停止ASR执行FreeSWITCH 命令接口启动ASR接口停止ASR接口 通知配置cti.json配置质检结果写入数据库 前言 顶顶通呼叫中心中间件的实时质检功能是由两个模块组成&#xff1a;mod_asr 和 mod_qc。 mod_asr&#xff1a;负责调用ASR将用户们在通…...

基于conda包的环境创建、激活、管理与删除

Anaconda是一个免费、易于安装的包管理器、环境管理器和 Python 发行版&#xff0c;支持平台包括Windows、macOS 和 Linux。下载安装地址&#xff1a;Download Anaconda Distribution | Anaconda 很多不同的项目可能需要使用不同的环境。例如某个项目需要使用pytorch1.6&#x…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...