B=2W,奈奎斯特极限定理详解
一直没搞明白奈奎斯特极限定理的含义,网上搜了很久也没得到答案。最近深思几天后,终于有了点心得。顺便吐槽一下,csdn的提问栏目,有很多人用chatgpt秒回这个事,实在是解决不了问题,有时候人的问题大多数都是误入歧途,需要临门一脚,稍需点拨。遇见少有的一些问题时,chatgpt往往是长篇大论,毫不相干。
开始正题,为什么奈奎斯特定理说,码元的极限速率是两倍的带宽?
其实奈奎斯特在这里是有假设的,也就是这个定理适合的条件,有限带宽无噪声低通信道,其采用的码元应该是门波信号。
其中关键点是这个信道低通的,低通指的是多低的频率都能通过。这一点是网工教材上没有提到的,也是最误导人的一点。因为这个教材在B=2W这个公式给出之前,给出了模拟信道的带宽计算公式W=F2-F1,难免让人去深思一个信道为什么会有最高可通过频率和最低可通过频率。而紧接着就给出了B=2W这个在数字信息传输是计算包含0和1的码元传输速率的公式,且没有说明B=2W这个公式使用的信道是理想低通的。导致我纠结在《码元传输速率和最高/最低通过频率之差(即信道可通过的频率个数)有什么关系》这个问题上很长时间。这几天时间通过各种假象、模拟、验证,找各种人的各种说法,终于,忽地顿开金枷,这里扯断玉锁,今日方知F1=0。
如果B=2W这个公式的前提是F1需为0,那么B=2W中的这个W代表的便不是可通过的频率数,而是最高可通过频率,因为F2-F1=F2-0=F2了。
那问题就从《码元传输速率和最高/最低通过频率之差(即信道可通过的频率个数)有什么关系》变成了《码元传输速率和最高可通过频率有什么关系》,显然后者更容易解答一点,哪怕就是我一般的门外汉,也或许会意识到这两个东西可能会有关系。
好了,抛开对教材的抱怨情绪。在正式解释B=2W这个公式的原因前,我们还需要了解一些前提知识。
一、信道可通过的频率,这里的频率指的是什么?
我们以了解的同轴电缆和双绞线这样的金属导线为例,暂且不讨论光缆和无线信道等。这里的频率指的是电压或电流强度的变化快慢,而电压或电流强度的大小变化在时间轴上就会形成波,这里的频率说的也就是这个波的频率。由于有线信道中的信号衰减和信道本身质量问题(比如寄生电容、寄生电感、寄生电阻),以及传输过程中的干扰问题,信道可传输的频率是有上限的。传输频率超过此上限,到达对端时会失真,导致无法辨认。
二、码元的种类:
码元是表示0和1的符号,是一个固定市场的波形。我们知道,数字通信里边所说的波都是对电压或电流强度在时间轴上变化的描述。所以我们想要什么样的波,我们就可以通过调整电压去制造出来,只要是方便的区分或表示出来0和1就行。下面我们介绍几种码元,也就是几种描述0和1的波形,或者说是符号。
1、正弦波
正弦波如何在电路中生成的呢?我想需要一个振荡器。那怎么让生成的正弦波作为载波承载我们的数据呢?我想需要一个开关。例如,开关闭合时,线路上传递正弦波,表示1,开关断开时,线路上无正弦波,表示0。具体实现方法,我们不讨论。
我们以特定频率的N正弦波为码元来表示数字信号,在时间轴上N个完整的正弦波表示0或1。当N=1时,表示一个完整的正弦波表示0或1,此时数据的传输速率在这个特定频率下最大。
如果我们在特定的频率下还要继续加大数据的传输速率,则会导致在单个正弦波的周期中,只能传输不完整的正弦波,或许会首位交错,甚至会失去正弦波的判断依据,导致对端不能准确识别波形,从而导致传输出错。
此时,加快数据传输速率的唯一办法就是提高传输使用正弦波的特定频率,但是我们知道对于固定有限信道来说,可通过频率时有上线的。那么对于一个固定的有线信道来说,最大数字传输速率就是以最高可通过频率为特定频率,且使N=1。此时的波特率B=W=F2-F1=F2-0=F2。可见使用正弦波作为一个码元时,码元速率(即:波特率)并不等于2倍的带宽。
2、方波
服务器中的时钟信号就是方波,方波是什么样呢?见下图
如果我们以特定频率的一个方波为码元,且以高低电平来表示0和1,再让这个特定频率是信道可通过的最高频率。此时Bmax还是等于W。但根以正弦波为码元的编码方式不同的是,我么一个码元中可以携带两个数字信号了。但此时的输入信号是没有用的,因为0和1无法分离,导致一个码元表示的不是10就是01,不可用。如果我们让10==1、01==0,就变得可用了,但是数据传输速率C还是等于B。
此处说明一个点:
我们可以制造出来用于传输信息的波形是有很多的,为了方便研究什么样的波形能通过信道,我们使用傅里叶变换将一个复杂波形拆分成多个简单的正弦波信形(基波+多个辅波)。然后我们去研究一个信道能通过的正弦波的范围,就能再通过傅里叶逆变换,我们就能确定一个特定的复杂波能不能通过这个信道。其中主要观察这个特定复杂波基波的频率是不是在可通过的正弦波的频率范围呢
3、冲激波信号
冲激波是什么样子?见下图。
可见在时域上冲激波表现为一根竖线,与上述的方波相比较,它的周期T几乎无限接近于0。可以说它的频率大到无穷了。为了方便理解这个冲激波,我们反向想象一下,如果在时域图上出现了一条横线表示的是什么意思?一条横线,在时域图上,波的幅度没有任何变化,如果要说这条横线是个周期性的波的话,那可以把它想象成一个周期无限大的波,可以想象的到,一条横线谈不上任何频率任何幅度,也无需任何频率任何幅度的波来傅里叶逆变换成它。如果要说有的话,那得是频率无限小幅度也无限小、都趋近于0的波,这样的波在频域图上可能就在(0,0)处表示为一个点。说明一条横线的波,不需要任何幅度的任何正弦波来合成它。结合我们的常识和我们古老的哲学("太极生两仪,两仪生八卦……😄"),我们可以推演一下,在时域图上表现为一条竖线的冲激波,它可能需要所有幅度的所有正弦波来合成它。接下来我们通过傅里叶变换验证一下我们的想法:
可见冲激波的频谱是一条直线,幅值为常数1,频率范围为无穷,即包含所有的频率成分,且每个频率分量的权重都无限趋于相等。
4、门波信号
门波信号是什么样子?见下图
可见,门波和冲激波相比,门波就是周期T被放大的冲激波。通过傅里叶变换,可见门信号的频谱包含了许多成分,但不至于像冲激信号那样,包含了所有频率分量。门信号的频谱符合sinc函数的分布规律:
定性的来看:
门信号的持续时间越短,越接近冲激信号,内涵的每个频率分量的权重就越接近相同。
门信号的持续时间T越长,即频率F越小,其频谱特性越接近sinc,内涵的每个频率分量的权重越符合sinc函数的规律,高频分量的权重越小,且基波频率B的值越小。
门信号的持续时间T越短,即频率F越大,其频谱特性越接近冲击信号,内涵的每个频率分量的权重越符合冲激信号的规律,高频分量的权重越大,且基波频率B的值就越大。
通过对门信号和冲激信号傅里叶变化分析,我们可以得到一个非常重要的结论:
门信号的频率F,与其频谱中的基波信号的频率B是一种线性关系:F=2B。
自此,通过上述的结论,我们得出:
如果使用门信号作为码元传输数字信号,使其基波信号的频率B达到信道的最高可通过频率。这时在奈奎斯特假设成立的前提下,即F1=0,信道为有限带宽无噪声低通信道的情况下,码元的最高传输速率Bmax=2W。
四、结论
我们的通过分析码元种类,得出只有门波信号作为码元时,才会达到达到固定信道的最大的码元传输速率,且等于2倍的最大可通过正弦波的频率,也就是在有限带宽无噪声低通理想信道中的2倍带宽。所以,以我目前理解来看,其实这个定理给的感觉有点鸡肋。干嘛约定了信道的低通之后,又来用带宽表示最大可通过正弦波的频率。我想有一种可能,W=F2-F1中的F1,也就是最低可通过正弦波的频率对于有限信道来说普遍不高,就像电话线的可通过频率为300Hz~3400Hz。由于最低通过频率本身不大,所以将W还是F2带入最大码元率的计算公式中差别不大,再加上信号的衰减,信道的寄生电阻/电容/电感等,实际的码元率也达不到最大的值,所以挣好去一个偏小一点的值,当作误差了。
以上都属本人个人理解,供大家参考,也欢迎大家指正。
相关文章:

