音频干扰检测(时域方法)

请注意注释掉的代码:逐个包络比对就不能加窗了。

import librosa

import numpy as np

from scipy.signal import windows

import matplotlib.pyplot as plt

# 读取音频文件

audio_file = 'sine.wav'

signal, sample_rate = librosa.load(audio_file, sr=None, mono=False)

# 检查通道数并处理信号

if signal.ndim > 1:

    num_channels = signal.shape[0]

    print(f"音频文件有 {num_channels} 个通道")

    # 如果是4通道,取第X个通道进行处理,这里示例取第4个通道(索引为3)

    if num_channels == 2:

        signal = signal[0, :]

else:

    # 如果信号是单通道,直接使用

    print("音频文件是单通道")

# 计算每个周期的采样点数

cycle_samples = int(sample_rate / 1000)

# # 创建汉宁窗

# window_length = cycle_samples * 1  # 窗长度为10个周期

# window = windows.hann(window_length)

# # 对信号的开头和结尾分别应用汉宁窗

# windowed_signal = signal.copy()

# windowed_signal[:window_length//2] *= window[:window_length//2]

# windowed_signal[-window_length//2:] *= window[window_length//2:]

# 计算周期数

num_cycles = len(signal) // cycle_samples

# 存储异常周期的时间点和幅值

anomaly_times = []

anomaly_amplitudes = []

# 逐个周期比较包络

for i in range(num_cycles - 1):

    start = i * cycle_samples

    end = (i + 1) * cycle_samples

    current_cycle = signal[start:end]

    next_cycle = signal[end:end+cycle_samples]

   

    # 计算当前周期和下一个周期的包络差异

    diff = np.abs(current_cycle - next_cycle)

   

    # 如果差异大于阈值,则认为是异常周期

    if np.max(diff) > 0.1:

        anomaly_time = start / sample_rate

        anomaly_times.append(anomaly_time)

        anomaly_amplitudes.append(np.max(np.abs(current_cycle)))

# 打印异常周期的时间点和幅值

for time, amplitude in zip(anomaly_times, anomaly_amplitudes):

    print(f"异常周期时间点: {time:.3f}s, 幅值: {amplitude:.3f}")

# 绘制时域波形图

time = np.arange(len(signal)) / sample_rate

plt.figure(figsize=(8,4))

plt.plot(time, signal, label='Signal')

# 标注异常周期

for t in anomaly_times:

    plt.axvline(x=t, color='r', linestyle='--', label='Anomaly Detected')

plt.xlabel('Time(s)')

plt.ylabel('Amplitude')

plt.title('Windowed Waveform with Anomalies Highlighted')

plt.legend()

plt.show()

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

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

相关文章

操作系统的理解|冯·若依曼体系结构|进程的状态

操作系统的理解 冯诺伊曼体系结构为什么必须通过内存然后到cpu存储金字塔冯诺伊曼结构的改进在哪?我们可不可以全部用寄存器来做存储器在硬件数据流动角度学以致用:解释程序运行为什么要加载到内存程序没被运行之前存在哪里? 操作系统概念广义…

应急响应实战笔记04Windows实战篇(2)

第2篇:蠕虫病毒 0x00 前言 ​ 蠕虫病毒是一种十分古老的计算机病毒,它是一种自包含的程序(或是一套程序),通常通过网络途径传播,每入侵到一台新的计算机,它就在这台计算机上复制自己&#xff…

第一个C++程序,我也没看明白,暂时。

#include<iostream> using namespace std; int main() { cout << "hello world and you too number!" << endl; system("pause"); return 0; } 运行结果为&#xff1a;

优化生产流程,解决无尘布擦拭留下划痕问题

在现代化工生产中&#xff0c;无尘布被广泛应用于清洁工作&#xff0c;然而&#xff0c;河北一家化工企业在使用无尘布进行擦拭时却发现产品表面留下了划痕&#xff0c;给生产过程带来了不小的困扰。针对这一问题&#xff0c;一家化工企业向供应商优斯特寻求解决方案&#xff0…

AI视频激光综合驱鸟装置:全自动、大范围驱鸟 | 真驱鸟科技

在电力系统中&#xff0c;鸟害事故已成为一个不容忽视的问题&#xff0c;直接威胁到电网的正常运行。但鸟类拥有极强的环境适应能力&#xff0c;它们能够在各种环境中生存和繁衍。这种强大的适应性使得传统的单一功能驱鸟器&#xff0c;在面对鸟类时显得力不从心&#xff0c;无…

苹果与百度合作,将在iPhone 16中使用生成式AI

3月25日&#xff0c;《科创板日报》消息&#xff0c;苹果将与百度进行技术合作&#xff0c;为今年即将发布的iPhone16、Mac系统和iOS 18提供生成式AI&#xff08;AIGC&#xff09;功能。 据悉&#xff0c;苹果曾与阿里巴巴以及另外一家国产大模型厂商进行了技术合作洽谈。最终…

#Linux系统编程(ps和kill命令)

