冲击性信号的频域特征

news2024/11/26 11:30:14

这是一个信号采样数学实验,你可以直观感受到冲击信号的时域和频域特征

1.原始冲击信号:

原始信号是一个频率为180Hz附近的一个冲击性信号:

2.冲击信号频谱

它的频谱,可能会超出你的想象,它的1x频率幅度可能并不最高的。频谱在高频展开

 3. 数字滤波滤掉高频转回时域

低通滤波后的波形几乎不变。但是此时的频谱:

4. 数字低通滤波后的频谱

注意1x, 2x, 3x谱线的峰值都更低,但是出现了直流分量以抵消掉高次谐波对1x的贡献:

5.人为抹掉频谱高频部分,转回时域再转回,频谱出现显著差异的理论解释:

  • FFT变换和逆变换是针对复数域的,无论时域和频域,都可以是复数域。
  • 实数时域波形FFT变换后的共轭特征是FFT变换的一个特例。对于复数时域波形,FFT变换的结果,并不必然显现出对称性。
  • 人为抹掉高频信号后的信号,如果转换时域,一定与原始信号不同。但是我们观测到的现象是,这个把高频分量抹掉后,转回时域的模分量,近似不变
  • 在进行FFT显示时,我们抹掉了FFT结果的相位的部分;事实上,时域图我们也抹掉了那个复数的相位。抹掉相位之后的信号,无论是时域信号还是频域信号,它与原始信号显著不同。

附录A 该实验相关的代码

 相关的./gphelper/calc/gpFFT参见:GitCode - 全球开发者的开源社区,开源代码托管平台

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 获取当前脚本文件所在目录的父目录,并构建相对路径
import os
import sys
current_dir = os.path.dirname(os.path.abspath(__file__))
project_path = os.path.join(current_dir, '..')
sys.path.append(project_path)
sys.path.append(current_dir)
sys.path.append('./gphelper/calc/')
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams
from scipy.signal import get_window
import gpFFT

# 设置中文字体
rcParams['font.sans-serif'] = ['SimHei']  # 指定中文字体
rcParams['axes.unicode_minus'] = False  # 解决负号问题

# 参数设置
fs = 20000  # 采样频率 (Hz)
f_signal = 181.5  # 信号频率 (Hz)
rms_signal = 5e-2  # 信号 RMS (m/s)
duration = 1  # 信号持续时间 (秒)
pulse_duration = 1 / (15 * f_signal)  # 脉冲持续时间 (秒)

# 生成时间序列
t = np.arange(0, duration, 1/fs)

# 生成冲击性振动信号(脉冲信号)
signal = np.zeros_like(t)
firstEdge = 3
cntOfCycle = 0
while True:
    pulse_start = int(firstEdge+fs/f_signal*cntOfCycle)
    pulse_end = int(pulse_start+pulse_duration*fs)
    if(pulse_start>=fs):
        break
    if(pulse_end>fs):
        pulse_end = fs-1
    signal[pulse_start:pulse_end] = rms_signal * np.sqrt(2)
    if(pulse_end>=fs):
        break;
    cntOfCycle += 1

# 生成高斯噪声
rms_noise = rms_signal * 0.01
noise = rms_noise * np.random.randn(len(t))

# 将信号和噪声相加
signal_with_noise = signal + noise

# 绘图
plt.subplot(2, 2, 1)
plt.plot(t, signal_with_noise, label='含噪声信号', color='red')
plt.title('含噪声的冲击性振动信号')
plt.xlabel('时间 (秒)')
plt.ylabel('幅值')
plt.legend()

#频谱展示
(freq, fft_toshow_with_noise, fft_ac) = gpFFT.GetFFTOfSignal(t, signal_with_noise)
plt.subplot(2, 2, 2)
plt.plot(freq, fft_toshow_with_noise, label='冲击性振动信号_频谱')
plt.title('冲击性振动信号')
plt.xlabel('频率 (Hz)')
plt.ylabel('幅值')
plt.legend()

(x, signal_filtered) = gpFFT.lowFilterSignal(t, signal_with_noise, 1*f_signal+3)
plt.subplot(2, 2, 3)
plt.plot(t, signal_with_noise, label='低通滤波', color='red')
plt.title('含噪声的冲击性振动信号')
plt.xlabel('时间 (秒)')
plt.ylabel('幅值')
plt.legend()

(freq, fft_signal_filtered, fft_ac) = gpFFT.GetFFTOfSignal(t, signal_filtered) 
plt.subplot(2, 2, 4)
plt.plot(freq, fft_signal_filtered, label='低通滤波频谱')
plt.title('含噪声的冲击性振动信号')
plt.xlabel('频率 (Hz)')
plt.ylabel('幅值')
plt.legend()

plt.tight_layout()
plt.show()

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

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

相关文章

iOS ------ autoreleasePool

一,autoReleasePool{} int main(int argc, const char * argv[]) {autoreleasepool {}return 0; }我们平时创建一个main函数的代码的时候,就会发现其中有一个这个东西autoreleasepool{},使用clang编译之后:autoreleasepool{…}被…

对《国家汽车芯片标准体系建设指南》好奇,遂读

基础通用:基于汽车行业对芯片的可靠性、运行稳定性 和安全性等应用需求,提取出汽车芯片性通用要求,主要包括环境及可靠性、电磁兼容、功能安全和信息安全共4个方面的要求。 产品与技术应用:根据实现功能的不同,将汽车…

文献综述能否帮助研究人员认识特定学术领域的趋势和新兴主题

VersaBot一键生成文献综述 进行良好的文献综述可以成为研究人员识别特定学术领域的趋势和新兴主题的强大工具。就是这样; 1. 识别模式和重复出现的概念: 当您深入研究现有研究时,您自然会开始注意到不同研究中采用的重复出现的主题、想法和方法。这些模…

详解爬虫使用代理ip的几种方案

​ 在如今这个信息爆炸的时代,数据就是财富。对于许多从事数据分析、市场调研和大数据处理的人来说,网络爬虫已经成为了他们的得力助手。然而,随着网站对爬虫的防范措施越来越严格,使用代理IP已经成为了爬虫工作中的一项必备技能。…

05:【stm32】重映射AFIO

重映射AFIO 1、什么是AFIO2、怎么使用AFIO 1、什么是AFIO AFIO是stm32上的众多片上外设之一,专门用来执行“复用功能的重映射” 2、怎么使用AFIO 如下图所示:当我们要同时使用USART1和TIM1时,我们就需要使用AFIO进行使其中一个片上外设进行重…

【iOS】SideTable

目录 SideTablesStripedMapSideTable1. spinlock_t slock2. RefcountMap3. weak_table_t 总结 objc4源码地址: SideTable& table SideTables()[this]; // 获取对象的SideTable size_t& refcntStorage table.refcnts[this];SideTables 查源码SideTables…

Android 多语言切换

文章目录 在系统设置修改语言创建资源目录创建资源文件示例验证 代码手动切换语言在Application中设置新的语言环境在MainActivity / BaseActivity中设置新的语言环境验证 问题1. makeText()方法context传入是Application的context,无法获取正确的资源字符串原因解决…

Docker + Nacos + Spring Cloud Gateway 实现简单的动态路由配置修改和动态路由发现

1.环境准备 1.1 拉取Nacos Docker镜像 从Docker Hub拉取Nacos镜像: docker pull nacos/nacos-server:v2.4.01.2 生成密钥 你可以使用命令行工具生成一个不少于32位的密钥。以下是使用 OpenSSL 生成 32 字节密钥的示例: openssl rand -base64 321.3 …

免费插件集-illustrator插件-Ai插件-选择路径等分

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.总结 1.介绍 本文介绍一款免费插件,加强illustrator使用人员工作效率,路径处理功能,功能是选择路径等分。首先从下载网址下载这款插件 https://download.csdn.net/download…

本地Gitlab-runner自动编译BES项目

