
如
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)更清楚。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)