关于去除信号中的直流分量效果演示(零频率分量)

img

本文作者: slience_me


文章目录

  • 关于去除信号中的直流分量效果演示(零频率分量)
    • 1. 效果图展示:
    • 2. 快速傅里叶变换FFT
    • 3. 相关验证代码

关于去除信号中的直流分量效果演示(零频率分量)

1. 效果图展示:

image-20240120175207877

2. 快速傅里叶变换FFT

def FFT_for_Period(x, k=2):xf = torch.fft.rfft(x, dim=1)frequency_list = abs(xf).mean(0).mean(-1)frequency_list[0] = 0_, top_list = torch.topk(frequency_list, k)top_list = top_list.detach().cpu().numpy()period = x.shape[1] // top_listreturn period, abs(xf).mean(-1)[:, top_list]

frequency_list[0] 置零可能是为了去除直流分量(零频率分量)的影响。在频率谱中,索引为0的位置通常对应于零频率,也就是直流成分。

直流成分表示信号的平均值或偏移。在某些情况下,我们可能对信号的变化更感兴趣,而不是整个信号的平均值。通过将 frequency_list[0] 置零,我们可以去除直流成分的影响,更关注信号中的变化和其他频率成分。

这种操作在信号处理和频谱分析中是常见的,特别是当我们关注信号的变化或周期性成分而不关心平均水平时。它有助于突出频谱中的其他特征,使得分析更加集中于信号的变动和周期性。

关于直流分量的解释

直流分量是信号中的恒定成分,通常表示信号的平均值或直流偏移。直流分量不随时间变化,它是信号在水平方向上的偏移或平移。

让我们通过一个直观的例子来理解直流分量:

假设有一个以时间为横轴的信号图,其中纵轴表示信号的振幅。如果信号在整个时间范围内都有一个常数振幅,那么这个信号就包含直流分量。直流分量的存在会使整个信号在纵轴上发生平移,即整个信号的基准水平线上下移动。

举个例子,考虑一个表示温度的信号。如果这个信号中存在直流分量,那么它可能表示一个常数的环境温度,而信号的波动则表示温度随时间的变化。直流分量可以看作是整个信号的平均温度,而波动则反映了温度相对于平均值的变化。

在频谱分析中,直流分量通常对应于频谱中的零频率分量,即索引为0的位置。通过将直流分量从频谱中去除,我们可以更专注于信号中变化的频率成分,而不受整体平移的影响。这在很多信号处理任务中是有用的,特别是当我们关注信号的变动和周期性成分时。

3. 相关验证代码

import numpy as np
import matplotlib.pyplot as plt
import torchdef generate_irregular_waveform_with_large_dc(duration, sampling_rate):t = np.arange(0, duration, 1 / sampling_rate)# 生成不规则的波形,包含直流分量waveform = np.sin(2 * np.pi * 5 * t) + 0.5 * np.sin(2 * np.pi * 12 * t) + 2.0  # 增大直流分量return t, waveform# 设置不规则波形的参数
duration = 2  # 波形持续时间(秒)
sampling_rate = 1000  # 采样率# 生成不规则波形数据(包含直流分量)
t, waveform_with_dc = generate_irregular_waveform_with_large_dc(duration, sampling_rate)# 转换为PyTorch张量
x_with_dc = torch.tensor(waveform_with_dc, dtype=torch.float32)# 不去掉直流分量的傅里叶变换
xf_with_dc = torch.fft.rfft(x_with_dc)
print("不去掉直流分量")
print("xf.shape: {}".format(xf_with_dc.shape))
frequency_list = abs(xf_with_dc)
print("frequency_list: {}".format(frequency_list))
_, top_list = torch.topk(frequency_list, 2)
print("top_list: {}".format(top_list))# 提取频率信息
xf_freq = np.fft.fftfreq(len(waveform_with_dc), d=1 / sampling_rate)plt.figure(figsize=(24, 16))
# 绘制原始波形图
plt.subplot(4, 1, 1)
plt.plot(t, waveform_with_dc)
plt.title('Original Waveform (with DC Component)')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.grid(True)# 绘制不去掉直流分量的频谱图
plt.subplot(4, 1, 2)
plt.plot(xf_freq[:len(xf_with_dc)], torch.abs(xf_with_dc))
plt.title('Frequency Spectrum (without Removing DC Component)')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.grid(True)# 去掉直流分量
x_without_dc = x_with_dc - torch.mean(x_with_dc)
print("去掉直流分量")
print("xf.shape: {}".format(xf_with_dc.shape))
frequency_list = abs(xf_with_dc)
print("frequency_list: {}".format(frequency_list))
_, top_list = torch.topk(frequency_list, 2)
print("top_list: {}".format(top_list))# 进行傅里叶变换
xf_without_dc = torch.fft.rfft(x_without_dc)# 提取频率信息
xf_freq_without_dc = np.fft.fftfreq(len(waveform_with_dc), d=1 / sampling_rate)# 绘制去掉直流分量后的波形图
plt.subplot(4, 1, 3)
plt.plot(t, x_without_dc.numpy())
plt.title('Waveform without DC Component')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.grid(True)# 绘制去掉直流分量后的频谱图
plt.subplot(4, 1, 4)
plt.plot(xf_freq_without_dc[:len(xf_without_dc)], torch.abs(xf_without_dc))
plt.title('Frequency Spectrum')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.grid(True)plt.tight_layout()
plt.show()

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

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

