使用傅里叶变换测量声卡的频率失真

news2025/3/17 15:45:19

文章目录

  • 一、说明
  • 二、关于声卡的技术详述
  • 三、实验代码获取
  • 四、结论

一、说明

假如我希望使用我的声卡来模拟软件无线电,利用声音而不是射频信号。我的声卡能胜任这项任务吗?本文将研究一种技术来找出答案。另外,需要了解音频技术的读者也可以阅读。

二、关于声卡的技术详述

使用声卡是一种有趣且低成本的方式来尝试软件定义无线电 (SDR) 技术并听取结果。大多数简单的 SDR 数字调制方案将其数据编码为正弦波形的相位或频率。因此,我感兴趣的是声卡如何重现这些波形,特别是它对波形相位和频率的扭曲程度。
这些信息对于配置调制方法以传输信息非常有用,即使在声卡有限制的情况下也是如此。我可以通过测量正弦波形的相位并用它来计算其瞬时频率(即相位随时间的变化率)来量化相位和频率的失真。对于以固定频率传输的正弦波,相位应随时间以恒定的速率变化,类似于物体以恒定速度沿无摩擦水平表面移动。如果正弦波的频率或物体的速度发生变化,则捕获“失真”可能表明系统中存在不理想的效果。测量正弦波失真的技术是本文的主题。但只关注相位失真,因此该技术必须不受声卡引起的幅度波动的影响。

注意:在本文中,术语“正弦”和“正弦波”将互换使用,指具有任意相位偏移的波形。例如,在本文中,余弦波将被称为正弦波,因为它是具有 90 度相移的正弦波。

查找相位的一种方法是将反正弦函数应用于捕获的信号;然而,这种方法假设一个完美的正弦波,其幅度在 -1 和 +1 之间振荡。幅度波动违反了这一假设,因此不能直接使用反正弦函数。

另一种技术是从将正弦波的视图从一维实信号扩展到二维复平面中旋转矢量的投影开始。图 1A 通过显示以恒定速度逆时针旋转的相位矢量(因此相位不断变化)来说明这一概念,其中矢量在实轴(图 1B)和虚轴(图 1C)上的投影产生具有不同相位偏移的 12 kHz 正弦波。声卡可以传输和记录每个通道的单个信号。因为我将音频系统限制为一个通道,类似于具有单个天线的 SDR,所以我需要选择两个矢量轴之一上的信号。我任意选择该矢量的实部(x 坐标),因为它在文章中更容易引用。因此,虚部(y 坐标)在音频通道上保持未观察到。因此,该技术的目标是使用瞬时频率计算将记录的旋转矢量的相位角 (ϑ) 与传输相位进行比较,以揭示声卡引入的失真。

在这里插入图片描述

图 1:图示了用于表示正弦波的复杂矢量概念的概述。 (A) 显示相位矢量以恒定速度逆时针旋转,建立稳定的相位变化率。 (B) 描述该旋转矢量在实轴上的投影,生成具有 90 度相位偏移的 12 kHz 正弦波。 © 说明在虚轴上的投影,产生没有相位偏移的 12 kHz 正弦波。

仅从记录的实部测量相位的挑战在于,如果正弦波的振幅波动,则单个周期可能对应两个甚至更多的不同相位值。图 2A 和 2D 演示了这种情况,两个不同的向量(标记为向量 1 和向量 2)具有固定长度,可以共享相同的实数坐标,同时对应不同的相位偏移。虽然在这种情况下反三角函数将产生两个相位值,但如果向量的长度发生变化,则不能直接应用反函数。图 2B、2C、2E 和 2F 说明了这个问题,其中向量长度现在大于 1,这导致不同的相位角对应于相同的实数值。
在这里插入图片描述
图 2:该图演示了当不同的向量属性产生相同的实数坐标时,相位确定中如何产生模糊性。(A)展示一个固定长度(单位长度)的向量(向量 1),它与另一个相位可能性共享一个实数坐标。(B)显示一个长度大于 1 的向量导致多个相位角对应于相同实数值的场景。(C)进一步说明增加向量长度对相位测量模糊性的影响。(D)显示固定长度(单位长度)向量(向量 2)尽管共享相同的实数坐标,也表现出相位模糊性。(E)继续演示长度大于 1 的向量如何导致相同实部的相位值重叠。(F)强化了增加向量长度对从实部产生非唯一相位表示的影响。

