:從信號處理到模型性能提升)
在實際科研和工程實踐中將頻域分析與特征融合技術結合是提升模型性能、沖擊高水平學術期刊如1區(qū)TOP期刊的有效策略。許多研究生在開展相關工作時常常面臨幾個核心痛點如何將時域信號有效地轉換到頻域轉換后哪些頻域特征具有區(qū)分度如何將時域、頻域乃至其他域的特征進行有效融合而非簡單拼接融合后的特征又如何輸入到下游分類或回歸模型中本文將圍繞“頻域分析特征融合”這一技術主線以一個具體的故障診斷或生理信號分類場景為例手把手帶你從數(shù)據(jù)預處理開始完成特征提取、融合策略設計、模型構建與結果驗證的全流程并深入探討其中的關鍵參數(shù)、常見陷阱與優(yōu)化方向。無論你是計算機、生物醫(yī)學工程還是機械故障預測方向的研究生這套方法都能為你的論文核心創(chuàng)新點提供扎實的技術實現(xiàn)路徑。1. 理解頻域分析與特征融合的核心價值在開始代碼之前必須厘清基本概念和設計動機這是決定后續(xù)工作能否達到預期效果的基礎。1.1 為什么需要頻域分析時域信號直接反映了觀測值隨時間的變化但很多關鍵信息如周期性、共振頻率、能量分布在時域中并不直觀。例如一臺旋轉機械的振動信號時域波形可能只是雜亂無章的波動但通過傅里葉變換FFT轉換到頻域后可以清晰地看到在特定轉速對應的頻率點出現(xiàn)能量峰值這很可能就是故障特征頻率。頻域分析的核心目的是從另一個維度揭示信號的內在結構。常用的變換方法包括快速傅里葉變換FFT最常用將信號分解為不同頻率的正弦波得到幅度譜和相位譜。短時傅里葉變換STFT適用于非平穩(wěn)信號能獲得信號頻率隨時間的變化情況得到時頻譜圖。小波變換Wavelet Transform在時域和頻域都具有良好的局部化性質適合分析瞬態(tài)、突變信號。選擇哪種方法取決于你的信號特性平穩(wěn)/非平穩(wěn)以及你關心的特征是全局頻率分布還是時變頻率特性。1.2 特征融合的本質與層次特征融合不是簡單地將時域特征數(shù)組和頻域特征數(shù)組在維度上連接Concatenate。盲目的拼接會導致特征空間維度爆炸、引入大量冗余甚至噪聲反而降低模型性能。有效的特征融合應當是有設計的、層次化的信息整合數(shù)據(jù)級融合最底層直接對原始數(shù)據(jù)進行融合如多傳感器數(shù)據(jù)對齊后融合本例中不常用。特征級融合我們討論的重點。分別從時域、頻域甚至時頻域提取特征后通過策略進行融合。關鍵在于特征選擇與降維。決策級融合分別用不同特征訓練模型再對多個模型的預測結果進行綜合如投票、加權平均。這屬于模型集成范疇。本文聚焦于特征級融合。其核心挑戰(zhàn)在于如何保證融合后的特征集既能保留各原始特征域的有效信息又能剔除冗余形成更具判別力的新特征表示。2. 環(huán)境準備與項目結構我們以一個公開數(shù)據(jù)集為例例如凱斯西儲大學CWRU的軸承故障數(shù)據(jù)集這是一個經(jīng)典的故障診斷基準數(shù)據(jù)集。你也可以替換為自己的心電ECG、腦電EEG或振動信號數(shù)據(jù)。2.1 軟件環(huán)境與依賴庫確保你的Python環(huán)境包含以下核心庫。建議使用Anaconda創(chuàng)建獨立的虛擬環(huán)境。# 創(chuàng)建并激活環(huán)境 (可選) conda create -n frequency_fusion python3.8 conda activate frequency_fusion # 安裝核心依賴 pip install numpy scipy pandas matplotlib seaborn pip install scikit-learn # 用于特征處理與機器學習模型 pip install pywt # 用于小波變換 pip install tsfresh # 用于自動提取大量時域特征 (可選但強大) # 如果使用深度學習模型 pip install torch # 或 pip install tensorflow keras2.2 項目目錄結構建議一個清晰的結構有助于管理代碼、數(shù)據(jù)和實驗記錄。frequency_feature_fusion_project/ │ ├── data/ │ ├── raw/ # 存放原始數(shù)據(jù) │ ├── processed/ # 存放處理后的數(shù)據(jù)分段、濾波后 │ └── features/ # 存放提取出的特征文件(.csv, .npy) │ ├── src/ │ ├── data_preprocessing.py # 數(shù)據(jù)加載、分段、標準化 │ ├── feature_extraction.py # 時域、頻域特征提取函數(shù) │ ├── feature_fusion.py # 特征融合策略實現(xiàn) │ ├── model.py # 機器學習或深度學習模型定義 │ └── utils.py # 工具函數(shù)繪圖、評估等 │ ├── notebooks/ │ └── exploratory_analysis.ipynb # 用于數(shù)據(jù)探索和實驗 │ ├── configs/ │ └── params.yaml # 超參數(shù)配置文件可選 │ ├── outputs/ │ ├── figures/ # 保存生成的圖表 │ └── results/ # 保存模型評估結果 │ └── main.py # 主程序入口3. 從原始信號到特征矩陣完整流程實現(xiàn)本節(jié)將分步實現(xiàn)一個完整的流程。我們假設你已經(jīng)將CWRU數(shù)據(jù)下載到data/raw/目錄下并已按故障類型和負載整理了文件。3.1 數(shù)據(jù)預處理與分段原始振動信號通常很長需要被分割成多個固定長度的樣本樣本窗口每個樣本對應一個標簽如健康、內圈故障、外圈故障。# src/data_preprocessing.py import numpy as np import pandas as pd from scipy import signal import os def load_and_segment_data(file_path, label, sample_length1024, overlap_ratio0.5): 加載數(shù)據(jù)文件并將其分割成固定長度的小樣本。 參數(shù): file_path: 數(shù)據(jù)文件路徑。 label: 該文件對應的類別標簽。 sample_length: 每個樣本的長度如1024個點。 overlap_ratio: 重疊率0表示無重疊0.5表示50%重疊。 返回: samples: 樣本數(shù)組形狀為 (n_samples, sample_length)。 labels: 標簽數(shù)組形狀為 (n_samples,)。 # 假設數(shù)據(jù)是單列文本文件 data np.loadtxt(file_path) step int(sample_length * (1 - overlap_ratio)) if step 0: step 1 n_samples (len(data) - sample_length) // step 1 samples np.zeros((n_samples, sample_length)) labels np.full(n_samples, label) for i in range(n_samples): start i * step end start sample_length samples[i] data[start:end] return samples, labels def normalize_samples(samples, methodz-score): 對樣本進行歸一化消除量綱影響。 參數(shù): samples: 輸入樣本數(shù)組 (n_samples, n_points)。 method: 歸一化方法z-score標準化或 minmax歸一化。 返回: normalized_samples: 歸一化后的樣本。 if method z-score: mean np.mean(samples, axis1, keepdimsTrue) std np.std(samples, axis1, keepdimsTrue) std[std 0] 1 # 防止除零 return (samples - mean) / std elif method minmax: min_val np.min(samples, axis1, keepdimsTrue) max_val np.max(samples, axis1, keepdimsTrue) range_val max_val - min_val range_val[range_val 0] 1 return (samples - min_val) / range_val else: raise ValueError(歸一化方法必須是 z-score 或 minmax) # 示例批量處理一個文件夾的數(shù)據(jù) def process_data_folder(raw_data_dir, output_dir, sample_length1024): all_samples [] all_labels [] label_map {} # 可以映射故障類型到數(shù)字標簽 # 遍歷文件假設文件名包含了標簽信息 for idx, filename in enumerate(os.listdir(raw_data_dir)): if filename.endswith(.txt): filepath os.path.join(raw_data_dir, filename) # 簡單示例從文件名解析標簽實際需根據(jù)數(shù)據(jù)集調整 if normal in filename: label 0 elif inner in filename: label 1 elif outer in filename: label 2 else: label 3 label_map[label] filename samples, labels load_and_segment_data(filepath, label, sample_length) samples normalize_samples(samples, methodz-score) all_samples.append(samples) all_labels.append(labels) # 合并所有數(shù)據(jù) X np.vstack(all_samples) y np.hstack(all_labels) # 保存處理后的數(shù)據(jù) np.save(os.path.join(output_dir, segmented_samples.npy), X) np.save(os.path.join(output_dir, segmented_labels.npy), y) print(f數(shù)據(jù)處理完成。樣本形狀{X.shape}標簽形狀{y.shape}) return X, y, label_map關鍵解釋與檢查點樣本長度 (sample_length)需根據(jù)信號特性選擇。太短可能丟失周期信息太長則樣本數(shù)減少且包含過多無關信息。對于軸承故障1024或2048是常見起點。重疊率 (overlap_ratio)增加重疊可以生成更多樣本緩解數(shù)據(jù)不足但會導致樣本間相關性增強。通常設置在0到0.75之間。歸一化標準化Z-Score能消除信號絕對幅值的影響使模型更關注波形形狀和頻率成分在振動信號處理中更常用。檢查點運行后打印X.shape應類似(n_samples, 1024)??梢暬瘞讉€不同類別的樣本觀察波形是否有肉眼可見的差異。3.2 時域特征提取時域特征計算簡單物理意義明確。我們可以從每個樣本窗口中提取一組統(tǒng)計特征。# src/feature_extraction.py import numpy as np from scipy import stats def extract_time_domain_features(signal_segment): 從一個信號片段中提取時域統(tǒng)計特征。 參數(shù): signal_segment: 一維數(shù)組一個樣本的信號數(shù)據(jù)。 返回: features_dict: 包含時域特征的字典。 features {} # 有量綱指標 features[peak] np.max(np.abs(signal_segment)) features[peak_to_peak] np.ptp(signal_segment) # 峰峰值 features[mean] np.mean(signal_segment) features[std] np.std(signal_segment) # 標準差 features[rms] np.sqrt(np.mean(signal_segment**2)) # 均方根值 features[skewness] stats.skew(signal_segment) # 偏度 features[kurtosis] stats.kurtosis(signal_segment) # 峭度 # 無量綱指標 (對負載、轉速變化相對不敏感) features[crest_factor] features[peak] / features[rms] if features[rms] ! 0 else 0 # 峰值因子 features[clearance_factor] features[peak] / (np.mean(np.sqrt(np.abs(signal_segment)))**2) if np.mean(np.sqrt(np.abs(signal_segment))) ! 0 else 0 # 裕度因子 features[shape_factor] features[rms] / np.mean(np.abs(signal_segment)) if np.mean(np.abs(signal_segment)) ! 0 else 0 # 波形因子 features[impulse_factor] features[peak] / np.mean(np.abs(signal_segment)) if np.mean(np.abs(signal_segment)) ! 0 else 0 # 脈沖因子 # 其他 features[energy] np.sum(signal_segment**2) return features # 批量提取 def batch_extract_time_features(samples): 批量提取時域特征。 參數(shù): samples: 樣本數(shù)組 (n_samples, n_points)。 返回: time_feature_matrix: 時域特征矩陣 (n_samples, n_time_features)。 time_feature_names: 時域特征名稱列表。 n_samples samples.shape[0] feature_list [] # 先提取一個樣本獲取特征名 sample_feat extract_time_domain_features(samples[0]) feature_names list(sample_feat.keys()) n_features len(feature_names) time_feature_matrix np.zeros((n_samples, n_features)) for i in range(n_samples): feat_dict extract_time_domain_features(samples[i]) time_feature_matrix[i] [feat_dict[name] for name in feature_names] return time_feature_matrix, feature_names3.3 頻域特征提取這是核心步驟。我們通過FFT獲取信號的頻譜再從頻譜中提取特征。# src/feature_extraction.py (續(xù)) def extract_frequency_domain_features(signal_segment, sampling_rate): 從一個信號片段中提取頻域特征。 假設 signal_segment 已經(jīng)過預處理如去趨勢、加窗。 參數(shù): signal_segment: 一維數(shù)組。 sampling_rate: 信號的采樣頻率 (Hz)。 返回: features_dict: 包含頻域特征的字典。 features {} n len(signal_segment) # 執(zhí)行FFT fft_vals np.fft.fft(signal_segment) # 取絕對值得到幅度譜 fft_amp np.abs(fft_vals[:n//2]) # 取單邊譜 # 計算頻率軸 freqs np.fft.fftfreq(n, 1/sampling_rate)[:n//2] # 基本統(tǒng)計量 features[freq_mean] np.mean(fft_amp) features[freq_std] np.std(fft_amp) features[freq_rms] np.sqrt(np.mean(fft_amp**2)) # 頻譜重心 (Frequency Center) features[fc] np.sum(freqs * fft_amp) / np.sum(fft_amp) if np.sum(fft_amp) ! 0 else 0 # 均方頻率 (Mean Square Frequency) features[msf] np.sum((freqs**2) * fft_amp) / np.sum(fft_amp) if np.sum(fft_amp) ! 0 else 0 # 頻率方差 (Frequency Variance) features[freq_var] np.sum(((freqs - features[fc])**2) * fft_amp) / np.sum(fft_amp) if np.sum(fft_amp) ! 0 else 0 # 頻譜峰度與偏度 features[freq_skewness] stats.skew(fft_amp) features[freq_kurtosis] stats.kurtosis(fft_amp) # 頻帶能量比 (示例劃分低頻、中頻、高頻) total_energy np.sum(fft_amp**2) low_band_mask freqs sampling_rate * 0.25 # 假設低頻段為0-0.25倍采樣率 mid_band_mask (freqs sampling_rate * 0.25) (freqs sampling_rate * 0.5) high_band_mask freqs sampling_rate * 0.5 features[low_band_energy_ratio] np.sum(fft_amp[low_band_mask]**2) / total_energy if total_energy ! 0 else 0 features[mid_band_energy_ratio] np.sum(fft_amp[mid_band_mask]**2) / total_energy if total_energy ! 0 else 0 features[high_band_energy_ratio] np.sum(fft_amp[high_band_mask]**2) / total_energy if total_energy ! 0 else 0 # 主頻 (幅度最大的頻率) if len(fft_amp) 0: features[main_freq] freqs[np.argmax(fft_amp)] else: features[main_freq] 0 return features def batch_extract_freq_features(samples, sampling_rate): 批量提取頻域特征。 參數(shù): samples: 樣本數(shù)組 (n_samples, n_points)。 sampling_rate: 采樣頻率。 返回: freq_feature_matrix: 頻域特征矩陣 (n_samples, n_freq_features)。 freq_feature_names: 頻域特征名稱列表。 n_samples samples.shape[0] # 可選對每個樣本加窗減少頻譜泄漏 window np.hanning(samples.shape[1]) windowed_samples samples * window # 獲取特征名 sample_feat extract_frequency_domain_features(windowed_samples[0], sampling_rate) feature_names list(sample_feat.keys()) n_features len(feature_names) freq_feature_matrix np.zeros((n_samples, n_features)) for i in range(n_samples): feat_dict extract_frequency_domain_features(windowed_samples[i], sampling_rate) freq_feature_matrix[i] [feat_dict[name] for name in feature_names] return freq_feature_matrix, feature_names關鍵參數(shù)與解釋采樣頻率 (sampling_rate)必須準確知道你的數(shù)據(jù)采樣頻率Hz這是頻域分析的基礎。CWRU數(shù)據(jù)通常為12kHz或48kHz。加窗直接對有限長度信號做FFT會引入頻譜泄漏能量擴散到其他頻率。乘以漢寧窗Hanning等窗函數(shù)可以緩解此問題但會輕微降低頻率分辨率。對于初步分析加窗是推薦做法。頻帶劃分low_band_energy_ratio等特征需要根據(jù)先驗知識劃分頻帶。例如軸承故障特征頻率通常位于中高頻。你可以根據(jù)故障特征頻率理論值來動態(tài)劃分頻帶這比固定比例更有效。3.4 特征融合策略實現(xiàn)現(xiàn)在我們有time_feature_matrix(形狀: [n_samples, n_time_feat]) 和freq_feature_matrix(形狀: [n_samples, n_freq_feat])。簡單的拼接是第一步但遠非終點。# src/feature_fusion.py import numpy as np from sklearn.decomposition import PCA from sklearn.feature_selection import SelectKBest, f_classif from sklearn.preprocessing import StandardScaler def simple_concatenate(time_features, freq_features): 直接拼接時域和頻域特征。 fused_features np.concatenate([time_features, freq_features], axis1) print(f拼接后特征維度: {fused_features.shape}) return fused_features def weighted_fusion(time_features, freq_features, time_weight0.5, freq_weight0.5): 加權融合。可以對不同特征域賦予不同權重但權重的選擇需要依據(jù)如基于特征重要性。 這里僅為示例實際中更推薦在特征選擇后對重要特征進行加權。 # 首先分別標準化 scaler_t StandardScaler() scaler_f StandardScaler() time_norm scaler_t.fit_transform(time_features) freq_norm scaler_f.fit_transform(freq_features) fused_features time_weight * time_norm freq_weight * freq_norm return fused_features def pca_fusion(time_features, freq_features, n_components0.95): 先拼接再用PCA降維融合。PCA可以去除線性相關性保留主要信息。 參數(shù): n_components: 可以是整數(shù)指定維度或浮點數(shù)保留方差的百分比。 concatenated np.concatenate([time_features, freq_features], axis1) scaler StandardScaler() concatenated_scaled scaler.fit_transform(concatenated) pca PCA(n_componentsn_components) fused_features_pca pca.fit_transform(concatenated_scaled) print(fPCA融合后維度: {fused_features_pca.shape}解釋方差比: {np.sum(pca.explained_variance_ratio_):.4f}) return fused_features_pca, pca def selective_fusion_by_importance(time_features, freq_features, y, k20): 基于特征重要性如ANOVA F值進行選擇性融合。 1. 拼接所有特征。 2. 計算每個特征與標簽的相關性/重要性。 3. 選擇Top K個最重要的特征進行融合。 concatenated np.concatenate([time_features, freq_features], axis1) scaler StandardScaler() concatenated_scaled scaler.fit_transform(concatenated) # 使用SelectKBest進行特征選擇 selector SelectKBest(score_funcf_classif, kmin(k, concatenated_scaled.shape[1])) selected_features selector.fit_transform(concatenated_scaled, y) # 獲取被選中的特征索引和名稱需要傳入特征名列表 selected_indices selector.get_support(indicesTrue) print(f選擇了 {len(selected_indices)} 個最重要的特征。) return selected_features, selected_indices注意加權融合中的權重設置非常關鍵。隨意設置如0.5/0.5通常沒有理論依據(jù)。更好的做法是先分別用純時域和純頻域特征訓練一個基線模型根據(jù)其性能或通過特征重要性分析如基于樹模型的特征重要性來動態(tài)分配權重或者直接在融合后的特征上使用正則化模型如Lasso讓模型自動學習特征權重。4. 模型訓練、驗證與結果分析特征融合完成后我們使用一個分類器來驗證融合特征的有效性。這里以經(jīng)典的隨機森林為例因為它能提供特征重要性便于我們分析。# main.py 或單獨的模型訓練腳本 import numpy as np from sklearn.model_selection import train_test_split, cross_val_score from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import classification_report, confusion_matrix, accuracy_score import matplotlib.pyplot as plt import seaborn as sns # 假設我們已經(jīng)得到了融合后的特征矩陣 X_fused 和標簽 y # X_fused, y load_your_fused_features_and_labels() # 1. 劃分訓練集和測試集 X_train, X_test, y_train, y_test train_test_split(X_fused, y, test_size0.2, random_state42, stratifyy) # 2. 訓練隨機森林分類器 clf RandomForestClassifier(n_estimators100, random_state42, n_jobs-1) clf.fit(X_train, y_train) # 3. 在測試集上評估 y_pred clf.predict(X_test) accuracy accuracy_score(y_test, y_pred) print(f測試集準確率: {accuracy:.4f}) print(\n分類報告:) print(classification_report(y_test, y_pred, target_names[健康, 內圈故障, 外圈故障])) # 根據(jù)你的標簽調整 # 4. 繪制混淆矩陣 cm confusion_matrix(y_test, y_pred) plt.figure(figsize(8,6)) sns.heatmap(cm, annotTrue, fmtd, cmapBlues, xticklabels[健康, 內圈故障, 外圈故障], yticklabels[健康, 內圈故障, 外圈故障]) plt.ylabel(真實標簽) plt.xlabel(預測標簽) plt.title(混淆矩陣) plt.tight_layout() plt.savefig(outputs/figures/confusion_matrix.png) plt.show() # 5. 特征重要性分析 (如果特征維度可管理) if hasattr(clf, feature_importances_): importances clf.feature_importances_ # 你需要有一個特征名稱列表 feature_names_all # feature_names_all time_feature_names freq_feature_names indices np.argsort(importances)[::-1] plt.figure(figsize(10, 6)) plt.title(特征重要性 (Top 20)) plt.bar(range(20), importances[indices[:20]], aligncenter) plt.xticks(range(20), [feature_names_all[i] for i in indices[:20]], rotation45, haright) plt.tight_layout() plt.savefig(outputs/figures/feature_importance.png) plt.show()驗證邏輯 為了證明“頻域特征融合”的有效性你需要進行對比實驗基線模型僅使用原始信號或僅時域特征訓練模型記錄準確率。頻域模型僅使用頻域特征訓練模型記錄準確率。融合模型使用你設計的融合特征訓練模型記錄準確率。分析融合模型的準確率、精確率、召回率、F1-score是否顯著優(yōu)于前兩者混淆矩陣是否顯示某些難分類別的性能得到了提升5. 常見問題、陷阱與排查路徑在實際操作中你幾乎一定會遇到以下問題。5.1 特征提取與融合階段的常見坑問題現(xiàn)象可能原因檢查與解決方案頻域特征如fc,msf計算出現(xiàn)NaN或Inf頻譜幅度和np.sum(fft_amp)為零導致除零錯誤。檢查原始信號是否全為零或常數(shù)。在除法前添加極小值eps或判斷分母是否為零。模型在訓練集上表現(xiàn)完美在測試集上極差過擬合1. 特征維度太高樣本量太少。2. 使用了未來信息如用全局統(tǒng)計量做歸一化。3. 特征中存在數(shù)據(jù)泄露。1. 增加樣本量或使用PCA/LDA降維。2. 確保歸一化、PCA等操作僅在訓練集上擬合然后轉換訓練集和測試集。3. 重新檢查數(shù)據(jù)分割流程確保沒有穿越時間序列的依賴關系。融合后的模型性能反而下降1. 融合引入了大量冗余或噪聲特征。2. 時域和頻域特征尺度差異巨大簡單拼接導致模型偏向大數(shù)值特征。3. 加權融合權重設置不合理。1. 使用特征選擇如SelectKBest, RFE篩選特征。2.必須進行特征標準化如StandardScaler。3. 放棄固定權重采用基于模型的特征重要性或使用正則化。不同負載或工況下模型失效提取的特征對工況敏感如有量綱指標。1. 優(yōu)先使用無量綱指標如波形因子、脈沖因子。2. 考慮進行工況歸一化或使用遷移學習、領域自適應方法。5.2 結果分析與論文寫作要點可復現(xiàn)性在論文中必須詳細說明采樣頻率、樣本長度、重疊率、具體的特征列表或公式、融合方法、分類器及其超參數(shù)。最好公開代碼和數(shù)據(jù)。統(tǒng)計顯著性不要只比較一次隨機劃分的準確率。使用k折交叉驗證并報告平均準確率及標準差。進行統(tǒng)計檢驗如t-test來證明性能提升是顯著的。可視化論文中應有清晰的圖表。時域波形和頻譜圖對比健康 vs 故障。特征重要性排序圖。t-SNE或PCA降維后的特征分布圖展示融合后特征是否使不同類別更易分離?;煜仃嚒2煌椒▽Ρ鹊闹鶢顖D帶誤差棒。消融實驗這是沖擊高水平論文的關鍵。設計實驗證明你提出的融合策略的每個部分都是有效的。例如實驗A僅時域特征。實驗B僅頻域特征。實驗C時域頻域簡單拼接。實驗D時域頻域你設計的特征選擇/加權/PCA融合策略。 清晰展示從A到D的性能提升軌跡。6. 最佳實踐與擴展方向6.1 工程與科研最佳實踐清單數(shù)據(jù)預處理清單[ ] 確認采樣頻率和信號單位。[ ] 檢查并處理缺失值或異常點。[ ] 進行必要的濾波如帶通濾波去除高頻噪聲和工頻干擾。[ ] 對信號進行去趨勢處理scipy.signal.detrend。[ ] 確定合適的樣本長度和重疊率并通過可視化確認分段合理性。[ ] 在樣本級別進行歸一化/標準化。特征工程清單[ ] 時域特征至少包含有量綱統(tǒng)計量均值、標準差、RMS和無量綱指標峭度、峰值因子。[ ] 頻域特征必須包含頻譜重心、均方頻率、頻帶能量。嘗試計算包絡譜Hilbert變換后求頻譜以突出故障沖擊特征。[ ] 考慮時頻域特征如小波包能量熵這對非平穩(wěn)信號非常有效。[ ] 使用tsfresh庫自動提取大量時域特征然后進行過濾。融合與建模清單[ ]始終先做特征標準化再進行融合或輸入模型。[ ] 優(yōu)先嘗試簡單拼接PCA/特征選擇作為基線融合方法。[ ] 使用交叉驗證評估模型避免單次劃分的偶然性。[ ] 記錄所有實驗的超參數(shù)和結果使用工具如MLflow, WandB進行管理。6.2 高級擴展方向深度特征融合使用一維CNN自動從原始時域信號中提取深層特征同時使用另一個分支從FFT頻譜中提取特征然后在中間層進行融合如拼接、相加、注意力機制最后接全連接層分類。這是當前頂刊的主流做法。注意力機制在融合時不是平等對待所有特征。使用注意力網(wǎng)絡為不同特征或不同特征域分配權重讓模型聚焦于更重要的信息。多尺度特征在同一域內如時域提取不同尺度的特征如不同滑動窗口的統(tǒng)計量再進行融合以捕獲不同時間粒度的模式?;趫D的特征融合將每個樣本的特征視為圖節(jié)點構建特征關系圖利用圖神經(jīng)網(wǎng)絡GNN進行信息傳播和融合。面向開放集的融合不僅融合已知故障的特征還設計異常檢測機制用于發(fā)現(xiàn)訓練集中未出現(xiàn)的故障類型。從簡單的時頻域特征拼接到引入注意力機制的深度融合網(wǎng)絡其演進邏輯始終是讓融合過程本身具有學習能力能夠根據(jù)具體任務和數(shù)據(jù)自適應地整合多源信息。你的論文創(chuàng)新點可以體現(xiàn)在這個演進鏈條的任何一個環(huán)節(jié)上只要你能通過嚴謹?shù)膶嶒炞C明其有效性。