当前位置: 首页 > news >正文

冲击性信号的频域特征

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

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):breakif(pulse_end>fs):pulse_end = fs-1signal[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()

相关文章:

  • python 绘制离散曲线计算包络谱
  • 二级Java真题乱序版第十一套(含真题解析)
  • 黑马Java零基础视频教程精华部分_10_面向对象进阶(2)
  • 位运算(更新中)
  • 本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——2Yolo使用之ONNX模型准备
  • PE安装win11原版系统“无法创建新的分区,也找不到现有的分区”和“windows无法对计算机进行启动到下一个安装阶段”的解决办法
  • 【参会邀请】第四届区块链技术与信息安全国际会议(ICBCTIS 2024)诚邀相聚江城!
  • 代码随想录第五十七天
  • Vue 常用组件间通信方式
  • 代码随想录算法训练营第 32 天 | LeetCode509斐波那契数列 LeetCode70爬楼梯 LeetCode749使用最小花费爬楼梯
  • 华为路由常见 LSA 类型的产生及作用域和字段详细解读
  • 杰理-1拖8 错误状态
  • 程序员找工作之操作系统面试题总结分析
  • 【Unity实战】给Unity的类添加新功能
  • Android笔试面试题AI答之线程Handler、Thread(3)
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • [Vue CLI 3] 配置解析之 css.extract
  • Angular2开发踩坑系列-生产环境编译
  • Debian下无root权限使用Python访问Oracle
  • echarts花样作死的坑
  • eclipse(luna)创建web工程
  • Git 使用集
  • Java面向对象及其三大特征
  • node学习系列之简单文件上传
  • python 装饰器(一)
  • react-native 安卓真机环境搭建
  • Vue ES6 Jade Scss Webpack Gulp
  • Web Storage相关
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 力扣(LeetCode)965
  • 聊聊redis的数据结构的应用
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (二)linux使用docker容器运行mysql
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (杂交版)植物大战僵尸
  • (转)甲方乙方——赵民谈找工作
  • (转)人的集合论——移山之道
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转)原始图像数据和PDF中的图像数据
  • .axf 转化 .bin文件 的方法
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET Standard 的管理策略
  • .NET 命令行参数包含应用程序路径吗?
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [AI StoryDiffusion] 创造神奇故事,AI漫画大乱斗!
  • [BUG] Authentication Error
  • [Docker]六.Docker自动部署nodejs以及golang项目