
Hilbert變換是一個很有用的變換,用它來做包絡分析更是一種有效的數據處理
方法。現用代碼測試其變換效果
第一個程序效果如下
% Hilbert變換測試
clc
clear all
clo all
ts = 0.001;
fs = 1/ts;
N = 200;
f = 50;
k = 0:N-1;
t = k*ts;
% 信號變換
% 結論:sin信號Hilbert變換后為cos信號
y = sin(2*pi*f*t);
yh = hilbert(y); % matlab函數得到信號是合成的復信號
yi = imag(yh); % 虛部為書上定義的Hilbert變換
figure
subplot(211)
plot(t, y)
title('原始sin信號')
subplot(212)
plot(t, yi)
title('Hilbert變換信號')
% 檢驗兩次Hilbert變換的結果(理論上為原信號的負值)
% 結論:兩次Hilbert變換的結果為原信號的負值
yih = hilbert(yi);
yii = imag(yih);
max(y + yii)
% 信號與其Hilbert變換的正交性
% 結論:Hilbert變換后的信號與原信號正交
sum(y.*yi)
% 譜分析
% 結論:Hilbert變換后合成的復信號的譜沒有大于奈氏頻率的頻譜,即其譜為
單邊的
NFFT = 2^nextpow2(N);
f = fs*linspace(0,1,NFFT);
Y = fft(y, NFFT)/N;
YH = fft(yh, NFFT)/N;
figure
subplot(211)
plot(f,abs(Y))
title('原信號的雙邊譜')
xlabel('頻率f (Hz)')
ylabel('|Y(f)|')
subplot(212)
plot(f,abs(YH))
title('信號Hilbert變換后組成的復信號的雙邊譜')
xlabel('頻率f (Hz)')
ylabel('|YH(f)|')
第二個效果如下
第一個包絡測試
可以看到,此包絡分析得到的包絡信號頻率為20Hz,包絡信號的波形為余弦信
號的絕對值信號,這是因為計算包絡時是取絕對值得到的,從而使信號頻率加倍。
解決方法是把包絡提升,遠離0,如下第二個包絡。
第二個包絡測試
可以看到Hilbert包絡分析可以有效提取包絡和調制信號頻率,和檢波有一樣的
效果,而且更實用。
第三個包絡測試
這是嘗試一個任意形狀的包絡,可以看到除在邊緣處有誤差外,整體效果很好。
% 包絡分析(高中心頻率的窄帶信號分析)
% 基于:兩個信號乘積的Hilbert變換取決于高頻信號的Hilbert變換
clc
clear all
clo all
ts = 0.001;
fs = 1/ts;
N = 200;
k = 0:N-1;
t = k*ts;
% 原始信號
f1 = 10;
f2 = 70;
% a = cos(2*pi*f1*t); % 包絡1
a = 2 + cos(2*pi*f1*t); % 包絡2
% a = 1./(1+t.^2*50); % 包絡3
m = sin(2*pi*f2*t); % 調制信號
y = a.*m; % 信號調制
figure
subplot(241)
plot(t, a)
title('包絡')
subplot(242)
plot(t, m)
title('調制信號')
subplot(243)
plot(t, y)
title('調制結果')
% 包絡分析
% 結論:Hilbert變換可以有效提取包絡、高頻調制信號的頻率等
yh = hilbert(y);
aabs = abs(yh); % 包絡的絕對值
aangle = unwrap(angle(yh)); % 包絡的相位
af = diff(aangle)/2/pi; % 包絡的瞬時頻率,差分代替微分
計算
% NFFT = 2^nextpow2(N);
NFFT = 2^nextpow2(1024*4); % 改善柵欄效應
f = fs*linspace(0,1,NFFT);
YH = fft(yh, NFFT)/N; % Hilbert變換復信號的頻譜
A = fft(aabs, NFFT)/N; % 包絡的頻譜
subplot(245)
plot(t, aabs, t, a, '.')
title('包絡的絕對值')
legend('包絡分析結果', '真實包絡')
subplot(246)
plot(t, aangle)
title('調制信號的相位')
subplot(247)
plot(t(1:end-1), af*fs)
title('調制信號的瞬時頻率')
subplot(244)
plot(f,abs(YH))
title('原始信號的Hilbert譜')
xlabel('頻率f (Hz)')
ylabel('|YH(f)|')
subplot(248)
plot(f,abs(A))
title('包絡的頻譜')
xlabel('頻率f (Hz)')
ylabel('|A(f)|')

本文發布于:2023-05-23 21:22:14,感謝您對本站的認可!
本文鏈接:http://m.newhan.cn/zhishi/a/1684848135176073.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:Hilbert包絡線.doc
本文 PDF 下載地址:Hilbert包絡線.pdf
| 留言與評論(共有 0 條評論) |