查看: 11351|回复: 22|关注: 0

[已答复] Matlab中FFT求正玹序列的振幅

[复制链接]

新手

5 麦片

财富积分


050


7

主题

36

帖子

0

最佳答案
  • 关注者: 7
发表于 2009-9-18 14:36:19 | 显示全部楼层 |阅读模式
之前发过一次,没有解决,所以再发一次类似的求助:
对一个含噪信号进行快速傅里叶变换,求其直流分量和非直流分量的振幅值,编写程序如下:

Fs=1000;
n=0:1/Fs:1;
xn=10+15*sin(10*2*pi*n)+randn(size(n));
nfft=1024;
Xn = fftshift(fft(xn,nfft));
Xn(513)=Xn(513)/2;
A=2*abs(Xn)/Fs;
subplot(2,1,1),plot(xn)
subplot(2,1,2)
stem([-nfft/2:nfft/2 - 1]*Fs/nfft,A)
xlabel('f'),ylabel('T')
P=Xn.*conj(Xn)/nfft;
xlim([0 500])


exercise.jpg
得到这么一个图,我不明白的就是为什么正玹信号的振幅不是15呢?我知道问题可能出现在采样频率和信号原频率上,但是我不知道这两个频率到底有什么区别和联系?之前有个大侠告诉我应该“正弦信号的频率一定要与FFT后的某条谱线相合”,请问是什么意思呢????

退役版主

495 麦片

财富积分



107

主题

6315

帖子

103

最佳答案
  • 关注者: 64
发表于 2009-9-18 14:44:11 | 显示全部楼层
你把采样频率设定高一点就看看。简单地说,采样点获得的数据不一定刚好在正弦波的峰值上面。
1 提问请直接在论坛中发帖,不要发站内消息给我。
2 不要在QQ中问我提问,这样很浪费时间

新手

5 麦片

财富积分


050


7

主题

36

帖子

0

最佳答案
  • 关注者: 7
 楼主| 发表于 2009-9-18 15:04:34 | 显示全部楼层

回复 2# edifiers2008 的帖子

刚才写的不完全对,我把采样频率变了之后振幅值也跟着变化了,例如我改成
Fs=2000;
n=0:1/Fs:1;
xn=10+15*sin(10*2*pi*n)+randn(size(n));
nfft=1024;

