User Tag List

Страница 10 из 16 ПерваяПервая ... 67891011121314 ... ПоследняяПоследняя
Показано с 91 по 100 из 155

Тема: Генерация синуса

  1. #91

    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    2,081
    Спасибо Благодарностей отдано 
    88
    Спасибо Благодарностей получено 
    480
    Поблагодарили
    145 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сделал с примером отображения.

    Теперь дело за малым: Сделать расчет разных амплитуд
    Вложения Вложения
    • Тип файла: asm sinus.asm (2.2 Кб, Просмотров: 84)

  2. #91
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #92

    Регистрация
    15.01.2005
    Сообщений
    201
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    вертится на уме, что надо бы попробовать использовать изменения L и E, чтобы не ротировать зазря C=#44

    ...

    что-то вроде:

    ld b,.....

    ....

    ld a,e
    sub l
    exx
    rrca
    rra
    add a, SOME_NUMBER
    ld c,a

    ?
    Последний раз редактировалось char; 29.11.2013 в 22:46.

  4. #93

    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,103
    Спасибо Благодарностей отдано 
    1,338
    Спасибо Благодарностей получено 
    323
    Поблагодарили
    152 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасибо, но не получается так.
    Вот тоже, лёг спать, и мысль пришла заменить ld c,#44 и rlc c (4 байта) на ld a,l ... and 3 (3 байта) и условие соответственно изменить на NZ, но не получается. По фазе изменений не совпадает. Надо чтобы один раз в C было #EA, потом 4 раза #EB, 4 раза #EC и так далее. Вот это первое одиночное #EA весь ритм и сбивает.

    ---------- Post added at 04:21 ---------- Previous post was at 03:59 ----------

    Спасибо за пример.
    Цитата Сообщение от drbars Посмотреть сообщение
    Сделать расчет разных амплитуд
    Как-то лениво делать варианты для кучи амплитуд, большинство из которых и не понадобятся. Это уже не творчество а ремесло какое-то.
    Вот Char предлагал следующую амплитуду взять 63. А почему не 64? Байт позволяет.
    Если кому-нибудь для конкретной программы понадобится конкретный вариант(и по амплитуде и по фазе), то это уже мотивация.
    А пока что это этюд на рекорд. Кто будет планировать свою 128 байтную дему, тому будет ориентировка, сколько примерно займёт генератор таблицы синуса.

  5. #94

    Регистрация
    15.01.2005
    Сообщений
    201
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ld a,e
    exx
    add hl,bc
    and #03
    jr nz,$+3
    inc c
    ex de,hl

    ?

  6. #95

    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,103
    Спасибо Благодарностей отдано 
    1,338
    Спасибо Благодарностей получено 
    323
    Поблагодарили
    152 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    Smile

    Цитата Сообщение от char Посмотреть сообщение
    ld a,e
    exx
    add hl,bc
    and #03
    jr nz,$+3
    inc c
    ex de,hl

    ?
    Работает! Ещё байтик сэкономили! Теперь 42 байта.

  7. #96

    Регистрация
    15.01.2005
    Сообщений
    201
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    пора глянуть весь листинг процедурки с окончательно посчитанными константами, в шестнадцатеричном виде, - что там получается...

  8. #97

    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,103
    Спасибо Благодарностей отдано 
    1,338
    Спасибо Благодарностей получено 
    323
    Поблагодарили
    152 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    sintabgen2      ;; 42 байта (#2a байта :) )
      ld de,#7fd0
      ld hl,#0021
      ld bc,#ffea
      exx
      ld hl,sintab+#40
      ld d,h
      ld e,l
    loop
      ld a,e
      exx
      add hl,bc
      and #03
      jr nz,$+3
      inc c
      ex de,hl
      add hl,de
      ex de,hl
      ld a,d
      exx
      ld (hl),a
      ld (de),a
      inc e
      dec l
      jr nz,loop
      ld (hl),l
    loop2
      xor a
      sbc a,(hl)
      ld (de),a
      inc l
      inc e
      jr nz,loop2


    ---------- Post added at 05:10 ---------- Previous post was at 05:02 ----------

    Вариант в 41 байт:
    Код:
    sintab EQU #7b00 ; или #7d00
    ....
      ld e,l
      ld hl,sintab+#40
    loop
      exx
    ....
    jr nz,loop-1

  9. #98

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,702
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию Другой алгоритм

    Для разнообразия вот еще вам такой синус:

    Код:
    	org	$8000
            
    	LD	B,201		; Длина таблицы синуса
    	LD	HL,$8100	; Адрес начала таблицы синуса
    	EXX			;
    	XOR	A		;
    	LD	H,A		;
    	LD	L,A		;
    	PUSH	HL		;
            LD      IXL,$FE         ;	
    	JR	LoopIn		;
    
    ;------------------------------- 
    MLoop:	
    	EXX			;
    	SBC	HL,BC		;
    	SBC	A,IXL		;
            LD      IXL,D           ;
    
    ;-------------------------------
    LoopIn:								
    	LD	D,A		;
    	ADD	A,A		;
    	SBC	A,A		;
    	LD	IXH,A		;
    	LD	A,D		;
    	LD	E,H		;
            LD      B,3             ;
    RLoop:	SRA	D		;     
    	RR	E		;
    	DJNZ	RLoop		;
    	POP	BC		;
    	PUSH	HL		;
    	SBC	HL,DE		;
            LD      D,A             ;
    	SBC	A,IXH		;
    	ADD	HL,HL		;
    	ADC	A,A		;
    	EXX			;
    	LD	(HL),A		;
    	INC	L		;
    	DJNZ	MLoop		;	
            POP     AF              ;
    	RET			;
    Не самый короткий алгоритм - 53 байта.
    Да и есть некие ограничения. Длина получаемой таблицы... 201 байт)

    Однако, есть и плюсы - высокая точность (теоретически, т.к. это не аппроксимация а чистый синус). В таблице можно сохранять не 8 бит, а все 16 (а то и 24, т.к. в алгоритме 24-битная арифметика).
    Так же возможна любая амплитуда.
    Можно было бы сделать таблицу 256 байт, но это усложнило бы алгоритм, и он бы стал громоздким.

    Изначально думалось, что алгоритм будет компактнее, т.к. я уже привык к 32-битным ARM-ам, где подобный алгоритм получился бы не более, чем за 10 команд.

    Кто первый догадается, что за алгоритм - тому конфетка)

    Из бейсика вывел полученную таблицу, поделив результат на 2. Вроде все норм.
    Последний раз редактировалось Titus; 30.11.2013 в 04:44.

  10. #99

    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,103
    Спасибо Благодарностей отдано 
    1,338
    Спасибо Благодарностей получено 
    323
    Поблагодарили
    152 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Попробую угадать
    complex Z=0+i*1
    for i=0 to 200
    Z=Z*(e^(i*PI/100))
    SinTab[i]=Real(Z)
    next

  11. #100

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,702
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Reobne Посмотреть сообщение
    Попробую угадать
    complex Z=0+i*1
    for i=0 to 200
    Z=Z*(e^(i*PI/100))
    SinTab[i]=Real(Z)
    next
    Ой, а я в z плоскостях не ориентируюсь, поэтому ничего не могу сказать)

Страница 10 из 16 ПерваяПервая ... 67891011121314 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Качение синуса
    от Hacker VBI в разделе Программирование
    Ответов: 38
    Последнее: 08.04.2013, 00:40
  2. Генерация лабиринтов
    от TomCaT в разделе Программирование
    Ответов: 90
    Последнее: 26.06.2012, 10:59
  3. День рождения Синуса!
    от valeron в разделе Поздравления
    Ответов: 9
    Последнее: 19.05.2010, 15:31
  4. Генерация матрицы клавиатуры
    от AlexCrush в разделе Программирование
    Ответов: 5
    Последнее: 23.01.2007, 15:32

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •