如何将示波器输出的电压数据转换为频域数据,五句代码解决问题,详细分析五句代码

news2024/11/10 0:24:06

这四句代码是关于对电压数据(voltage)进行快速傅里叶变换(FFT),并生成相应的频率向量,提取并计算频谱的幅度,同时只保留正频率部分。

五句代码如下图所示:

  % 计算采样频率
    dt = mean(diff(time));  % 计算时间间隔
    Fs = 1 / dt;  % 采样频率

    % 对电压数据进行FFT变换
    Y = fft(voltage, N_fft);

    % 计算频率向量
    f = (0:(N_fft/2-1)) * (Fs / N_fft);

    % 计算FFT的幅度
    amplitude = abs(Y / N_fft);

    % 只取正频率部分
    amplitude = amplitude(1:N_fft/2);
1、计算采样频率
 % 计算采样频率
    dt = mean(diff(time));  % 计算时间间隔
    Fs = 1 / dt;  % 采样频率

计算采样频率 fs。采样频率是数据中时间间隔的倒数。假设你的时间间隔是恒定的(例如 0.001 秒),则:

 在这个例子中,时间间隔为 0.001 秒,所以采样频率 fs = 1000 Hz。

2、对电压数据进行FFT变换
 % 对电压数据进行FFT变换
    Y = fft(voltage, N_fft);

“Y = fft(voltage, N_fft);”这行代码使用 MATLAB 或类似环境中的 fft 函数来对电压信号进行快速傅里叶变换 (FFT)。其作用是将时域信号转换为频域信号。

“voltage”这是输入的时域电压数据,是一个向量。它代表了电压信号随时间变化的情况。
“N_fft”这是指定的 FFT 变换的点数。即使 voltage 的长度小于或大于 N_fft,函数 fft 仍会基于 N_fft 的长度进行计算。如果 N_fft 大于 voltage 的长度,voltage 会在末尾用零填充(zero-padding),提高频率分辨率。如果 N_fft 小于 voltage 的长度,voltage 会被截断。

“fft 函数”对输入的电压信号进行 FFT,输出的是一个复数向量 Y。其中每个元素的模表示频域中对应频率的幅值,实部和虚部分别表示余弦和正弦分量,复数相位角表示相位信息

3、计算频率向量
 % 计算频率向量
    f = (0:(N_fft/2-1)) * (Fs / N_fft);

“f = (0:(N_fft/2-1)) * (Fs / N_fft);”这一行代码用于生成相应的频率向量 f,表示 FFT 结果对应的频率值。

“0:(N_fft/2-1)”这部分创建了一个从 0 到 N_fft/2 - 1 的整数向量。由于 FFT 的结果是对称的(共轭对称性),我们只需要保留前一半的频率分量(通常称为正频率分量)。因此,N_fft/2 个频率分量是足够的。

“Fs”这是采样频率,表示每秒采集的样本数。它与时域数据的采样速率相关,决定了频域的范围。

“(Fs / N_fft)”这是频率分辨率,表示 FFT 结果中每个频率点之间的间隔。它等于采样频率 Fs 除以 FFT 的点数 N_fft。因此,频率向量的最小间隔就是 Fs / N_fft。

4、计算FFT的幅度
 % 计算FFT的幅度
    amplitude = abs(Y / N_fft);

“amplitude = abs(Y / N_fft);”这行代码计算 FFT 结果的幅度谱。

“Y”这是之前通过 fft 计算得到的复数向量,表示信号的频域信息。Y 包含了每个频率分量的复数值,其中实部和虚部分别表示信号的余弦和正弦分量。
  
“abs()”这是计算复数的绝对值,也就是模值。傅里叶变换的结果 Y 是一个复数值,使用 abs(Y) 可以得到每个频率分量的幅值(即信号在该频率上的能量大小)。具体来说,复数的模是通过其实部和虚部计算的:

  

这样,abs(Y) 就是各个频率分量的幅度。

“Y / N_fft”FFT 的结果通常需要除以 FFT 的点数 N_fft 以进行归一化。因为 fft 函数的输出幅度会放大 N_fft 倍,因此我们需要除以 N_fft,确保得到的幅度是信号的真实幅值,而不是放大后的值。通过这种归一化处理,幅度值会反映信号的实际大小。

例如:如果时域信号的幅度为 1,则通过除以 N_fft,频域中的幅度谱在能量和信号幅值上会被正确调整。

5、幅度取正频率部分
 % 只取正频率部分
    amplitude = amplitude(1:N_fft/2);

“amplitude = amplitude(1:N_fft/2);”这行代码只保留正频率部分的幅度谱。

“amplitude(1:N_fft/2)”这部分代码是对 amplitude 向量进行索引操作,只保留前 N_fft/2 个元素。

原因:在对信号进行 FFT 之后,频谱结果是对称的,即频率分量既有正频率部分,也有负频率部分(根据复数共轭对称性)。对于实数信号,负频率部分是冗余的,因为它与正频率部分的信息相同。

具体来说:
FFT 的结果 Y 中,前半部分(从索引 1 到 N_fft/2)对应正频率;
后半部分(从索引 N_fft/2 + 1 到 N_fft)则对应负频率。

因为我们只关心信号的正频率部分,所以通过 amplitude(1:N_fft/2),我们只保留正频率的幅度谱。

6、总结

通过 fft(voltage, N_fft),我们得到了频域的复数信号 Y。

通过 f = (0:(N_fft/2-1)) * (Fs / N_fft),我们得到了频率向量 f,用于与 Y 对应的频率值。这个频率向量只表示前一半的频率,因为傅里叶变换的结果是对称的,我们只关心正频率部分。

通过 amplitude = abs(Y / N_fft)`,我们得到经过归一化处理的 FFT 结果的幅度谱,表示信号在不同频率上的能量分布。

通过 amplitude = amplitude(1:N_fft/2),只保留正频率部分的幅度,因为对于实数信号,负频率部分是对称的,不需要重复保留。

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

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

相关文章

Python | Leetcode Python题解之第413题等差数列划分

题目: 题解: class Solution:def numberOfArithmeticSlices(self, nums: List[int]) -> int:n len(nums)if n 1:return 0d, t nums[0] - nums[1], 0ans 0# 因为等差数列的长度至少为 3,所以可以从 i2 开始枚举for i in range(2, n):i…

Rust GUI框架 tauri V2 项目创建

文章目录 Tauri 2.0创建应用文档移动应用开发 Android 前置要求移动应用开发 iOS 前置要求参考资料 Tauri 2.0 Tauri 是一个构建适用于所有主流桌面和移动平台的轻快二进制文件的框架。开发者们可以集成任何用于创建用户界面的可以被编译成 HTML、JavaScript 和 CSS 的前端框架…

电源电压输入输出保护电路

输入正负极接反芯片损坏 解决方案:添加防反接电路(蓝色虚线框中电路)。 Q1:VDS≥1.5*VINMAX; DZ1:VDZ110V,500mW; R3:20K; R4:20K。 输入尖峰电压损坏芯片 ➢ 解决方案一:输入添加瞬态尖峰电压吸收电路…

【中国留学网-注册_登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

如何兼容性地开发响应式站点——WEB开发系列40

CSS在不同浏览器的支持历史中,有过多次变革。尽管现代浏览器逐步趋向一致,但仍有一些较旧的浏览器广泛使用,特别是在某些地区或特定环境中。 一、浏览器生态:了解你的网站用户 在设计和开发站点之前,了解目标用户所使…

多旅行商问题:鹈鹕优化算法(Pelican Optimization Algorithm,POA)求解多仓库多旅行商问题MD-MTSP(提供Matlab代码)

一、鹈鹕优化算法 鹈鹕优化算法(Pelican Optimization Algorithm,POA)由Pavel Trojovsk和Mohammad Dehghani 于2022年提出,该算法模拟了鹈鹕在狩猎过程中的自然行为。 鹈鹕很大,喙很长,喉咙里有一个大袋子,用来捕捉和吞咽猎物。…

记录一下ElementUI 3 在浏览器导入, table表格显示问题

当时问题忘了截图, 现在通过文字记录一下问题 我直接在html了引入 vue3 和 ElementUI 3 , 使用了table组件, 但是表格的td 总是只显示一列, 问题是我的 el-table-column 标签 没有结束标签 , 在vue文件模块化里写不需要结束标签, 在浏览器里无法直接识别出来, 所以他是渲染了第…

鸿蒙开发之ArkUI 界面篇 十 边框border

border语法格式如下: 要实现如下效果: 代码如下: Entry Component struct IndexTest {State message: string IndexTest;build() {Column(){Text(border实现).fontSize(30) .border({width:4,color:Color.Red,style:BorderStyle.Solid,ra…

进程的重要函数

进程的重要函数: fork函数 了解fork函数 通过调用fork()函数&#xff0c;则会产生一个新的进程。调用fork()函数的进程叫做 父进程&#xff0c;产生的新进程则为子进程。 其编码过程: 1.函数功能: 函数头文件 #include <sys/types.h> #include <unistd.h> 函数…

【FFT】信号处理——快速傅里叶变换【通俗易懂】

快速傅里叶变换&#xff08;Fast Fourier Transform, FFT&#xff09;是一种用于将信号从时间域转换到频率域的算法。 傅里叶变换的核心思想是&#xff1a;任何周期性信号都可以分解成多个不同频率的正弦波或余弦波的叠加。 简单来说&#xff0c;FFT可以帮助我们理解一个信号…

使用 Internet 共享 (ICS) 方式分配ip

设备A使用dhcp的情况下&#xff0c;通过设备B分配ip并共享网络的方法。 启用网络共享&#xff08;ICS&#xff09;并配置 NAT Windows 自带的 Internet Connection Sharing (ICS) 功能可以简化 NAT 设置&#xff0c;允许共享一个网络连接给其他设备。 打开网络设置&#xff1…

力扣之1075.项目员工I

文章目录 1. 1075.项目员工I1.1 题干1.2 准备数据1.3 解法1.4 结果截图 1. 1075.项目员工I 1.1 题干 项目表 Project&#xff1a; -------------------- | Column Name | Type | -------------------- | project_id | int | | employee_id | int | -------------------- 主键…

『小白可入』VSPD虚拟串口工具——从此告别硬件串口调试

一、下载VSPD工具 工具已上传至百度云&#xff0c;在以下地址下载&#xff1a; VSPD下载链接&#xff1a;通过百度网盘分享的文件&#xff1a;我的资源 链接&#xff1a;https://pan.baidu.com/s/1x2eoQYg6erqs__CQgT5j6Q?pwd4211 提取码&#xff1a;4211 二、安装 1.解压后的…

2024年Apple Search Ads(简称:苹果ASA):开展有效活动的秘诀

当谈到为应用程序启动广告活动时&#xff0c;许多人会立即想到Android。然而&#xff0c;这并不总是最好的选择&#xff0c;因为iOS设备在多个国家和地区占据市场主导地位。在这些地区&#xff0c;定位ios用户可以带来更大的成功。 您可以通过各种渠道在iOS上投放广告&#xff…

最低成本的游戏串流方案分享 如何自己打造云电脑?

今天教大家如何最低成本实现串流 出门在外也可以随时随地游玩端游大作 硬件准备&#xff1a;一台电脑 手机/平板一台 软件&#xff1a;Gameviewer远程 为啥不用moonlight等其他软件呢 因为设置公网穿透等复杂操作对小白来说不太友好 而GameViewer从安装到使用仅需一键 对比同类…

PostgreSQL技术内幕10:PostgreSQL事务原理解析-日志模块介绍

文章目录 0.简介1.PG日志介绍2.事务日志介绍3.WAL分析3.1 WAL概述3.2 WAL设计考虑3.2.1 存储格式3.2.2 实现方式3.2.3 数据完整性校验3.3 check ponit 4.事务提交日志&#xff08;CLOG&#xff09;4.1 clog存储使用介绍4.2 slru缓冲池并发控制 0.简介 本文将延续上一篇文章内容…

好用的网页翻译插件

软件介绍 「火山翻译&#xff0c;开箱即用免配置&#xff0c;完全免费无广告&#xff0c;开发的多语言翻译插件&#xff0c;基本涵盖众多小语种及国际通用语言的翻译&#xff0c;支持网页一键翻译、划词翻译、英语词典、生词本、吐司弹词记忆等丰富能力。 下载方式 请看文章…

【AprilTag】视觉定位实战 | 使用 ROS 驱动的 USB 摄像头进行相机标定与 AprilTag 识别

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

Matlab进行频率切片小波变换

Matlab进行频率切片小波变换(FSWT)源代码&#xff0c;将一维信号生成时频图。 输入信号可以是任何一维信号&#xff0c;心电信号、脑电信号、地震波形、电流电压数据等。 相比连续小波变换(CWT)&#xff0c;频率切片小波变换(Frequency Slice Wavelet Transform,FSWT)是一种更具…

C# 使用代码清理 以及禁用某个代码清理

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…