|
Python |
Matlab/Octave |
Vorbereitung (Laden von Modulen/Paketen) |
#python -m pip install --upgrade numpy
#python -m pip install --upgrade matplotlib
#pip install --upgrade numpy
#pip install --upgrade matplotlib
from numpy import *
from numpy.fft import *
from matplotlib.pyplot import *
|
|
Rechteckfenster … |
N=1000
dt=1.0
t=arange(0,N)*dt
M=100
w=ones(M)
w=append(zeros((N-M)//2),append(w,zeros((N-M+1)//2)))
plot(t,w)
show()
|
N=1000;
dt=1;
t=(0:N-1)*dt;
M=100;
w=ones(1,M);
w=[zeros(1,fix((N-M)/2)),w,zeros(1,fix((N-M+1)/2))];
plot(t,w)
|
… und das Fourier-Spektrum |
f=roll(arange(-(N//2),(N+1)//2)/float(N)*dt,N//2)
W=fft(w)
semilogy(roll(f,N//2),roll(abs(W),N//2))
show()
|
f=circshift((-fix(N/2):fix((N-1)/2))/N*dt,fix(N/2));
W=fft(w);
semilogy(circshift(f,fix(N/2)),circshift(abs(W),fix(N/2)))
|
Anwendung eines idealen Tiefpasses |
Wp0=fft(w)
for i in range(11,N-10):
Wp0[i]=0
semilogy(roll(f,N//2),roll(abs(W),N//2),roll(f,N//2),roll(abs(Wp0),N//2))
show()
|
Wp0=fft(w);
for i=12:N-10
Wp0(i)=0;
end
semilogy(circshift(f,fix(N/2)),circshift(abs(W),fix(N/2)),circshift(f,fix(N/2)),circshift(abs(Wp0),fix(N/2)))
|
Rücktransformation des Fourier-Spektrums in ein Zeitsignal (überschwingend und verschliffen) |
wp0=real(ifft(Wp0))
plot(t,w,t,wp0)
show()
|
wp0=real(ifft(Wp0));
plot(t,w,t,wp0)
|
Erfassen benachbarter Nebenzipfel |
Wp1=fft(w)
for i in range(21,N-20):
Wp1[i]=0
semilogy(roll(f,N//2),roll(abs(W),N//2),roll(f,N//2),roll(abs(Wp1),N//2))
show()
|
Wp1=fft(w);
for i=22:N-20
Wp1(i)=0;
end
semilogy(circshift(f,fix(N/2)),circshift(abs(W),fix(N/2)),circshift(f,fix(N/2)),circshift(abs(Wp1),fix(N/2)))
|
Rücktransformation des Fourier-Spektrums in ein Zeitsignal (überschwingend und verschliffen, schärfere Kanten) |
wp1=real(ifft(Wp1))
plot(t,w,t,wp1)
show()
|
wp1=real(ifft(Wp1));
plot(t,w,t,wp1)
|
Erfassen weiterer Nebenzipfel |
Wp2=fft(w)
for i in range(31,N-30):
Wp2[i]=0
Wp3=fft(w)
for i in range(41,N-40):
Wp3[i]=0
Wp4=fft(w)
for i in range(51,N-50):
Wp4[i]=0
semilogy(roll(f,N//2) ,roll(abs(W),N//2),roll(f,N//2),roll(abs(Wp4),N//2),roll(f,N//2),roll(abs(Wp3),N//2),roll(f,N//2),roll(abs(Wp2),N//2),roll(f,N//2),roll(abs(Wp1),N//2),roll(f,N//2),roll(abs(Wp0),N//2))
show()
|
Wp2=fft(w);
for i=32:N-30
Wp2(i)=0;
end
Wp3=fft(w);
for i=42:N-40
Wp3(i)=0;
end
Wp4=fft(w);
for i=35:N-50
Wp4(i)=0;
end
semilogy(circshift(f,fix(N/2)),circshift(abs(W),fix(N/2)),circshift(f,fix(N/2)),circshift(abs(Wp4),fix(N/2)),circshift(f,fix(N/2)),circshift(abs(Wp3),fix(N/2)),circshift(f,fix(N/2)),circshift(abs(Wp2),fix(N/2)),circshift(f,fix(N/2)),circshift(abs(Wp1),fix(N/2)),circshift(f,fix(N/2)),circshift(abs(Wp0),fix(N/2)))
|
Rücktransformation des Fourier-Spektrums in ein Zeitsignal (schärfere Kanten, aber Überschwingen bleibt gleich hoch, Gibbsches Phänomen) |
wp2=real(ifft(Wp2))
wp3=real(ifft(Wp3))
wp4=real(ifft(Wp4))
plot(t,w,t,wp4,t,wp3,t,wp2,t,wp1,t,wp0)
show()
|
wp2=real(ifft(Wp2));
wp3=real(ifft(Wp3));
wp4=real(ifft(Wp4));
plot(t,w,t,wp4,t,wp3,t,wp2,t,wp1,t,wp0)
|