《现代通信原理与技术》模拟调制与解调—FM 调制实验报告

摘要

本实验旨在通过 MATLAB 软件进行模拟调制与解调的实践, 加深对频率调制(Frequency Modulation, FM)原理的理解,并掌 握 FM 调制与解调的实现方法。

关键词:MATLAB

引言

在现代通信系统中,调制技术是实现信息传输的核心方法之一。频率调 制(Frequency Modulation, FM)作为一种重要的模拟调制方式,通过改变 载波信号的频率来传递信息,广泛应用于广播、电视、无线通信等领域。FM 调制具有抗干扰能力强、信噪比高等优点,使其在高质量音频传输中占据重 要地位。

一:实验目的

1.理解 FM 调制与解调的基本原理。

(1)掌握频率调制(FM)的基本概念和数学原理。

(2)理解调频信号的特点,包括带宽、频率偏差、调制指数等。

2.熟练掌握使用 MATLAB 进行 FM 调制与解调的实现方法:

(1)学会编写 MATLAB 代码来模拟 FM 调制器和解调器。

(2)理解和应用 MATLAB 内置的信号处理函数和工具箱。

3.通过仿真波形图,验证调制与解调的正确性和有效性:

(1)生成和显示调频信号及其解调后的信号波形。

(2)通过比较原始信号和解调后信号,验证解调的正确性。

(3)分析调制过程中的频谱变化和解调后的信号质量。

4.提高使用 MATLAB 进行信号处理的实际操作能力:

(1)培养学生运用 MATLAB 解决信号处理问题的能力。

(2)鼓励学生对实验过程进行创新性思考,尝试不同的参数设置和算法优化。

5.探索 FM 调制与解调在实际通信系统中的应用:

(1)分析 FM 调制在广播、无线通信等领域的应用场景。

(2)了解 FM 解调在接收机中的重要作用。

(3)思考并讨论 FM 调制与其他调制方式(如 AM、PM、QAM 等)的优缺点和适用场 景。

6.研究 FM 调制与解调的性能:

(1)分析不同参数(如调制指数、噪声水平等)对 FM 调制与解调性能的影响。

(2)使用 MATLAB 进行性能仿真和评估,如误码率、信噪比等。

(3)探讨提高 FM 调制与解调性能的方法和策略。

6

二:实验原理

1、实验原理概述

FM 调制(Frequency Modulation)是一种模拟调制技术,它基于音频信号的频率变 化来调制载波信号的频率。在 FM 调制中,音频信号的频率变化会导致载波信号的频率发生 相应的变化,而载波信号的幅度则保持不变。这种调制方式使得 FM 信号具有抗干扰能力强、 音质好等优点。

2、实验原理详解

2.1 FM 调制基本原理

(1)FM 调制是通过改变载波信号的频率来传输音频信号的。在调制过程中,音频信 号的频率变化被转化为载波信号频率的偏移。

(2)调制指数(β)是 FM 调制中的关键参数,它决定了音频信号频率变化对载波信 号频率偏移的影响程度。调制指数越大,频率偏移越大,音频信号的传输效果越好。

(3)FM 调制信号可以表示为:(s(t) = A_c \cos(2\pi f_c t + \beta \sin(2\pi f_m t))), 其中(A_c)是载波信号的幅度,(f_c)是载波信号的频率,(f_m)是音频信号的频率。

2.2 调制方法

(1)直接调频法:通过直接控制压控振荡器(VCO)的频率来实现 FM 调制。当音 频信号的电压变化时,VCO 的频率也相应变化,从而实现音频信号对载波信号的频率调制。

(2)间接调频法:先将音频信号进行积分,然后对载波信号进行调相,产生窄带调 频信号,再经过多次倍频得到宽带调频信号。但这种方法电路较复杂,频移小,且寄生调 幅较大。

2.3 FM 信号特点

(1)FM 信号的时域特点是其频率随音频信号振幅的变化而变化,而幅度保持不变。 当音频信号的幅度为零时,FM 信号的频率称为中心频率(f_0)。

(2)FM 信号的带宽通常比音频信号的带宽大得多,这是因为调制过程中引入了音频 信号频率的多次谐波。

2.4 FM 解调原理

(1)FM 解调是将调制后的 FM 信号还原为原始音频信号的过程。解调方法包括相干解 调法和非相干解调法。

(2)非相干解调法:不需要同步信号,适用于宽带调频(WBFM)信号和窄带调频(NBFM) 信号。它通过限幅器、微分电路和包络检波器等设备实现解调。

(3)相干解调法:仅适用于 NBFM 信号,通过同步信号和线性调制中的相干解调法来 实现解调。

三:实验步骤

