БПФ прямоугольных импульсов в питонеPython

Программы на Python
Ответить
Anonymous
 БПФ прямоугольных импульсов в питоне

Сообщение Anonymous »

Я работаю над заданием по преобразованию сценария Matlab для преобразования прямоугольного импульса в Python. Однако выходные данные в Python неожиданно представляют собой прямую горизонтальную линию.
Исходный скрипт выполняет БПФ для прямоугольного импульса с различными фильтрами нижних частот.

Код: Выделить всё

rect=zeros(100,1);
ffrect=zeros(100,1);
for j=45:55
rect(j,1)=1;
end
frect=fft(rect);
frect=fftshift(frect);
for j = 1:4
klimlow=50-j*10
klimhigh=50+j*10
for k=1:100
if (k < klimlow) | (k > klimhigh)
ffrect(k,1) = 0;
else
ffrect(k,1)=frect(k,1);
end
end
rrect=ifft(ifftshift(ffrect));
plot(real(rrect))
ylim([-0.2 1.5])
foo=input('Press RETURN to proceed to the next rectangle pulse');
end
Правильный и ожидаемый результат первой итерации цикла выглядит следующим образом:
Вывод в Matlab
Я попробовал преобразовать скрипт в Python:

Код: Выделить всё

import numpy as np
import matplotlib.pyplot as plt

rect = np.zeros((100, 1))
ffrect = np.zeros((100, 1))

for j in range(45, 56):
rect[j, 0] = 1

frect = np.fft.fft(rect)
frect = np.fft.fftshift(frect)

for j in range(0, 5):
klimlow = 50 - j * 10
klimhigh = 50 + j * 10

for k in range(100):
if (k < klimlow) or (k > klimhigh):
ffrect[k, 0] = 0
else:
ffrect[k, 0] = frect[k, 0]

rrect = np.fft.ifft(np.fft.ifftshift(ffrect))

plt.figure()
plt.plot(np.real(rrect))
plt.ylim([-0.2, 1.5])

plt.show()
Но результат выглядит так:
Вывод в Python
Есть идеи, что я сделал не так?

Подробнее здесь: https://stackoverflow.com/questions/777 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»