声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: 期待着一天

[FFT] 我想对两组数据同时做FFT,实现他的matlab程序怎么写呀

[复制链接]
 楼主| 发表于 2011-7-31 19:02 | 显示全部楼层
x1=3*sin(2*pi*25*t+pi/6);
x2=3*sin(2*pi*25*t+pi/2+pi/6);
y1=6*sin(2*pi*25*t-pi);
y2=6*sin(2*pi*25*t+pi/2-pi);
x=i*x1+x2;
y=i*y1+y2;
r1=fft(x,N);
r2=fft(y,N);
我在上面发的是这四个信号,而我编程序时是用的一下4个信号,x1=3*sin(2*pi*25*t);
x2=3*cos(2*pi*25*t);
y1=6*sin(2*pi*25*t-pi);
y2=6*cos(2*pi*25*t-pi);
x=i*x1+x2;
y=i*y1+y2;
r1=fft(x,N);
r2=fft(y,N);
这样的四个信号构成复数,进行FFT时,能把幅频图和相频图都能正确的输出来,在这里我取得采样频率是100HZ,采样点数是128,变换后是有两个幅频图和相频图,这两个图都反映了这两个复数的幅值和相位,我把图附在下面,老师您看一下,但是我如果改变信号频率,也就是不能满足信号频率是采样频率的整数倍时,幅频图和相频图就不正确了,我不知道这种思想正确不?还有就是正确的话,麻烦老师能帮我校正一下,也就是当不是整周期采样时也能反映幅值和相位。谢谢老师了。下面是我仿真的完整程序,图在附件里。
function pinlv()
clf
fs=100;
N=128;
n=0:N;
t=n/fs;                  
x1=3*sin(2*pi*25*t);
x2=3*cos(2*pi*25*t);
y1=6*sin(2*pi*25*t+pi);
y2=6*cos(2*pi*25*t+pi);
x=i*x1+x2;
y=i*y1+y2;
q=fft(x,N)
z=fft(y,N);
mag1=abs(q)
mag2=abs(z)
deg1=angle(q)*180/pi
deg2=angle(z)*180/pi;
f1=(0:length(q)-1)'*fs/length(q);
f2=(0:length(z)-1)'*fs/length(z);
subplot(2,2,1),plot(f1,mag1/N);
subplot(2,2,2),plot(f2,mag2/N);
subplot(2,2,3),plot(f1,deg1);grid
subplot(2,2,4),plot(f2,deg2);grid

FFT图.doc

45 KB, 下载次数: 6

回复 支持 反对
分享到:

使用道具 举报

发表于 2011-8-1 10:13 | 显示全部楼层
对16楼的程序,如果把幅值和初始相角计算出来,得到的结果是
3.00    6.00   30.00   -180.00
附合设置结果。
LZ实际上的信号是x=A*cos(2*pi*f*t+phi)+i*A*sin(2*pi*f*t+phi)=A*exp(i*2*pi*f*t+phi),这是一个指数信号。在LZ的例子中信号的频率正好与某条谱线相重合,可以方便地计算出信号的幅值和相位,但如果信号的频率正好与某条谱线不相重合,应该使用修正法。但是以往的修正法似乎都是对于正弦信号和余弦信号的,而不是针对指数信号的。直接用于指数信号得不到正确结果。曾看到过一篇文献:“Analysis of damped sinusoidal signals via a frequency-domain interpolation algorithm” IEEE trans. Instrum. Meas., 1994 43(2)245-250,可能对LZ有参考价值。
发表于 2011-8-1 15:33 | 显示全部楼层
回复 4 # dsp2008 的帖子

同意!单独做就可以了
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-24 14:41 , Processed in 0.079553 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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