月芽儿 发表于 2007-7-11 11:37

求助傅立叶变换的一些问题

大家好,我是Matlab的初学者,我最近要用FFT做频谱分析
大致說一下我想做的事
把用示波器采集到的信号(wfm或dat)导入,再做FFT变换
有幾個問題:
1.我看一般例子都是用函数生成信号,再进行FFT变换,但对于实际测到的信号进行FFT变换的例子几乎没有,如我的采样频率是50Ks,FFT运算点数应该怎么取?

2.请高手们帮我看看以下FFT程序有什么问题,谢谢!
function c=pp(p)
d11=size(p)/2;
d1=d11(1,1);
d2=d1-1;
for t=1:d1;
    t1=t+d1;
    r(t,1)=p(t1,3);
    r1(t,1)=p(t1,2);
end
    a=r-mean(r);
subplot(2,1,1);
plot(r1,10*a);
ylabel('I/mA');
xlabel('t/s');
y=fft(a,131072);
f=50000*(0:1024)/131072;
subplot(2,1,2);
plot(f,abs(y(1:1025))/200);
ylabel('I/mA')
xlabel('f/Hz')
c=0;
end

月芽儿 发表于 2007-7-13 08:38

自己顶一个,高手请赐教!

峰之巅 发表于 2007-7-13 09:36

感觉没问题吧。运算点取的越多,频谱越细化,但是你取这么多,也没有必要呀。根据fft的命令提示,当信号的长度大于运算点时,多余的信号长度是要截掉的;而信号的长度小于运算点时,需要补加零直到长度等于所取运算点。

zhangnan3509 发表于 2007-7-13 16:26

回复 #2 月芽儿 的帖子

clear
m=importdata();
i=1;
N=1024;
f=500;
while i<1024;

    data(i)=m(i);
    i=i+1;
end
data=data-mean(data(:,1));
a=abs(fft(data));
figure(1)
subplot(211)
plot(1:length(data(1:500)),data(1:500))
axis()
Ylabel();
Xlabel();
subplot(212)
plot((1:N/2)*f/N,2*a(1:N/2)/N)
Ylabel();
Xlabel();
仿真的例子和实际的区别并不很大,主要是体现在提取数据上,至于处理的原理上是一致的,这里假设有一列1024个数据的FFT,你可以看看。中间那段while语句是有点暴殄天物,但是我真的习惯了,但愿大伙看见了谅解我。

[ 本帖最后由 zhangnan3509 于 2007-7-13 16:27 编辑 ]

月芽儿 发表于 2007-7-13 20:50

谢谢 峰之巅 ,zhangnan3509 的热心帮助!:@)
页: [1]
查看完整版本: 求助傅立叶变换的一些问题