Python实现声音频域特征提取

声信号特征提取是运用神经网络识别的前提步骤,为了提取目标的特征值,将时域信号转化成频域,不同目标在不同的频率中的能量分布不一致,因此,将宽频传感器的输入信号利用多段滤波器分解成多频段信号,进行特征提取、建模,并采用BP模型训练和学习,从而优化声探测系统的识别能力。本项目提取声音信号频域特征。话不多说,直接上代码。代码保证可直接运行无bug,需要数据集私信我。

import numpy as np
import matplotlib.pyplot as plt
from scipy.fftpack import fft

data_1=[]
caiyang=open('D:\PycharmProjects\data\\pa5.txt', 'r', encoding='utf-8')
a=caiyang.read().split(' ')
data_1 = [c.rstrip() for c in a]
data1_1=[]
for i in data_1:
        i = int(hex(int(i, 16)), 16)
        data1_1.append(i)
data1 = data1_1[0::4]
data3_1 = data1_1[1::4]
data4_1 = data1_1[2::4]
data5_1 = data1_1[3::4]
x = np.linspace(1, len(data1),24000)
y = data1
plt.scatter(list(x), y, s=0.2)
plt.title('time result')
plt.show()

import numpy as np
from numpy.fft import fft
def fft_calc(x, f_s, x_size, nfft):
    w = np.hanning(nfft)                            
    cnt = x_size // nfft                            
    if cnt == 0:                                 
        x_pad = np.pad(x, (0, nfft - x_size))
    else:
        x_pad = np.pad(x, (0, x_size - cnt * nfft))
    cnt = len(x_pad) // nfft                           
    tmp = []
    for i in range(cnt):                          
        p = fft(w * x_pad[i * nfft:(i+1) * nfft])       
        tmp.append(p)                              
    fft_result = np.mean(tmp, axis=0)               
    amp = abs(fft_result)*2 / (nfft / 2)
    amp[0] /= 2
    amp_half = amp[:int(len(amp) / 2)+1]
    freq = np.arange(int(len(amp) / 2)+1) * f_s/nfft
    return amp_half, freq
pi = np.pi  # 圆周率
N=24000
fs=12000#采样频率
T = 1/12000#周期
tn = np.arange(0,T*N,T)
nfft = fs
(amp,freq)=fft_calc(data1,fs,N,nfft)
print(len(freq))
amp[0]=0
amp[1]=0
amp[2]=0
amp[3]=0
amp[4]=0
amp[5]=0
amp[6]=0
amp[7]=0
amp[8]=0
amp[9]=0
amp[10]=0
amp[50]=0
plt.bar(freq, amp/2,width=20)
plt.subplot(111)   #频谱
plt.plot(freq, amp, color="blue")
plt.title('FFT result')
plt.xlabel('Freq /Hz')
plt.ylabel('urad/Hz')
plt.grid(which='both', axis='both')
plt.show()

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值