Я получил некоторый сигнал в моей симуляции Abaqus для проверки.Истинный сигнал должен быть идеальной синусоидой на частоте 300 кГц, и я произвел fft для дискретизированного сигнала, используя scipy.fftpack.fft
.
Но я получил странный спектр, как показано ниже (извините, что я слишком ленив, чтобы масштабировать ось X спектра до правильной частоты).На том же рисунке я разрезал сигнал на части и построил график во временной области.Я также повторил тот же процесс для чистой синусоиды. Это меня совершенно удивляет.Как указано ниже в коде, частота дискретизации составляет 16,66 от частоты сигнала.На данный момент, я думаю, это связано с очень маленькой ошибкой в периоде выборки.Теоретически, Абакус должен отобрать его через регулярный промежуток времени.Как видите, есть небольшая ошибка, так что точки в моем сигнале кажутся более толстыми, чем идеальный сигнал.Но дает ли такая маленькая ошибка разительную разницу в частотном спектре?В противном случае, почему частотный спектр такой?
FYI1: Это увеличенный спектр моего сигнала:
FYI2: Этокод python, который использовался для получения приведенных выше цифр
def myfft(x, k, label):
plt.plot(np.abs(fft(x))[0:k], label = label)
plt.legend()
plt.subplot(4,1,1)
for i in range(149800//200):
plt.plot(mysignal[200*i:200*(i+1)], 'bo')
plt.subplot(4,1,2)
myfft(mysignal,150000//2, 'fft of my signal')
plt.subplot(4,1,3)
[Fs,f, sample] = [5e6,300000, 150000]
x = np.arange(sample)
y = np.sin(2 * np.pi * f * x / Fs)
for i in range(149800//200):
plt.plot(y[200*i:200*(i+1)], 'bo')
plt.subplot(4,1,4)
myfft(y,150000//2, 'fft of a perfect signal')
plt.subplots_adjust(top = 2, right = 2)
FYI3: Здесь - мой сигнал в форматах .npy
и .txt
.Сигнал довольно длинный.Имеет 150001 баллов..txt
- это необработанный файл от Abaqus.Формат .npy
- это то, что я использовал для создания вышеприведенного графика - (1) вектор времени удаляется и (2) данные имеют половину точности и нормализуются.