Что не так с этим назначением Python по обработке сигналов - в основном серии Фурье и преобразованииPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Что не так с этим назначением Python по обработке сигналов - в основном серии Фурье и преобразовании

Сообщение Anonymous »

Я постараюсь как можно больше подробно описать, пожалуйста, спросите меня, не отсутствует ли какая-либо информация в вашем мнении. [0,0, ... 0,0,1,1,1, ..., 1,1,0, ... 0,0,0], где ровно 199, 99 на положительном и отрицательном и один на 0, выглядит так:

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

import numpy as np
import cmath
import matplotlib.pyplot as plt

D=1000
j = complex(0, 1)
pi = np.pi
N = 2 * D + 1

a=np.zeros(2*D+1)
for i in range(-99,100):
a[i+D] = 1
threshold = 1e-10
def clean_complex_array(arr, tol=threshold):
real = np.real(arr)
imag = np.imag(arr)

# Snap near-zero components
real[np.abs(real) < tol] = 0
imag[np.abs(imag) < tol] = 0
# Snap components whose fractional part is close to 0 or 1
real_frac = real - np.round(real)
imag_frac = imag - np.round(imag)

real[np.abs(real_frac) < tol] = np.round(real[np.abs(real_frac) < tol])
imag[np.abs(imag_frac) < tol] = np.round(imag[np.abs(imag_frac) < tol])

return real + 1j * imag

def fourier_series_transform(data, pos_range, inverse=False):
full_range = 2 * pos_range + 1
# Allocate result array
result = np.zeros(full_range, dtype=complex)

if inverse:
# Inverse transform: reconstruct time-domain signal from bk
for n in range(-pos_range, pos_range+ 1):
for k in range(-pos_range, pos_range+ 1):
result[n + pos_range] += data[k + pos_range] * cmath.exp(j * 2 * pi * k * n / full_range)
else:
# Forward transform: compute bk from b[n]
for k in range(-pos_range, pos_range+ 1):
for n in range(-pos_range, pos_range+ 1):
result[k + pos_range] += (1 / full_range) * data[n + pos_range] * cmath.exp(-j * 2 * pi * k * n / full_range)

return result

ak = fourier_series_transform(a, D)
ak = clean_complex_array(ak)
a_k выглядит так: (реальный сигнал SINC, который следует ожидать) e-14 и нет существенного вклада в сигнал ниже E-8. < /p>
Теперь для части, с которой у меня была проблема: нас попросили создать сигнал freq f_k, такой, что F_K будет A_K с 4 нулями после каждого значения и умножен 0,2*[A_0,0,0,0,0,0, A_1,0,0,0,0,0, A_2,0,0,0,0, A_3, ...], мы хотим показать, что это равносильно литератированию сигнала в домене времен. 10005 Образцов, которые составляют ровно 5*2001, что было исходным количеством образцов сигналов), ниже приведен код для этого раздела, чтобы установить f_k и f [n]: < /p>

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

stretch_factor = 5
f_k = np.zeros(stretch_factor * N, dtype=complex)
f_k[::stretch_factor] = 0.2 * ak  # scale to keep energy in check
# New domain size after stretching
D_new = (len(f_k) - 1) // 2
# Inverse transform to get f[n]
f_n = fourier_series_transform(f_k, D_new, inverse=True)
f_n = clean_complex_array(f_n)

plt.figure()
plt.plot(np.arange(-D_new, D_new + 1), np.real(f_n), label='Real part')
plt.plot(np.arange(-D_new, D_new + 1), np.imag(f_n), label='Imaginary part', color='red')
plt.grid(True)
plt.title("Compressed signal $f[n]$ after frequency stretching")
plt.xlabel("n")
plt.ylabel("Amplitude")
plt.legend()
И это то, что я получаю:

, что не так, я должен быть полностью Другое, что -то вроде этого:

Я не знаю, почему это так, и я даже пытался использовать, почему это так, и как это так, и как это так, и как это так и не могу, и как это не так, как это не так, и как это так и не могу.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... -fourier-s
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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