Изучение алгоритмов формирования и обработки радиотехнических сигналов на цифровом сигнальном процессоре TMS320C5510. Практикум
.pdfПРИЛОЖЕНИЕ 3
Программа, создающая файл из 4096 (212) шестнадцатеричных значений синуса в формате 1.15
clear all, close all
N_sinpl=4096 (2^12); % установка количества отсчетов range_sin=floor(2^15); % точность вычисления koef=1/sqrt(2); % коэффициент нормировки
for i=1:N_sinpl; t(i)=(pi*2)/(N_sinpl)*(i-1); x1(i)=sin(t(i))*koef;
if x1(i)>=0 x11(i)=(floor((range_sin-1)*x1(i)));
else
x11(i)=range_sin*2-abs(floor((range_sin-1)*x1(i)));
end
end
figure(1); stem(x11), grid; saves=1; % флаг разрешения записи if saves==1
path_c='c:\CCStudio_v3.1\MyProjects\sine_tab.h'; |
|
fid |
= fopen(path_c,'w'); |
k3=N_sinpl; |
|
fprintf(fid,'int sineTable[SIZE_SINE_TABLE] = '); |
|
for |
i=1:k3-1; |
fprintf(fid,'0x%x, ',x11(i)); |
|
if (fix(i/5)-i/5)==0 |
|
fprintf(fid,'\r\n |
'); |
end |
|
end |
|
fprintf(fid,'0x%x\r\n',x11(k3)); |
|
fprintf(fid,'\r\n'); |
|
fclose(fid); |
|
end |
|
31
ПРИЛОЖЕНИЕ 4
/*Подключение заголовочных файлов */
#include <stdio.h> #include "volume.h"
/*Объявление переменных и буферов */
int inp_buffer[BUFSIZE]; /*входной буфер обработки данных */ int out_buffer[BUFSIZE]; /*выходной буфер обработки данных */ int gain = MINGAIN; /*переменная, управляющая усилением */ unsigned int processingLoad = BASELOAD; /* загрузка данных */ struct PARMS str =
{ 2934, 9432, 213, 9432, &str}; /* Объявление функций */
extern void load(unsigned int loadValue); static int processing(int *input, int *output); static void dataIO(void);
/* Объявление функций, переменных и буферов для подпрограммы фильтрации */
int fir(int data, int *_X, int *_xptr_p);
int |
_XL[BUFSIZE],_XR[BUFSIZE]; |
int |
_xptrL = 0,_xptrR = 0; |
int data[BUFSIZE];
/* ======== основная программа (main) ======== */ void main()
{int *input = &inp_buffer[0]; /* Обновление указателя на входной буфер*/
int *output = &out_buffer[0]; /* Обновление указателя на выходной буфер*/
puts("volume example started\n"); /*Отображение в окне вывода сообщения "volume example started"*/
/* бесконечный цикл */ while(TRUE)
{/* чтение с использованием точки пробника, соединенной с заданным файлом. */ /* Запись выходных данных в окно визуализации, соединенное с точкой пробника.*/
dataIO(); #ifdef FILEIO
puts("begin processing"); #endif
/* Выполнение подпрограммы обработки данных */ processing(input, output);}
}
/* ======== подпрограмма обработки (processing) ======== *
ФУНКЦИИ: обработка входного сигнала. ПАРАМЕТРЫ: адреса входных и выходных буферов. ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: TRUE. */
static int processing(int *input, int *output) {int size = BUFSIZE;
while(size--){
*output++ = *input++ * gain;
32
/* для цифрового фильтра реализуется следующая обработка */
/* == *output++ = fir(*input++,_XL,&_xptrL); ==*/}
/* ===== подпрограмма загрузки (используется load.asm)==== */ load(processingLoad);
return(TRUE);}
/* ======== ввод-вывод данных (dataIO) ======== */
ФУНКЦИИ: чтение входного сигнала и запись выходного сигнала. ПАРАМЕТРЫ: нет.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: нет. */ static void dataIO()
{/* выполняется ввод-вывод данных */ return;}
/* ======== подпрограмма цифровой фильтрации ======== */ int fir(int data, int *_X, int *_xptr_p)
{
long s; int k; int _xptr;
_xptr = *_xptr_p;
/* поместить значение во входной буфер */
_X[_xptr] = data; s = 0; for(k=0;k<BL;k++)
{
s+=(long)B[k] * _X[ (_xptr - k +BL) %BL ];
}
s = s>>16; /* масштабирование результата*/
_xptr++; _xptr%=BL; data = (int)s;
*_xptr_p = _xptr; return data;
}
33
Практикум
Изучение алгоритмов формирования и обработки радиотехнических сигналов на цифровом сигнальном процессоре
TMS320C5510
Подписано в печать 12.11.2015г. Формат 60х90 1/16. Объём 2,1 усл.п.л. Тираж 100 экз. Изд. № 62. Заказ 23.
ООО «Брис-М». Москва, ул. Авиамоторная, д. 8а.
34
