Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Анализатор спектра ультразвукового диапазона
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Nukers
На сайте http://www.zetms.ru/catalog/analyzers/a19.php есть описание анализатора спектра.

Требуется проделать подобное, но на один канал (без аналогового выхода, цифрового выхода, коэффициенты усиления программируемые так же не нужны) с несколько измененными характеристиками:

1) Частота входного сигнала до 100кГц.
2) Частота дискретизации до 250кГц.
3) Количество разрядов АЦП 16.
4) Для отображения сигнала в частотную область использую БПФ (на ADSP 21375).
5) Динамический диапазон то же - 85дБ.


Возникли вопросы по алгоритму:

1) Если сигнал случайный (музыка, речь и.т.д), то как определить частоту гармоники с наибольшей амплитудой в спектре?
2) Как наиболее достоверно (погрешность от 2 до 5%) отобразить спектр?
3) Какую фильтрацию использовать?
4) Можно ли обойтись без октавных фильтров, а использовать скажем оконную фильтрацию (при условии, что накапливаю несколько периодов сигнала основной частоты)?
DRUID3
Цитата(Nukers @ Mar 7 2010, 13:13) *
1) Если сигнал случайный (музыка, речь и.т.д), то как определить частоту гармоники с наибольшей амплитудой в спектре?

ohmy.gif

Цитата(Nukers @ Mar 7 2010, 13:13) *
2) Как наиболее достоверно (погрешность от 2 до 5%) отобразить спектр?

...мало того, можно его отобразить с достоверностью 0.01%
... меньше чем разрешение в пикселах на дисплее будет... в чем проблема то? laughing.gif

Цитата(Nukers @ Mar 7 2010, 13:13) *
3) Какую фильтрацию использовать?

...ну... можно сказать и так... любое отображение одного множества на другое - своего рода фильтрация...

Цитата(Nukers @ Mar 7 2010, 13:13) *
4) Можно ли обойтись без октавных фильтров, а использовать скажем оконную фильтрацию (при условии, что накапливаю несколько периодов сигнала основной частоты)?

mellow.gif
А откуда октавные фильтры? sad.gif И опять эта "основная частота"...


P.S.: а чем Вы раньше занимались, и с чего вдруг интерес к такого рода заданию?

P.P.S.: Я думаю будет нелишне прочесть, что такое спектр вообще, в чем суть спектра мощностей и об алгоритмах DFT и FFT(к Вашему процу есть готовые примеры) ...

P.P.P.S.: что-бы не выглядеть только критикующим - Вам так или иначе нужно делать FFT(алгоритм заведомо блочный), потом выделять магнитуду как sqrt(I*I+Q*Q). Для каждого частотного "бина"... Может оказаться(в зависимости от того сколько точек взято для FFT), что спектр будет меняться быстрее чем успевает это воспринять оператор - тогда для каждого "бина" по оси времени можно применить скользящее среднее или блочное среднее. Если разрешение выходного БПФ больше чем отведенный массив пикселей на экранчиГе - то блочно масштабировать разрешение. Децимировать ни в коем случае нельзя - это безвозвратные потери полосы по Котельникову-Найквисту - возможны различные значительные артефакты.
Nukers
Цитата
..мало того, можно его отобразить с достоверностью 0.01%
... меньше чем разрешение в пикселах на дисплее будет... в чем проблема то? laughing.gif

Знаю, что можно. Что на это влияет?
Цитата
Цитата

3) Какую фильтрацию использовать?


...ну... можно сказать и так... любое отображение одного множества на другое - своего рода фильтрация...

Интересуют оконные КИХ фильтры. Точнее правильное расположение окна - чтобы снизить погрешность.

Цитата
Цитата
4) Можно ли обойтись без октавных фильтров, а использовать скажем оконную фильтрацию (при условии, что накапливаю несколько периодов сигнала основной частоты)?


mellow.gif
А откуда октавные фильтры? sad.gif И опять эта "основная частота"...


Вот код:
Код
clear all;
Fs=250000; % Чатота дискретизации для БПФ
%y = wavread('Scala Milan Opera Hall.wav');y=y(:,2); % Не нужно, если wav
%файл моно.
%y = wavread('1000Hz_Sine.wav');y=y(:,2); % Не нужно, если wav файл моно.
%y = wavread('1500Hz_Triangle.wav');y=y(:,2); % Не нужно, если wav файл
%моно.
y = wavread('speech_dft.wav');
%y=y'; % Просто меняет стобцы со строками местами
x=y;
NFFT = 2^nextpow2(length(y)); % Next power of 2 from length of y
Y = fft(x,NFFT)/length(y);
f = Fs/2*linspace(0,1,NFFT/2+1);
% Plot single-sided amplitude spectrum.
figure(1),subplot(211),plot(f,2*abs(Y(1:NFFT/2+1))),grid on;
title('АЧХ сигнала');
xlabel('Frequency (Hz)');
ylabel('|Y(f)|');
%y=y'; % Просто меняет стобцы со строками местами
figure(1),subplot(212),plot(y),grid on;
title('Сигнал во временной области');
%wavplay(y,44100);


Думаю, понятно что он делает.
Так вот там есть так называемая "основная частота" - т.е. та частота, что имеет наибольшую амплитуду (возможно я неправильно подобрал определение просто).

Вопрос не стоит в отображении как таковом. Устройство лишь должно произвести БПФ, получить спектр, затем отправить пакетик через USB или Ethernet в компьютер. Далее работа программы верхнего уровня, которую нет смысла затрагивать. На данном этапе важно лишь получить вектор, содержащий информацию об амплитуде (фазу пока тоже не затрагиваем) (см. вышеописанный код).

Сэмпл, к вышеприведенному коду: Нажмите для просмотра прикрепленного файла

Есть под ADSP 21375 EZ-KIT Lite примеры выполнения FFT Radix2 и Radix4 ? Буду благодарен. smile.gif

Знаю, что подобное устройство реализовано не одной российской и тем более зарубежной фирмой (потому и привел ссылку на готовый девайс). Поэтому буду благодарен, если укажите на литературу, содержащую готовые алгоритмы обработки (неплохо бы с блок-схемами, можно на английском). Литературы по FFT, цифровой фильтрации достаточно (прочел если что). Гоноровского с Баскаковым тоже прочел и внимательно (это для DRUID3 smile.gif ), но от ошибок пока не застрахован, т.к. опыта мало (я студень еще).

Вообщем, нужна литература (или ваши подсказки, комментарии) с описанием алгоритмов или хотя бы с указанием того какой алгоритм лучше применить в моем случае.
DRUID3
Цитата(Nukers @ Mar 7 2010, 14:05) *
Знаю, что можно. Что на это влияет?

Точность вычисления - от корреляции с базисными функциями (амплитуда) и степени приближенности алгоритма к скользящему окну(частота)... laughing.gif
Динамический же диапазон по-частоте - от количества точек БПФ и от формы функции окна одновременно и независимо. Вам выбирать как достичь Ваших 85 dB.