1. 参数设置:首先,我们设置了采样频率 Fs 为 10000Hz,这意味着我们的信号每秒 将被采样 10000 次。然后,我们计算了采样周期 T,这是两次连续采样之间的时间间隔。接 着,我们设定了信号长度 L 为 1000,这将决定我们的信号有多少个采样点。最后,我们创 建了一个时间向量 t,它表示了每个采样点对应的时间。

2. 生成原始信号:我们选择了原始信号的频率 f0 为 50Hz,并使用 cos 函数和时间 向量 t 来生成原始信号 x。

3. 生成载波信号:我们选择了载波信号的频率 fc 为 1000Hz,并使用 cos 函数和时 间向量 t 来生成载波信号 carrier。

4. FM 调制:我们选择了频率偏移系数 kf 为 50,并使用原始信号 x 和载波信号 carrier

进行频率调制,生成调制后的信号 y。

5. 解调:我们对调制后的信号 y 进行解调,生成解调后的信号 y_demod。

6. 恢复原始信号:我们使用解调后的信号 y_demod 和原始信号的频率 f0,通过 cos

函数生成恢复的原始信号 x_recovered。

7. 绘制结果:我们使用 subplot 函数创建了四个子图,分别绘制了原始信号 x、调制 后的信号 y、解调后的信号 y_demod 和恢复的原始信号 x_recovered 的波形图。

四:注意事项

在使用 MATLAB 软件和编写代码时,需要注意以下几点:

1. 变量命名:在 MATLAB 中,变量名必须以字母开头,可以包含字母、数字和下划 线。避免使用 MATLAB 的保留字作为变量名。

2. 矩阵操作:MATLAB 中的矩阵操作是基本的操作,例如矩阵加法、减法、乘法等。 在进行这些操作时,需要确保操作的矩阵具有相同的维度。

3. 索引和切片:在 MATLAB 中,可以使用索引和切片来访问和修改数组的元素。需 要注意的是,MATLAB 的索引是从 1 开始的,而不是从 0 开始。

4. 函数定义:在 MATLAB 中,可以使用 function 关键字来定义函数。在定义函数时, 需要注意输入参数的类型和数量,以及返回值的类型。

5. 错误处理:在 MATLAB 中,可以使用 try-catch 语句来进行错误处理。在编写错误 处理代码时,需要注意捕获的错误类型,以及如何处理错误。

6. 注释:在 MATLAB 中,可以使用%来进行单行注释,或者使用/*和*/来进行多行注 释。在编写注释时,需要注意清晰明了地描述代码的功能和作用。

五:实验代码

模拟调制与解调(FM 调制)

Fs = 10000; % 采样频率

T = 1/Fs; % 采样周期

L = 1000; % 信号长度

t = (0:L-1)*T; % 时间向量

% 生成原始信号

f0 = 50; % 原始信号频率

x = cos(2*pi*f0*t); % 原始信号

% 生成载波信号

fc = 1000; % 载波频率

carrier = cos(2*pi*fc*t); % 载波信号

% FM 调制

kf = 50; % 频率偏移系数

y = carrier .* cos(2*pi*f0*t + kf * cumsum(x)./Fs); % 调制后的信
号(这里添加了适当的偏置项和比例系数)

% 使用希尔伯特变换近似解调

analytic_signal = hilbert(y); % 构造解析信号

envelope = abs(analytic_signal); % 提取包络

% 从包络中恢复原始信号(这里只是一个近似,因为实际中需要更复杂的处理)

% 注意:这里我们假设包络与原始信号成正比,但可能包含高频噪声

x_recovered_approx = envelope / max(envelope) * max(abs(x)); % 归
一化并缩放以匹配原始信号幅度

% 绘制结果

figure;
subplot(4,1,1);
plot(t, x);
title('原始信号');
xlabel('时间 (s)');
ylabel('幅度');
subplot(4,1,2);
plot(t, y);
title('调制后的信号');
xlabel('时间 (s)');
ylabel('幅度');
subplot(4,1,3);
plot(t, envelope);
title('解调后的包络');
xlabel('时间 (s)');
ylabel('幅度');
subplot(4,1,4);
plot(t, x_recovered_approx);
title('恢复的原始信号(近似)');
xlabel('时间 (s)');
9

ylabel('幅度');

六:实验结果

通过运行代码实现的图形显示,我们可以得出以下结论:

1. 原始信号 x 是一个频率为 50Hz 的余弦波信号。

2. 载波信号 carrier 是一个频率为 1000Hz 的余弦波信号。

3. 调制后的信号 y 是原始信号 x 与载波信号 carrier 相乘后再加上频率偏移系数 kf

乘以原始信号 x 的累积和。

4. 解调后的信号 y_demod 是将调制后的信号 y 与载波信号 carrier 相乘得到的结果。

5. 恢复的原始信号 x_recovered 是将解调后的信号 y_demod 与原始信号 x 的余弦波 信号相乘得到的结果。

6. 从图形中可以看出,原始信号、调制后的信号、解调后的信号和恢复的原始信号 在时间轴上呈现出相似的波形,说明 FM 调制和解调的过程是正确的。

七:实验总结

本次实验通过MATLAB模拟了调频(Frequency Modulation, FM)调制与 解调的基本过程,并通过图形展示了各个阶段的信号波形。实验主要分为四 部分:原始信号的生成、载波信号的生成、FM调制以及近似解调。

1、实验过程

(1)原始信号与载波信号:首先,我们设定了采样频率、信号长度等参 数,并据此生成了原始信号(频率为50Hz的余弦波)和载波信号(频率为 1000Hz的余弦波)。

(2)FM调制:在FM调制阶段,我们使用了频率偏移系数kf来模拟调制过 程。通过将原始信号与载波信号相乘,并加上由原始信号积分得到的频率偏 移项,我们得到了调制后的信号。

(3)近似解调:由于真实的FM解调过程涉及复杂的频率鉴频器或锁相环 等技术,我们采用了希尔伯特变换来近似实现解调。通过构造解析信号并提 取其包络,我们得到了解调后的信号。

(4)恢复原始信号:由于解调后的包络并不直接等于原始信号,我们假 设包络与原始信号成正比,并进行了归一化和缩放处理,以近似恢复出原始 信号。

2、实验结果

实验结果通过四个子图展示了原始信号、调制后的信号、解调后的包络 以及恢复的原始信号。从图中可以看出,调制后的信号在频率上确实随原始 信号变化,验证了FM调制的有效性。然而,由于我们采用了近似解调方法, 恢复的原始信号与原始信号在波形上存在一定的差异,特别是在峰值和谷值 处。

3、实验分析

本次实验通过MATLAB模拟了FM调制与解调的基本过程,虽然解调方法采 用了近似处理,但实验结果仍然展示了FM调制的基本特性。实验中的近似解 调方法虽然简便,但无法完全准确地恢复出原始信号,特别是在信号细节和 噪声处理方面存在不足。

4、实验结论

通过本次实验,我们加深了对FM调制原理的理解,并初步掌握了使用 MATLAB进行信号处理的基本方法。实验结果验证了FM调制技术的有效性,同 时也指出了近似解调方法在处理复杂信号时可能存在的问题。在后续的学习 和研究中,我们将进一步探索更精确的解调方法,并尝试将其应用于实际通 信系统中。

致谢

在此,我要向我的导师魏婷婷老师表示最诚挚的感谢。在整个实验报告 撰写的过程中,魏老师始终给予我悉心的指导和耐心的解答。她渊博的学识、 对专业的热情与执着,以及严谨认真的工作态度,都对我产生了深远的影响。 她的亲历亲为、追求完美的精神,不仅教会了我专业知识,更传授了我做人 的道理。同时,我也要感谢所有在实验过程中给予我们指导和帮助的老师们。 是您们的专业知识和丰富经验,为我们指明了方向,提供了宝贵的建议。您 们的严谨治学态度和无私奉献的精神,是我们学习的楷模,让我们在实验过 程中收获满满,受益匪浅。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 创建数据表

创建MySQL数据表需要以下信息: 表名表字段名定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_name (column_name column_type); 以下例子中我们将在 W3CSCHOOL 数据库中创建数据表w3cschool_tbl: CREAT…

win11 之下载安装 allure

1. 下载 https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/2.25.0/allure-commandline-2.25.0.zip 2. 配置系统变量 path 下添加解压后的bin目录 3. 验证是否安装成功 输入 allure

malloc和new的本质区别

目录 一、结论 二、示例 1.实现类T 2.用malloc分配类T的内存空间 3.用new分配类T的内存空间 一、结论 malloc 和 new 都是用于在运行时动态分配内存的机制。但它们之间存在一些本质的区别,主要是在使用方面,现在我们直接说结论,然后在通过…

docker拉取镜像的时候超时

问题描述: 有时候我们在使用docker拉取镜像的时候会遇到超时的情况迟迟拉取不下来,如下面 这时候我们需要设置成国内源; 操作步骤: 首先:创建docker目录 sudo mkdir -p /etc/docker其次:创建daemon文件…

MacOS - command not found: brew

问题描述 command not found: brew 原因分析 没有安装 Homebrew,安装后即可使用~ 解决方案 打开终端,输入:/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)",点击回车 在弹出…