0 Preface/Foreword 1 Gitlab-runner配置情况 具体情况如下: Gitlab-ruuner运行在wsl 1中的Ubuntu 18.04 distro上专门为GitLab-runner分配了一个用户,名为gitlab-runner 2 自动编译 2.1 找不到编译工具链 根据错误提示,交叉编译工具链未找…

Springboot利用大模型实现即时通信

gitee地址:https://gitee.com/myha/Springboot-langchain-chat 版本及工具说明 本项目版本:springboot3.2.8 jdk17 mybatis-plus3.5.7 安装python,可以参考:https://docs.python.org/zh-cn/3/using/windows.html#the-full-in…

zsh 配置 docker 自动补全

zsh 配置 docker 自动补全 在终端中使用 docker 的命令的时候必须要全部手敲,没有提示,于是就在找是否有自动补全的脚本,搜索了一圈踩了一些坑总结了一下具体的步骤。 首先执行如下命令: mkdir -p ~/.zsh/completion curl -L h…

Visual Studio创建 OpenCV项目

1、cmake 编译 opencv 参考链接:CMake编译OpenCV3.4.1心得_cmake 3.4.1-CSDN博客 1)opencv文件名最好不要有空格 2)没有下载opencv_contrib,不用配置OPENCV_EXTRA_MODULES_PATH 1、Visual Studio创建 OpenCV项目 参考链接&am…

esp32通过smartconfig连接wifi

esp32通过smartconfig连接wifi整体设计流程 1.流程图 2.代码实现 #include <WiFi.h> #include <SPIFFS.h>// 定义存储文件的文件名 const char* wifi_config_file "/wifi_config.txt";// 定义变量存储 WiFi 信息 // 1&#xff09;不填写为空时通过sma…

LangGraph Studio

文章目录 一、关于 LangGraph Studio下载 二、设置三、打开一个项目三、调用图开始新的运行配置图运行 四、创建和编辑线程1、创建一个线程2、选择一个线程3、编辑线程状态 五、如何向图表添加中断1、将中断添加到节点列表2、向特定节点添加中断 六、Human-in-the-loop七、编辑…

多模态大模型intern-vl 1.5 论文解读:How Far Are We to GPT-4V?

论文&#xff1a;https://arxiv.org/pdf/2404.16821 目录 1 介绍 3.1 整体架构 3.2 强大的视觉编码器 InternViT-6B-448px-V1.2 InternViT-6B-448px-V1.5 3.3 动态高分辨率 动态宽高比匹配 图像分割与缩略图 InternVL 1.5&#xff0c;这是一款开源的多模态大语言模型&…

Onenet服务器创建产品和设备

Onenet服务器创建产品和设备 (1)浏览器搜索 Onenet, 或者打开这个网址 OneNET - 中国移动物联网开放平台 (10086.cn) (2)登录注册, 密码特殊符号是 (3)进入此网址, 设备管理页面 设备列表 - OneNET物联网平台 (10086.cn) (4)点击产品开发,创建产品 (5)其他行业 (6)设备接…

功能管理之语录管理功能开发(八)

云风网 云风笔记 云风知识库 这里话不多说&#xff0c;直接上效果图,开发逻辑和专栏上篇用户管理大致相同

【JVM基础12】——垃圾回收-说一下JVM有哪些垃圾回收器?

目录 1- 引言&#xff1a;垃圾回收器2- ⭐核心&#xff1a;垃圾回收器详解2-1 串行垃圾回收器2-2 并行垃圾回收器2-3 CMS&#xff08;并发垃圾回收&#xff09;——主要作用在老年代 3- 小结3-1 说一下JVM有哪些垃圾回收器&#xff1f; 1- 引言&#xff1a;垃圾回收器 在 JVM …

人在职场,一半清醒,一半糊涂

职场如战场&#xff0c;同事之间&#xff0c;除了利益竞争&#xff0c;鲜有情谊。 想要扎根立足&#xff0c;学会清醒做事&#xff0c;糊涂做人&#xff0c;才有可能避免“踩坑”&#xff0c;行稳致远。 01 人在职场&#xff0c;清醒做事&#xff0c;才不会被排挤出局。 职…