Цитата(Nukers @ Mar 7 2010, 14:05) *
Интересуют оконные КИХ фильтры. Точнее правильное расположение окна - чтобы снизить погрешность.

Боги Шамбалы... Да это функции окна... они совсем не КИХ по своей природе... sad.gif Степень точности разрешения по частоте - пропорциональна гладкости функции окна. Но в виду необратимой потери энергии сигнала при этом - теряется точность по времени и возникают артефакты(например - постоянный ток становится пульсирующей функцией). Для борьбы с которыми применяют перекрывающиеся окна - что в пределе просто вырождается в скользящий алгоритм. laughing.gif

Цитата(Nukers @ Mar 7 2010, 14:05) *
Думаю, понятно что он делает.

Да, он строит физическую спектрограмму звуковых семплов, отбрасывая инфу о фазе. В какой строчке здесь фильтр? wink.gif

Цитата(Nukers @ Mar 7 2010, 14:05) *
Так вот там есть так называемая "основная частота" - т.е. та частота, что имеет наибольшую амплитуду (возможно я неправильно подобрал определение просто).

Нет... ее там нет и быть не может... Есть понятие "основной тон речи"... Но это вообще не из этой степи, и Вам нужно на время забыть это определение...

Цитата(Nukers @ Mar 7 2010, 14:05) *
Вопрос не стоит в отображении как таковом. Устройство лишь должно произвести БПФ, получить спектр, затем отправить пакетик через USB или Ethernet в компьютер. Далее работа программы верхнего уровня, которую нет смысла затрагивать. На данном этапе важно лишь получить вектор, содержащий информацию об амплитуде (фазу пока тоже не затрагиваем) (см. вышеописанный код).

biggrin.gif

Цитата(Nukers @ Mar 7 2010, 14:16) *
Сэмпл, к вышеприведенному коду: Нажмите для просмотра прикрепленного файла

...вряд-ли он чем-то мне поможет. laughing.gif

Цитата(Nukers @ Mar 7 2010, 14:16) *
Есть под ADSP 21375 EZ-KIT Lite примеры выполнения FFT Radix2 и Radix4 ? Буду благодарен. smile.gif

...они на сайте AD лежат... biggrin.gif

Цитата(Nukers @ Mar 7 2010, 14:16) *
Поэтому буду благодарен, если укажите на литературу, содержащую готовые алгоритмы обработки (неплохо бы с блок-схемами, можно на английском). Литературы по FFT, цифровой фильтрации достаточно (прочел если что). Гоноровского с Баскаковым тоже прочел и внимательно (это для DRUID3 smile.gif ), но от ошибок пока не застрахован, т.к. опыта мало (я студень еще).

Фирмы в открытую не афишируют свои блок-схемы... Читайте и думайте значит еще - все это выплывает из природы вещей которые мы обсуждаем... То, что студент - похвально! Я в Ваши годы вообще ничего из этой лабуды почти не знал wink.gif ...
Nukers
Цитата
Цитата

Думаю, понятно что он делает.


Да, он строит физическую спектрограмму звуковых семплов, отбрасывая инфу о фазе. В какой строчке здесь фильтр? wink.gif


Фильтра там нет пока. Но будет. Выбираю.
DRUID3
Цитата(Nukers @ Mar 7 2010, 17:09) *
Фильтра там нет пока. Но будет. Выбираю.

smile.gif "Фильтр" или "оконная функция"? Вот Вы приходите в магазин, а на полке книга - "нейронные сети" - не удивляет что она называется не "фильтрация"... Хотя где-то в глубине души - это было-бы верно... wink.gif

Дальше о выборе оконной функции - вся эта проблематика несколько раздута теоретиками. Долго объяснять почему... Но очень похоже на аналоговую FM - в НИИ всякие функции Бесселя и матфизика - а на практике как дядя Вася монтер это накрутит так и будет. laughing.gif

Возьмите кольцевой буфер на 4096 точек. Разбейте его на 4 равных интервала - 1024 точек. Примените трапецевидное окно. 0...1024 - прямая проходящая через начало координат[0,0] и точку [1024,1] у Вас же float, так? Далее два интервала по 1024 точек просто прямая параллельная оси Ox - т.е. с этими данными ничего не делаем. Последний интервал опять прямая - [3072,1]..[4096,0].
Делаем так - с приходом каждой новой порции 1024-х отсчетов производим наложение окна и делаем FFT всего буфера на 4096 бинов. Т.е. за обход всего буфера у нас получается 4-е FFT на 4096 точек - при этом у окон по временной линии частичное перекрытие - на четверть длинны интервала рассмотрения. Далее эти 4-е результата FFT по-точечно суммируем и получаем одно FFT длинной 4096 бинов. Что логично wink.gif ... Далее - все как-обычно... Для 4096 точек увеличение ДД по частоте будет существенное - я немного отошел от этих дел и сейчас не скажу - но для float ДД ожидается в районе 90-100 dB.
Если бы это была AVR-ка и расход памяти был бы весом - как функцию окна можно было бы применить трапецию в четвертьсинусоидальными скатами (гармоническая функция по-любому будет храниться в памяти для вычисления FFT).

P.S.: кстати - Вам нужно применять RealFFT. Вход то у Вас, по-идее, один...

P.P.S.: для диплома(если речь о нем) это все очень знаетели жирно... Напомните руководителю о истории возникновения лицензии BSD, о том что в развитых странах для того что-бы полюбоваться студенческими работами не нужна санкция прокурора, и о том что порядочные люди зарабатывают работая, а не эксплуатируя... wink.gif biggrin.gif
Nukers
Нажмите для просмотра прикрепленного файла
Тут я постарался графически отобразить мое понятие временного наложения кольцевого буфера (Оно конечно абстрактно)

Себе я выстроил такой алгоритм (поправьте, если заблуждаюсь):
1) Принимаем порцию из 1024 отсчетов.
2) Накладываем окно (т.е. копируем эту порцию 4 раза).
3) Делаем 4096 точечное БПФ.
4) Удаляем порцию из 1024 отсчетов №4.
5) Принимаем новую порцию из 1024 отсчетов.
6) Идем на шаг 3.
(Выходит пока буфер "протолкнет" последний отсчет, принятый в самом начале пройдет 4 цикла БПФ - усвоил).
и так пока солнце не сгорит.... Верно?


В MatLab можно с помощью утилиты Filter Design & Analysis Tool можно рассчитать функцию окна. Там же можно узнать АЧХ этой функции и кучу разных параметров, вообщем вы знаете. Если эту оконную функцию экспортировать в Simulink, то будет построен стандартный прямой КИХ фильтр (вот почему я упоминал слово фильтр).

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

Не пытаюсь спорить с вами, просто хотелось бы знать: Реализованный КИХ фильтр на основе весовой функции в MatLab и весовая функция на основе кольцевых буферов дадут одинаковые результаты?

