Вт мар 24, 2015 14:22:47
Вт мар 24, 2015 14:35:12
INA писал(а):2. Как мне рассчитать таблицы синуса и косинуса для своего (какого-то...) приложения, если мне, например вздумалось выделить из спектра три любые частоты (скажем, 1000Гц, 1200Гц, 1500Гц)?
INA писал(а):1. Каким образом влияет частота дискретизации на результаты обработки данных БПФ?
Вт мар 24, 2015 15:05:59
Спасибо Вам за быстрые ответы и вообще за оперативное общение!
1. Каким образом влияет частота дискретизации на результаты обработки данных БПФ?
2. Как мне рассчитать таблицы синуса и косинуса для своего (какого-то...) приложения, если мне, например вздумалось выделить из спектра три любые частоты (скажем, 1000Гц, 1200Гц, 1500Гц)?
мне пока нужно разобраться в сути...
Вт мар 24, 2015 15:08:37
pcb писал(а):Целиком задача как звучит?
Вт мар 24, 2015 15:21:32
понять как работает БПФ, применительно к AVR и пр. железкам...
Так вот, на этом моменте вычисления этих таблиц (или массивов) я должен учитывать то, что мои данные с АЦП идут с частотой дискретизации 10000Гц?
Вт мар 24, 2015 15:28:41
YS писал(а):
Сдвигает максимальную частоту анализа и меняет разрешение по частоте.
YS писал(а):
Суть следующая:
1. Чтобы оценить относительную амплитуду одной конкретной частоты (и вообще любого сигнала) в произвольном сигнале применяется скалярное произведение, оно же корреляция (коэффициент корреляции). Это просто сложение произведений выборок двух сигналов.
Если есть сигналы [1,2,3] и [4,5,6] их скалярное произведение будет 1*4 + 2*5 + 3*6 = 32.
2. Когда нам надо построить спектр (то есть проверить кучу частот), можно действовать как в п.1, но это будет долго. Такое вычисление "в лоб" (или почти "в лоб") называется дискретным преобразованием Фурье. Оно дает некоторое приближение спектра сигнала.
3. Чтобы ускорить п.2, тригонометрические функции не вычисляют каждый раз, а заранее складывают в таблицы и берут из них.
4. Чтобы еще сильнее ускорить процесс расчета, придумали БПФ - быстрое преобразование Фурье. Оно основано на математических свойствах преобразования.
Результат же везде получается одинаковый - массив временных выборок преобразуется в массив частотных выборок. Если говорить о результате БПФ, то в нем нулевой элемент массива соответствует среднему значению сигнала, средний - половине частоты дискретизации. Первая половина массива - приближение спектра, вторая - мусор (не совсем так, но если по-простому, сойдет и такое пояснение).
Вт мар 24, 2015 15:40:25
Вт мар 24, 2015 15:53:41
Т.е., для работы БПФ совершенно без разницы, с какой частотой исходный сигнал был оцифрован?
Если при выделении просто нескольких частот достаточно корреляции сигнала с таблицами синуса и косинуса
то при БПФ что за таблицами пользуются?
И у него нет отрицательных значений в таблицах. (?)
Возможно, создатели проектов как раз и пользовались разными подходами к решению подобных задач?
Умножая их потом на 127, но это уже частности...
Но он не пишет каким образом он их сгенерировал... ?
Вт мар 24, 2015 16:28:21
Вт мар 24, 2015 16:36:09
Вт мар 24, 2015 17:00:05
Вт мар 24, 2015 17:11:55
1. Насчёт дискретизации: получается, что если я точно не знаю частоту дискретизации (значения в массиве, считанные с АЦП уже есть), то я просто-напросто не смогу определить какой выборке соответствует какая частота?
Никаких накоплений в виде суммы произведений как тут x_real[k] += x_n[n] * Math.Cos( (-2) * Math.PI * k * n / 1024 ); не нужно?
Вт мар 24, 2015 17:28:44
YS писал(а):
Нужно. Сама суть - в накоплении, расчете корреляции.
Вт мар 24, 2015 18:00:34
signal = {};
F1=5;
P1=0.8;
F2=10;
k=0;
while k<1000 do
signal[k]=math.cos(2*math.pi*F1*(k/1000)+P1) + math.cos(2*math.pi*F2*(k/1000)) + 1*(math.random() - 0.5);
k=k+1;
end;
REL_FREQ=5;
k=0;
s_re=0;
s_im=0;
while k<1000 do
s_re=s_re+math.cos(2*math.pi*REL_FREQ*(k/1000))*signal[k];
s_im=s_im+math.sin(2*math.pi*REL_FREQ*(k/1000))*signal[k];
k=k+1;
end;
print(s_re,";",s_im,";",math.sqrt(s_re^2+s_im^2));
340.9868715185 ; -352.52017847724 ; 490.45134598816
487.23896012134 ; 0.57229975367557 ; 487.23929622634
-15.783519852489 ; 8.4533221429504 ; 17.904696428211
-2.9354296771089e-013 ; 2.8305136012818e-013 ; 4.0778124817472e-013
Вт мар 24, 2015 18:33:38
Вт мар 24, 2015 18:43:00
В данном случае (в данном примере) частоты взяты относительные...
Но, по сути частоту можно указать явно?
В Герцах?
Вт мар 24, 2015 19:20:24
Вт мар 24, 2015 19:47:36
Ср мар 25, 2015 14:42:07
Чт мар 26, 2015 14:32:42