1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| """ 座舱声学环境分类器 """ class AcousticEnvironmentClassifier: """ 分类座舱声学环境→适配DMS参数 场景: - 安静(停车) - 城市低速(引擎+路面) - 高速(风噪为主) - 恶劣天气(雨声) - 嘈杂(乘客交谈) """ def __init__(self): self.categories = { 'quiet': {'noise_db': '<40', 'snr': '>20dB'}, 'city': {'noise_db': '40-60', 'snr': '10-20dB'}, 'highway': {'noise_db': '60-75', 'snr': '5-15dB'}, 'rain': {'noise_db': '50-65', 'snr': '5-10dB'}, 'noisy_cabin': {'noise_db': '55-70', 'snr': '5-10dB'} } def classify(self, audio_features: dict) -> dict: """分类声学环境""" db = audio_features.get('noise_level', 50) spectral_centroid = audio_features.get('spectral_centroid', 1000) if db < 40: env = 'quiet' elif db < 60: if spectral_centroid > 3000: env = 'rain' else: env = 'city' elif db < 75: if spectral_centroid < 500: env = 'highway' else: env = 'noisy_cabin' else: env = 'noisy_cabin' return { 'environment': env, 'noise_level': db, 'dms_adjustments': self._get_adjustments(env) } def _get_adjustments(self, env): adjustments = { 'quiet': {'mic_gain': 'low', 'vad_threshold': 'low', 'ser_confidence': 'high'}, 'city': {'mic_gain': 'medium', 'vad_threshold': 'medium', 'ser_confidence': 'medium'}, 'highway': {'mic_gain': 'high', 'vad_threshold': 'high', 'ser_confidence': 'low', 'beamforming': 'MVDR'}, 'rain': {'mic_gain': 'high', 'vad_threshold': 'high', 'ser_confidence': 'low', 'filter': 'highpass'}, 'noisy_cabin': {'mic_gain': 'high', 'vad_threshold': 'high', 'ser_confidence': 'low', 'beamforming': 'GSC'} } return adjustments.get(env, {})
|