Да, использовать буду RealFFT.

P.S. Спасибо за переживания. Никто меня не эксплуатирует. Тема интересная, потому и взял. Времени мало, так что, скорее всего, прийдется ограничиться микропроцессорной системой, кусками кода и алгоритмом. Все же знают, что у студентов на бумаге все работает. biggrin.gif Так что после университета будем развивать тему дальше rolleyes.gif
DRUID3
Цитата(Nukers @ Mar 7 2010, 23:00) *
Тут я постарался графически отобразить мое понятие временного наложения кольцевого буфера (Оно конечно абстрактно)

Нет... не так...

Цитата(Nukers @ Mar 7 2010, 23:00) *
Себе я выстроил такой алгоритм (поправьте, если заблуждаюсь):
[i]1) Принимаем порцию из 1024 отсчетов.

...да...
Цитата(Nukers @ Mar 7 2010, 23:00) *
2) Накладываем окно (т.е. копируем эту порцию 4 раза).
...нет-нет-нет! Какой ужас wacko.gif ... Мы ничего никуда не копируем - его принцип неприкосновенен... кольцевой буфер живет своей жизнью - самый новый сэмпл затирает самый старый. Данные все поступают и поступают... И так без конца... После каждых новых 1024-х сэмплов мы его полностью переписываем в отдельный массив(4096 слов) - накладываем функцию окна(уже на этот массив) и делаем FFT(прям на месте этого массива обычно и получим результат - так работает большинство алгоритмов).
И храним до получения еще 3-х подобных...

Цитата(Nukers @ Mar 7 2010, 23:00) *
3) Делаем 4096 точечное БПФ.
над массивом...
...да...
Цитата(Nukers @ Mar 7 2010, 23:00) *
4) Удаляем порцию из 1024 отсчетов №4.

ну они сами "затрутся"... на то буфер и кольцевой...

Цитата(Nukers @ Mar 7 2010, 23:00) *
5) Принимаем новую порцию из 1024 отсчетов.

ну да... даже правильнее говорить "дождемся поступления еще 1024-х отсчетов"... Они могут как блочно приходить так и по-одному... зависит от ситуации "на местах"... smile.gif ... Вообще за этим должна следить переменная а-ля семафор(unsigned int). Тем или иным способом в памяти появилось 1024 новых сэмпла(DMA, через процессор, другой процессор, как угодно...) - она меняет свое состояние заставляя систему работать. Пусть она считает по-блочно. Тогда это должно выглядеть как 3-2-1-0-3-2-1-0-... С каждым ее изменением мы производим перерасчет FFT, а с каждым "обнулением" происходит "дополнительное действие" - сложение 4-х предыдущих результатов FFT в одно...

Цитата(Nukers @ Mar 7 2010, 23:00) *
6) Идем на шаг 3.

Нет... на шаг "1"...

Цитата(Nukers @ Mar 7 2010, 23:00) *
(Выходит пока буфер "протолкнет" последний отсчет, принятый в самом начале пройдет 4 цикла БПФ - усвоил).
и так пока солнце не сгорит.... Верно?

Верно-то оно верно - но... так как нарисовано у меня smile.gif ...

Цитата(Nukers @ Mar 7 2010, 23:00) *
В MatLab можно с помощью утилиты Filter Design & Analysis Tool можно рассчитать функцию окна. Там же можно узнать АЧХ этой функции и кучу разных параметров, вообщем вы знаете. Если эту оконную функцию экспортировать в Simulink, то будет построен стандартный прямой КИХ фильтр (вот почему я упоминал слово фильтр).


Ммм...
Цитата(Nukers @ Mar 7 2010, 23:00) *
Выходит, что для реализации оконной функции есть два метода: один при помощи кольцевых буферов, второй умножением каждого отсчета сигнала на соответсвующий весовой коэффициент и его сдвигом.

Ээээ... mellow.gif Вы опять где-то что-то недочитали... Нет там никакого сдвига... Это не FIR алгоритм... Вот подумайте откуда берется прямоугольная функция окна по-умолчанию для FFT?... Да это же просто интервал рассмотрения - блок... Можно сказать, что все сэмплы на входе FFT умножены на "1"-цу. А вот при определенной оконной функции - не все на "1"-у laughing.gif ...

Цитата(Nukers @ Mar 7 2010, 23:00) *
Не пытаюсь спорить с вами, просто хотелось бы знать: Реализованный КИХ фильтр на основе весовой функции в MatLab и весовая функция на основе кольцевых буферов дадут одинаковые результаты?

Каждый бин FFT по природе соей фильтр - поскольку это значение корреляции с синусоидой на определенном промежутке. По-умолчанию фйильтр этот с sinc(w)-подобной АЧХ. Наложив гладкую функцию окна на интервал рассмотрения Вы домножите АЧХ функции рассмотрения на АЧХ каждого бина в отдельности. Вот так они связаны. Не на прямую... biggrin.gif И они не то что результаты разные дадут - они вообще разные вещи в данном контексте...

Цитата(Nukers @ Mar 7 2010, 23:00) *
Да, использовать буду RealFFT.

Это гут... Но их на сайте нет laughing.gif ...

Цитата(Nukers @ Mar 7 2010, 23:00) *
P.S. Спасибо за переживания. Никто меня не эксплуатирует. Тема интересная, потому и взял. Времени мало, так что, скорее всего, прийдется ограничиться микропроцессорной системой, кусками кода и алгоритмом. Все же знают, что у студентов на бумаге все работает. biggrin.gif Так что после университета будем развивать тему дальше rolleyes.gif

biggrin.gif
TigerSHARC
Цитата(Nukers @ Mar 8 2010, 00:00) *
Нажмите для просмотра прикрепленного файла
Тут я постарался графически отобразить мое понятие временного наложения кольцевого буфера (Оно конечно абстрактно)

Себе я выстроил такой алгоритм (поправьте, если заблуждаюсь):
1) Принимаем порцию из 1024 отсчетов.
2) Накладываем окно (т.е. копируем эту порцию 4 раза).
3) Делаем 4096 точечное БПФ.
4) Удаляем порцию из 1024 отсчетов №4.
5) Принимаем новую порцию из 1024 отсчетов.
6) Идем на шаг 3.
(Выходит пока буфер "протолкнет" последний отсчет, принятый в самом начале пройдет 4 цикла БПФ - усвоил).
и так пока солнце не сгорит.... Верно?


В MatLab можно с помощью утилиты Filter Design & Analysis Tool можно рассчитать функцию окна. Там же можно узнать АЧХ этой функции и кучу разных параметров, вообщем вы знаете. Если эту оконную функцию экспортировать в Simulink, то будет построен стандартный прямой КИХ фильтр (вот почему я упоминал слово фильтр).

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


Не могу не поучаствовать.
При наложении окна на выборку окно ничего не копирует 4 раза. Просто окно как бы сглаживает выборку покраям, уменьшая разрывы функции при FFT.
В матлаб для реализации оконной функции есть Window Design & Analysis Tool. И сглаживание, о котором я тебе говорил, не имеет отношение к КИХ-фильтрации. Просто окно может применяться для построения КИХ-фильтров.

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

P.S. Не путай окно как функцию спадающую покраям (Хэмминг, Ханн, Блэкмэн...) и временное окно (время за которое берётся определённое количество выборок).
Стучи в ICQ!)

----------------------------------------------------------------------------------------------------------------------------------------------

То, насколько я знаю проблему, позволяет мне сформулировать вопрос.
Сигнал поступающий на осциллограф может иметь полосу до 100кГц.
Остаётся открытым вопрос о длине выборки. Так как сигнал заведомо неизвестен.
Допустим сигнал содержит составляющие 100Гц, 105Гц и 302 Гц.
если N = 4096 то частотное разрешение в спектре составит 200000/4096 = 48,82 Гц.
И мы просто не увидим с пектре гармоники 105, 302 Гц. Они просто переползут на ближайшие бины БПФ. и сильно могут искозить то, что должно приходиться на эти бины.
Можно сделать вывод, что нужно сначала задаться наименьшим возможным шагом гармоник в сигнале?
Как это решается в современных анализаторах спектра?

Могу предположить, что в выборки сигнала можно вставить нули....
Nukers
Кто-нибудь может дать ссылку, где можно найти информацию по времени выполнения реального БПФ для ADSP-21375 при количестве точек 256, 512, 1024, 2048 и 4096?

Заранее огромное спасибо
DRUID3
Цитата(TigerSHARC @ Mar 8 2010, 09:11) *
Допустим сигнал содержит составляющие 100Гц, 105Гц и 302 Гц.
если N = 4096 то частотное разрешение в спектре составит 200000/4096 = 48,82 Гц.
И мы просто не увидим с пектре гармоники 105, 302 Гц. Они просто переползут на ближайшие бины БПФ. и сильно могут искозить то, что должно приходиться на эти бины.

Надуманная проблема. А вот если изменения звукового давления - не нарушая Найквиста-Котельникова - будут приходиться не на целые дискреты времени от начала выборки(уже смешно biggrin.gif ) а на дробные? Перезапустить прибор? И так пока не угадаем?

То что Вы описываете на самом деле не проблема. Временной сэмпл или частотный бин - однозначно-обратимо-разделимо размазывается по соседним выборкам.
Но для отдельных случаев, например извечная тема - измерение Кг 50(60) Hz-овой синусоиды, это не очень удобно. Потому там и мухлюют с этим периодом измерений и числом точек FFT. Для любых "чуть более стохастических" сигналов с этим уже не заморачиваются...
Единственное что - иногда при частоте дискретизации не кратной степени двойки (например кратной 44100) хотят получить кратный десяткам(удобно для восприятия человеком) шаг частотных бинов. Тогда нужно писать специфическое FFT - не для степеней 2-ки...

Цитата(TigerSHARC @ Mar 8 2010, 09:11) *
Можно сделать вывод, что нужно сначала задаться наименьшим возможным шагом гармоник в сигнале?
Как это решается в современных анализаторах спектра?

Никак... Такой проблемы нет.

Цитата(TigerSHARC @ Mar 8 2010, 09:11) *
Могу предположить, что в выборки сигнала можно вставить нули....

Куда? Интересно бы мне было узнать... smile.gif

Цитата(Nukers @ Mar 13 2010, 19:15) *
Кто-нибудь может дать ссылку, где можно найти информацию по времени выполнения реального БПФ для ADSP-21375 при количестве точек 256, 512, 1024, 2048 и 4096?

Заранее огромное спасибо

В листинге самих исходников приведены такты... wink.gif ...Кстати "реального" FFT, насколько помню там нет(а оно таки есть)... Но для 1024 точек RealFFT - заведомо быстрее ComplexFFT для 1024 точек. Прикиньте - не ошибетесь...

Возьмите RealFFT из этой библиотеки. Далее есть 2-а пути - так и оставить - сомневаюсь что ассемблерный результат будет колоссально выше. Второй путь - убрать внутреннее комплексное БПФ (а оно там есть по-любому) и вставить ассемблерное с сайта AD...
Nukers
Спаасибо огромное. Но я нашел лишь для 21364. А для 375-ого нет. Не ткнете пальцем?
DRUID3
Цитата(Nukers @ Mar 13 2010, 20:25) *
Спаасибо огромное. Но я нашел лишь для 21364. А для 375-ого нет. Не ткнете пальцем?

Цитата
The ADSP-21375 device is pin-compatible and code-compatible with prior SHARC Processors such as the ADSP-21367 and ADSP-21369...


ADSP-2136x Application Code Examples...

Кстати - Single-Channel Real Rad2 FFT - там есть...
TigerSHARC
Цитата(DRUID3 @ Mar 13 2010, 20:51) *
Надуманная проблема. А вот если изменения звукового давления - не нарушая Найквиста-Котельникова - будут приходиться не на целые дискреты времени от начала выборки(уже смешно biggrin.gif ) а на дробные? Перезапустить прибор? И так пока не угадаем?

То что Вы описываете на самом деле не проблема. Временной сэмпл или частотный бин - однозначно-обратимо-разделимо размазывается по соседним выборкам.
Но для отдельных случаев, например извечная тема - измерение Кг 50(60) Hz-овой синусоиды, это не очень удобно. Потому там и мухлюют с этим периодом измерений и числом точек FFT. Для любых "чуть более стохастических" сигналов с этим уже не заморачиваются...
Единственное что - иногда при частоте дискретизации не кратной степени двойки (например кратной 44100) хотят получить кратный десяткам(удобно для восприятия человеком) шаг частотных бинов. Тогда нужно писать специфическое FFT - не для степеней 2-ки...


Никак... Такой проблемы нет.


Куда? Интересно бы мне было узнать... smile.gif


В листинге самих исходников приведены такты... wink.gif ...Кстати "реального" FFT, насколько помню там нет(а оно таки есть)... Но для 1024 точек RealFFT - заведомо быстрее ComplexFFT для 1024 точек. Прикиньте - не ошибетесь...

Возьмите RealFFT из этой библиотеки. Далее есть 2-а пути - так и оставить - сомневаюсь что ассемблерный результат будет колоссально выше. Второй путь - убрать внутреннее комплексное БПФ (а оно там есть по-любому) и вставить ассемблерное с сайта AD...


Ну думаю теперь всё решено.
Nukers
Уважаемый DRUID3. Есть к вам вопрос.
Уолт Кестер в Главе 5, стр. 22 Быстрое Преобразование Фурье http://www.analog.com.ru/Public/5.pdf пишет, что максимальное время выполнения БПФ при реализации в реальном масштабе времени рассчитывается как:

Tmax=N/fs

Таким образом при N=1024 и fs=250кГц получаем Tmax=4096мкс.

Я понял так:

1) Включили прибор
2) Подождали неск. тактов пока закончатся переходные процессы (в осн. для аналоговой части).
3) Копим первые 1024 отсчета с fs=250кГц - это и занимает 4096мкс. (В это время подпрограмма выполнения БПФ просто не вызывается=процессор простаивает).
4) Обрабатываем 1024 полученных отсчета по алгоритму БПФ. (Для ADSP-21375 при 266МГц и 1024 точках это занимает ~27мкс).
5) На пункт 3.
...и.т.д.

Скажите, я не ошибся? Верно ли, что пока копятся первых 1024 отсчета у меня есть 4096мкс, чтобы выполнить БПФ на 1024 точки, а так же на сопутствующие операции?
Nukers
Господа форумчане подскажите!

Собираюсь использовать следующий алгоритм:

НЧ фильтр->АЦП->БПФ->КИХ фильтр (основанный на функции окна Ханна)

У Смитта написано, что КИХ фильтрация это свертка сигнала и импульсной характеристики фильтра. А во временной области - это просто умножение коэффициентов фильтра на отсчеты сигнала. Хочу использовать второй способ. Следовательно сначала делаю БПФ, а затем фильтрацию.

Подскажите это корректно? Какие трудности возникают? Вносятся ли искажения когда делаем БПФ не фильтрованного сигнала?

Перекрытия спектров на частотах, кратных частоте дискретизации нет.
TigerSHARC
а кокой смысл делать БПФ до фильтрации... как я понимаю у тебя дискретный фильтр служит как антиалиасинговый фильтр...

У того же смита это описанов разделе передискретизации сигнала. Когда используется поганая RC-цепь первого порядка, дискретизируем сигнал на повышенной частоте, затем компенсируем поганую АЧХ аналогового фильтра дискретным фильтром, а потом понижаем повышеную частоту до той которая нужна...

алгоритм у анализатора спектра разве не такой:

НЧ-фильтр-> АЦП -> КИХ-фильтр -> весовая функция окна -> БПФ

разумеется это в первом приближении
DRUID3
Nukers
я часа в 3-4 ночи просыпаюсь, тогда вам и отвечу... Если кто из форумчан ответит раньше буду только рад. Сорри что раньше не ответил, как-то подзабыл, блин...

Пока мой совет - все-таки разберитесь, что же такое функция окна. Я же довольно корректно и понятно это изложил. Зачем Вам FIR после FFT? Что он отфильтрует? Вам нужна функция окна для обеспечения т.з. по динамическому диапазону - развязки ближайших частотных бинов. Она накладывается до FFT, непосредственно на блок его входных данных. Это ни под каким углом не FIR-алгоритм. А просто перемножение 2-х функций внутри блока - поточечно (для FIR обе функции поточечно перемножаем, потом все это складываем в результате в 1-у точку, сдвигаем на сэмпл график входного сигнала и заново... и т.д.)... Но результат такого перемножения скажется на АЧХ частотного бина FFT - они перемножатся - АЧХ прямоугольного окна и функции окна заданной Вами... Ввиду природы самой функции окна - FFT из-за конечности интервала рассмотрения корректно представить не как корреляцию входной функции с синусоидой, а как корреляцию входной функции с произведением функции окна(прямоугольник - т.е. его спектр sinc(w)) и синусоиды. Если наложить окно - добавится третья функция...

Цитата(TigerSHARC @ Mar 22 2010, 20:25) *
алгоритм у анализатора спектра разве не такой:

НЧ-фильтр-> АЦП -> КИХ-фильтр -> весовая функция окна -> БПФ

Такой... но и FIR можно отбросить. НЧ фильтр то, неизменный во времени... Можно однажды подкорректировать бины FFT и все... laughing.gif
TigerSHARC
всё таки применение FIR в данном случае оправдано вот чем. НЧ фильтр сам по себе неидеален не в плане неравномерности АЧХ(да, тут можно подкоректировать) а в плане того, что его полоса неидеальна. Чтобы не городить НЧ фильтр высокого порядка для фильтрации всего что выше исследуемой полосы в сигнале. Просто строим простой фильтр (аппаратно). Затем смотрим на какой частоте АЧХ спадает на 40дБ(ну или на другое значение в зависимости от нужной точности). Далее умножаем эту частоту на два и получаем частоту дискретизации. Эта частота избыточна. Теперь фильтруем FIR'ом всё что выше 100 кГц (для данного случая) и понижаем частоту дискретизации да 200 кГц. ЭТО по книгам.

Но, думаю можно так выбираем частоту среза аналогового фильтра на частоте намного ниже 100кГц. Чтобы задавть всё что выше 100кГц. Но тогда АЧХ в полосе пропускания будет ОЧЕНЬ сильно искажена. Но можно это компенсировать программно. Тогда может FIR и не нужен.
анатолий
Цитата(Nukers @ Mar 22 2010, 21:16) *
Собираюсь использовать следующий алгоритм:
НЧ фильтр->АЦП->БПФ->КИХ фильтр (основанный на функции окна Ханна)
Подскажите это корректно? Какие трудности возникают? Вносятся ли искажения когда делаем БПФ не фильтрованного сигнала?

КИХ фильтр в конце - это корректно, это вместо того, чтобы умножать на временное окно.
Если это окно Ханна, то импульсная характеристика - простая - 1-2-1.
А для других окон - сложнее.
Так что дешевле будет умножать на окно, а не фильтровать потом спекр.
Nukers
Я о том же, что и говорит анатолий.
Мне непременно прийдется выполнять цифровую фильтрацию входного сигнала, чтобы отбросить полосы частот, которые повторяются на fs, 2fs, 3fs и.т.д.
По Смитту есть два способа фильтрации:
1) Во временной области: Это свертка сигнала с импульсной характеристикой фильтра (функцией окна, если построен оконный фильтр).
2) В частотной области: Это умножение частотных бинов, полученных после БПФ, на весовые коэффициенты окна (импульсной характеристики фильтра).


Вопрос сейчас лишь в том, какой из этих способов не внесет лишних гармоник и почему? (Ссылки плиз, если есть).

Цитата
Такой... но и FIR можно отбросить. НЧ фильтр то, неизменный во времени... Можно однажды подкорректировать бины FFT и все... laughing.gif

Как корректировать?
TigerSHARC
Корректировать - это просто внести поправку. например по ачх аналогового фильтра видно, что затухание на частоте 1 кГц у тебя -10dB. Соотвтетственно можно поправить значение Фурье на этой частоте в спектре, просто умножив его на соответствующих коэффицент. Эти поправки вносяться один раз и навсегда для того фильтра аналогового который ты выберешь.

Цитирую:
"Так что дешевле будет умножать на окно, а не фильтровать потом спекр." - конец цитаты

