2016-12-30 2 views
0

Я использую учебник MATLAB Frequency-Domain Linear Regression. Существует одна часть кода, где необходимо определить «по частоте положительной и отрицательной частоты», для FFT и IFFT, эта часть кода:Matlab-частота бит положительной и отрицательной частоты

freqbin = 72/12; 
freqbins = [freqbin 72-freqbin]+1; 
tsfit = zeros(72,1); 
tsfit(freqbins) = tsdft(freqbins); 
tsfit = ifft(tsfit); 
mu = mean(ts); 
tsfit = mu+tsfit; 

Длина временных рядов 72, и есть 12 месяцев - один цикл. Как может быть только один частотный бит для положительной частоты, откуда мы знаем, что точно 72/12 + 1 (+1 - это потому, что первый бит равен нулю), это какая-то формула или что?

ответ

0

Начнем с некоторых общих замечаний. Если частота дискретизации Fs, а число выборок в FFT является N, то частота мусорную с индексом MATLAB k является:

f_k = (k-1) * Fs/N ; 

Или, наоборот,

k = f_k * N/Fs + 1; 

Следовательно, элементы вектора FFT соответствуют частотам 0, Fs/N, 2*Fs/N, ..., (N-1)*Fs/N.

Обратите внимание, что частоты являются инвариантными относительно сдвигов на Fs. Другими словами, f и f+Fs и f-Fs эквивалентны. Таким образом, вы можете считать, что первая половина вектора FFT соответствует положительным частотам (индекс: от 1 до N/2, частота: 0 - (N/2-1)/N*Fs), а вторая половина соответствует отрицательным частотам (индекс: N/2 + 1 до N; частота: -Fs/2 до -Fs/N). Здесь я включаю 0 в набор положительных частот для краткости.

Теперь, приходя на ваш конкретный пример:

N = 72 
Fs = 12 ; % samples per year 

Таким образом, положительный диапазон частот от 0 до Fs/2 = 6 циклов в год, что соответствует показателям 1 до 36, соответственно.

Вы заинтересованы в поиске образца БПФ, соответствующего частоте 1 цикла в год. Это соответствует индексу 1 * 72/12 + 1 = 7. Поскольку БПФ симметричен для реальных сигналов, вы также заинтересованы в поиске образца БПФ, соответствующего частоте -1 цикла в год, который, используя свойство сдвиговой инвариантности, также эквивалентен -1 + Fs = 11 циклам в год. Соответствующий индекс равен (12-1) * 72/12 + 1 = 67.

В заключение,

  • Есть 36 положительных частот (включая 0), а не 1.
  • Алгоритм заинтересован только в одной положительной частоте с наибольшей величиной.
  • Эта частота составляет 1 цикл в год. Соответствующий индекс MATLAB является 7.
  • зеркального отображения частоты -1 цикла в год, что соответствует индексу MATLAB 67.
+0

спасибо. Что делать, если в моем примере длина временных рядов нечетное число, что соответствует индексу, который является десятичным числом? Fs также равно 12. Можете ли вы еще раз пояснить «Обратите внимание, что частоты инвариантны относительно сдвигов на Fs. Другими словами, f и f + Fs и f-Fs эквивалентны." –

+0

Индексы _greater или or_ N/2 + 1 можно считать отрицательными независимо от того, является ли N четным или нечетным. Связь между f_k и k, описываемая двумя верхними уравнениями в ответе, выполняется для любого значения N. О частотной сдвиговой инвариантности: это связано с дискретным представлением времени. Проведите этот эксперимент: постройте два синусоида с частотой 1 кГц и 49 кГц соответственно, сэмплированные на частоте 48 кГц. Они выглядят одинаково? Любые две синусоиды, разделенные частотой Fs, быть не различимым. [Подробнее] (http://allsignalprocessing.com/discrete-time-frequency-avoid-confusion/) – aksadv

+0

Но что, если я получаю, что k является десятичным числом? Мне нужно использовать k позже, как индекс для серии коэффициентов Фурье? –

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

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