相关文章

JDK 动态代理(Spring AOP 的原理)(面试重点)

代理模式 也叫委托模式.定义:为其他对象提供⼀种代理以控制对这个对象的访问.它的作⽤就是通过提供⼀个代理类,让我们 在调⽤⽬标⽅法的时候,不再是直接对⽬标⽅法进⾏调⽤,⽽是通过代理类间接调⽤,在某些情况下,⼀个对象不适合或者不能直接引⽤另⼀个对…

51单片机蜂鸣器

蜂鸣器 蜂鸣器的工作原理 三极管的工作原理 三极管是一种半导体器件,通常由三个掺杂不同的半导体材料层构成。它常用于放大和开关电路中。三极管的工作原理可简述如下: 放大作用:三极管可以放大电流和电压信号。它的工作原理基于控制一个较大…

Web前端与低代码可以碰出什么火花?

技术快速迭代,Web前端开发已经逐渐成为构建现代应用程序的关键组成部分。它不仅涉及到美观的界面设计,还包括后端功能的实现,以及跨平台兼容性的考虑。然而,传统的Web前端开发过程往往需要进行长时间的编码和调试,这使…

LTC6820和isoSPI使用

1、MSTR主控/受控 MSTR (引脚 11/ 引脚 12):串行接口主 / 从选择器输入。MSTR接VCC,则LTC6820为从机;MSTR接GND,则LTC6820为主机 2、SLOW慢速/快速 SLOW (引脚 12/ 引脚 13):慢速接口选择输入。当时钟频率≤ 200kHz …

C++和Python最常用的库框架一览

一、C常用库 1. 标准模板库(STL) STL包含丰富的数据结构与算法。比如vector动态数组;list双向链表;map基于红黑树实现,支持快速查找键值对。常用算法有sort排序、find搜索等。这些容器算法类和函数模板,是C程序员必不可少的基础。 2. Boost Boost是近年兴起的高质量C库集合…

网络安全:守护数字世界的盾牌

在当今数字化的时代,网络已经渗透到我们生活的方方面面。从社交媒体到在线银行,从在线购物到工作文件传输,网络几乎无处不在。然而,随着网络的普及,网络安全问题也日益凸显。那么,如何确保我们的数字资产安…

递归、搜索与回溯算法(专题一:递归)

往期文章(希望小伙伴们在看这篇文章之前,看一下往期文章) (1)递归、搜索与回溯算法(专题零:解释回溯算法中涉及到的名词)【回溯算法入门必看】-CSDN博客 接下来我会用几道题&#…

Docker-安装实践(mysql,redis集群,tomcat)

docker实践(提供几个安装案例) 安装Tomcat # 拉取镜像,可以指定标签不指定默认为最新 docker pull tomcat docker run -itd -p 8080:8080 --name tomcat tomcat:latest #这样内部默认80端口,主机的映射端口会随机分配一个 docker run -itd -P tomcat…

Python-基础篇-数据结构-列表、元组、字典、集合

文章目录 思维导图❓ 大抵是何物数据结构切片 💬具体是何物列表💻 list💻 [ ]自我介绍精神面貌使用说明生理体征增删查改 方法汇总 元组💻 tuple💻 ( )自我介绍使用说明精神面貌生理体征增删查改 字典💻 di…

