Hilbert 变换是一个很有用的变换,用它来做包络分析更是一种有效的数据处理方法。现用代码测试其变换效果 第一个程序效果如下 % Hilbert 变换测试 clc clear 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 变换 clc clear 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); % 包络...