小波分析自 80 年代成熟以來,已成為訊號處理的利器。MATLAB 小波工具箱提供豐富的分解重構函數,開發效率極高,但生成的程式依賴 MATLAB 執行環境,執行效率低、資源佔用大,難以滿足獨立部署需求。VC++ 則擁有強大的視窗介面開發能力與高效的原生碼執行效能,可生成獨立可執行檔,但在數值分析與演算法原型驗證上不如 MATLAB。本文結合兩者優勢:以 VC++ 圖形介面為前台框架,MATLAB 為後台運算引擎,透過 COM 元件技術實現無縫整合,完成一維小波多尺度分解系統的開發。
一維小波分解將訊號分解為近似係數 (低頻, cA) 與細節係數 (高頻, cD)。對近似係數遞迴分解,即可得到多層次的多尺度表示。因資料結構呈塔狀,故稱塔式演算法。分解過程示意:


圖中 s 為原始訊號,cD1, cA1 為第 1 層細節與近似序列,cD2, cA2 為第 2 層,以此類推。
| 函數 | 功能 | 關鍵參數 |
|---|---|---|
[C,L] = wavedec(X,N,'wname') | 多尺度一維小波分解 | C: 分解結構; L: 書籤向量; X: 原始訊號; N: 分解層數; wname: 小波類型 |
X = waverec(C,L,'wname') | 多尺度一維小波重構 | 還原原始訊號 |
D = detcoef(C,L,N) | 提取第 N 層細節係數 | |
A = appcoef(C,L,'wname',N) | 提取第 N 層近似係數 | |
Y = wrcoef('type',C,L,'wname',N) | 單支重構 | type='a' 近似, 'd' 細節 |
Y = upcoef('type',S,'wname',N) | 係數直接重構 | S: 分解係數 |
| 方案 | 優點 | 缺點 |
|---|---|---|
| MATLAB Engine | 支援所有函數 | 依賴 MATLAB 環境; 解釋執行,速度慢 |
| MATLAB mcc 編譯器 | 生成獨立 EXE | 無法呼叫工具箱函數; 代碼可讀性差; 不支援繪圖 |
| Matcom 編譯 | 代碼可讀性好; 執行效率高 | 不支援所有工具箱函數 |
| MATLAB COM Builder (採用) | 生成獨立 COM 元件; 脫離 MATLAB 環境; 速度最快; 無需代碼轉換; 風格一致 | 需額外部署 MCR (MATLAB Compiler Runtime) |
經大量實驗比較,確定採用 MATLAB COM Builder 方案。
gzqfenjie.m (分解)、myplot.m (繪圖)、myprocess.m (處理)、mysave.m (儲存) 等核心函數。MyProject),並打包以保持可移植性。COMwavelet,設定預編譯標頭 (stdafx.h)。MyProject_idl.h、MyProject_idl_i.c 及 MATLAB 安裝目錄下 extern\include 中的 mwcomtypes.h、mwcomutil.h 至專案目錄並加入工程。COMwaveletDlg.cpp 中引入頭檔:
#include "MyProject_idl.h"
#include "mwcomtypes.h"
#include "mwcomutil.h"
#include "comdef.h" // CString 轉 VARIANT
.exe。
轉子繞組匝間短路會導致電磁負載與熱負載不平衡,引起軸系振動加劇。採用動態氣隙線圈探測法:轉子存在匝間短路時,磁場失去對稱性,氣隙磁通分布改變,故障槽的槽漏磁齒諧波隨之變化。微分探測線圈感應電勢波形反映磁通密度變化,對採樣資料進行小波分析可定位突變點 (故障槽)。
小波分析具備時頻雙重局部化特性,克服傅立葉變換無法局部分析的缺陷,極適合突變訊號處理。操作流程:
data112904.dat (半個週期探測訊號,16 個槽)。db10 (Daubechies 10) 小波基,分解層數設為 1。
結果顯示:三個訊號自上而下為原始探測訊號 (1~16 槽)、低頻重構、高頻重構。觀察高頻重構訊號,明確定位故障槽為 第 3 槽。介面提供勾選儲存項目功能,點擊「儲存」即可導出所需結果。
本文採用基於 COM 的混合程式設計方法,成功實現了 MATLAB 一維小波分解、係數提取、訊號重構功能的 VC++ 呼叫。實踐證明: