реклама на сайте
подробности

 
 
> Точность БПФ float vs fixed point
ozone
сообщение Aug 12 2015, 07:34
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 11-08-15
Пользователь №: 87 951



Здравствуйте!

Не получается найти информацию по точности алгоритмов БПФ с фиксированной и плавающей запятой. В литературе встречаются фразы, что если нужна высокая точность, то лучше использовать плавающую точку.

Задача - 4096 точечное преобразование , входные данные 16-разрядные. Понятно, что разрешающая способность определяется к-вом точек. Но что подразумевается под точностью, точность амплитуды или точность по частоте?

Алгоритмы 1.15 и FP single выдадут идентичные результаты по частоте? (точность по амплитуде совершенно не критична)

От этого зависит выбор DSP.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
serjj
сообщение Aug 12 2015, 08:21
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Вот модель, меняя параметр WIDTH можно сравнивать реализацию fixed point FFT и floating point single precision FFT.
Код
clear all;

Ns = 4096;
fs = 100e3;
Ts = 1/fs;
t = 0:Ts:(Ns-1)*Ts;
SNR = 30;
df = fs/Ns;
f = 0:df:(Ns-1)*df;

f0 = 7e3;
f1 = 19e3;
A0 = 1e0;
A1 = 1e-1;
x = real(A0*exp(1i*2*pi*f0*t) + A1*exp(1i*2*pi*f1*t));

y = awgn(x, SNR, 'measured');

WIDTH = 16;
y_fi = sfi(y, WIDTH);
w = fi_radix2twiddles(Ns);
w_fi = sfi(w, WIDTH);

%y = y.*w;
Y_fp = abs(fft(single(y))); Y_fp = Y_fp/max(Y_fp);
Y_fi = abs(fi_m_radix2fft_withscaling(y_fi, w_fi));
Y_fi_ver = double(Y_fi); Y_fi_ver = Y_fi_ver/max(Y_fi_ver);
err = Y_fp - Y_fi_ver;
err = err .* err;

str = sprintf('fixed point n%d', WIDTH);
figure(1); clf();
subplot(2, 1, 1);
hold on;
plot(f, 20*log10(double(Y_fp) + 1e-15), 'b');
plot(f, 20*log10(double(Y_fi_ver) + 1e-15), 'xr');
title('ABS(FFT) result');
xlabel('frequency, Hz');
ylabel('abs(fft), dB');
legend('floating point single', str);
grid on;
hold off;
axis([0 fs/2 -60 1]);

subplot(2, 1, 2);
plot(f, 10*log10(err + 1e-15));
grid on;
xlabel('frequency, Hz');
ylabel('Square error, dB');
axis([0 fs/2 -120 0]);


Пример графика для вашего случая
Прикрепленное изображение


Для 15 бит, как видно из графика, ошибка fixed point реализации пренебрежима мала в сравнении с разрешающими способностями Фурье.
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Aug 12 2015, 08:39
Сообщение #3


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



2-3 разряда - нормальное пренебрежение. угу.

С другой стороны, если разрядность ацп - 12-13 бит, то шум кварнтования на входе будет преобладать над шумом вычислителя в s1.15

Цитата(serjj @ Aug 12 2015, 09:21) *
Для 15 бит, как видно из графика, ошибка fixed point реализации пренебрежима мала в сравнении с разрешающими способностями Фурье.
Go to the top of the page
 
+Quote Post
prig
сообщение Aug 13 2015, 08:03
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 869
Регистрация: 30-01-08
Из: СПб
Пользователь №: 34 595



Цитата(ozone @ Aug 12 2015, 10:34) *
... (точность по амплитуде совершенно не критична)
...
От этого зависит выбор DSP.


А Вы уверены, что это действительно так?


Цитата(Fat Robot @ Aug 12 2015, 11:39) *
2-3 разряда - нормальное пренебрежение. угу.

С другой стороны, если разрядность ацп - 12-13 бит, то шум кварнтования на входе будет преобладать над шумом вычислителя в s1.15

Угу.

А точнее, для БПФ 4к, 16 бит, радикс-2 потребуется 1 защитный бит, и максимальный рост шума на 12-ти стадиях - в 12^0.5 раза.
Т.е., собственный шум 16 бит БПФ радикс-2 можно оценивать на уровне 13 бит. Для сигнала с эффективными 12-ю битами это действительно вполне адекватно.

