Несоответствие между периодограммой, рассчитанной с помощью периодограммы SciPy, и периодограммы AstroPy Lomb Scargle наPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Несоответствие между периодограммой, рассчитанной с помощью периодограммы SciPy, и периодограммы AstroPy Lomb Scargle на

Сообщение Anonymous »

Я пытаюсь вычислить периодограмму своих данных, используя как периодограмму SciPy, так и периодограмму Ломб-Скаргла AstroPy — периодограмма совпадает везде, кроме частот, близких к минимальной частоте, как показано на моих графиках. Это результаты численного моделирования.
Основываясь на данных наблюдений, я ожидаю сильный сигнал около 0. Следовательно, результаты периодограммы SciPy выглядят более физически правдоподобными, чем периодограмма Ломба-Скаргла.< /p>
Я так и не понял, почему и как сделать их похожими. Мы будем очень признательны за любую информацию.
Ниже приведен код для воспроизведения моих графиков.
Из стандартной периодограммы SciPy:
Изображение
Из периодограммы Ломб-Скаргла:

from astropy.timeseries import LombScargle
import numpy as np
import pandas as pd
from scipy import signal
import requests
import matplotlib.pyplot as plt

def plot_periodogram(x,y,N_freq,min_freq,max_freq,height_threshold,periodogram_type):

fig, ax = plt.subplots(figsize=(12,8))

if periodogram_type == 'periodogram':
dx = np.mean(np.diff(x)) # Assume x is uniformly sampled
fs = 1 / dx

freq, power_periodogram = signal.periodogram(y,fs,scaling="spectrum",nfft=N_freq,
return_onesided=True,detrend='constant')
power_max = power_periodogram[~np.isnan(power_periodogram)].max()

plt.plot(freq, power_periodogram/power_max,linestyle="solid",color="black",linewidth=2)

filename = "PowerSpectrum"

else:

freq = np.linspace(min_freq,max_freq,N_freq)
ls= LombScargle(x, y,normalization='psd',nterms=1)
power_periodogram= ls.power(freq)

power_max = power_periodogram[~np.isnan(power_periodogram)].max()

false_alarm_probabilities = [0.01,0.05]
periodogram_peak_height= ls.false_alarm_level(false_alarm_probabilities,minimum_frequency=min_freq,
maximum_frequency=max_freq,method='bootstrap')

filename = "PowerSpectrum_LombScargle"
plt.plot(freq, power_periodogram/power_max,linestyle="solid",color="black",linewidth=2)
plt.axhline(y=periodogram_peak_height[0]/power_max, color='black', linestyle='--')
plt.axhline(y=periodogram_peak_height[1]/power_max, color='black', linestyle='-')

peaks_index, properties = signal.find_peaks(power_periodogram/power_max, height=height_threshold)
peak_values = properties['peak_heights']
peak_power_freq = freq[peaks_index]

for i in range(len(peak_power_freq)):
plt.axvline(x = peak_power_freq,color = 'red',linestyle='--')
ax.text(peak_power_freq+0.05, 0.95, str(round(peak_power_freq,2)), color='red',ha='left', va='top', rotation=0,transform=ax.get_xaxis_transform())

fig.patch.set_alpha(1)
plt.ylabel('Spectral Power',fontsize=20)
plt.xlabel('Spatial Frequency', fontsize=20)
plt.grid(True)
plt.xlim(left=min_freq,right=max_freq)

plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.savefig(filename,bbox_inches='tight')
plt.show()

# URL of the CSV file on Pastebin
url = 'https://pastebin.com/raw/uFi8WPvJ'

# Fetch the raw data from the URL
response = requests.get(url)

# Check if the request was successful
if response.status_code == 200:
# Decode the response content to text
data = response.text

# Save the data to a CSV file
with open('data.csv', 'w') as f:
f.write(data)

df =pd.read_csv('data.csv',sep=',',comment='%', names=['x', 'Bphi','r','theta'])
x = df['x'].values
y = df['Bphi'].values

# https://stackoverflow.com/questions/375 ... ngth-array
indices = np.logical_not(np.logical_or(np.isnan(x), np.isnan(y)))
x = x[indices]
y = y[indices]

y = y - np.mean(y)

N_freq = 10000

min_freq = 0.001;
max_freq = 4.0
height_threshold =0.7

plot_periodogram(x,y,N_freq,min_freq,max_freq,height_threshold,"periodogram")
plot_periodogram(x,y,N_freq,min_freq,max_freq,height_threshold,"ls")



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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Блокнот JupyterLab, показывающий «ModuleNotFoundError» @astropy
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Использование периодограммы для обнаружения сезонности временных рядов
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Woocommerce сортирует и фильтрует по рассчитанной цене
    Anonymous » » в форуме Php
    0 Ответы
    52 Просмотры
    Последнее сообщение Anonymous
  • Scikit-learn LinearRegrade не соответствует рассчитанной вручную регрессии с обычным методом наименьших квадратов (OLS)
    Anonymous » » в форуме Python
    0 Ответы
    69 Просмотры
    Последнее сообщение Anonymous
  • Вращение объекта вокруг фиксированной точки, рассчитанной по положению щелчка мыши.
    Anonymous » » в форуме C#
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous

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