声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3836|回复: 16

[综合] 周期信号的功率谱?

[复制链接]
发表于 2009-3-4 14:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
周期信号的功率谱与信号的幅度有什么关系吗?
能否通过功率谱间接求取信号幅度呢?
回复
分享到:

使用道具 举报

发表于 2009-3-4 15:10 | 显示全部楼层

回复 楼主 grassing 的帖子

周期信号的频谱是离散的,用频谱概念就很好了,功率谱密度适用于能量连续分布的随机信号。
但在做周期信号的FFT时,应取其整数倍周期长度数据。
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2009-3-4 15:22 | 显示全部楼层

回复 沙发 hcharlie 的帖子

我之前是用的FFT 来求幅度和相位的
但是当频率高于50KHz的时候,求得的值是不对的
而且我都是整周期采样

所以我才考虑通过其他方法来求信号的幅度和相位
发表于 2009-3-5 07:38 | 显示全部楼层

回复 板凳 grassing 的帖子

50KHz是信号频率还是采样频率?
 楼主| 发表于 2009-3-5 16:18 | 显示全部楼层

回复 地板 hcharlie 的帖子

是信号频率,采样频率是5MHz,采样点200个
发表于 2009-3-6 07:46 | 显示全部楼层

回复 5楼 grassing 的帖子

通常做FFT采样点数应为2的整数幂,128,256点等等,又要采集整数周期,你现在采集了2个整周期,如果变成256点,采集频率应该为6.4M
 楼主| 发表于 2009-3-6 09:06 | 显示全部楼层

回复 6楼 qhai_yun 的帖子

不太明白
我直接用matlab的fft(x)函数,它会自动补零为256个点吧?
你说的采集频率是6.4M是什么意思
发表于 2009-3-6 11:52 | 显示全部楼层
matlab的fft(x)函数, 若长度非2的整数幂, 其实是DFT不会自动补零, 除非给定fft(x,n), n>length(x)
试试下面程序
fs=5000000; tt=[0:1/fs:0.0001]; tt=tt(1:200); Sol=[];
fnA=[50000]; nlengf=length(fnA);
for ii1=1:nlengf, fn=fnA(ii1); dd=sin(2*pi*fn*tt); figure;  plot(tt,dd); grid;
fftlengA=[200:14:256]; nleng=length(fftlengA);
for ii=1:nleng, fftleng=fftlengA(ii);
   spec=fft(dd,fftleng); ind=[1:fftleng/2+1]'; spec=abs(spec(ind))*2/fftleng; Hz=(ind-1)*fs/fftleng;
   figure; stem(Hz,spec); grid;
   tRms=sqrt(sum(dd.^2)/length(dd)); fRms=sqrt(sum(spec.^2))/sqrt(2);
   Sol=[Sol; fftleng, tRms, fRms, std(dd), std(dd,1)];
end
end
disp(Sol)
发表于 2009-3-6 11:54 | 显示全部楼层
楼上是变化fft长度的影响
试试改变信号频率的影响
fs=5000000; tt=[0:1/fs:0.0001]; tt=tt(1:200); Sol=[];
fnA=[50000:5000:75000]; nlengf=length(fnA);
for ii1=1:nlengf, fn=fnA(ii1); dd=sin(2*pi*fn*tt); figure;  plot(tt,dd); grid;
fftlengA=[200]; nleng=length(fftlengA);
for ii=1:nleng, fftleng=fftlengA(ii);
   spec=fft(dd,fftleng); ind=[1:fftleng/2+1]'; spec=abs(spec(ind))*2/fftleng; Hz=(ind-1)*fs/fftleng;
   figure; stem(Hz,spec); grid;
   tRms=sqrt(sum(dd.^2)/length(dd)); fRms=sqrt(sum(spec.^2))/sqrt(2);
   Sol=[Sol; fftleng, tRms, fRms, std(dd), std(dd,1)];
end
end
disp(Sol)
发表于 2009-3-6 15:37 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-18 14:09 编辑
原帖由 grassing 于 2009-3-6 09:06 发表
不太明白
我直接用matlab的fft(x)函数,它会自动补零为256个点吧?
你说的采集频率是6.4M是什么意思

6.4M采样频率采集256点,采集总时间为40微秒,为50KHz信号两个整周期。
关于自动补另问题,我认为:
1)补另到256点以后对于50K信号就不是两个整周期了;
2)像冲击响应这样的信号起始是另,而且又自然衰减结尾趋于另,这样的数据自动补另做FFT比较自然,但对于采集的信号起始值很大,结尾值还很大就嘎然而止,尾巴自动补另就不自然。比如说,你用5M采集200个点的50K信号,如果起始和终止点都接近于另,和起始终止点值都很大,这两种情况补另处理结果会有较大出入。
发表于 2009-3-6 15:46 | 显示全部楼层
一般功率谱有好几种表达方式,一种叫做EUpeak,其代表的幅值就是在时域信号中对应频率的峰值,一种为EUrms,其对应的就表示rms了,不同的应用场合中人们关心的也不同,一般仪器上都有选择项供用户使用
 楼主| 发表于 2009-3-9 09:04 | 显示全部楼层

回复 8楼 ChaChing 的帖子

ChaChing 能不能解释一下啊  有些地方看不懂
运行了一下
发现不同数据长度进行fft的时候,得到的幅度是不同的

[ 本帖最后由 grassing 于 2009-3-9 10:33 编辑 ]
发表于 2009-3-9 11:28 | 显示全部楼层
我是试出来的, 并非真正讯号分析高手!
理论还是搜搜或高手回答!
发表于 2009-3-9 15:04 | 显示全部楼层
5MHz 采样200个点做fft,得到的频率分辨率是5*1000000/200=25KHz,  即楼主若要测试的信号频率不是25KHz的倍数,就不会得到准确的结果。
两点建议:减小采样率, 增大FFT的点数
 楼主| 发表于 2009-3-9 16:13 | 显示全部楼层

回复 14楼 HzRad 的帖子

我的信号频率是50KHz ,采样频率是5MHz,采样点200,频率分辨率是5e6/200=25K,是信号频率的整数倍啊
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-6-7 22:47 , Processed in 0.049855 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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