是你想要的结果吗??
clc clear all close all
x=[0,1,2,3,4,5,6,7]%输入的信号,自己可以改变
%整体运用原位计算
m=max(nextpow2(x))
N=2.^m % 求x的长度对应的2的最低幂次m
n=1:N
if length(x)<N
x=[x,zeros(1,N-length(x))] % 若x的长度不是2的幂,补零到2的整数幂
end
nxd=bin2dec(fliplr(dec2bin([1:N]-1,m)))+1 % 求1:2^m数列序号的倒序
y=x(nxd) % 将x倒序排列作为y的初始值
for mm=1:m % 将DFT作m次基2分解,从左到右,对每次分解作DFT运算,共做m级蝶形运算,每一级都有2^(mm-1)个蝶形结
Nz=2^mmu=1 % 旋转因子u初始化为WN^0=1
WN=exp(-i*2*pi/Nz) % 本次分解的基本DFT因子WN=exp(-i*2*pi/Nz)
for j=1:Nz/2 % 本次跨越间隔内的各次蝶形运算,在进行第mm级运算时需要2^(mm-1)个 蝶形
for k=j:Nz:N % 本次蝶形运算的跨越间隔为Nz=2^mm
kp=k+Nz/2 % 蝶形运算的两个因子对应单元下标的关系
t=y(kp)*u % 蝶形运算的乘积项
y(kp)=y(k)-t % 蝶形运算
y(k)=y(k)+t % 蝶形运算
end
u=u*WN % 修改旋转因子,多乘一个基本DFT因子WN
end
end
y1=fft(x) %与系统自带fft函数实现值对比
mag1=abs(y)
subplot(2,1,1)
stem(n,x)
title('输入序列x(n)')
subplot(2,1,2)
stem(n,mag1)
title('8点FFT计算结果')
可以这样写
clcclear
odefun = @(t,y)[y(2)y(3)3*y(3) + y(2)*y(1)]
tspan = [0,1]
y0 = [01-1]
[t1, y1] = ode45(odefun, tspan, y0)
plot(t1, y1(:,1), 'k.')
hold on
plot(t1, y1(:,2), 'c.')
[t2, y2] = ode113(odefun, tspan, y0)
plot(t2, y2(:,1), 'b*')
plot(t2, y2(:,2),'r+')
legend('ode45-y_1','ode45-y_2','ode113-y_1','ode113-y_2')
y-t图
e可见ode45是时间步均匀的,ode113的时间步是可变的
k=-25:25指的是k的取值是从-25到25之间,每隔1取一个值;W=(pi/12.5)*k指的是W的值为k的值乘以pi(3.1415926……)除以12.5;
w=W/pi表示w的值为W的值除以pi;
Y1=......表示Y1的值为后面这个运算的结果,其中exp表示自然指数函数,指数为括号里的值;(...).^(...)表示矩阵的指数函数,底为前面括号里的矩阵,指数为后面括号里的矩阵;n'表示矩阵n的转置
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)