преобразование Фурье с нерегулярной частотой дискретизации - PullRequest
0 голосов
/ 04 марта 2019

У меня есть некоторые данные, измеренные при частоте дискретизации 100 выборок в секунду, например,

a = [1, 4, 5, 6, 7, 8, 9, 6, 3, 2, 7, 1, 6]

, эти данные представляют вибрации автомобиля (смещения), когда он движется долго, допустим, я хочусмотреть только на вибрации, когда он движется с определенной скоростью, поэтому после того, как я сэмплирую это (возможно, установив бесполезные значения в 0), я получаю что-то вроде

b = [1, 4, 5, 0, 0, 0, 0, 6, 3, 0, 0, 1, 6]

сейчас, если я хочу посмотреть наПреобразование Фурье данных этих данных, что я использую в качестве домена и частоты дискретизации?

Использую ли я

b = [1, 4, 5, 0, 0, 0, 0, 6, 3, 0, 0, 1, 6] 

с частотой дискретизации 1/100, как раньше?

Или я могу удалить другие значения

c = [1, 4, 5, 6, 3, 1, 6] 

и другую частоту дискретизации?

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Я думаю, вы не понимаете, что такое частота дискретизации. Частота дискретизации генерируется вашим датчиком.Без постоянной частоты дискретизации вы не можете рассчитать правильные частоты.Песни и микрофон имеют стандартную частоту дискретизации 44 кГц.Это не меняет.Его стандарт.

Что является стандартным способом вычисления частотного спектра, так это разрезать ваш сигнал на временные порции и провести спектральный анализ этих порций.Точно так же, как это делается с тональным тюнером для гитар.

Итак, у вас есть частота дискретизации fs = 100hz.Допустим, ваш чанк будет 0.5s ->, что означает, что ваш чанк будет иметь значения fs*0.5s = 50.Вы будете выполнять спектральный анализ этих чанков, а не всего time_signal

Таким образом, при таком подходе вы можете отфильтровать интересующие вас чанки -> выше определенной скорости автомобиля.

Пример вкод:

all_data = [1,2,8,1,2,6,4,7,8,1,3.........] 
chunks = [[1,2,8...],[4,5,7,8,],...]
>>>len(chunks[0])
50
interesting_chunks = chunks that were measured when car reached 40mph
for interesting_chunk in interesting_chunks:
    FFT = np.fft(interesting_chunk)

Простым способом:

Вы НЕ МОЖЕТЕ вырезать значения в чистом сигнале, но если вы группируете сигнал по блокам, вы можете вырезатьэти куски и брать только те, которые вас интересуют

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


Примечание : чем больше чанк, тем точнее БПФ, но больше временное окно.Меньший кусок, менее точный FFT, но у вас есть небольшое временное окно - хорошо для приложений реального времени

0 голосов
/ 04 марта 2019

Это не так просто сказать по этой небольшой информации, но я попытаюсь угадать из моего опыта: вы не можете просто отбросить значения, которые вам не интересны.Вы пытаетесь преобразовать сигнал времени в частотную область, и, таким образом, я думаю, что вы изменяете физику, если тест.То, что вы хотите сделать, это удалить содержимое частот сигнала, соответствующего определенной скорости.Я бы попытался использовать фильтр нижних частот вместо удаления или установки на 0 значений, которые вам не нужны.Таким образом, вы можете поддерживать одинаковую частоту дискретизации и искусственно изменять данные теста.Частоты вибрации должны быть как-то связаны со скоростью движения (угадывая более высокие частоты для более высокой скорости).

Надеюсь, что это может помочь

Ciao

...