Xn = fftshift(fft(xn,nfft));
Xn(513)=Xn(513)/2;
A=2*abs(Xn)/Fs;
subplot(2,1,1),plot(xn)
subplot(2,1,2)
stem([-nfft/2:nfft/2 - 1]*Fs/nfft,A)
xlabel('f'),ylabel('T')
图像也变了,振幅就变成5.189620110957161
和7.441269144516713了,这样还是不行,我觉得是不是采样频率是要有一定规定的呀,而不是随便定一个大于信号频率的就行,此处非常不解。。。:(

新手

5 麦片

财富积分


050


7

主题

36

帖子

0

最佳答案
  • 关注者: 7
 楼主| 发表于 2009-9-18 15:26:15 | 显示全部楼层

回复 2# edifiers2008 的帖子

但是我把采样频率变成1024之后就对了,
Fs=1024;
n=0:1/Fs:1;
xn=10+15*sin(10*2*pi*n)+randn(size(n));
nfft=1024;

Xn = fftshift(fft(xn,nfft));
Xn(513)=Xn(513)/2;
A=2*abs(Xn)/Fs;
subplot(2,1,1),plot(xn)
subplot(2,1,2)
stem([-nfft/2:nfft/2 - 1]*Fs/nfft,A)
xlabel('f'),ylabel('T')
xlim([-1 100])

结果就是正确的,我想知道Fs 的选取法则是什么呢?

退役版主

495 麦片

财富积分



107

主题

6315

帖子

103

最佳答案
  • 关注者: 64
发表于 2009-9-18 15:31:50 | 显示全部楼层
Fs主要是用来分析频率的,对于幅值没有必要吧。因为你采集的数据位置不同,幅值肯定也是不同的
1 提问请直接在论坛中发帖,不要发站内消息给我。
2 不要在QQ中问我提问,这样很浪费时间

新手

5 麦片

财富积分


050


7

主题

36

帖子

0

最佳答案
  • 关注者: 7
 楼主| 发表于 2009-9-18 15:34:55 | 显示全部楼层

回复 5# edifiers2008 的帖子

为什么采集数据越多,反而幅值越不精确呢?我觉得应该是如果采集数据足够多的话,或者就趋于正无穷,那得到的幅值应该越接近原来的才对。因为我做的工作主要关注在振幅值上,因此我比较关注这个。还请大虾赐教:handshake

论坛优秀回答者

17

主题

4981

帖子

1107

最佳答案
  • 关注者: 570
发表于 2009-9-18 19:27:01 | 显示全部楼层
原帖由 jiangxiao 于 2009-9-18 15:34 发表
为什么采集数据越多,反而幅值越不精确呢?我觉得应该是如果采集数据足够多的话,或者就趋于正无穷,那得到的幅值应该越接近原来的才对。因为我做的工作主要关注在振幅值上,因此我比较关注这个。还请大虾赐教:handshake ...

如果想经FFT后直接能求出正弦信号的幅值,正如LZ在1层所说的:“正弦信号的频率一定要与FFT后的某条谱线相合”。在LZ1层的例子中,Fs=1000,信号频率f0=10,nfft=1024,FFT后谱线之间的间隔df=Fs/nfft=1000/1024=0.9765。而10HZ的信号在笫11谱线和笫12谱线之间,它们对应的频率分别为9.76HZ和10.74HZ。所以LZ从FFT的谱图中只看到9.76HZ和10.74HZ的谱线,没有看到10HZ的谱线,当然得不到10HZ的幅值;而在信号中并没有包含有9.76HZ和10.74HZ的信号分量,这两条谱线完全有10HZ的信号泄漏出来的。
再来看LZ在4层的程序,其中Fs=1024,信号频率f0=10,nfft=1024,FFT后谱线之间的间隔df=Fs/nfft=1000/1024=1。所以在FFT后笫11条谱线就对应于10HZ,即“正弦信号的频率一定要与FFT后的某条谱线相合”,这样就得到了10HZ的正确幅值。从这里可以看出,并不是采集数据越多,幅值能越精确或越不精确,而完全要正弦信号的频率要与FFT后的某条谱线相合。
这样说来,为了求信号的幅值不是完全依赖于采样频率和数据的长度,所以有人会问什么样的采样频率才合适,取多长的数据等问题;而在实际工作中信号频率并不知道,那么怎么来选取采样频率。事实上FFT后正弦信号的幅值还可以用校正法来求取,这时就不要求正弦信号的频率与FFT后的某条谱线相合了。既然LZ的工作主要关注在振幅值上,那请LZ关注校正法有关的资料。

新手

5 麦片

财富积分


050


7

主题

36

帖子

0

最佳答案
  • 关注者: 7
 楼主| 发表于 2009-9-18 20:05:31 | 显示全部楼层

回复 7# songzy41 的帖子

谢谢高手赐教!!我明白了一些了,呵呵。我这方面现在还了解的不多,因此要学的东西还很多。不知道大虾说的校正法的有关资料有哪些呢?能不能推荐一本这方面的书给我呀?谢谢啦:loveliness: :handshake

论坛优秀回答者

17

主题

4981

帖子

1107

最佳答案
  • 关注者: 570
发表于 2009-9-19 10:31:29 | 显示全部楼层
可参看丁康等“离散频谱分析校正理论与技术” 科学出版社。
我在下帖中
http://www.ilovematlab.cn/viewth ... e%3D1&frombbs=1
给出了比值校正法的函数,可参考一下。

新手

5 麦片

财富积分


050


1

主题

26

帖子

0

最佳答案
发表于 2011-12-26 11:00:07 | 显示全部楼层

学习一下

MARK一下,以后学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

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