29 / 24 / 1
Регистрация: 24.03.2012
Сообщений: 127
1

Каково назначение команды MODIFY в циклах?

07.04.2012, 09:18. Показов 1274. Ответов 9
Метки нет (Все метки)

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
DFT.ASM ADSP-2181 Дискретное преобразование Фурье
 
            Программа выполняет преобразование
            исходной дискретной последовательности input(n) длиной N
            отсчётов в дискретный спектр real(k)+j*imag(k) длиной N
            спектральных отсчётов в соответствии с формулой
                                              N-1
            real(k)+j*imag(k) = SUM input(n)[C - j*S]; k=0 … N-1,
                                             n=0
            где C=cos(2*pi*k*n/N), S=sin(2*pi*k*n/N), j=sqrt(-1)
__________________________________________________________________*/
#define N 64                                 // Определение символической константы N,
                                                     // количество входных отсчётов N=64
.section/data data1;                      // DM, начало секции данных, data1 - раздел, который
                                                     // содержит данные
.VAR input[N]="test_std1.dat"; // Организовать в DM входной буфер с
                                                    // именем input длиной N и загрузить в буфер
                                                    // содержимое файла инициализации "test… .dat"
                                                    // Файл инициализации содержит
                                                    // исходную последовательность отсчётов
.VAR real[N];                             // Организовать в DM выходные буферы длиной N
.VAR imag[N];                           // для хранения вычисленных программой
                                                    // спектральных отсчётов: real - для действительных
.VAR spectr[N];                         // составляющая спектра, imag - для мнимых
                                                    // составляющих, spectr - для амплитудных
                                                    // значений дискретных спектральных отсчётов
.section/pm pm_da;                    // PM, начало секции данных, pm_da - раздел,
                                                    // который содержит данные
.VAR sine[N]="sine64_00.dat"; // Организовать в PM буферы длиной N
.VAR cos[N]="cos64_00.dat";   // c именами sine и cos и загрузить
                                                    // в них файлы инициализации "sine64_00.dat"
                                                    // и "cos64_00.dat"
.section/pm interrupts;                // PM, начало секции для хранения адресов
                                                    // векторов прерываний
__reset:JUMP start; rti; rti; rti;  // 0x0000: reset
rti; rti; rti; rti;                             // 0x0004: IRQ2
rti; rti; rti; rti;                             // 0x0008: IRQL1
rti; rti; rti; rti;                              // 0x000c: IRQL0
rti; rti; rti; rti;                              // 0x0010: SPORT0 tx
rti; rti; rti; rti;                              // 0x0014: SPORT1 rx
rti; rti; rti; rti;                              // 0x0018: IRQE
rti; rti; rti; rti;                              // 0x001c: BDMA
rti; rti; rti; rti;                              // 0x0020: SPORT1 tx or IRQ1
rti; rti; rti; rti;                              // 0x0024: SPORT1 rx or IRQ0
rti; rti; rti; rti;                              // 0x0028: timer
rti; rti; rti; rti;                              // 0x002c: power down
.section/pm seg_code;                // PM, начало секции программного кода
start: M0=1;                               // Содержимое регистров модификации,
M1=1;                                        // обеспечивающее последовательное обращение
M2=1;                                        // к соседним ячейкам буферов
M3=1;
M7=1;
I0=input;                                   // В индексном регистре адрес ячейки входного
                                                  // буфера input, адрес входного отсчёта
L0=64;                                      // Длина входного буфера input, буфер циклический
I1=imag;                                   // В индексном регистре адрес ячейки выходного
                                                  // буфера imag, адрес выходного отсчёта
L1=0;                                        // Выходной буфер нециклический
I2=real;                                     // В индексном регистре адрес ячейки выходного
                                                  // буфера real, адрес выходного отсчёта
L2=0;                                        // Выходной буфер нециклический
I3=spectr;                                  // В индексном регистре адрес ячейки выходного
                                                  // буфера spectr, адрес выходного отсчёта
L3=0;                                        // Выходной буфер нециклический
dft: I6=sine;                              // В индексном регистре адрес ячейки буфера
                                                  // sine, адрес дискретного значения синуса
