matlab FFT. Застрявшие отношения понимания между частотой и результатом

Есть несколько способов сделать это, используя блокировки, а другой использует модуль logging. Я писал многопоточный код, используя threading.Lock(), но недавно я обнаружил, что logging гораздо проще в использовании.

lock = threading.Lock()
with lock:
     print("...")

with lock вызовет lock.acquire() при входе, а при выходе вызовет lock.release(). Или вы можете вызвать их вручную. Но обязательно сделайте это release после того, как вы его приобрели, иначе вы окажетесь в тупиках.

Другой более простой способ - использовать logging, как я уже упоминал. Библиотека logging является поточно-ориентированной, что означает, что любые потоки могут использовать функции одновременно. Использование этого модуля также позволяет записывать журналы в файлы журналов.

import logging

logging.basicConfig(format='%(message)s')
logging.info("...")
6
задан 5 October 2008 в 01:52
поделиться

7 ответов

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

С искажением данных пик в реальной частоте будет центрироваться вокруг (реальная частота Частота Найквиста по модулю). В Вашей выборке 20 Гц (принимающий 70 Гц истинная частота, которая приводит к нулевой частоте, что означает, что Вы не видите реальной информации. Одна вещь, которая может помочь Вам с этим, состоит в том, чтобы использовать "работу с окнами" FFT.

Другая проблема, которую можно испытывать, связана с шумным поколением данных через единственное-FFT измерение. Лучше взять много данных, использовать работу с окнами с перекрытием и удостовериться, что у Вас есть по крайней мере 5 FFTs, которые Вы насчитываете для нахождения результата. Как Steven Lowe упомянул, необходимо также выбрать на более быстрых уровнях, если это возможно. Я рекомендовал бы выбрать на самом быстром уровне, который могут выбрать Ваши инструменты.

Наконец, я рекомендовал бы прочитать некоторые выборки из Числовых Рецептов в C (<-ссылка):

Вы не должны читать исходный код C - просто объяснения. Числовые Рецепты для C имеют превосходную сжатую информацию о предмете.

Если Вы больше имеете вопросы, оставляете их в комментариях. Я попытаюсь приложить все усилия в ответе на них.

Удачи!

11
ответ дан 8 December 2019 в 12:24
поделиться

это - вероятно, не проблема программирования, она походит на проблему измерения эксперимента

я думаю, что частота дискретизации должна быть по крайней мере дважды уровнем частоты колебаний, иначе Вы получаете артефакты; это могло бы объяснить различие. Обратите внимание, что отношение частоты FFT к частоте дискретизации 0.35 в обоих случаях. Можно ли повторить эксперимент с более высокими частотами дискретизации? Я думаю, что, если это - узкий цилиндр при сильном ветре, он может вибрировать/колебаться быстрее, чем частота дискретизации может обнаружить..

я надеюсь, что это помогает - существует вероятность на 97,6%, что я не знаю то, о чем я говорю ;-)

4
ответ дан 8 December 2019 в 12:24
поделиться

Если это не проблема искажения, это кажется, что Вы могли бы выводить частотную характеристику на печать в масштабе нормированной частоты, который изменится с частотой замеров. Вот пример довольно хорошего способа вывести частотную характеристику на печать сигнала в Matlab:

Fs = 100;
Tmax = 10;
time = 0:1/Fs:Tmax; 
omega = 2*pi*10; % 10 Hz
signal = 10*sin(omega*time) + rand(1,Tmax*Fs+1);

Nfft = 2^8;
[Pxx,freq] = pwelch(signal,Nfft,[],[],Fs)
plot(freq,Pxx)

Обратите внимание, что частота замеров должна быть явно передана pwelch управляйте для вывода “реальных” данных частоты. Иначе, когда Вы изменяете частоту замеров мусорное ведро, где резонанс происходит, будет казаться, будет смещаться, который подобен проблеме, которую Вы описываете.

2
ответ дан 8 December 2019 в 12:24
поделиться

Мне кажется, необходимо сделать некоторое серьезное чтение на обработке цифровых сигналов, прежде чем можно будет даже начать понимать все нюансы DFT (FFT). Если бы я был Вами, то я основать в нем сначала с этой замечательной книгой:

Обработка сигналов дискретного времени

Если Вы хотите больше математической обработки, которая действительно развернет Ваши способности,

Анализ Фурье Körner

2
ответ дан 8 December 2019 в 12:24
поделиться

Я пытался использовать код частотной характеристики как выше, но кажется, что у меня нет соответствующей панели инструментов на Matlab. Там какой-либо путь состоит в том, чтобы сделать то же самое, не используя fft команду? До сих пор это - то, что я имею:

   % FFT Algorithm

Fs = 200;                     % Sampling frequency
T = 1/Fs;                     % Sample time
L = 65536;                    % Length of signal
t = (0:L-1)*T;                % Time vector
y = data1;                    % Your CP values go in this vector

NFFT = 2^nextpow2(L); % Next power of 2 from length of y
Y = fft(y,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2);

% Plot single-sided amplitude spectrum.
loglog(f,2*abs(Y(1:NFFT/2))) 
title(' y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')

Я думаю, что могло бы быть что-то не так с кодом, который я использую. Я не уверен что все же.

0
ответ дан 8 December 2019 в 12:24
поделиться

Смотрите на этот связанный вопрос. В то время как это первоначально спросили о спрошенном о VB, ответы в общем о FFTs

0
ответ дан 8 December 2019 в 12:24
поделиться

Мой коллега записал некоторые хорошие GPL-лицензированные функции для спектрального анализа: http://www.mecheng.adelaide.edu.au/~pvl/octave/

(Обновление: этот код является теперь частью одного из модулей Октавы:
http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/main/signal/inst/.
Но это могло бы быть хитро для извлечения просто частей, в которых Вы нуждаетесь оттуда.)

Они записаны и для Matlab и для Octave и служат главным образом в качестве общедоступной замены для аналогичных функций на Панели инструментов Обработки сигналов. (Таким образом, код выше должен все еще хорошо работать.)

Это может помочь с Вашим анализом данных; лучше, чем прокрутка Вашего собственного с fft и т.п..

0
ответ дан 8 December 2019 в 12:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: