如何用matlab实现fft

如何用matlab实现fft,第1张

matlab中fft有1d和2d的,fft得到的是信号的频谱即t-》f

clear

%编写骆遥

fs=1000

t=0:1/fs:0.6

f1=100

f2=300

x=sin(2*pi*f1*t)+sin(2*pi*f2*t)

subplot(711)

plot(x)

title('f1(100hz)\f2(300hz)的正弦信号,初相0')

xlabel('序列(n)')

grid

on

number=512

y=fft(x,number)

n=0:length(y)-1

f=fs*n/length(y)

subplot(713)

plot(f,abs(y))

title('f1\f2的正弦信号的fft(512点)')

xlabel('频率hz')

grid

on

x=x+randn(1,length(x))

subplot(715)

plot(x)

title('原f1\f2的正弦信号(含随机噪声)')

xlabel('序列(n)')

grid

on

y=fft(x,number)

n=0:length(y)-1

f=fs*n/length(y)

subplot(717)

plot(f,abs(y))

title('原f1\f2的正弦信号(含随机噪声)的fft(512点)')

xlabel('频率hz')

grid

on

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(-j*2*pi*wn/N)*xtmp(t+k+deepth-1)

xtmp(t+k+deepth-1)=tmp-exp(-j*2*pi*wn/N)*xtmp(t+k+deepth-1)

end

end

end

xn=xtmp

望采纳!

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

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

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


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

原文地址:https://54852.com/bake/11377867.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存