L6=64;                                      // Длина буфера sine, буфер циклический
I7=cos;                                      // В индексном регистре адрес ячейки буфера
                                                  // cos, адрес дискретного значения косинуса
L7=64;                                      // Длина буфера cos, буфер циклический
I5=0;
L5=0;
CNTR=N; DO outre UNTIL CE; // Внешний цикл вычисления real (k)
                                                      // по изменению k
M6=I5;                                          // Содержимое регистра модификации изменяемое
                                                      // для реализации чтения таблицы cos с переменным
                                                      // коэффициентом прореживания при изменении k
MR=0;                                          // Сброс выходного регистра МАС
CNTR=N; DO calcre UNTIL CE; // Внутренний цикл вычисления
                                                      // real (k) по изменению n
MX0=DM(I0,M0); MY0=PM(I7,M6);
calcre: MR=MR+MX0*MY0(SS);
DM(I2,M2)= MR1;                       // Сохранение real (k) в буфере
outre: MODIFY(I5,M7);               // Увеличение коэффициента
                                                      // прореживания на 1
                                                      // для чтения таблицы cos
                                                      // в следующем внутреннем цикле
I5=0;
L5=0;
CNTR=N; DO outim UNTIL CE; // Внешний цикл вычисления
                                                      // imag (k) по изменению k
M6=I5;
MR=0;
CNTR=N; DO calcim UNTIL CE; // Внутренний цикл вычисления
                                                        // imag (k) по изменению n
MX0=DM(I0,M0); MY0=PM(I6,M6);
calcim: MR=MR-MX0*MY0(SS);
DM(I1,M1)= MR1;                       // Сохранение imag (k) в буфере
outim: MODIFY(I5,M7);              // Увеличение коэффициента
                                                      // прореживания на 1 для чтения
                                                      // таблицы sine в следующем
                                                      // внутреннем цикле
I1=imag;
I2=real;
I3=spectr;
CNTR=N; DO outsp UNTIL CE; // Цикл вычисления
                                                      // spectr(k)= [real(k)]^2 + [imag(k)]^2
MR=0;
MX0=DM(I1,M1); MY0=MX0;
MR=MX0*MY0(SS);                  // Получение [imag(k)]^2
AX0=MR1;
MX0=DM(I2,M2); MY0=MX0;
MR=MX0*MY0(SS);                  // Получение [real(k)]^2
AY0=MR1;
AR=AX0+AY0;
outsp: DM(I3,M3)=AR;               // Сохранение [real(k)]^2 + [imag(k)]^2
                                                      // в буфере spectr
end: IDLE;                                    // Перевод процессора в состояние
                                                      // ожидания прерывания, в режим
                                                      // с малым потреблением
Добавлено через 2 минуты
Суть вопроса в том, чтобы определить как можно подробнее назначение команды MODIFY в циклах программы расчета дискретного преобразования Фурье, то есть конкретно для данной программы.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2012, 09:18
Ответы с готовыми решениями:

Каково назначение PartialViewResult
для чего PartialViewResult и почему не можем испотльзовать обычный ActionResult?

Каково назначение оператора WITH?
Здравствуйте. Может кто доступно объяснить что за оператор такой WITH, для чего он и как работает?...

Каково назначение оператора %
Изучал скрипт unity который был любезно предоставлен одним разработчиком на форуме и мне непонятен...

Каково назначение модулей
Доброго времени суток. Такое дело. Пишу курсач, написала прогу с помощью процедур. Но потом...

9
29 / 24 / 1
Регистрация: 24.03.2012
Сообщений: 127
08.04.2012, 20:51  [ТС] 2
Что именно исполняет команда MODIFY? Какую функцию выполняет?
0
29 / 24 / 1
Регистрация: 24.03.2012
Сообщений: 127
10.04.2012, 19:18  [ТС] 3
Господа программисты, помогите! Срочно нужна помощь!
0
2012 / 1284 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
10.04.2012, 20:45 4
Цитата Сообщение от DFF11F Посмотреть сообщение
Что именно исполняет команда MODIFY?
Я слабовато разбираюсь в этой архитектуре, но если не ошибаюсь, тут просто инкрементируется индексный регистр I5 регистром модификации M7
1
29 / 24 / 1
Регистрация: 24.03.2012
Сообщений: 127
12.04.2012, 19:28  [ТС] 5
vital792, А можно подробней, если не затруднит ответить

