作业帮 > 综合 > 作业

matlab做fft实验代码

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/29 18:43:29
matlab做fft实验代码
clc;clear;clf;
N=input('Node number')
T=input('cai yang jian ge')
f=input('frenquency')
choise=input('add zero or not?1/0 ')
n=0:T:(N-1)*T; %采样点
k=0:N-1;
x=sin(2*pi*f*n);
if choise==1
e=input('Input the number of zeros!')
x=[x zeros(1,e)]
N=N+e;
else
end %加零
k=0:N-1; %给k重新赋值,因为有可能出现加零状况
bianzhi=bi2de(fliplr(de2bi(k,length(de2bi(N-1)))))+1; %利用库函数进行变址运算
for l=1:N
X(l)=x(bianzhi(l)); %将采样后的值按照变址运算后的顺序放入X矩阵中
end
d1=1;
for m=1:log2(N)
d2=d1; %做蝶形运算的两个数之间的距离
d1=d1*2; %同一级之下蝶形结之间的距离
W=1; %蝶形运算系数的初始值
dw=exp(-j*pi/d2); %蝶形运算系数的增加量
for t=1:d2 %
for i=t:d1:N
i1=i+d2;
if(i1>N)break; %判断是否超出范围
else
p=X(i1)*W;
X(i1)=X(i)-p;
X(i)=X(i)+p; %蝶形运算
end
end
W=W*dw; %蝶形运算系数的变化
end
end
subplot(2,2,1);
t=0:0.0000001:N*T;
plot(t,sin(2*pi*f*t)); %画原曲线
subplot(2,2,2);
stem(k,x); %画采样后的离散信号
subplot(2,2,3);
stem(k,abs(X)/max(abs(X))); %画自己的fft的运算结果
subplot(2,2,4);
stem(k,abs(fft(x))/max(abs(fft(x)))); %调用系统的函数绘制结果,与自己的结果进行比较
Attempted to access x(25); index out of bounds because numel(x)=22.
Error in fft (line 18)
X(l)=x(bianzhi(l)); %将采样后的值按照变址运算后的顺序放入X矩阵中
说错误在这段代码,看不懂?
求大神教我这段代码怎么实现FFT变换,在matlab中怎么输入指令?
% bi2de 操作得到的结果 bianzhi 超出了 x 的索引范围(应该
再问: 那怎么修改啊?我第一次用matlab写代码
再答: % 改动两处有图,但不知道是否你所需要的% 16 行改成:bianzhi = randperm(N);% 40 行改成:t = 0:0.01:N*T;