Matlab繪製包絡線可以通過hilbert或者envelope實現
Hilbert變換是一個很有用的變換,用它來做包絡分析更是一種有效的數據處理方法。clc;clear all;close all;t = 0:0.01:6*pi;y = sin(t).*sin(9.*t);h = hilbert(y); % Hilbert變換y1 = 3*cos(t).*sin(9.*t);h1 = hilbert(y1); % Hilbert變換figure;subplot(2,1,1);plot(t,y);hold onplot(t,abs(h),'r--','linewidth',1.5)hold onplot(t,-1*abs(h),'r--','linewidth',1.5)grid onsubplot(2,1,2);plot(t,y1);hold onplot(t,abs(h1),'g-.','linewidth',1.5)hold onplot(t,-1*abs(h1),'g-.','linewidth',1.5)grid on% Hilbert變換測試clcclear allclose 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變換
figuresubplot(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;
figuresubplot(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)|')% 包絡分析(高中心頻率的窄帶信號分析)% 基於:兩個信號乘積的Hilbert變換取決於高頻信號的Hilbert變換clcclear allclose 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); % 包絡1a = 2 + cos(2*pi*f1*t); % 包絡2% a = 1./(1+t.^2*50); % 包絡3m = sin(2*pi*f2*t); % 調製信號y = a.*m; % 信號調製
figuresubplot(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)|')envelope繪製包絡線
clc;clear all;close all;t = 0:0.01:6*pi;y = sin(t).*sin(9.*t);figure;plot(t,y);hold on% 包絡線繪製[up,lo] = envelope(y);plot(t,up,t,lo,'linewidth',1.5)legend('signal','上包絡線','下包絡線')hold offMATLAB相關內容往期回顧
MATLAB中繪製三維圖形
MATLAB的輸入輸出input函數
matlab詳細介紹畫柱形圖
matlab中矩陣的入門知識
matlab中legend函數的用法
matlab繪圖--線性規劃圖解法示意
Matlab 進度條的製作
Matlab對fig文件導出數據
Matlab中plot函數全功能解析
Matlab的fmincon函數求解非線性規劃
MATLAB線性規劃函數求解線性規劃
MATLAB求解混合整數線性規劃
電子書推薦(一)《MATLAB在數學建模中的應用》
matlab GUI實現導入txt文件(含字符和數據的文本)
matlab 畫圖——誤差條圖errorbar函數(含視頻講解)
matlab多項式(定義、四則計算、求根)
Matlab中繪製不同坐標的圖形
Matlab 多項式擬合函數關係
層次分析法(AHP)在MATLAB中的應用
MATLAB的lsqcurvefit函數擬合非線性式子中的未知參數
MATLAB的fgoalattain()函數求解多目標規劃
基於MATLAB的灰色預測模型GM(1,1)計算的GUI界面
電子書推薦(二)《Matlab 從入門到精通 》
MATLAB曲線擬合工具箱
MATLAB的主成分分析的GUI界面計算
MATLAB《自動控制原理》相關編程
MATLAB的switch選擇語句和input輸入語句
MATLAB的switch選擇語句和input輸入語句視頻
MATLAB實例講解—求二元函數的極值
MATLAB實例講解—求二元函數的極值視頻
MATLAB的ode45函數實例求常微分方程數值解
MATLAB求解微分方程組—以一種傳染病的動力學模型求解為例
本文內容來源於長笛人倚樓Gloria的博客,僅供參考學習,如內容、圖片有任何版權問題,請聯繫處理,24小時內刪除。