**
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的長度.由於快速離散傅利葉演算法的影...