B=2W,奈奎斯特极限定理详解
一直没搞明白奈奎斯特极限定理的含义,网上搜了很久也没得到答案。最近深思几天后,终于有了点心得。顺便吐槽一下,csdn的提问栏目,有很多人用chatgpt秒回这个事,实在是解决不了问题,有时候人的问题大多数都是…...

【Pytorch 】Dataset 和Dataloader制作数据集
文章目录 Dataset 和 Dataloader定义Dataset定义Dataloader综合案例1 导入两个列表到Dataset综合案例2 导入 excel 到Dataset综合案例3 导入图片到Dataset导入官方数据集Dataset 和 Dataloader Dataset指定了数据集包含了什么,可以是自定义数据集,也可以是以及官方数据集Data…...

[Algorithm][动态规划][两个数组的DP][正则表达式匹配][交错字符串][两个字符串的最小ASCII删除和][最长重复子数组]详细讲解
目录 1.正则表达式匹配1.题目链接2.算法原理详解3.代码实现 2.交错字符串1.题目链接2.算法原理详解3.代码实现 3.两个字符串的最小ASCII删除和1.题目链接2.算法原理详解3.代码实现 4.最长重复子数组1.题目链接2.算法原理详解3.代码实现 1.正则表达式匹配 1.题目链接 正则表达…...