在图 3A 中,矢量长度问题与矢量的旋转速度随时间增加而加剧,这种情况可能由于声卡的振荡器组件漂移或放大器增益变化而发生。如图 3B 所示,从相应的实分量计算矢量的相位很难引起底层矢量模型的变化。
在这里插入图片描述

图 3:该图突出显示了随时间变化的旋转速度对从实部提取相位的额外复杂性。(A)说明了矢量长度问题以及随时间增加的旋转速度。(B)描述了从实部计算出的相位,强调了在动态条件下准确恢复相位的难度。

改变底层矢量模型的目的是恢复隐藏矢量的相位,该相位与记录信号的相位相同。如果矢量的实部(x 坐标)和虚部(y 坐标)都可以直接获得,则相位测量将很简单。但是,由于只有 x 坐标可用,因此该技术不能依赖于未观察到的 y 坐标。通过添加一个反向旋转(顺时针)矢量来消除这种依赖性,该矢量镜像原始矢量的 y 坐标,以便得到的 y 坐标始终为零。此外,两个矢量都缩放了一半以保留 x 坐标的正确值。图 4A 显示两个矢量以取消 y 坐标的关系旋转,同时保持原始 x 坐标值。图 4B 显示得到的信号(x 坐标)与图 3B 中的单个旋转矢量相同。由于 x 坐标相同,因此无法确定信号是由一个还是两个向量生成,因此我将假设两个向量模型。
在这里插入图片描述

图 4:引入改进的矢量模型来恢复仅观察到实部时的隐藏相位。(A)显示原始逆时针旋转矢量以及按一半缩放的反向旋转(顺时针)矢量,以取消 y 坐标。(B)证明所得的 x 坐标信号与先前计算的单个旋转矢量相同。(C)通过傅立叶变换峰值说明如何根据频率符号表示和分离两个相反的矢量

随着第二个向量抵消 y 分量,任务转移到分离两个旋转向量的贡献。黑色向量以常规的逆时针方向旋转,而灰色向量则顺时针旋转。逆时针向量只是出于惯例才被首选。按照惯例,逆时针向量对应于正频率,并用于分析信号形成和调制方案。此外,按照惯例,顺时针向量对应于负频率。使用傅里叶变换可以分离两个向量,该变换将信号分离为正频率和负频率。在此过程中,傅里叶变换将分离顺时针和逆时针旋转的向量。这通过两个旋转向量产生的固定频率、固定幅度的正弦波得到证明,如图 5A 所示,它产生了图 5B 中的实信号。当应用傅里叶变换时,如图 5C 所示,结果图显示沿水平轴的两个不同的幅度峰值,对应于旋转向量的有符号频率。图 4C 进一步说明了这些峰值如何表示两个相反的向量。在本分析中,仅显示傅里叶变换的幅度部分(通常以分贝为单位),省略每个频率的完整复数值。关键见解是,当矢量以固定速度和幅度旋转时,傅里叶变换会有效地分离逆时针和顺时针分量。这种分离意味着逆时针矢量被隔离,以便测量其随时间变化的相位。
在这里插入图片描述
图 5:显示了从双旋转矢量生成实信号及其频率分解。(A)描绘了两个旋转矢量(一个逆时针,一个顺时针),它们一起生成固定频率、固定幅度的正弦波。(B)显示由这些矢量组合产生的最终实信号。(C)显示傅里叶变换输出,其中水平轴上有不同的幅度峰值,与各个旋转组件的有符号频率相对应。

然而,在实际情况中,捕获的信号在幅度和频率上都会发生变化,如图 4B 和 6B 所示。对这种动态信号进行傅里叶变换会产生一个频谱(图 6C),其特征是两个由多个频率组成的宽峰,而不是两个尖峰。这个宽峰的出现是因为傅里叶变换将信号的幅度和频率变化分解为固定频率、固定幅度矢量的等效和。

在这里插入图片描述
图 6:该图探索了具有可变幅度和频率的信号的动态及其频谱表示。(A)描绘了两个旋转矢量(一个逆时针,一个顺时针),它们一起产生可变频率、可变幅度的正弦波。(B)显示捕获的信号,其中幅度和频率随时间变化。(C)显示相应的傅里叶变换频谱,其特征是宽峰,反映了分解为多个固定频率分量。

图 7 和图 8 从概念上说明了长度和旋转速度不断变化的旋转矢量等效于多个固定矢量之和,而逆傅里叶变换从这些固定分量重新组合出原始矢量的动态行为。
在这里插入图片描述
图 7:概念图,表明动态变化的旋转矢量可以表示为多个固定矢量的总和。
在这里插入图片描述
图 8:概念图,显示逆傅里叶变换如何从固定频率分量重新组合原始矢量的动态行为。

图 9 描述了使用傅里叶变换测量瞬时频率的处理链。首先,使用傅里叶变换将信号(图 9A)的底层矢量分离为逆时针和顺时针矢量。接下来,将负(顺时针)频率(图 9B)归零,只留下逆时针旋转矢量。逆傅里叶变换重建(图 9C)单个逆时针旋转矢量的实部(x 坐标)和虚部(y 坐标)值。实部和虚部还包括任何振幅波动。通过从矢量幅度归一化的坐标计算相位角(图 9D)可以消除这些波动,从而得到一个单位幅度旋转矢量(图 9E),其旋转速度变化反映了其相位变化率。由于瞬时频率定义为相位随时间的变化,计算连续相位测量值之间的差异,并按采样率除以 2π 进行缩放,可得到图 9F 所示的瞬时频率图。分析瞬时频率值的界限可以了解各种相位和频率调制方案的预期错误率。
在这里插入图片描述
图 9:使用傅立叶变换技术测量瞬时频率的完整处理链。(A)描述了傅立叶变换对基础矢量的初始分离。(B)将负(顺时针)频率分量归零以隔离逆时针旋转矢量。(C)逆傅立叶变换重建逆时针矢量的实部和虚部。(D)从标准化坐标计算相位角,消除幅度波动。(E)得到的单位幅度旋转矢量,其可变的旋转速度反映了其相位变化。(F)通过区分连续相位测量并按适当因子缩放获得的瞬时频率图。

使用已知参数的测试数据验证了整个处理链,如图 10 所示。在图 10A 中,旋转频率在 11,999.5 Hz 至 12,000.5 Hz 范围内变化的矢量产生的正弦波因添加的噪声而受到干扰。计算出的瞬时频率与预期值非常接近,观察到的最小值为 11,996.24 Hz,最大值为 12,003.68 Hz。在另一项测试(图 10B)中,旋转频率范围为 11,965 Hz 至 12,035 Hz 的宽带信号产生的最小值为 11,962.70 Hz,最大值为 12,037.96 Hz。

测试数据定性成功,该技术应用于 12 kHz 正弦波,由同一声卡以 44.1 kHz 采样率和 16 位样本传输和记录。生成的正弦波没有添加合成噪声,因此任何观察到的波动都源自声卡和量化效应。图 10C 的结果显示,声卡产生的最小瞬时频率为 11,999.29 Hz,最大瞬时频率为 12,000.64 Hz — 表明在一分钟的测量时间内变化率约为 1.5 Hz。可以通过对瞬时频率进行积分来获得相位。

在这里插入图片描述
图 10:显示已知参数的测试数据验证结果,以确认该技术的准确性。(A)显示旋转频率在 11,999.5 Hz 和 12,000.5 Hz 之间变化的正弦波的测试数据,包括瞬时频率的观测最小值和最大值。(B)显示具有更宽旋转频率范围和相应频率极值的宽带信号测试的验证结果。(C)描述声卡记录的测量结果,显示在一分钟的持续时间内变化率约为 1.5 Hz。

三、实验代码获取

代码使用Python 的 SciPy 工具箱,相关连接地址是:“见资源绑定”。

四、结论