&#xff08;一&#xff09;发行版&#xff1a;Ubuntu16.04.7 &#xff08;二&#xff09;记录&#xff1a; &#xff08;1&#xff09;ps命令 可以列出系统中当前运行的那些进程。 命令格式&#xff1a;ps 参数(常用-aux) 命令功能&#xff1a;用来显示当前进程的状态 常…

[STL]priority_queue类及反向迭代器的模拟实现

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 今日主菜&#xff1a; priority_queue类及反向迭代器 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;c大冒险 向着c&…

istio 设置 istio-proxy sidecar 的 resource 的 limit 和 request

方式一 修改 configmap 查看当前 sidecar 的 cpu 和 memory 的配额 在 istio-sidecar-injector 中查找,修改后重启 pod 可以生效(下面那个 proxy_init 配置不管,不知道是干嘛的) 方式二 如果是通过 iop 安装的 istio,可以修改 iop 文件中的配置 spec:values:global:…

程序员35岁真的就是危机吗?

前言 35岁被认为是程序员职业生涯的分水岭&#xff0c;许多程序员开始担忧自己的职业发展是否会受到年龄的限制。有人担心随着年龄的增长&#xff0c;技术更新换代的速度会使得资深程序员难以跟上&#xff1b;而另一些人则认为&#xff0c;丰富的经验和深厚的技术积累是年轻程…

一文带你精通MongDB

MongoDB是一个开源的NoSQL数据库&#xff0c;广泛用于各种应用程序&#xff0c;尤其是在处理大规模数据集时。它提供了高性能、高可用性和易扩展性等特点。 特点 文档导向&#xff1a;MongoDB存储的是类似JSON的文档&#xff0c;这使得数据模型非常灵活。高性能&#xff1a;M…

LeetCode 309—— 买卖股票的最佳时机含冷冻期

阅读目录 1. 题目2.解题思路3. 代码实现 1. 题目 2.解题思路 根据题意&#xff0c;每一天有这样几个状态&#xff1a;买入股票、卖出股票、冷冻期、持有股票&#xff0c;因此&#xff0c;我们假设 f 为每天这几个状态下对应的最大收益&#xff0c;由于持有股票时不知道是哪天买…

代码随想录day45:单调栈篇

文章目录 day45&#xff1a;单调栈篇739.每日温度496.下一个更大元素 I day45&#xff1a;单调栈篇 739.每日温度 class Solution {public int[] dailyTemperatures(int[] temperatures) {int n temperatures.length;int[] ans new int[n];Stack<Integer> stack new…

mysql 截取字符串及解析json

mysql 截取字符串sql SELECT substring_index(upload_pic_file,/,-1) from erp_reject_loss_approvalmysql 解析json json字符串解析 MySQL解析JSON字符串&#xff0c;可以使用MySQL的JSON函数。 使用JSON_EXTRACT函数来提取JSON字符串中的特定值。例如&#xff1a; SELE…

RocketMQ学习笔记:消息存储模型,持久化文件,过期文件删除

这是本人学习的总结&#xff0c;主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、消息存储结构1.1、CommitLog详解1.1.1、CommitLog存储的优点 1.2、ConsumeQueue详解1.3、Index详解 2、持久化文件3、过期文件删除机制3.1、判断过期文件3.2、删除的时机 1、消息存储结构…

Navicat15安装教程

直接开始Navicat15的安装教程 下载好上面的资源&#xff0c;解压后得到以下文件 1. 安装 Navicat ①双击 navicat150_premium_cs_x64.exe&#xff0c;准备安装 Navicat 15 ②无脑一直下一步就行&#xff0c;到下图画面就安装成功了。 2.安装完成以后&#xff0c;先不要启动…

第三十一天-Flask-ORM-sqlalchemy

目录 1.什么是ORM 2.flask-sqlalchemy 1安装 2.配置 3.数据库模型设计 ​编辑 4.插入修改删除 5.查询 1.什么是ORM 2.flask-sqlalchemy 1安装 2.配置 3.数据库模型设计 4.插入修改删除 5.查询

LangChain核心概念与组件

Chains Chains可以让你按照一定的顺序和逻辑来执行不同的任务。Chains有以下四种类型&#xff1a; 类型作用LLMChain用于在语言模型周围添加一些功能的简单Chain&#xff0c;它由一个PromptTemplate和一个语言模型&#xff08;LLM或chat model&#xff09;组成&#xff0c;它…

python(django)之单一接口管理功能后台开发

1、创建数据模型 在apitest/models.py下加入以下代码 class Apis(models.Model):Product models.ForeignKey(product.Product, on_deletemodels.CASCADE, nullTrue)# 关联产品IDapiname models.CharField(接口名称, max_length100)apiurl models.CharField(接口地址, max_…

住在我心里的猴子:焦虑那些事儿 - 三余书屋 3ysw.net

精读文稿 您好&#xff0c;本期我们解读的是《住在我心里的猴子》。这是一本由患有焦虑症的作家所著&#xff0c;关于焦虑症的书。不仅如此&#xff0c;作者的父母和哥哥也都有焦虑症&#xff0c;而作者的母亲后来还成为了治疗焦虑症的专家。这本书的中文版大约有11万字&#x…