i copied it from the book i know the error is in the omega definition(line 12) but i dont know how to solve it please help

1 次查看(过去 30 天)
clear all;
distance=15;
beta2=1;
N=1;
mshape=input('m=0 for seech, m>0 for super-gaussian= ');
chirp0=0;
nt=1024;tmax=32;
stepnum=round(20*distance*N.^2);
deltaz=distance/stepnum;
dtau=(2*tmax)/nt;
tau=(-nt/2:nt/2-1)*dtau;
omega=(pi/tmax)*(0:nt/2-1) (-nt/2:-1);
if mshape==0
uu=sech(tau).*exp(-0.5i*chirp0*tau.^2);
else
uu=exp(-0.5*(1+1i*chirp0).*tau.^(2*mshape));
end
%%%%%
temp=fftshift(ifft(uu)).*(nt*dtau)/sqrt(2*pi);
figure;
subplot(2,1,1);
plot(tau,abs(uu).^2,'--k');hold on;
axis([-5 5 0 inf]);
xlabel('time');
ylabel('power');
title('input and output pulse shape and spectrum');
subplot(2,1,2);
plot(fftshift(omega)/(2*pi),abs(temp).^2,'--k');hold on;
axis([-.5 .5 0 inf]);
xlabel('frequency');
ylabel('power');
%%%%%
dispersion=exp(0.5*1i*beta2*omega.^2*delta2);
hhz=1i*N^2*deltaz;
%%%%%
temp=uu.*exp(abs(uu).^2.*hhz/2);
for n=1:stepnum
ftemp=ifft(temp).*dispersion;
uu=fft(f_temp);
temp=uu.*exp(abs(uu).^2.*hhz);
end
uu=temp.*exp(-abs(uu).^2.*hhz);
temp=fftshift(ifft(uu)).*(nt*dtau)/sqrt(2*pi);
subplot(2,1,1)
plot(tau,abs(uu).^2,'-k')
subplot(2,1,2)
plot(fftshift(omega)/(2*pi),abs(temp).^2,'-k')
  7 个评论
Walter Roberson
Walter Roberson 2016-6-12
anu chauhan,
You have put at least one |(| in the wrong place. You have somehow made fftshift into a reference to a variable instead of making it a call to the MATLAB fftshift function. Perhaps
plot(fftshift(omega/(2*pi)), abs(temp).^2, 'k')
Afroja Akter
Afroja Akter 2017-5-12
Hi ,
I solve this problem in Matlab, but my problem is when i try to solve in Fortran95. Could anybody help me in fft loop portion solution in fortran.
Thanking Afroja

请先登录,再进行评论。

回答(1 个)

Wayne King
Wayne King 2013-12-7
编辑:Wayne King 2013-12-7
I'm assuming that you are missing brackets around the vector in omega
distance=15;
beta2 = 1;
delta2=1;
N=1;
mshape=input('m=0 for seech, m>0 for super-gaussian= ');
chirp0=0;
nt=1024;tmax=32;
stepnum=round(20*distance*N.^2);
deltaz=distance/stepnum;
dtau=(2*tmax)/nt;
tau=(-nt/2:nt/2-1)*dtau;
omega=(pi/tmax)*[(0:nt/2-1) (-nt/2:-1)];
if mshape==0
uu=sech(tau).*exp(-0.5i*chirp0*tau.^2);
else
uu=exp(-0.5*(1+1i*chirp0).*tau.^(2*mshape));
end
%%%%%
temp=fftshift(ifft(uu)).*(nt*dtau)/sqrt(2*pi);
figure;
subplot(2,1,1);
plot(tau,abs(uu).^2,'--k');hold on;
axis([-5 5 0 inf]);
xlabel('time');
ylabel('power');
title('input and output pulse shape and spectrum');
subplot(2,1,2);
plot(fftshift(omega)/(2*pi),abs(temp).^2,'--k');hold on;
axis([-.5 .5 0 inf]);
xlabel('frequency');
ylabel('power');
%%%%%
dispersion=exp(0.5*1i*beta2*omega.^2*delta2);
hhz=1i*N^2*deltaz;
%%%%%
temp=uu.*exp(abs(uu).^2.*hhz/2);
for n=1:stepnum
ftemp=ifft(temp).*dispersion;
uu=fft(ftemp);
temp=uu.*exp(abs(uu).^2.*hhz);
end
uu=temp.*exp(-abs(uu).^2.*hhz);
temp=fftshift(ifft(uu)).*(nt*dtau)/sqrt(2*pi);
subplot(2,1,1)
plot(tau,abs(uu).^2,'-k')
subplot(2,1,2)
plot(fftshift(omega)/(2*pi),abs(temp).^2,'-k')
However there are other problems, nowhere do you define/compute what delta2 is. I have just set it equal to 1, but I have no idea, you'll have to figure that part out.
Also, there is mistake where f_temp is confused with ftemp.

类别

Help CenterFile Exchange 中查找有关 Spectral Measurements 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by