2013-10-15 3 views
0

Я пытаюсь создать синтетические данные из эксперимента. Я получил теоретический PSD в положительной частотной области и вычислил некоторые тайм-ауты из. Чем C сделать некоторые манипуляции с моими данными, сделать FFT и вписаться в частотную область. Сначала я покажу вам код, чем объяснить основные проблемы:FFT без смазывания в Python

закромах, на которых я оцениваю теоретические PSD мои мусорные ведра по формуле:

bins = np.linspace(1,1e3,2**13) 

Из того, что я вычисляю мои timerseries по:

for i in range(bins.shape[0]): 
    signal += dataCOS[i] * np.cos(2*np.pi* t * bins[i] + random.uniform(0,2*np.pi)) 

, где dataCOS это значение PSD и соответствующие контейнеры и t дается

t_full = np.linspace(0,1,2**13, endpoint = False) 

Моя проблема в том, что мне нужен БПФ моего времени, который не мажет. Хорошо, обычно это невозможно, НО, если я прав, и добавьте ровно одну частотную ячейку на каждый бит, чтобы они совпадали в кадре (самая высокая и самая низкая частота все еще видна), он должен работать. Итак, мой вопрос в том, как формировать бункеры и t_full?

Вот мои мысли. Оба должны иметь одинаковое количество точек, а самая высокая и самая низкая частота должна быть видна во временной области. Но я не уверен, надеюсь, ты сможешь мне помочь.

EDIT ****************************************** Во-первых, для проиллюстрируйте мою проблему немного больше, посмотрим на прилагаемые изображения: enter image description here В первом случае у вас есть классический результат обратной трансформации со слишком большим количеством точек во временной области, но при этом все бункеры являются периодическими. enter image description here Во втором это то же самое, но теперь они уже не являются периодическими, и каждый получает ожидаемое размытие. Конечно, здесь можно улучшить фильтр, но если вы хотите поместиться в красную функцию, вы столкнетесь с серьезной проблемой. Последнее изображение - результат, который я хотел: все функции являются периодическими в течение таймфрейма, поэтому нет размытия. Во-вторых, каждая пара t_bins содержит ровно одну частоту i, добавленную ранее, поэтому облако на вычислительном пределе исчезает. enter image description here

Чтобы получить что, здесь требуется расстояние бункеров и т

bins = np.linspace(0,2**14,2**14, endpoint = False) 
t_full = np.linspace(0,1,2*bins.shape[0], endpoint = False) 

ответ

0

Вы, вероятно, просто нужно применить подходящий window function до FFT для предотвращения spectral leakage. Я не пользователь Python, поэтому я не могу дать код, но формула довольно проста. Попробуйте окно von Hann или Hamming (они похожи, но дают несколько разные формы пиков).

+0

Я уже думал об этом, но это не может работать, поскольку он просто меняет ширину пика. Фитинг впоследствии не имеет смысла. – user2003965

+0

OK - Я действительно не понимаю, чего вы пытаетесь достичь (может быть, добавить вопрос о ваших данных и его PSD к вопросу?), Но обычно разрывы во временной области (из-за предположения о периодичности) являются проблема, и функция окна исправляет это. –

+1

Чтобы избежать перерегулирования на концах, было бы полезно добавить нули или только старые данные, наоборот, чтобы отменить это размытие. Функция окна имеет смысл, если у вас есть хорошая аргументация для частоты среза. Не могли бы вы опубликовать несколько фотографий, чтобы сделать проблемы более ясными? – Faultier

Смежные вопросы