Zip с signal.csv
: БПФ
У меня есть этот импульс:
Я могусоздайте его БПФ-график с помощью np.fft.rfft
:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
df = pd.read_csv('signal.csv')
fft = pd.DataFrame(np.abs(np.fft.rfft(df['1']))) #y
n = df['0'].size
unit_freq = 1000000000 #Giga
sample_rate = 10000000000 #10 GS/s
freq_sample_fact = sample_rate/unit_freq
freq = np.fft.rfftfreq(n, 1/freq_sample_fact) #x
fft.index = freq
fft.values[0] = 0
fft.plot(grid = 1,
color = (255/255,0,0),
linewidth = 0.3,
figsize = (10,5),
legend = False,
xlim = [fft.index[0], fft.index[-1]*0.8],
ylim = 0,
xticks = np.arange(0, freq_sample_fact/2 + 0.1, round(freq_sample_fact/2/10, 1)))
plt.xlabel('Frequenz / GHz')
plt.ylabel('Signalstärke')
plt.title('FFT')
plt.show()
Как я могу построить ось у логарифмически? Когда я добавляю
plt.semilogy(fft)
, это происходит:
Я хочу, чтобы ось y представляла значения от 0 до 20000 логарифмически, поэтомучто максимумы БПФ, например, 8000 и 16000, можно сравнивать друг с другом более удобно. Я надеюсь, что смогу прояснить мою точку зрения.