matlab中fft的使用问题

matlab中fft的使用问题,第1张

貌似这是个书呆子编滴程序,以为乘法有交换律就随意改变位置,完全不管物理意义好不好理解,其实不就是采样定理要除2嘛!fft后最高频率是采样频率滴一半,计算频率数组时是以此原理再按几分之几均分其它部分,其实最易理解滴是(0:length(Yc)-1) /length(Yc)(Fs/2)这种表达,只不过原式与这式数学上计算结果相同。还有乘除法不用点运算,小心编译出错,真是相当糟糕的代码!

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

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

Y(1:halfLength+1)中1:halfLength+1是索引,而索引必须是正整数,所以,不能从0开始,要都加1,但是指却是从0值开始到最后一个值。

至于f的算法是不一样的,在f

=((0:halfLength)+1)Fs1/n这里,0:halfLength)+1是数值,不是索引,结果是一个矢量。

直接用X1=fft(x1,2048);也是可以的。但是,这两种语句,处理的结果是不同的。

现程序会在-2pi,0,2pi三处附近出现信号波形,而X1=fft(x1,2048);语句只在-2pi,2pi两处出现波形,你可试试。

另外,把plot(w,abs(X1));改为plot(w,X1);更清楚。

fft是内建函数,不是matlab写的,看不到源代码的

下面是我写的一个fft,可以用

function xn=myfft(x)

N=length(x);

M=log2(N);

xtmp=zeros(1,N);

value=zeros(1,M);

for i=0:N-1

repr=i;

for t=1:1:M

repr=bitshift(i,1-t);

value(t)=bitand(repr,1);

end

pos=0;

for k=1:1:M

pos=pos+value(k)2^(M-k);

end

xtmp(pos+1)=x(i+1);

end

for i=1:M

deepth=2^(i-1);

width=2^(M-i);

for t=1:2^i:N

for k=1:deepth

tmp=xtmp(t+k-1);

wn=width(k-1);

xtmp(t+k-1)=tmp+exp(-j2piwn/N)xtmp(t+k+deepth-1);

xtmp(t+k+deepth-1)=tmp-exp(-j2piwn/N)xtmp(t+k+deepth-1);

end

end

end

xn=xtmp;

望采纳!

以上就是关于matlab中fft的使用问题全部的内容,包括:matlab中fft的使用问题、MATLAB中的FFT应用、matlab做快速傅里叶变换,用FFT函数,程序看不懂,有高手能解释一下吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10134256.html

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

发表评论

登录后才能评论

评论列表(0条)

保存