[C#]winform基于opencvsharp实现黑白图像上色

【算法简介】 技术有时会提高艺术,但有时也会破坏艺术。着色黑白电影是一个可以追溯到1902年的古老想法。几十年来,许多电影创作者反对将黑白电影着色的想法,并将其视为对艺术的破坏。但今天它被接受为艺术形式的增强。该技术本身已经从艰苦…

2024最新IDEA插件开发+发布全流程 SelectCamelWords[选中驼峰单词](idea源代码)

2024最新IDEA插件开发(发布)-SelectCamelWords[选中驼峰单词](idea源代码) 参考文档 Jetbrains Idea插件开发文档: https://plugins.jetbrains.com/docs/intellij/welcome.html代码地址:https://github.com/yangfeng…

超大场景的三维模型(3D)轻量化的主要技术方法

超大场景的三维模型(3D)轻量化的主要技术方法 超大场景的三维模型在虚拟现实、游戏开发和可视化应用等领域具有重要的价值和应用前景。然而,由于其庞大的数据量和复杂的几何结构,给数据存储、传输和渲染带来了挑战。为了提高超大场…

搭建PHP开发环境:Linux篇

目录 一、引言 二、环境准备 三、安装Web服务器(Apache) Ubuntu/Debian系统: CentOS/Red Hat系统: 四、安装PHP解释器 Ubuntu/Debian系统: CentOS/Red Hat系统: 五、配置Apache以支持PHP Ubuntu/…

Hive期末总结

hive的概念,谁开发的 Apache Hive 是一个Apache 软件基金会维护的开源项目 Facebook贡献 hive是一个基于hadoop的数据仓库工具(对数据汇总查询和分析的工具) hive执行原理 Hive通过给用户提供的一系列交互接口,接收到用户的指令…

【x264】整体框架汇总

【x264】整体框架汇总 1. x264整体框架图2. 思考 参考: x264源代码简单分析:概述 参数分析: 【x264】x264编码器参数配置 流程分析: 【x264】x264编码主流程简单分析 【x264】编码核心函数(x264_encoder_encode&…

创建型设计模式

1.设计模式是什么? 设计模式是指在软件开发过程中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案。 软件设计过程中,解决问题的固定套路。 慎用设计模式。 2.设计模式是怎么来的&…

数据库实战(一)(关系数据库设计)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀数据库 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 前言 练习题 题型一:判断关系…

“首秀”欧洲杯,海信冰箱欧洲市占率居国产品牌首位

随着欧洲杯的火热开赛,挑灯夜战、观看球赛的时刻已经来临。此时,你需要何物相伴?是打开冰箱,取出真空腌制的食材,亲手烹饪一场观赛盛宴?还是取出极致保鲜的荔枝、樱桃,一边观赛一边品味&#xf…

如何避免接口重复请求(axios推荐使用AbortController)

前言: 我们日常开发中,经常会遇到点击一个按钮或者进行搜索时,请求接口的需求。 如果我们不做优化,连续点击按钮或者进行搜索,接口会重复请求。 以axios为例,我们一般以以下几种方法为主: 1…

【文献阅读】Partially Adaptive Array Techniques

Abstract 文章研究了在多窄带干扰环境下,辅助阵元的选择,为部分自适应天线阵,以达到性能优化的目的。推导了双干扰问题的显式解。这个案例足以说明多个干扰的相互作用,同时也为更复杂的问题提供了一定程度的理解。本文还提出并讨…

如何实现ElementUI动态表头?

可能看到这个标题,有些小伙伴会有些疑惑,动态表头是个什么东西,怎么没听说过? 其实动态表头在企业的项目中用途还是非常广泛的,比如erp系统什么的 那么动态表头是什么呢?说简单点就是让ElementUI的Table表格可以实现自定义表头展示+表头拖拽排序的一个功能 这个东西我…

本地运行大语言模型(LLMs)

用例 像PrivateGPT、llama.cpp、Ollama、GPT4All、llamafile 等项目的流行度凸显了本地(在您自己的设备上)运行大型语言模型(LLMs)的需求。 这至少有两个重要的好处: 1.隐私:您的数据不会发送给第三方&a…

Mars3d实现汽车尾气粒子效果从汽车屁股开始发射效果

本身的汽车尾气粒子效果:在汽车模型的中间发射的↓↓↓↓↓↓↓↓↓↓↓ Mars3d实例中是使用transY偏移值实现汽车尾气粒子效果从汽车屁股开始发射效果: // 动态运行车辆的尾气粒子效果 function addDemoGraphic4(graphicLayer) {const fixedRoute new…

【odoo】如何开启开发者模式,开启有什么作用?

概要 在 Odoo 中,开发者模式(Developer Mode)是一种专门为开发和调试提供的模式。启用开发者模式可以让开发人员访问到更多的功能和信息,从而更方便地进行模块开发、调试和测试。 启用方式(主要两种) 1.设…