使用通常的 USB 声卡测量到的约一分钟内 1.5 Hz 的非对称变化表明,这种硬件对于基本的 SDR 应用来说足够稳定。这些结果表明,基于傅立叶变换的方法可以从记录的正弦波中提取相位信息。未来的工作将探索相位和频率调制技术,确保任何符号调制都保持在变化阈值之内。一个简单的频移键控方法,涉及两个间隔 100 Hz 的频率,频率为 12 kHz,每秒传输几比特,预计作为初步测试。进一步的研究还将检查声卡可实现的数据速率极限并评估替代调制方案。

同时,对声卡进行额外的特性分析将有助于了解其局限性并找到潜在的解决方法。除了使用傅里叶变换将信号与本底噪声隔离之外,其他分析技术(如频谱直方图分析、时频分析和噪声建模)也可以提供对声卡通道特性的更深入的了解。这些方法可以揭示噪声频谱中的细微特征,这些特征可能被用来提高整个系统的性能。

通过相当于应用希尔伯特变换的过程,可以消除与负频率相对应的不需要的顺时针旋转矢量。希尔伯特变换在数学和信号处理中都用于从实值信号创建解析信号。这就是本文所做的。通过抑制负频率分量,可以创建一个解析信号,即可以进行瞬时频率分析的逆时针矢量。Python 的 SciPy 工具箱中有一个希尔伯特函数可以做到这一点。

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

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

相关文章

【HTML5】01-HTML摆放内容

本文介绍HTML5摆放标签的知识点。 目录 1. HTML概念 2. HTML骨架 3. 标签的关系 4. 标题标签 5. 段落标签 6. 换行和水平线 7. 文本格式化标签 8. 图像标签 图像 - 属性 9. 路径 相对路径 绝对路径 10. 超链接标签 11. 音频标签 12. 视频标签 1. HTML概念 HTM…

内存管理:

我们今天来学习一下内存管理: 1. 内存分布: 我们先来看一下我们下面的图片: 这个就是我们的内存,我们的内存分为栈区,堆区,静态区,常量区; 我们的函数栈帧开辟消耗的内存就是我们…

设计模式使用Java案例

代码设计要有可维护性,可复用性,可扩展性,灵活性,所有要使用设计模式进行灵活设计代码 创建型 简单工厂模式(Simple Factory) 简单工厂模式(Simple Factory Pattern)是一种创建型…

模运算的艺术:从基础到高阶的算法竞赛应用

在算法竞赛中,模运算(取模运算)是一个非常重要的概念,尤其在处理大数、防止溢出、以及解决与周期性相关的问题时。C 中的模运算使用 % 运算符,但它的行为和使用场景需要特别注意。 1. 模运算的基本概念 模运算是指求一…

ST电机库电流采样 三电阻单ADC

一、概述 下图是三电阻采样的电路结构 其中流过三相系统的电流I1、I2、I3遵循以下关系: 因此,为了重建流过普通三相负载的电流,在我们可以用以上公式计算的情况下,只需要对三相中的两相进行采样即可。 STM32的ADC可以很灵活的配置成同步采集两路ADC数据,…

现代密码学 | 具有保密和认证功能的安全方案

1.案例背景 1.1 2023年6月,微软云电子邮件泄露 事件描述: 2023年6月,属于多家美国政府机构的微软云电子邮件账户遭到非法入侵,其中包括了多位高级政府官员的电子邮件。据报道,美国国务院的10个邮件账户中共有6万封电…

一款基于Python的从常规文档里提取图片的简单工具开发方案

一款基于Python的从常规文档里提取图片的简单工具开发方案 1. 环境准备 安装必需库 pip install python-docx PyMuPDF openpyxl beautifulsoup4 pillow pip install pdfplumber # PDF解析备用方案 pip install tk # Python自带,无需安装工具选择 开发环…

JetBrains(全家桶: IDEA、WebStorm、GoLand、PyCharm) 2024.3+ 2025 版免费体验方案

JetBrains(全家桶: IDEA、WebStorm、GoLand、PyCharm) 2024.3 2025 版免费体验方案 前言 JetBrains IDE 是许多开发者的主力工具,但从 2024.02 版本起,JetBrains 调整了试用政策,新用户不再享有默认的 30 天免费试用…

