Hilbert變換及譜分析

2021-07-02 01:19:41 字數 3422 閱讀 3103

** 

hilbert變換是乙個很有用的變換,用它來做包絡分析更是一種有效的資料處理方法。現用**測試其變換效果

第乙個程式效果如下

% hilbert變換測試

clcclear all

close 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變換

clcclear all

close 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)|')

功率譜分析

一 直接法 clear clc close all 清除變數 清屏 關閉當前圖形視窗 fs 1000 t 0 1 fs 1 nfft 2048 改變nfft的值可對比不同取樣值時的譜估計效果 生成訊號 雜訊 x1 cos 2 pi 40 t 3 cos 2 pi 45 t 訊號 x2 randn s...

分析訊號質量用功率譜分析還是頻譜分析?

一 定義 功率譜密度 對於具有連續頻譜和有限平均功率的訊號或雜訊,表示其頻譜分量的單位頻寬功率的頻率函式。頻譜分析 對訊號進行傅利葉變換,用該方法對振動的訊號進行分解,並按頻率順序展開,使其成為頻率的函式,進而在頻率域中對訊號進行研究和處理的一種過程。隨機過程 stochastic process ...

python頻譜分析

import numpy as np import matplotlib.pyplot as pl sampling rate 8000 fft size 512 首先定義了兩個常數 sampling rate,fft size,分別表示數碼訊號的取樣頻率和fft的長度.由於快速離散傅利葉演算法的影...