Просто умножаешь выборку на весовую функцию окна -> затем БПФ. Фильтрование спектра добра не пренесёт.

Это тебе скажет каждый.

Необязательно фильтровать дискретным фильтром вот почему (об этом же и DRUID3 говорил) - если подобрать аналоговый фильтр достаточно высокого порядка и соответсвенную частоту дискретизации, то можно обойтись и без дискретного фильтра. Так как ты тем самым удовлетворишь теорему Котельникова.
А дискретные фильтры до БПФ применяются для того, чтобы снизить требования к аналоговым фильтрам, ведь построив фильтр высокого порядка система становится сильно зависима от температурного дрейфа и т.п.
( у смита есть глава - передискретизация. Там это описано.)
p.s. почитай по смиту. Там сказано что весовая функция окна - это ещё не фильтр. Весовая функция - это просто функция спадающая по краям (в общем случае).
А КИХ - фильтр называется оконным просто потому что синтез такого фильтра получается умножением импульсной характеристики идеального ФНЧ на оконную функцию.
Так что фильтрация - это фильтрация, а взвешивание - это взвешивание. Нужно отделить эти понятия.
Nukers
Цитата
Просто умножаешь выборку на весовую функцию окна -> затем БПФ. Фильтрование спектра добра не пренесёт.

Это тебе скажет каждый.


Согласен, на функцию окна нужно умножить чтобы уложиться в требуемый динамический диапазон и чтобы "растекания" спектра после БПФ не было.

Фильтрацию же произвожу для того, чтобы отбросить компоненты, повторяющиеся на частотах 2fs, 3fs, 4fs и.т.д.
По порядку:
- Функция окна для устранения так называемого растекания спектра.
- Фильтрация для отсечения не нужных, повторяющихся частотных составляющих.

Следовательно сначала нужен КИХ фильтра, а потом умножение на функцию окна и уже только после БПФ? Верно?

Цитата
p.s. почитай по смиту. Там сказано что весовая функция окна - это ещё не фильтр. Весовая функция - это просто функция спадающая по краям (в общем случае).
А КИХ - фильтр называется оконным просто потому что его импульсная характеристика взвешена окном.

Так что фильтрация - это фильтрация, а взвешивание - это взвешивание.


P.P.S. Насчет функции окна и КИХ фильтра уже уяснил, проверил. КИХ и оконное взвешивание - это разные функции, знаю это.
Так же сказано, что КИХ фильтр - во временной области это свертка отсчетов сигнала и импульсной характеристики КИХ фильтра (почитай про свертку). А в частотной области (т.е. сначала БПФ делаем над сигналом) - это умножение бинов БПФ на бины импульсной функции КИХ фильтра.
DRUID3
Цитата(анатолий @ Mar 24 2010, 15:02) *
КИХ фильтр в конце - это корректно, это вместо того, чтобы умножать на временное окно.

корректно что? Пройтись FIRом по частотным бинам? И что будет на выходе?

Цитата(анатолий @ Mar 24 2010, 15:02) *
Так что дешевле будет умножать на окно, а не фильтровать потом спекр.

wacko.gif

Цитата(Nukers @ Mar 24 2010, 18:06) *
Я о том же, что и говорит анатолий.

У Анатолия уже в теплице видимо новый урожай травы...

Цитата(Nukers @ Mar 24 2010, 18:06) *
Мне непременно прийдется выполнять цифровую фильтрацию входного сигнала, чтобы отбросить полосы частот, которые повторяются на fs, 2fs, 3fs и.т.д.

мде... если Вы будете продолжать в том же духе я просто перестану помогать sad.gif ...

Цитата(Nukers @ Mar 24 2010, 18:06) *
По Смитту есть два способа фильтрации:
1) Во временной области: Это свертка сигнала с импульсной характеристикой фильтра (функцией окна, если построен оконный фильтр).
2) В частотной области: Это умножение частотных бинов, полученных после БПФ, на весовые коэффициенты окна (импульсной характеристики фильтра).

biggrin.gif о боги!!! Один... Тор... Бальдр... Вы видите сами!?

Цитата(Nukers @ Mar 24 2010, 18:06) *
Вопрос сейчас лишь в том, какой из этих способов не внесет лишних гармоник и почему? (Ссылки плиз, если есть).

ну есть версия, что линейный...

Цитата(Nukers @ Mar 24 2010, 18:06) *
Как корректировать?

Ну, видимо, умножая I и Q бины на числа...


Блин, ребята, Вы специально тут надо мной прикалываетесь? biggrin.gif
Nukers
Цитата
У Анатолия уже в теплице видимо новый урожай травы...

ХА ХА ХА. Упал под стол. Анатолий поделитесь?

Все, уяснил спасибо.
НЧ(Бесселя с fc=120кГц)->АЦП(fs=250кГц)->Умножение на функцию окна->Коррекция частотных бинов->БПФ->Выход(Спектр)

DRUID3 спасибо вам огромное!
TigerSHARC
Сань, ну нахрена спектр умножать на окно?

для БПФ нужно предотвратить растекание

и соблюсти критерий Котельникова (это как раз то о чём ты говорил повторяющиеся спектры не будут влиять если критерий котельникова выполняется) - это так называемое наложение.
Умножай на окно до БПФ.

в матлабе можно смоделить фильтр бесселя, посмотри на какой частоте у тебЯ затухание 40db и умнож эту частоту на два - вот тебе и частота дискретизации (250 кГц может быть маловато - зависит от порядка аналогового фильтра)

DRUID3 - отличные реплики, одна картинка про экстраполяцию чего стоит! Зачёт!))))
Nukers
Согласен, ошибся. Поторопился. Теперь все вроде нормуль.
Пока точно не определился, что лучше - коррекция частотных бинов или повышение частоты дискретизации. Посмотрим по процессорному времени, там и решу.
TigerSHARC
теперь DRUID3 точно больше ничего не напишет))))
DRUID3
Цитата(TigerSHARC @ Mar 24 2010, 19:47) *
Сань, ну нахрена спектр умножать на окно?...

...Умножай на окно до БПФ.

+1024...

2Nukers:
та Вы не расстраивайтесь, там действительно много чего вот так сразу понятно не будет... Если честно, то некоторые вещи нужно вообще годами обдумывать...

Цитата(TigerSHARC @ Mar 24 2010, 19:47) *
...в матлабе можно смоделить фильтр бесселя...

матлаб зло... и не потому что платный, а вообще... просто в нем это все предстает как процедуры и человек не формирует себе образной картины... Nukers я начал более-менее в этом все разбираться когда пришлось писать FFT а затем и RealFFT самому. Вы за небольшое время это не успеете. Это же диплом... Но так, что бы разобраться напишите(сами!!!) FIR простейший без оптимизаций и FFT(хоть рекурсивное)... Поймете где там блоки и что куда скользит...

Цитата(TigerSHARC @ Mar 24 2010, 19:47) *
для БПФ нужно предотвратить растекание

