Разделы сайта

Разработка и описание программы. Особенности ввода/вывода

по алгоритму Radix-2

Выполняет БПФ с прореживанием по времени по алгоритму radix-2 с длиной входных данных x(n) 64 или более.

Использование памятиДействительная часть комплексных входных чисел находящихся в ПД в нормальном порядкеМнимая часть комплексных входных чисел находящихся в ПП в нормальном порядкеДействительная часть преобразованных данных, хранящихся в ПД/2Таблица Sin хранящася в ПД/2Таблица Cos хранящася в ПД

Вызываемая информация:(twid_real[N/2])- таблица sin(2pi*n/N) в бит-реверсивном порядке(twid_imag[N/2])- таблица cos(2pi*n/N) в бит-реверсивном порядке

(Inputreal[N]) - действительная часть входного массива, находится в ПД(Inputimag[N]) - мнимая часть входного массива, находится в ПП

Результаты:(Refft[N]) - действительные результаты БПФ в последовательном порядке(Inputreal[N]) - мнимые результаты БПФ в последовательном порядке:

длина БПФ к-во циклов время, мкс 160МГц

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

1024 24160151

Использование памяти:

ПП код программы(24-bit) = 92 слова

ПП данные(24-bit) = N + 2 + N/2 слов

ПД данные(16-bit) = 2N + 4 + N + 1 слов

****************************************************************************/

/**********Константы, представленные ниже дожны быть изменены для различных длин БПФ*******= количество точек БПФ, должно быть 2 в некоторой степени

log2N = log2(N)_Value = 2^(16-LOG2N)

Refft_Bitrev = Битреверсии адреса выходных действитеьных чисел ПД_Bitrev = Битреверсии адреса выходных мнимых чисел ПД

******************************************************************************/

/* Установка констант для N-точечного БПФ */

#define N 512

#define Ndiv2 (N/2)

#define log2N 9

#defineMod_Value128

#defineRefft_Bitrev0x0001

#defineInputreal_Bitrev0x000

/* данные ПД */

.section/data data1;

.VAR twid_imag [Ndiv2] = "twid_sin.dat";

.VAR groups = 1;

.VAR node_space = Ndiv2;

/* данные ПД */

.section/data seg_buf1;

.VAR Inputreal [N+2] = "inreal.dat";

/* данные ПД */

.section/data seg_buf2;

.VAR Refft[N+2];

/* данные ПП */

.section/pm data2;

.VAR/init24 twid_real [Ndiv2] = "twid_cos.dat";

.VAR Inputimag [N+2] = "inimag.dat";

/* код вектора прерываний ПП */

.section/pm IVreset;

JUMP start; NOP; NOP;

/* Код программы */

.section/pm program;

start: = page(twid_real);/* Инициализация страницы для данных ПП */= 0;= length(twid_imag);/* Инициализация циркулярного буфера twid_imag*/= twid_imag;(b0) = AX1;/* Инициализация указателя на twid_imag */= 1;= 0;/* Инициализация для модульной адрессации */= 0;= length(twid_real); /* Инициализация циркулярного буфера twid_real*/= twid_real;(b4) = AX1;/* Инициализация указателя на twid_real */= 1;= 0; /* Инициализация для модульной адрессации */= -1;= 0;/* Инициализация для модульной адрессации */ = 0; = 0; = 0; = 8;/* Инициализация счётчика стадий */stage_loop UNTIL CE;/* Вычисление всех стадий БПФ */

I0 = twid_imag;/* I0 --> (-S) W0 */

I1 = Inputreal;/* I1 --> x1 в первой группе данной стадии */= Inputreal;/* I2 --> x0 в первой группе данной стадии */

I4 = twid_real;/* I4 --> C W0 */

I5 = Inputimag;/* I5 --> y1 в первой группе данной стадии */= Inputimag;/* I6 --> y0 в первой группе данной стадии */= DM(groups);= SI;/* CNTR = # групп данной стадии */

SR = LSHIFT SI BY 1(LO);(groups) = SR0;= DM(node_space);/* SI = изменению node_space */

M2 =SI;=SI;(I1,M2);/* I1 --> x1 в первой группе данной стадии */(I5,M7);/* I5 --> y1 в первой группе данной стадии */

DO group_loop UNTIL CE;= PM(I4,M5), MX0 = DM(I1,M0);/* MY0=C, MX0=x1 */= MX0*MY0(SS), MX1 = PM(I5,M4);/* MR=C*x1,MX1=y1 */= DM(I0,M1);/* MY1 = (-S) */= SI;/* CNTR = счётчик бабочки */bfly_loop UNTIL CE;= MR-MX1*MY1(RND), AY0 = DM(I2,M0); /* MR=x1*C-y1*-S, AY0=x0 */= MR1+AY0, AX1 = PM(I5,M5); /* AR=x0'=x0+(x1*C-y1*-S) */(I2,M1) = AR, AR = AY0-MR1; /* DM=x0', AR=x1'=x0-(x1*C-y1*(-S)) */= MX0*MY1(SS), DM(I1,M1) = AR; /* MR=x1*(-S), DM=x1' */= MR+MX1*MY0(RND), AY1 = PM(I6,M4), MX0 = DM(I1,M0); /*MR=x1*(-S)+y1*C, AY1=y0, MX0= следующему x1 */= MR1+AY1, MX1 = PM(I5,M6); /* AR=y0'=y0+(y1*C+x1*(-S)), MX1= следующему y1 */(I6,M5) = AR, AR = AY1-MR1; /* PM=y0', AR=y1'=y0-(y1*C+x1*(-S)) */_loop:= MX0*MY0(SS), PM(I5,M5) = AR; /* PM=y1' */= PM(I5,M7), MX0 = DM(I1,M2); _loop:=PM(I6,M7), MX0=DM(I2,M2); =ASHIFT SI BY -1 (LO);_loop:(node_space)=SR0; = twid_imag/* I0 --> (-S) */= Inputreal;/* I1 --> x1 */= Inputreal;/* I2 --> x0 */

Перейти на страницу: 1 2 3 4

Интересное из раздела

Обзор современных систем спутниковой навигации
спутниковая навигационная глобальное позиционирование На сегодняшний день в мире существует несколько навигационных систем, использующих искусственные спутни ...

Двухканальный усилитель низкой частоты 2х22Вт
Предлагаемый усилитель обладает малыми габаритами и широким диапазоном питающих напряжений. УНЧ воспроизводит частоты 45 Гц…20 кГц при коэффициенте нелинейн ...

Цифровая система автоматического управления
Необходимо спроектировать цифровую систему автоматического управления (ЦСАУ). Система должна принимать сигнал из датчика, который находит в диапазоне 0…24В. Задаю ...