声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 16601|回复: 24

[综合讨论] [求助]弱问:matlab中fft的点数的确定

[复制链接]
发表于 2006-4-12 19:23 | 显示全部楼层 |阅读模式

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

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

x
DSP学得不好,fft没有看明白。请各位指点!
我读入一个wav文件后,想对它做fft,请问点数应该怎样确定呢?wav文件的采样频率是8000Hz,而数据有很多点(例如20000点),请问我应该怎样选取点数?是直接用fft(y),还是用fft(y,8000)?

还有,如果我想画图反映出该语音信号的频率分布,请问横坐标(即f)应该怎样定?总不能直接用plot(abs(fft(y)))吧?

谢谢各位~~

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2006-4-14 20:19 | 显示全部楼层

回复:(tqytan)[求助]弱问:matlab中fft的点数的确定...

fft(y)

频率之用把计算结果除以采样频率就行
发表于 2006-4-21 11:43 | 显示全部楼层
如果我想画图反映出该语音信号的频率分布,请问横坐标(即f)应该怎样定?总不能直接用plot(abs(fft(y)))吧?<BR>横坐标应该是参加FFT的点数的一半除以采样频率,然后,取对应的fft(y)的一半长度画图。<BR>请问happy,为什么要用fft结果除以采样频率?谢谢
发表于 2006-4-21 13:10 | 显示全部楼层
画图可以试一下:<FONT color=#dd4822>a=length(y)/2/采样频率</FONT>;le=1:length(y)/2;plot(a,y(le));横坐标应该是参加FFT的点数的一半除以采样频率,这句话我不是很理解哈,上面红色的那句话可能不对哈,你可以在试一下
发表于 2006-4-21 22:12 | 显示全部楼层

回复:(tracy_dan)画图可以试一下:a=length(y)/2/采...

<DIV class=quote><B>以下是引用<I>tracy_dan</I>在2006-4-21 13:10:41的发言:</B><BR>画图可以试一下:<FONT color=#dd4822>a=length(y)/2/采样频率</FONT>;le=1:length(y)/2;plot(a,y(le));横坐标应该是参加FFT的点数的一半除以采样频率,这句话我不是很理解哈,上面红色的那句话可能不对哈,你可以在试一下</DIV>
<P>红色的改成<FONT color=#dd4822>a=length(y)*2/采样频率</FONT></P>
发表于 2006-4-22 12:32 | 显示全部楼层
fft(y)不可行吧.点数太多了,运行时间会很长的.<BR>应该取A=abs(fft(y,N))/(N/2),其中N为FFT点数,其中前一半为正频率部分,后一半为负频率部分,对于实信号来说,正负频率是对称的,因此只取前一部分A=A(0:N/2)即可.<BR>则频率分辨率为:df=采样频率Fs/N;<BR>则做谱时横座标序列为:f=(0:N/2)*df;<BR>plot(f,A)即可.<BR>N一般应取2的整数次幂,值越大,做的谱越准,但计算量增大.<BR>

点评

赞成: 3.0
赞成: 3
  发表于 2014-3-31 10:51

评分

1

查看全部评分

发表于 2006-4-24 09:00 | 显示全部楼层
yangzj讲的最具体,我就是这个意思,fft结果取一半即可,因为有负频率的部分。构造横坐标就是取一半的点数然后乘以频率分辨率。<BR>对了,happy,你那个“fft结果除以采样频率”我还是没有明白,一般为了与时域对应,我们通常是fft结果除以参与fft的点数,再考虑到负频率部分,再将结果乘2,但是和采样频率没关系啊?你的意思是不是构造横坐标时要这么做?
发表于 2006-6-3 18:33 | 显示全部楼层
请教各位,我现在有一组波形的采样数据x(n),在做完Y=fft(X)之后想画出波形的频域图像,请问还需要加上一些什么语句么?特别是X轴要求是频率,应该怎样做呢?谢谢<BR>
发表于 2006-12-31 09:21 | 显示全部楼层
上面几位都没有说他的幅值的物理意义是什么?
假设x(t)的幅值量纲是mm/s,那么fft(x)的量纲是什么呢?
发表于 2006-12-31 19:26 | 显示全部楼层
还是mm/s
发表于 2007-3-13 17:01 | 显示全部楼层
小女子看过帖子之后,还是有问题,为什么在6Hz的位置上还出现呢?
fs = 10;  N = 1024;  t = (0:N-1)/fs;       %采样频率, 采样点数, 采样时间序列s
a = 0.75; w = 4; x = a*cos(2*pi*w*t);
xf = 2*abs(fft(x))/N; df = fs/N; f = (0:N-1)*df;         %频率分辨率Hz, 频域序列
subplot(2,1,1); plot(t, x); xlabel('t/s');
subplot(2,1,2); plot(f, xf); xlabel('f/Hz');

[ 本帖最后由 ChaChing 于 2010-4-10 20:12 编辑 ]
11.jpg
发表于 2007-3-13 20:35 | 显示全部楼层
fftshift  试试这个~
发表于 2007-3-13 21:51 | 显示全部楼层
对了使用FFTshift的效果比较好!我试了一下能关于y轴对称。这没有问题。
发表于 2008-9-17 17:02 | 显示全部楼层
fs = 10; N = 1024; t = (0:N-1)/fs;    %采样频率, 采样点数, 采样时间序列s
a = 0.75; w = 4; x = a*cos(2*pi*w*t);
subplot(2,1,1); plot(t, x); xlabel('t/s');
xf = 2*abs(fft(x))/N; xf=fftshift(xf);   %xf=xf(1:N/2);
df = fs/N;  f=(-N/2:N/2-1)*df;          %频率分辨率Hz, 频域序列
subplot(2,1,2); plot(f, xf); xlabel('f/Hz');

[ 本帖最后由 ChaChing 于 2010-4-10 20:07 编辑 ]
发表于 2009-3-14 16:45 | 显示全部楼层
原帖由 yangzj 于 2006-4-22 12:32 发表
fft(y)不可行吧.点数太多了,运行时间会很长的.应该取A=abs(fft(y,N))/(N/2),其中N为FFT点数,其中前一半为正频率部分,后一半为负频率部分,对于实信号来说,正负频率是对称的,因此只取前一部分A=A(0:N/2)即可.则频率分辨 ...
我认为A是从1开始的,不是从零开始的.即A=A(1:N/2)。不知道对不?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-28 23:45 , Processed in 0.068095 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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