и соблюсти критерий Котельникова (это как раз то о чём ты говорил повторяющиеся спектры не будут влиять если критерий котельникова выполняется) - это так называемое наложение.
...
посмотри на какой частоте у тебЯ затухание 40db и умнож эту частоту на два - вот тебе и частота дискретизации (250 кГц может быть маловато - зависит от порядка аналогового фильтра)

...ну по-сравнению с дипломами состоящими из "микса" дипломов предшественников такая небрежность простительна... Но если так страшитесь зеркального канала АЦП, то, по-науке можно было бы выбрать Fs = 4*Fmax; И CFFT заставить работать так как RealFFT. Но... Мы так только запутаем человека... Так - тоже правильно... Пусть фильтр выберет эллиптический и сойдет...
Кстати, почему 40 dB, а не 100 например?

Цитата(TigerSHARC @ Mar 24 2010, 20:01) *
теперь DRUID3 точно больше ничего не напишет))))

biggrin.gif

Цитата(Nukers @ Mar 24 2010, 19:56) *
Пока точно не определился, что лучше - коррекция частотных бинов или повышение частоты дискретизации.

...коррекция частотных бинов выравнивает ФЧХ после аналогового фильтра... Частота же дискретизации повышается для упрощения этого самого фильтра, но не искривлять ФЧХ он принципиально не может ...
TigerSHARC
Да, кстати про зеркальный канал. В реальных девайсах вообще стоит RC-цепь первого порядка... и частота дискретизации никак не по книгам выбиралась, а намного ниже. Я же говорю лишь о том что по теории. А по теории (в том же Смите) умножают на два частоту спада АЧХ аналогового фильтра в сто раз.

За матлаб. Очень полезная штука. без него никуда. Естественно что нужно сначала разобраться что делаешь))
а так ну ОЧЕНЬ полезно и быстро можно состряпать кусок алгоритма и протестить в плане математики.

А так конечно на C потом портировать надо. Вобщем знать надо всё.

кстати про децибелы. 40 - это опять по книгам. Это если хотите, чтобы максимально возможная погрешность от наложения спектра составила 0,01%. А так нужно выбрать в зависимости от требуемой точности (но это опять же теория)

to DRUID3 А что значит +1024 (просто интересно, чтоб знать)
DRUID3
Цитата(TigerSHARC @ Mar 24 2010, 20:12) *
Да, кстати про зеркальный канал. В реальных девайсах вообще стоит RC-цепь первого порядка...

Ну это Вы загнули... Может в "китайщине" какой...

Цитата(TigerSHARC @ Mar 24 2010, 20:12) *
кстати про децибелы. 40 - это опять по книгам. Это если хотите, чтобы максимально возможная погрешность от наложения спектра составила 0,01%. А так нужно выбрать в зависимости от требуемой точности (но это опять же теория)

40 dB это 100 раз, следовательно 1%, а не 0,01%... Вообще DR=85dB и подавление зеркалки <100 dB - смешно. Но для учебного проекта сойдет и так biggrin.gif ...

Цитата(TigerSHARC @ Mar 24 2010, 20:12) *
to DRUID3 А что значит +1024 (просто интересно, чтоб знать)

ну все +1 если чо "зачОтное" прочтут... если "очень зачОтное" то +1000... Ну а у нас же форум такой... блоки должны быть кратны степени 2-ки потому +1024 )))...

Nukers я позавчера кажется обещал Вам ответить, но не сдержал обещания - был занят, но то что я тогда напЕйсал - сохранил. Отсылаю сейчас...

Цитата(Nukers @ Mar 15 2010, 15:09) *
Уважаемый DRUID3. Есть к вам вопрос.

Досточтимый Nukers, йа отвечать Вам...

Цитата(Nukers @ Mar 15 2010, 15:09) *
Уолт Кестер в Главе 5, стр. 22 Быстрое Преобразование Фурье http://www.analog.com.ru/Public/5.pdf пишет, что максимальное время выполнения БПФ при реализации в реальном масштабе времени рассчитывается как:

Tmax=N/fs

Ну начнем с того, что смысл этих расчетов показать за сколько максимум должно успевать отрабатывать FFT что-бы не началась потеря блоков.

Если честно - Вам не о чем волноваться, процессор который выбран для проекта рассчитан на заведомо большие скорости. Но...
Пусть у Вас Fs = 250 kHz. Хм... Кстати, для удобства - а не подогнать ли нам тактовую под кратность блоку длинной степень 2-ки? Чуть затруднит физическую реализацию - но облегчит восприятие. Тогда 1024 * 25 = 256 000 sps. Очевидно, что нужно успевать отработать одно БПФ за 1/25 s = 0.04 s. 40ms = 40 000 us;

Цитата(Nukers @ Mar 15 2010, 15:09) *
(Для ADSP-21375 при 266МГц и 1024 точках это занимает ~27мкс)

Теоретически - без учета расходов на пересылку памяти (а они там мизерные) - успеваем...

Цитата(Nukers @ Mar 15 2010, 15:09) *
Таким образом при N=1024 и fs=250кГц получаем Tmax=4096мкс.

Где-то вкралась оБшиПка...

Цитата(Nukers @ Mar 15 2010, 15:09) *
Я понял так:

1) Включили прибор
2) Подождали неск. тактов пока закончатся переходные процессы (в осн. для аналоговой части).

И как Вы собираетесь это делать? NOP-ами? А зачем? Переходные процессы в аналоговой части, а параллельно ей загрузка и инициализация в цифровой... Ну мигнет пару раз экранчик выдавая билеберду. Но от своего ПК Вы же не требуете загрузки за микросекунды?

Цитата(Nukers @ Mar 15 2010, 15:09) *
3) Копим первые 1024 отсчета с fs=250кГц - это и занимает 4096мкс. (В это время подпрограмма выполнения БПФ просто не вызывается=процессор простаивает).

Вообщем и целом - верно...

Цитата(Nukers @ Mar 15 2010, 15:09) *
4) Обрабатываем 1024 полученных отсчета по алгоритму БПФ. (Для ADSP-21375 при 266МГц и 1024 точках это занимает ~27мкс).
5) На пункт 3.
...и.т.д.


Цитата(Nukers @ Mar 15 2010, 15:09) *
Скажите, я не ошибся? Верно ли, что пока копятся первых 1024 отсчета у меня есть 4096мкс, чтобы выполнить БПФ на 1024 точки, а так же на сопутствующие операции?

слегонца... smile.gif

P.S.: я так понял - от моего чудесного квазискользящего чудо-буфера Вы отказались. Ну и правильно... В конце-концов это же учебный проект и тут главное показать, что Вы осознаете что делаете...

