# !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')
【无标题】
最新推荐文章于 2024-10-09 22:27:58 发布