Docker生存手册:安装到服务一本通

文章目录 一. Docker 容器介绍1.1 什么是Docker容器?1.2 为什么需要Docker容器?1.3 Docker架构1.4 Docker 相关概念1.5 Docker特点 二. Docker 安装2.1 查看Linux内核版本2.2 卸载老版本docker,避免产生影响2.3 升级yum 和配置源2.4 安装Dock…

Linux内核传输层UDP源码分析

一、用户数据包协议(UDP) 1.UDP数据报头 UDP 提供面向消息的不可靠传输,但没有拥塞控制功能。很多协议都使用 UDP,如用于 IP 网络传输音频和视频的实时传输协议 (Real-time Transport Protocol,RTP),此类型…

FPGA学习(二)——实现LED流水灯

FPGA学习(二)——实现LED流水灯 目录 FPGA学习(二)——实现LED流水灯一、DE2-115时钟源二、控制6个LED灯实现流水灯1、核心逻辑2、代码实现3、引脚配置4、实现效果 三、模块化代码1、分频模块2、复位暂停模块3、顶层模块 四、总结 一、DE2-115时钟源 DE2-115板子包含一个50MHz…

Linux如何在设备树中表示和引用设备信息

DTS基本知识 dts 硬件的相应信息都会写在.dts为后缀的文件中,每一款硬件可以单独写一份xxxx.dts,一般在Linux源码中存在大量的dts文件,对于arm架构可以在arch/arm/boot/dts找到相应的dts,一个dts文件对应一个ARM的machie。 dtsi 值…

Matlab 汽车振动多自由度非线性悬挂系统和参数研究

1、内容简介 略 Matlab 169-汽车振动多自由度非线性悬挂系统和参数研究 可以交流、咨询、答疑 2、内容说明 略 第二章 汽车模型建立 2.1 汽车悬架系统概述 2.1.1 悬架系统的结构和功能 2.1.2 悬架分类 2.2 四分之一车辆模型 对于车辆动力学,一般都是研究其悬…

生活中的可靠性小案例11:窗户把手断裂

窗户把手又断了,之前也断过一次,使用次数并没有特别多。上方的图是正常的把手状态,断的形状如下方图所示。 这种悬臂梁结构,没有一个良好的圆角过渡,导致应力集中。窗户的开关,对应的是把手的推拉&#xff…

[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana_加法_python之禅

074_ai辅助编程_水果程序_fruits_加法 回忆上次内容 上次直接从模块中导入变量、函数 from my_file import pi 导入my_file.pi 并作为 pi 使用 from my_file import pi as my_pi 导入变量 并 重命名 添加图片注释,不超过 140 字(可选) …

【图论】并查集的学习和使用

目录 并查集是什么? 举个例子 组成 父亲数组: find函数: union函数: 代码实现: fa[] 初始化code: find code: 递归实现: 非递归实现: union code : 画图模拟: 路径压缩&#xff1a…

欢乐力扣:反转链表

文章目录 1、题目描述2、思路 1、题目描述 反转链表。  给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 2、思路 借助cur指针和pre双指针来调整链表的前后指向。 # Definition for singly-linked list. # class ListNode: # def __i…

什么是大带宽服务器

什么是大带宽服务器? 在深入探讨大带宽之前,让我们先明确带宽的概念。带宽与我们日常所说的宽带有所不同,宽带是运营商为满足家庭或商业上网需求所提供的服务,而带宽则特指数据的传输速度,尤其是上行速度。大带宽服务…

【TCP】三次挥手,四次挥手详解--UDP和TCP协议详解

活动发起人小虚竹 想对你说: 这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧&#xff01…

SSM基础专项复习4——Maven项目管理工具(1)

系列文章 1、SSM基础专项复习1——SSM项目整合-CSDN博客 2、SSM基础专项复习2——Spring 框架(1)-CSDN博客 3、SSM基础专项复习3——Spring框架(2)-CSDN博客 文章目录 系列文章 1. Maven 的概念 1.1. 什么是 Maven 1.2. 什…