声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1131|回复: 7

[HHT] 一个问题请教大家

[复制链接]
发表于 2008-3-27 04:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

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

sigbip = sigbip/max(sigbip);
[imf,ort,nbits] = 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([1:length(instfre_imf1)],instfre_imf1);
title('imf1 inst frequency');

subplot(3,1,3);
plot([1:1000],sigbip)
title('signal');

[ 本帖最后由 dailiangren 于 2008-3-27 04:01 编辑 ]
imf1.JPG
回复
分享到:

使用道具 举报

发表于 2008-3-27 14:47 | 显示全部楼层

回复 楼主 的帖子

matlab那个函数计算瞬时频率端点处是有问题的。。。
 楼主| 发表于 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');
[fnor,t]=instfreq(x);
figure
plot(t,fnor*fs)
这样出来的结果是正确的,但是如果改为
x=hilbert(x);
[fnor,t]=instfreq(x');
则不对了
发表于 2008-3-27 22:03 | 显示全部楼层
另外那个instfreq函数本身就是存在端点效应的,因为它要调用FFT
基于信hilbert变换和函数instfreq求取信号瞬时频率时,为了避免波动,必须对信号进行整周期采样,即被分析信号的频率应为频率分辨率的整数倍,即f0=m*(fs/N)(其中f0 为待分析信号的频率,N为采样点数,fs为采样频率)
发表于 2008-3-27 22:14 | 显示全部楼层
你也可以参考本版的帖子hilbert变换怪现象
相信会有帮助

评分

1

查看全部评分

 楼主| 发表于 2008-3-28 14:02 | 显示全部楼层

回复 5楼 的帖子

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

谢谢你:@)
 楼主| 发表于 2008-3-28 14:02 | 显示全部楼层

回复 4楼 的帖子

呵呵,我后来想的就是用0.5减去,后来也正好得到了正确的图。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-19 23:43 , Processed in 0.062347 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表