【C++】vector容器接口要点的补充

接口缩容 在VS编译器的模式下&#xff0c;类似于erase和insert接口的函数通常会进行缩容&#xff0c;因此&#xff0c;insert和erase行参中的迭代器可能会失效。下图中以erase为例&#xff1a; 代码如下&#xff1a; #include <iostream> #include <vector> #inclu…

Python——条形图正负不同色加表格

条形图&#xff0c;当差值大于0时设置一个颜色&#xff0c;反之另一种颜色&#xff0c;并添加表格 import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib.ticker as mtick import matplotlib.ticker as ticker#设置输出结果对齐方式 pd…

Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑

MingW下编译QWt 6.2.0 下载qwt最新版本&#xff0c;用git工具 git clone下载源码 git clone https://git.code.sf.net/p/qwt/git qwt-git 或者使用我下载的 qwt 2.6.0 链接&#xff1a;https://pan.baidu.com/s/1KZI-L10N90TJobeqqPYBqw?pwdpq1o 提取码&#xff1a;pq1o 下载…

python-基础篇-高级变量类型

文章目录 高级变量类型目标知识点回顾 01. 列表1.1 列表的定义1.2 列表常用操作del 关键字&#xff08;科普&#xff09;关键字、函数和方法&#xff08;科普&#xff09; 1.3 循环遍历1.4 **应用场景** 02. 元组2.1 元组的定义创建空元组元组中 **只包含一个元素** 时&#xf…

教您如何下载保存钉钉视频到电脑本地

教您如何下载保存钉钉视频到电脑和手机相册地瓜网络技术 大家好&#xff0c;我们这边是地瓜网络技术&#xff01;30秒教会你下载钉钉视频&#xff01;现在很多群管理员把视频设置为禁止下载&#xff0c;导致我们无法正常的下载群直播回放视频&#xff0c; 今天我们就教大家如何…

AWS 专题学习 P7 (FSx、SQS、SNS)

文章目录 Amazon FSx – 概述Amazon FSx for LustreFSx Lustre - 文件系统部署选项 Amazon FSx for NetApp ONTAPAmazon FSx for OpenZFSHybrid Cloud 存储AWS 存储云原生选项AWS 存储网关Amazon S3 File GatewayAmazon FSx File GatewayVolume GatewayTape GatewayStorage Gat…

【LeetCode】141. 环形链表

leetcode题目链接 141. 环形链表 #include <stdio.h> #include <stdbool.h>struct ListNode {int val;struct ListNode* next; }; typedef struct ListNode ListNode;bool hasCycle(ListNode* head) {ListNode* slow head, * fast head;while (fast &&…

微信小程序 image bindload 事件不触发,图片加载不出来

问题&#xff1a; 当小程序图片页面反复跳转时&#xff0c;或者微信打开小程序页面之后&#xff0c;处于后台运行。 图片加载不出来&#xff0c;我图片加载是通过bindload事件不判断是否下载完成再显示。但是现在bindload不触发&#xff0c;一直显示加载层。 分析&#xff1…

鸿蒙 HarmonyOS ArkTS ArkUI 动画 中心扩展、向下扩展、纵向扩展

EntryComponentstruct Index {State widthA: number 0State heightA: number 0onPageShow():void{animateTo ( {duration: 2000,iterations: -1,curve:Curve.Linear}, () > {this.widthA 200this.heightA 200} )}build() {Column() {// 中心扩展Column(){}.width(this.wi…

什么是中间件?

文章目录 为什么需要中间件&#xff1f;中间件生态漫谈数据库中间件读写分离分库分表引进数据库中间件MyCat 服务端代理模式ShardingJDBC 客户端代理模式 总结 IT 系统从单体应用逐渐向分布式架构演变&#xff0c;高并发、高可用、高性能、分布式等话题变得异常火热&#xff0c…

【Arduino】无法上传程序到开发板,报错 avrdude: ser_open(): can‘t set com-state for “\\.\COM6“

问题描述 在尝试将项目上传到Arduino板子时&#xff0c;尽管开发板已被正确连接&#xff0c;并且IDE中能够正常读取到开发板信息&#xff0c;但是上传过程中仍然出现了问题。 下面是IDE中显示的开发板信息&#xff1a; 当尝试上传程序时&#xff0c;控制台报错信息如下&#…