P.P.S.: Кстати, йа кажеЦЦо понял зачем Вы упоминали FIR... Это же диплом - и нужно будет привести расчет чего-нибудь на пару страниц крупным шрифтом. А у Вас в Т.з. ДД 85 dB. Нужно будет "доказать", что требование выполняется. Так?
Nukers
Цитата
Ну начнем с того, что смысл этих расчетов показать за сколько максимум должно успевать отрабатывать FFT что-бы не началась потеря блоков.
Если честно - Вам не о чем волноваться, процессор который выбран для проекта рассчитан на заведомо большие скорости. Но...
Пусть у Вас Fs = 250 kHz. Хм... Кстати, для удобства - а не подогнать ли нам тактовую под кратность блоку длинной степень 2-ки? Чуть затруднит физическую реализацию - но облегчит восприятие. Тогда 1024 * 25 = 256 000 sps.;

1024*25=25600 (может так 1024*250=256kSPS ?)

Цитата
Очевидно, что нужно успевать отработать одно БПФ за 1/25 s = 0.04 s. 40ms = 40 000 us

(Может 1/250 s? Тогда 4ms=4000us).
Понятно. Если применять ваш чудо-квазискользящий буфер, то нужно обработать только один отсчет (то бишь значение одного временного бина, вроде так, ткните пальцем сильнее, если ошибся) за 4000us, сдвинуть указатель адреса, принять новый отсчет и.т.д

Но все же хочу обрабатывать блоками по 1024 отсчета (это в моем случае, в общем N отсчетов), т.к. производительности процессора с запасом.
Тут памяти нужно 2N ячеек, N ячеек для обрабатываемых в данный момент N отсчетов и N ячеек для копящихся следующих отсчетов (С вашим чудо-буфером только N ячеек, что круто несомненно).
Тем самым, пока заполняются следующие N ячеек памяти (это примерно 4096us), обрабатываю данные из N текущих ячеек памяти (за время: Допустим фильтрация(~100us)+БПФ(пусть 60us)+Умножение на функцию окна(~100us)=260us). Следовательно у меня есть оооочень широкий диапазон варьирования времени, даже можно увеличить количество точек, но это пока не рассматривал.

Цитата
слегонца... smile.gif

Ну да слегонца. Но если, скажем я выполню БПФ за 4000us (в моем случае), то потери блоков не будет и все должно быть тип-топ. (Процессор-то тянет).

Цитата
P.S.: я так понял - от моего чудесного квазискользящего чудо-буфера Вы отказались. Ну и правильно... В конце-концов это же учебный проект и тут главное показать, что Вы осознаете что делаете...

На данной стадии это проще для понимания. Делаем БПФ над предыдущими 1024-мя отсчетами, пока копятся следующие 1024.
Идея вашего буфера мне понятна, но у меня нет такой большой скорости данных, чтобы сейчас этим заниматься (времени мало) smile.gif

Цитата
P.P.S.: Кстати, йа кажеЦЦо понял зачем Вы упоминали FIR... Это же диплом - и нужно будет привести расчет чего-нибудь на пару страниц крупным шрифтом. А у Вас в Т.з. ДД 85 dB. Нужно будет "доказать", что требование выполняется. Так?

Ага, господам из комиссии это будет проще для понимания.
DRUID3
Цитата(Nukers @ Mar 25 2010, 08:40) *
1024*25=25600 (может так 1024*250=256kSPS ?)

да-да-да... Писал полусонным, потому и не отослал... я вот вообще о чем - 1024 точки(512 точек спектра, если экранчик 640x480 - самое то) и 25 кадров в секунду - быстрее человек не воспринимает... каждые 10 FFT поточечно суммируем... Т.е. Вам удобнее конечно будет подогнать частоту под это произведение...

Цитата(Nukers @ Mar 25 2010, 08:40) *
(Может 1/250 s? Тогда 4ms=4000us).

Сори!!! smile3046.gif ... разумеется Вы правы...

Цитата(Nukers @ Mar 25 2010, 08:40) *
Понятно. Если применять ваш чудо-квазискользящий буфер, то нужно обработать только один отсчет (то бишь значение одного временного бина, вроде так, ткните пальцем сильнее, если ошибся) за 4000us, сдвинуть указатель адреса, принять новый отсчет и.т.д

Нет... если Вы хотите FFT именно на 1024 точки то с "моим" буфером нужно бы было делать одно FFT с приходом новых 256 отсчетов... но разумеется на все 1024 точки... Не так уж и накладно...

Цитата(Nukers @ Mar 25 2010, 08:40) *
Но все же хочу обрабатывать блоками по 1024 отсчета (это в моем случае, в общем N отсчетов), т.к. производительности процессора с запасом.
Тут памяти нужно 2N ячеек, N ячеек для обрабатываемых в данный момент N отсчетов и N ячеек для копящихся следующих отсчетов (С вашим чудо-буфером только N ячеек, что круто несомненно).

С моим чудо-буфером нужно будет 2*N+1 памяти, Вашим способом тоже, не забывайте - нужно будет суммировать 10 FFT идущих подряд... И все это еще умножить на 2 если алгоритм FFT без бит-реверса - сейчас влом заглядывать, но индусы из AD его любят...

Цитата(Nukers @ Mar 25 2010, 08:40) *
Тем самым, пока заполняются следующие N ячеек памяти (это примерно 4096us), обрабатываю данные из N текущих ячеек памяти (за время: Допустим фильтрация(~100us)+БПФ(пусть 60us)+Умножение на функцию окна(~100us)=260us).

Умножение на функцию окна гораздо легковеснее чем FFT и тем более FIR. FIR с ИХ в 1024 точки убивает весь выиграш по производительности от FFT. Лучше выравнивать коэффициенты после FFT. Затраты будут сравнимы с наложением окна на блок...

Цитата(Nukers @ Mar 25 2010, 08:40) *
Следовательно у меня есть оооочень широкий диапазон варьирования времени, даже можно увеличить количество точек, но это пока не рассматривал.

Ну да слегонца. Но если, скажем я выполню БПФ за 4000us (в моем случае), то потери блоков не будет и все должно быть тип-топ. (Процессор-то тянет).

Ага, господам из комиссии это будет проще для понимания.

думаю да, все верно...

Цитата(Nukers @ Mar 25 2010, 08:40) *
На данной стадии это проще для понимания. Делаем БПФ над предыдущими 1024-мя отсчетами, пока копятся следующие 1024.
Идея вашего буфера мне понятна, но у меня нет такой большой скорости данных, чтобы сейчас этим заниматься (времени мало) smile.gif

да, я не против, тем более Вам это только для визуального отображения...
Nukers
Цитата
Умножение на функцию окна гораздо легковеснее чем FFT и тем более FIR. FIR с ИХ в 1024 точки убивает весь выиграш по производительности от FFT. Лучше выравнивать коэффициенты после FFT. Затраты будут сравнимы с наложением окна на блок...

Выравнивание бинов после FFT сможет обеспечить требуемый ДД (85dB)?

Похоже это еще один алгоритм - почище БПФ будет :D
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.