matlab程序画图

matlab程序画图,第1张

是你想要的结果吗??

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的转置


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

原文地址: http://outofmemory.cn/yw/8144971.html

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

发表评论

登录后才能评论

评论列表(0条)

保存