Дискретное преобразование Фурье Неожиданный пик - PullRequest
0 голосов
/ 24 октября 2019

Я реализую ДПФ и преобразовал синусоидальную волну (f = 440 Гц) в качестве теста. Однако в преобразованном сигнале есть пик, которого я не ожидаю (см. Рисунок ниже). Кто-нибудь может понять, почему он там?

Мой код:

import numpy as np
import matplotlib.pyplot as plt

t = 0.1
freq = 440
Fs = 2000
T = 1/Fs
N = int(Fs * t)

# signal information                 
omega = 2 * np.pi * freq       # angular frequency of the sine wave
t_vec = np.arange(N) * T     # time vector for plotting
y = np.sin(omega * t_vec)  # sine input signal

def DFT(y, N):
    dft = []
    angle = (-1 * 1j * 2 * np.pi) / (N)
    for k in range(int(N)):
        X = 0
        for n in range(int(N)):
            X += y[n] * np.exp(angle * k * n)
        dft.append(X)
    return dft

freq_vec = Fs * np.arange((N))/N

dft_signal = np.abs(DFT(y = y, N = N))

#Plots
fig, (ax1, ax2) = plt.subplots(2)
ax1.plot(t_vec, y, label='$y = numbers')
ax1.set(ylabel='Amplitude', xlabel='Time [s]', title = 'Input Signal')
ax2.plot(freq_vec, dft_signal, linewidth=5)
ax2.set(yscale='log', xscale='log', ylabel='Amplitude', xlabel='Frequency [Hz]', title = 'DFT of Input Signal')
plt.tight_layout() 
plt.show()

enter image description here

1 Ответ

1 голос
/ 24 октября 2019

Ваш код мне кажется хорошим. То, что вы видите, это просто отрицательные частоты, поскольку преобразование Фурье синусоидальной функции состоит из пика положительных частот и одного пика отрицательных. Не изображайте это в масштабе xlog, и это будет казаться более очевидным! Тогда это просто вопрос fftshift, чтобы поместить нулевую частоту в середину или в начало массива (как ваша реализация).

Помните, что если ваш частотный диапазон равен Fs, то ваш DFT толькоидет от -Fs/2 до +Fs/2

...