Я пытаюсь выполнить ручное преобразование Фурье на простой косинусоидальной волне. Я разделил данные на 8 сегментов, а затем применил конусность к каждому сегменту. однако у меня возникают проблемы с преобразованием Фурье для каждого независимого сегмента ...
Это мой код:
import numpy as np
#create a windowing function
def get_windows(n, Mt, olap):
# Split a signal of length n into olap% overlapping windows each containing Mt terms
ists = []
ieds = []
ist = 0
while 1:
ied = ist + Mt
if ied > n:
break
ists.append(ist)
ieds.append(ied)
ist += int(Mt * (1 - olap/100))
return ists, ieds
#splitting the data into segments by applying the windowing function
fs = 10e3 # Sampling frequency
N = 1e5 # Number of samples
time = np.arange(N) / fs
x = np.cos(5*time)
ists, ieds = get_windows(N, Mt=12500, olap=10) # windows of length 100 and 10% overlap
output = []
for ist, ied in zip(ists, ieds):
output.append(x[ist:ied])
## apply tapering window (hanning window) to make the ends go to 0 of each segment
dim = output.shape
N = dim[1]
n = np.arange(N)
w = np.zeros(N)
for i in range (0,N):
w[i] = .5*(1 - np.cos((2*np.pi*n[i])/N))
tapered_segments = w[None,:]*output #multiply only with the first axis (slas at different times)
# HERE IS WHERE THE ISSUE COMES UP where i try to perform a FT on the segments
#taking FFT of each segment
fft = []
for i in range(tapered_segments.shape[0]):
fft.append(np.fft.rfft(tapered_segments[i,:], axis=0))
fft = np.array(fft)
spectrum = calc_spec(fft)
freqs = freq_arr(tapered_segments[2,:])
обратите внимание, что данные (разбитые на сегменты) имеют форму of (8, 12500), означая, что есть 8 сегментов данных с 12500 точками косинусоидальной волны. когда я пытаюсь получить спектр мощности для каждого сегмента ... я не получаю выходной сигнал, когда я пытаюсь построить контурный график. (изображения прилагаются). Как мне go применить применение преобразования Фурье к каждому сегменту данных?