кратковременное преобразование Фурье python - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь выполнить ручное преобразование Фурье на простой косинусоидальной волне. Я разделил данные на 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 применить применение преобразования Фурье к каждому сегменту данных?

original cosine wave

trying to plot the power spectrum

...