Добавлено через 1 минуту
Инкремент - это операция увеличения на 1
vital792, это так?

Добавлено через 1 минуту
vital792, В программе задана дискретная косинусоида, значит просто берется отсчет, отстоящий на 1 значение от преддущего в каждом цикле

Добавлено через 43 секунды
vital792, я Вас правильно понимаю? В этом и заключается вся суть прореживания?
0
2012 / 1284 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
12.04.2012, 19:50 6
DFF11F, как написано в мануале
Инструкция MODIFY модифицирует адрес, находящийся в I-регистре, значением, хранящемся в М-регистре, без реального доступа к памяти.
Таким образом (через пары регистров I и M) в этих процах осуществляется косвенная адресация памяти данных и памяти программ. В регистре модификации значение 1, значит адрес просто инкрементируется.
Цитата Сообщение от DFF11F Посмотреть сообщение
значит просто берется отсчет, отстоящий на 1 значение от преддущего в каждом цикле
да
Цитата Сообщение от DFF11F Посмотреть сообщение
В этом и заключается вся суть прореживания?
да в общем то нет. Это быстрое преобразование Фурье использует прореживание по времени, либо по частоте, но тут не похоже на бпф, тут кажется просто вычисляется преобразование Фурье по классической формуле(не быстрое). Никакого прореживания там вроде нет, просто линейный проход по массиву и умножение на комплексную экспоненту. Опять же повторюсь, я с процами analog devices мало знаком, могу ошибаться. Почему бы тебе не прогнать программу под отладчиком? В visual dsp неплохой отладчик на сколько я помню.
1
29 / 24 / 1
Регистрация: 24.03.2012
Сообщений: 127
12.04.2012, 19:59  [ТС] 7
vital792, Ну да, тут же не бабочка, а прямой расчет, тогда коментарий скорее всего не правильный, он - то с толку и сбил. Спасибо ОГРОМНОЕ!
0
2012 / 1284 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
12.04.2012, 20:03 8
DFF11F, в examples поставляемых с visual dsp кажется есть функция fft. Может лучше ее использовать? Даже для 64 отсчетов разница по скорости будет существенна
1
29 / 24 / 1
Регистрация: 24.03.2012
Сообщений: 127
12.04.2012, 22:26  [ТС] 9
vital792, Я понимаю, просто хотелось именно этот алгоритм "вкурить". Поэтому копаю глубже. Спросил то, что сам "не допетрил")))). Будем постигать. ADSP 218x - старые, но везде применяются... Как ни прискорбно
0
2012 / 1284 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
12.04.2012, 22:41 10
Цитата Сообщение от DFF11F Посмотреть сообщение
ADSP 218x - старые, но везде применяются...
ну тут спорно. Blackfin'ы наверно сейчас более популярны. Но в плане литературы, конечно по 21х значительно больше.

Цитата Сообщение от DFF11F Посмотреть сообщение
хотелось именно этот алгоритм "вкурить"
ну сам то алгоритм простейший - одна формула, проблемы видимо с пониманием синтаксиса. Я сам не особо в нем разбирался, писал на си и под проц с плавающей точкой (tiger sharc), поэтому c синтаксисом тоже не "на ты".
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2012, 22:41

Каково назначение директивы using
Директива using что делает проще говоря без терминологий и ссылок например сюда...

Каково назначение ToString()
Не могу понят назначение ToStting()

Каково назначение функции POS
Что делает функция POS в паскале. Я столкнулся с ней вот тут Это операция по переводу из...

Каково назначение слова label?
Это отрывок из программы на ассемблере. Объясните пожалуйста назначение слова label. Для чего оно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.