dailiangren 发表于 2008-3-27 04:00

一个问题请教大家

感觉用时频工具箱中的瞬时频率函数instfreq求得的瞬时频率跟直观不太一致。
程序代码如下:

clear all;
clc
load E:\recent_read\matwork\modelsemg\mu3.mat
sigbip = sigbip(1001:2000);

sigbip = sigbip/max(sigbip);
= emd(sigbip); % <-------- adapted to current emd.m

%emd_visu(sigbip,1:2000,imf,1);
%画第一个imf
figure
imf1_an = hilbert(imf(1,:));
instfre_imf1 = instfreq(imf1_an');

subplot(3,1,1);
plot(1:1000,imf(1,:));
title('imf1');

subplot(3,1,2);
plot(,instfre_imf1);
title('imf1 inst frequency');

subplot(3,1,3);
plot(,sigbip)
title('signal');

[ 本帖最后由 dailiangren 于 2008-3-27 04:01 编辑 ]

auwi_zxy 发表于 2008-3-27 14:47

回复 楼主 的帖子

matlab那个函数计算瞬时频率端点处是有问题的。。。

dailiangren 发表于 2008-3-27 21:36

回复 2楼 的帖子

我也感觉端点处理有问题。

我觉得这是有限长度数据分析都有的一个问题--端点问题。

请问,你有什么好的方法或者经验可以给我参考吗?谢谢!

若菱 发表于 2008-3-27 21:57

建议你把
imf1_an = hilbert(imf(1,:));
instfre_imf1 = instfreq(imf1_an');
改为
imf1_an = hilbert(imf(1,:)');
instfre_imf1 = instfreq(imf1_an);
举个仿真的例子,你运行下就知道了
T=10;N=1024;n=0:1:N-1;dt=T/N;t=n*dt;fs=1/dt;
x=sin(0.8*pi*t);
x=hilbert(x');
=instfreq(x);
figure
plot(t,fnor*fs)
这样出来的结果是正确的,但是如果改为
x=hilbert(x);
=instfreq(x');
则不对了

若菱 发表于 2008-3-27 22:03

另外那个instfreq函数本身就是存在端点效应的,因为它要调用FFT
基于信hilbert变换和函数instfreq求取信号瞬时频率时,为了避免波动,必须对信号进行整周期采样,即被分析信号的频率应为频率分辨率的整数倍,即f0=m*(fs/N)(其中f0 为待分析信号的频率,N为采样点数,fs为采样频率)

若菱 发表于 2008-3-27 22:14

你也可以参考本版的帖子hilbert变换怪现象
相信会有帮助

dailiangren 发表于 2008-3-28 14:02

回复 5楼 的帖子

恩,你说的这些结论其实在《数字信号处理 -理论,算法与实现》 胡广书的93页有,那里是讨论关于对正弦信号抽样与截短能保证保持信号原信息的条件的。

谢谢你:@)

dailiangren 发表于 2008-3-28 14:02

回复 4楼 的帖子

呵呵,我后来想的就是用0.5减去,后来也正好得到了正确的图。
页: [1]
查看完整版本: 一个问题请教大家