Для радикс-4 потребуется 2 защитных бита. Потери на стадиях не изменятся (в 12^0.5 раза). Т.е., суммарная потеря на БПФ - около 4-х бит. С групповой плавающей точкой, ессно.
Для чистых 12-ти бит данных этого уже маловато.

И тут есть ещё один момент. Если для задачи ТС скорость критична, он должен учитывать заполнение кэша 1-го уровня данными и коэффициентами. Если оные в кэш не помещаются, производительность БПФ падает катастрофически.
Так что, при оценке потребной разрядности лучше добавлять какой-то резерв, так как переход на большую разрядность БПФ может оказаться неприемлем по скорости именно из-за заполнения кэша.
Кроме того, БПФ на перемножилках 1.15*1.15 потребует нормализации после каждой стадии(групповая плав. точка), что даёт проигрыш в производительности по сравнению с 32*32 того или иного вида при прочих равных.

Имха, с фикс. точкой на 16-ти битах стоит связываться только при большой серийности продукции и очень жёстких ограничениях на стоимость комплектации.
Для всего остального лучше сразу ориентироваться на 32*32 (фикс или плавающая - не принципиально). Только кэша 1-го уровня побольше, побольше, побольше...
Go to the top of the page
 
+Quote Post
ozone
сообщение Aug 13 2015, 17:00
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 11-08-15
Пользователь №: 87 951



Цитата(prig @ Aug 13 2015, 11:03) *
А Вы уверены, что это действительно так?


В смысле что мне не нужна точность по амплитуде? Да, в спектре интерес к амплитуде +/- лапоть, интересует именно значение частоты. Т.к. задача определить значение частоты гармонического сигнала на фоне шума.

Цитата(prig @ Aug 13 2015, 11:03) *
Если для задачи ТС скорость критична, он должен учитывать заполнение кэша 1-го уровня данными и коэффициентами. Если оные в кэш не помещаются, производительность БПФ падает катастрофически.


Да, скорость критична.


Цитата(prig @ Aug 13 2015, 11:03) *
Имха, с фикс. точкой на 16-ти битах стоит связываться только при большой серийности продукции и очень жёстких ограничениях на стоимость комплектации.
Для всего остального лучше сразу ориентироваться на 32*32 (фикс или плавающая - не принципиально). Только кэша 1-го уровня побольше, побольше, побольше...


16 бит я указал с запасом, как максимально возможные. Вполне вероятно АЦП 12-разрядным будет.

Оно как бы да, 32 битный процессор вроде самое то, да и серийность низкая. Но дороже, больше потребление, выше порог вхождения
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ozone   Точность БПФ float vs fixed point   Aug 12 2015, 07:34
- - Fat Robot   Что-то у вас все "в одну кучу": и точнос...   Aug 12 2015, 07:47
||- - prig   Цитата(ozone @ Aug 13 2015, 20:00) В смыс...   Aug 14 2015, 08:32
|- - ViKo   Цитата(serjj @ Aug 12 2015, 11:21) Вот мо...   Aug 12 2015, 10:23
- - ozone   Большое спасибо!   Aug 12 2015, 08:45
- - serjj   У меня R2010b, возможно они поменяли с того времен...   Aug 12 2015, 11:27
- - serjj   ЦитатаОно как бы да, 32 битный процессор вроде сам...   Aug 14 2015, 06:17
|- - ozone   Цитата(serjj @ Aug 14 2015, 09:17) У вас ...   Aug 15 2015, 16:15
- - Corner   Использую исключительно целочисленную математику. ...   Aug 28 2015, 15:18
- - Krys   А что значит "вычисляю"? Если уже получи...   Sep 3 2015, 06:12
|- - Corner   Цитата(Krys @ Sep 3 2015, 10:12) А что зн...   Feb 6 2016, 13:30
- - Corner   Прикинул я скорость на Cortex-M7 4096 FFT. Выходит...   Feb 8 2016, 11:06


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th June 2025 - 03:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.02565 секунд с 7
ELECTRONIX ©2004-2016