✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。
✅ 具体问题可以私信或扫描文章底部二维码。
(1)路噪主动控制系统的参考信号选取方法研究。路噪主动控制系统的效能很大程度上取决于参考信号的选择。为了提高路噪主动控制的效果,本文选择了某合资品牌纯电动SUV作为试验车,进行了车身振动信号与车内噪声信号的全面数据采集。这些数据涵盖了不同路面条件、不同车速以及不同驾驶模式下的情况,确保了数据的多样性和代表性。通过对采集到的数据进行多重相干性分析,我们确定了振动信号与噪声信号之间具有较高相干性的频段范围,这些频段通常集中在500 Hz以下,是路噪能量的主要集中区域。接下来,采用主成分分析法对不同振动信号的特征值进行了提取,绘制了特征值曲线图。通过分析特征值曲线,我们确定了最能代表路噪特性的参考信号数量。考虑到路噪主动控制系统的实际降噪频带限制,我们利用振动信号与噪声信号的多重相干函数构造了一个费舍尔信息矩阵。这个矩阵不仅反映了不同振动信号与噪声信号之间的相关性,还帮助我们识别出了最具代表性的参考信号集。最终选定的参考信号集不仅与车内噪声信号具有高度的多重相干性,而且能够覆盖路噪的主要频段,为后续的控制算法提供了可靠的基础。
(2)路噪主动控制系统中自适应滤波算法的性能优化研究。为了进一步提升路噪主动控制系统的降噪能力,本文提出了一系列创新的自适应滤波算法优化策略。首先,引入了广义滤波参考信号矩阵与滤波器权系数矩阵分解的概念。这一概念的核心在于将同一个自适应滤波器的权系数分解成多个部分,每个部分可以通过不同的自适应算法或同一算法的不同参数条件进行更新。这种方法使得不同算法或参数的优势得以结合,提高了滤波器的灵活性和适应性。此外,设计了一种步长自搜索策略,通过实时监测滤波器参数的变化,自动调整步长大小,避免了传统算法中需要预先设定固定步长的局限。为了更好地匹配路噪传递路径的特点,我们还设计了一种步长加权矩阵,为不同振动信号对应的自适应滤波器分配不同的步长权重,确保每个滤波器都能在其最优状态下工作。针对次级通路传递函数估计过程中可能出现的误差,本文提出了一种纯时延次级通路传递函数模型,取代了传统的估计方法。这种模型不仅简化了计算,还消除了次级通路传递函数的幅频响应对自适应算法的不利影响。综合以上策略,我们开发了一种步长自搜索矩阵分解归一化滤波-x最小均方(SS-MD-NFxLMS)算法。通过建立仿真模型并在多种工况下进行测试,结果表明该算法显著提高了路噪主动控制系统的降噪能力,尤其是在500 Hz以下的低频段。
(3)路噪主动控制系统中自适应滤波算法的计算复杂度优化研究。尽管SS-MD-NFxLMS算法在降噪性能上取得了显著进展,但其计算复杂度仍然较高,限制了其实时应用的可能性。为此,本文提出了一种基于无延迟子带部分更新的步长自搜索矩阵分解归一化滤波-x最小均方(DPUS-SS-MD-NFxLMS)算法。该算法的核心在于引入了无延迟子带结构,并设计了一种部分子带更新策略。具体来说,通过将噪声信号分解成多个子带,只处理目标降噪频带内的信号,大大减少了计算量。同时,结合步长自搜索策略和纯时延次级通路传递函数,进一步优化了算法的性能。我们对DPUS-SS-MD-NFxLMS算法的计算成本进行了详细分析,并设计了合适的原型低通滤波器。通过建立仿真模型并进行测试,结果表明,该算法在低计算复杂度条件下仍能实现显著优于传统算法的降噪效果,尤其在50~450 Hz的频带范围内表现突出。这不仅提高了路噪主动控制系统的实时性,还降低了硬件资源的需求,为实际工程应用提供了有力支持。
最后,基于课题组搭建的空间主动噪声控制试验平台,我们采用了预先采集的车身振动信号与车内噪声信号,进行了路噪主动控制算法的试验研究。试验结果表明,所提出的路噪主动控制算法在50~450 Hz的频带范围内实现了明显的降噪效果,关键频带内的降噪量达到了1.77~11.61 dB。与传统路噪主动控制算法相比,所提出的算法在降噪性能上表现出显著优势,证明了其优越性和先进性。这些研究成果不仅为路噪主动控制系统的实际工程开发奠定了坚实基础,也为提升纯电动汽车
import numpy as np
from scipy.signal import butter, lfilter, stft
# 定义路噪主动控制系统的参考信号选取函数
def select_reference_signals(vibration_data, noise_data):
# vibration_data: 车身振动信号数据
# noise_data: 车内噪声信号数据
# 多重相干性分析
coherence_matrix = np.zeros((vibration_data.shape[1], noise_data.shape[1]))
for i in range(vibration_data.shape[1]):
for j in range(noise_data.shape[1]):
f, Cxy = coherence(vibration_data[:, i], noise_data[:, j], fs=1000)
coherence_matrix[i, j] = np.mean(Cxy[f < 500])
# 主成分分析法
eigenvalues, eigenvectors = np.linalg.eig(coherence_matrix)
sorted_indices = np.argsort(eigenvalues)[::-1]
selected_signals = vibration_data[:, sorted_indices[:3]] # 选择前3个主成分
return selected_signals
# 定义步长自搜索策略
def step_size_self_search(error_signal, step_size, alpha=0.1):
# error_signal: 误差信号
# step_size: 当前步长
# alpha: 学习率
step_size = step_size + alpha * np.sign(error_signal)
step_size = np.clip(step_size, 0.001, 0.1) # 限制步长范围
return step_size
# 定义纯时延次级通路传递函数
def pure_delay_secondary_path(delay_samples):
# delay_samples: 延迟样本数
secondary_path = np.zeros(delay_samples)
secondary_path[-1] = 1.0
return secondary_path
# 定义步长自搜索矩阵分解归一化滤波-x最小均方算法
class SS_MDNFxLMS:
def __init__(self, num_taps, step_size, reference_signals, secondary_path):
self.num_taps = num_taps
self.step_size = step_size
self.reference_signals = reference_signals
self.secondary_path = secondary_path
self.filter_weights = np.zeros((num_taps, reference_signals.shape[1]))
def update(self, input_signal, desired_signal, dt):
# input_signal: 输入信号
# desired_signal: 目标信号
# dt: 时间步长
# 计算滤波器输出
filtered_output = np.sum(self.filter_weights * input_signal, axis=1)
# 计算误差信号
error_signal = desired_signal - filtered_output
# 更新步长
self.step_size = step_size_self_search(error_signal, self.step_size)
# 更新滤波器权系数
for i in range(self.reference_signals.shape[1]):
self.filter_weights[:, i] += self.step_size * error_signal * input_signal[:, i]
# 应用纯时延次级通路传递函数
delayed_output = np.convolve(filtered_output, self.secondary_path, mode='same')
return delayed_output
# 定义基于无延迟子带部分更新的步长自搜索矩阵分解归一化滤波-x最小均方算法
class DPUS_SSMDFxLMS(SS_MDNFxLMS):
def __init__(self, num_taps, step_size, reference_signals, secondary_path, target_bands):
super().__init__(num_taps, step_size, reference_signals, secondary_path)
self.target_bands = target_bands
self.subband_filters = self.design_subband_filters()
def design_subband_filters(self):
# 设计子带滤波器
subband_filters = []
for band in self.target_bands:
lowcut, highcut = band
b, a = butter(4, [lowcut, highcut], btype='band', fs=1000)
subband_filters.append((b, a))
return subband_filters
def update(self, input_signal, desired_signal, dt):
# 将输入信号和目标信号分解到子带
subband_input_signals = []
subband_desired_signals = []
for b, a in self.subband_filters:
subband_input_signals.append(lfilter(b, a, input_signal))
subband_desired_signals.append(lfilter(b, a, desired_signal))
# 只处理目标降噪频带内的信号
for i, band in enumerate(self.target_bands):
if band in self.target_bands:
super().update(subband_input_signals[i], subband_desired_signals[i], dt)
# 计算滤波器输出
filtered_output = np.sum(self.filter_weights * input_signal, axis=1)
# 应用纯时延次级通路传递函数
delayed_output = np.convolve(filtered_output, self.secondary_path, mode='same')
return delayed_output
# 示例:路噪主动控制算法的应用
def active_noise_control(vibration_data, noise_data, target_bands):
# 1. 选择参考信号
reference_signals = select_reference_signals(vibration_data, noise_data)
# 2. 初始化算法
num_taps = 64
step_size = 0.01
secondary_path = pure_delay_secondary_path(10)
algorithm = DPUS_SSMDFxLMS(num_taps, step_size, reference_signals, secondary_path, target_bands)
# 3. 进行路噪主动控制
filtered_noise = algorithm.update(reference_signals, noise_data, dt=0.01)
return filtered_noise