Ffmpeg安装和简单使用
Ffmpeg安装 下载并解压 进入官网 (https://ffmpeg.org/download.html),选择 Window 然后再打开的页面中下滑找到 release builds,点击 zip 文件下载 环境变量配置 下载好之后解压,找到 bin 文件夹,里面有3个 .exe 文件 然后复制…...
29、matlab算数运算汇总2:加、减、乘、除、幂、四舍五入
1、乘法:times, .* 语法 C A.*B 通过将对应的元素相乘来将数组 A 和 B 相乘。 C times(A,B) 是执行 A.*B 的替代方法, 1)将两个向量相乘 代码及运算 A [1 0 3]; B [2 3 7]; C A.*BC 2 0 212) 将两个数组相乘 代码及运算 A [1 0 3;…...

<Rust><iced>基于rust使用iced库构建GUI实例:动态改变主题色
前言 本专栏是Rust实例应用。 环境配置 平台:windows 软件:vscode 语言:rust 库:iced、iced_aw 概述 本篇构建了这样的一个实例,可以动态修改UI的主题,通过菜单栏来选择预设的自定义主题和官方主题&#…...

k8s——安全机制
一、安全机制说明 Kubernetes作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务。API Server是集群内部各个组件通信的中介, 也是外部控制的入口。所以Kubernetes的安全机制基本就是围绕保护API Server来设计的。 比如 kubectl 如果想…...

Linux驱动应用编程(三)UART串口
本文目录 前述一、手册查看二、命令行调试串口1. 查看设备节点2. 使用stty命令设置串口3. 查看串口配置信息4. 调试串口 三、代码编写1. 常用API2. 例程线程优化 前述 在开始实验前,请一定要检查测试好所需硬件是否使用正常,不然调试过程中出现的问题&am…...

【设计模式深度剖析】【4】【行为型】【策略模式】
文章目录 策略模式定义英文原话直译 角色类图策略接口Strategy:具体策略类上下文类Context测试类 策略模式的应用策略模式的优点策略模式的缺点策略模式的使用场景 策略模式 策略模式(Strategy Pattern) Strategy策略也称作Policy政策。 想…...

opencv dnn模块 示例(26) 目标检测 object_detection 之 yolov10
文章目录 1、yolov10简要介绍1.1、双标签分配策略1.2、架构改进1.3、性能1.4、预训练模型1.5、网络有关层说明 2、测试2.1、官方测试2.2、opencv dnn2.2.1、仅运行到内部"NMS"步骤之前的层2.2.2、完整代码2.2.2、完整实现所有层 2.3、onnxruntime测试2.4、tensorrt 1…...

【python进阶】python图形化编程之美--tkinter模块初探
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...

discuz点微同城源码34.7+全套插件+小程序前端
discuz点微同城源码34.7全套插件小程序前后端 模板挺好看的 带全套插件 自己耐心点配置一下插件 可以H5可以小程序...

ActiveMQ 介绍、下载、安装和控制台
ActiveMQ 介绍 Apache ActiveMQ 是一款非常成熟且功能全面的开源消息中间件,由Apache软件基金会维护。它遵循 Java Message Service (JMS) 规范,这意味着它提供了一组标准的 API,允许 Java 应用程序以一种标准化的方式发送和接收消息。 以下…...

MacOS M系列芯片一键配置多个不同版本的JDK
第一步:下载JDK。 官网下载地址:Java Archive | Oracle 选择自己想要下载的版本,一般来说下载一个jdk8和一个jdk11就够用了。 M系列芯片选择这两个,第一个是压缩包,第二个是dmg可以安装的。 第二步:编辑…...

源码文章上传无忧,论坛小程序支持
前言 在数字化时代,知识的分享与传播显得愈发重要。为了满足广大创作者和求知者的需求,我们推出了全新的论坛小程序,不仅支持文章、源码、链接等多样化内容的上传,还实现了付费观看功能,为创作者们提供了一个展示才华…...
Docker面试整理-如何优化Docker容器的性能?
优化Docker容器的性能可以从多个方面入手,以下是一些建议: 选择合适的基础镜像:使用轻量级的基础镜像,如基于Alpine Linux的镜像,可以减少镜像的大小和启动时间。避免使用过于庞大的操作系统镜像。优化Dockerfile:减少Dockerfile中的不必要指令和层,以最小化镜像的大小。…...

list(二)和_stack_queue
嗨喽大家好,时隔许久阿鑫又给大家带来了新的博客,list的模拟实现(二)以及_stack_queue,下面让我们开始今天的学习吧! list(二)和_stack_queue 1.list的构造函数 2.设计模式之适配器和迭代器 3.新容器de…...

查询SQL02:寻找用户推荐人
问题描述 找出那些 没有被 id 2 的客户 推荐 的客户的姓名。 以 任意顺序 返回结果表。 结果格式如下所示。 题目分析: 这题主要是要看这null值会不会用,如果说Java玩多了,你去写SQL时就会有问题。在SQL中判断是不是null值用的是is null或…...

2、Tomcat 线程模型详解
2、Tomcat 线程模型详解 Tomcat I/O模型详解Linux I/O模型详解I/O要解决什么问题Linux的I/O模型分类 Tomcat支持的 I/O 模型Tomcat I/O 模型如何选型 网络编程模型Reactor线程模型单 Reactor 单线程单 Reactor 多线程主从 Reactor 多线程 Tomcat NIO实现Tomcat 异步IO实现 Tomc…...
对硬盘的设想:纸存、执行存
固态硬盘出现后,发现它的擦写次数受限,越是便宜的固态硬盘,擦写次数越少。于是,有了“纸存”的设想,即硬盘上的单元只能改写一次,就像拿钢笔在纸上写字一样。这时,文件系统、数据库该怎么设计&a…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
电脑桌面太单调,用Python写一个桌面小宠物应用。
下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡,可以响应鼠标点击,并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...