【无标题】

# !pip3 install pydub
# !pip3 install librosa
from pydub import AudioSegment
import os
import librosa
import pandas as pd
import numpy as np
from tqdm import tqdm
import pandas as pd
import numpy as np
import os
from sklearn.model_selection import StratifiedKFold
from lightgbm.sklearn import LGBMClassifier
from sklearn.metrics import f1_score, roc_auc_score
from sklearn.ensemble import RandomForestClassifier,VotingClassifier
from xgboost import XGBClassifier
import time
from scipy.io import wavfile
from math import pi

import matplotlib.pyplot as plt
from pandarallel import pandarallel
pandarallel.initialize(progress_bar=True)

import arlpy.uwa as au
import arlpy.uwapm as aup
import arlpy.comms as ac
# 绘图工具包



def equlization(sig_input, sig_expect, mu, M):
    '''
    param sig_input: 输入待均衡信号
    param sig_expect: 期望信号
    param mu: 均衡器步长
    param M: 均衡器长度
    return: (均衡后信号, 均方误差)
    '''
    n = sig_expect.size
    W = np.zeros(M)
    error = np.zeros(n)
    sig_output = np.zeros(n)
    if sig_input.size < n + M:
        sig_input = np.pad(sig_input, (0, n+M-sig_input.size))
    for i in range(n):
        input1 = sig_input[i:i+M]
        output = np.dot(W.T, input1)
        sig_output[i] = output
        error[i] = sig_expect[i] - output
        W = W + mu * error[i] * input1
    
    return sig_output



M = sps = 1
mu = 1 / 128
fc = 1000
fs = 128 * fc

header_nums = 20

ts = np.arange(0, 1, 1 / fs)



sig_expect = np.sin(np.dot(2 * pi * fc, ts))



sr = 128000
dicts = {}

def deal_values(x, y, sig_expect, mu, M):
    ss = equlization(x, sig_expect, mu, M)
    sss = np.array_split(ss, 1000)
    sss = sss[:header_nums]
    
    pre_label = [1 if f[1] > f[0] else 0 for f in sss]

    right = [1 if f1 == f2 else 0 for f1, f2 in zip(y, pre_label)]        
    

    return sum(right)
    
def nor(x):
    '''
    param x: 带归一化信号
    return: 已归一化信号
    '''
    alpha = np.sum(np.square(x))/x.size
    return x/np.sqrt(alpha)



series = []
names = []
real_labels = []
locs = []
sig_exps = []

for ff in tqdm(os.listdir(test_path)[:]):
    
    name = ff.split('.')[0]
    values = librosa.core.load(test_path + f'{name}.wav', sr = sr)[0]
    real_label = pd.read_csv(test_label_path + f'leader_{name}.txt', header = None)
#     print('real_label: ', len(real_label))


    for f in (range(0, 500, 16)):
        start = 66000

        ss = values[start + f: start + f + 128 * 1000]
        
        sig_exp = ac.upconvert(x=ss, sps= sps, fs= fs, fc= fc)
        
        sig_exp = nor(np.real(sig_exp))
        
        sig_exps.append(sig_exp)
        
        
        series.append(ss)
        
        names.append(name)
        
        real_labels.append([f for f in real_label[0]])
        
        locs.append(start + f)
                

print('pd.DataFrame...')
df = pd.DataFrame({
    'name': names,
    'value': series,
    'sig_exp': sig_exps,
    'real_label': real_labels,
    'loc': locs
})

print('apply...')


df['right_nums'] = df.parallel_apply(lambda x: deal_values(x['value'], x['real_label'], x['sig_exp'], mu, M), axis = 1)
    


df.head()


df.sort_values(by = ['name','right_nums'], ascending = False, inplace = True)
temp = df.drop_duplicates(subset = ['name'])

# temp.to_csv('./result.csv', index = False)

rights = temp['right_nums'].sum() / (100 * 100)
print('rights: ', rights)

dicts = {}

for f1, f2 in zip(temp['name'], temp['loc']):
    dicts[f1] = f2
dicts


sr = 128000

for f in tqdm(os.listdir(test_path)[:]):
    
    name = f.split('.')[0]
    values = librosa.core.load(test_path + f'{name}.wav', sr = sr)[0]
    
    values = values[dicts[name]: dicts[name] + 128 * 1000]
    
    sig_exp = ac.upconvert(x=values, sps= sps, fs= 0, fc= 0)

    sig_exp = nor(np.real(sig_exp))

    values = equlization(values, sig_exp, mu, M)
    
    sss = np.array_split(values, 1000)

    pre_label = [1 if f[1] > f[0] else 0 for f in sss]
#     pre_label = [1 if f[1] > f[0] or f[2] > f[0] 
#                    or f[3] > f[0] or f[4] > f[0] else 0 for f in sss]
    
    real_label = pd.read_csv(test_label_path + f'leader_{name}.txt', header = None)[0].values
    
    result = list(real_label) + pre_label[header_nums:]
    
    pd.DataFrame(result).to_csv(f'../submit/{name}.txt', index = False, header = None)
    
    
if os.path.exists('../submit/.DS_Store'):
    os.remove('../submit/.DS_Store')
    print('Done')
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值