官方淘宝店 易迪拓培训 旧站入口
首页 > 微波射频 > 射频工程师交流 > 关于信号频谱问题(付里叶级数,快速FFT)

关于信号频谱问题(付里叶级数,快速FFT)

05-08
我们知道exp(-t)*u(t)的付里叶变换为1/(1+jw),使用0.001对原来的时域信号进行离散后,采用FFT得到其频谱,但是该频谱图与
付里叶变换得到的频谱图不对应,请问这当中我是哪部分的概念存在问题,请问这样的问题我如何通过采用得到的时域得到其频域?谢谢!

离散过程会产生ALIAS,不知您是不是因为这个问题。

但是这个ALIAS不可能这么大吧,有一点误差是可以承认,但是相差太大就不太合适了,开始以为我的FFT求频谱的结果有问题,我将这个时域波形用CST的脚本计算结果发现没有问题,就不知道是什么原因了。

刚刚试验了一把,好像与截断有关,时域函数在求频域时,我不可能选取无限时间的函数来进行频域分析,因此需要在一定的t下进行截断,
在t=100s和t=1000s分别进行计算时,得到的曲线有明显的差别

恩,确实是因为截断,那是很主要的误差

后来我计算了一下,如果是截断误差,误差的幅度为exp(-1000)会非常小,应该不是主要因素。

并且按理说函数
f(t)=1   (1<=x<=3)
的门函数不论延长多少时间周期,其频谱应该幅度保持不变,但是事实上好像感觉稀释了,幅度变小了。不知道什么原因。

门函数的时间长短对于幅度有影响的呀,sin(w)/w对exp(-t)的频域函数卷积之后肯定有波纹存在呀

我说的不是门函数的时间,是门函数两边值为零的时间的长度不一样。

检验一下计算程序是否有错?
可以先FFT,然后再IFFT,看看能不能回到原来的函数。

要不你把你的code,怎么做的,详细贴出来,
大家边看边分析好了。

这是频谱的函数
spectrum<-function(data){
long=as.integer(log2(length(data[,1])))+1
dt<-data[2,1]-data[1,1]
time_tmp<-dt*matrix(1:2^long,2^long,1)
value_tmp<-c(data[,2],rep(0,2^long-length(data[,1])))
data<-cbind(time_tmp,value_tmp)
value_tmp.fft<-fft(value_tmp)[1:(2^long/2)]
freq.fft<-(1/dt)/(2^long)*(1:(2^long/2))
spectr<-cbind(freq.fft,value_tmp.fft/(2^long))
#plot(segment(abs(spectr),0,2e9),type='l')
spectr
}
用这个函数生成的频谱图与CST导入时域波形后生成的一样
freq<-seq(0,10,1e-3)#频率采样
w<-2*pi*abs(freq);
#b<-sqrt(1/(1+(2*pi*a)^2))/(2*pi)
b<-1/(rep(1,length(w))+1i*w)#指数信号的理论频谱
time<-seq(0,1000,0.1)#时间采样
value<-exp(-time)信号表达式
plot(time,value)
plot(cbind(freq,abs(b)),col=2,type='l')
lines(abs(spectrum(cbind(time,value))),col=1,type='l')#频谱曲线
从曲线当中可以看到理论的最大值是在频率为0处,幅度为1
但是经过时域采样后得到的频谱图的最大幅度为6e-4,但是频谱图的样式和理论的差不多。
不知道 是什么原因,肯定是我对FFT,频谱分析的哪块知识点理解错误导致
并且对照郑君里《信号与系统》下册P151上的例子也还是做不出来。

这是两个频谱的比较图



这是时域采样后计算的频谱图


这是什么语言,没用过啊。

这个是R语言,用来统计处理的一个不错的语言

我的数据处理等都使用该语言。

我最近也在琢磨怎么 求脉冲信号的 频谱问题,, ,能不能直接在cst 上面写程序,或者,cst 已经有这个程序了,怎么让信号的频谱显示啊?

关于信号频谱问题(付里叶级数

期待高人帮忙解答

Top