orchis_2005 发表于 2007-7-30 21:12

短时傅立叶变换的适用范围问题

请问:对信号是复数的,可以进行短时傅立叶变换吗?

[ 本帖最后由 eight 于 2007-7-31 14:30 编辑 ]

gladstone 发表于 2007-7-30 23:47

将实部和虚部分别存储,自己设计复数的相关运算。我接触的除了matlab,Mathematica 等数学软件编程不需要考虑复数运算问题外,vb,vc,c都要自己编写复数的运算,必要的时候可以定义新的数据类型(复数)。

orchis_2005 发表于 2007-7-31 05:14

我在一篇论文中的看到一算法
1.构造一函数:g(t)=(2*pi*(cmax)^2)^(1/4)*exp(((t-tp).^2)/(4*(cmax)^2)).*exp(j*m0/2*(t-tp).^2);   m0,tp,cmax是已知值 ;
2.将原信号x(t)经过运算xc(t)=x(t)*g*(t)
3.再对xc(t)做短时傅立叶变换.

我在matlab中这样试了下:
x=randn(1,5000);
t1=1:30;
y=20*sin(t1*0.1*pi);
for k=1:4
    x(1000*k-14:1000*k+15)=x(1000*k-14:1000*k+15)+0.2*y;
end
t=1:1:length(x);
m0=1.6;
tp=length(x)/2;
cmax=10 ;
g(t)=(2*pi*(cmax)^2)^(1/4)*exp(((t-tp).^2)/(4*(cmax)^2)).*exp(j*m0/2*(t-tp).^2);
g1(t)=conj(g(t));
xc(t)=x(t).*g1(t);
=specgram(xc,length(x),fs,kaiser(256,5),220);
结果没有出错,但是最后STFT_xc的值全都是nan+,nani.

请问这是什么原因,谢谢!

[ 本帖最后由 orchis_2005 于 2007-7-31 08:30 编辑 ]

花如月 发表于 2007-7-31 07:10

分步检查结果,估计是高斯算子有问题

orchis_2005 发表于 2007-7-31 08:34

检查了,没有哪一步出错.
高斯算子对了好几边,跟论文中给定的一样!
就是找不出啊,

zhlong 发表于 2007-7-31 08:35

回复 #1 orchis_2005 的帖子

楼主可以参考tftb时频工具箱中的tfrstft函数。
页: [1]
查看完整版本: 短时傅立叶变换的适用范围问题