matlab中FFT函数的疑问

matlab中FFT函数的疑问,第1张

n要取最接近数据长度的2的整数次方,命令是2^nextpow2(N),其中N是实际数据长度,因为这样的n可以使fft更快。比如,N=1021,执行n=2^nextpow2(N)后,n=2^10=1024。而你说的512也是这个道理。

f为表示频率的横轴,它的长度必须和abs(y)的长度相等,它们都是在图形上显示的长度。比如,f显示n的一半,abs(y)也要取n的一半:plot(f(1:n/2),Y(1:n/2)),其中Y=abs(y)。

注意:做fft的数据长度是整个的数据长度,plot显示的长度可以任取。

如果没看错是再求信号的功率谱,

Fs=2048;

%

设定采样点数

FFTN=1024;

%设定FFT点数

t=(0:1023)/Fs;

%

设定正弦信号的采样时间点

x=2sin(2pi256t+pi/8);

%

产生正弦信号

y=fftshift(fft(x,FFTN));

%这句没太看懂,应该是求信号的功率谱,但结果是复数,需取模,这句需楼主在核实下

yam=abs(y)2/FFTN;

%需取模,

f=((0:FFTN-1)-FFTN/2)Fs/FFTN;

%设定画图时的横坐标,Hz为单位

figure(1);plot(f,yam);xlabel('f(Hz)');ylabel('幅值');

%

以横坐标Hz,纵坐标取模结果,画图,

[amax

index]=max(yam);

%取纵坐标最大值和序号

gmax=angle(y(index));

%这句也没太看,取出模值最大值进行什么处理,

fmax=f(index);

%取出模值最大点对应的频率值

以上除了标注的,其他应该没问题,楼主在看看那两句吧,查查matlab的help

fft在MATLAB中是离散傅里叶变换的快速算法。

FFT使算法复杂度由原本DFT的O(n^2) 变为 O(nlogn)

通过它把信号从时间域变换到频率域,这个转换有助于研究信号的功率谱(频谱结构、变化规律),和使某些问题的计算更有效率。

a=10; b=10; x=0:30; y=((x-a)/b>=0)((x-a)/b<=1) subplot(2,1,1) plot(x,y) %这个是波形 N=size(y); N=N(2); yy=abs(fft(y))/N2; subplot(2,1,2) stem(yy) %这个是频谱

当你的抽样频率没有大于两倍的信号最大频率时,将会发生混频,那时的幅频特性图就不是高分辨的。很明显,你这个图已经符合要求,只是你没有加绝对值abs()函数。你可以选择用stem()函数来绘制图形。例如stem(abs(f,Y(1:257)))

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12182377.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存