Форум программистов, компьютерный форум, киберфорум
Konst2016
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Попытки работать с Фурье преобразованием

Запись от Konst2016 размещена 19.07.2020 в 13:33
Показов 2892 Комментарии 2

19//07//2020
Привет!Начал немного изучать преобразование Фурье и для опытов опять использую элементы виртуальной машины:
Основной код:
Python
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import numpy as np
from util import get_logger
import logging
 
Forward=1
Backward=-1
import math
import matplotlib.pyplot as plt
 
def plot(_file:str,x:list,y:list,logger:logging.Logger)->None:
    
    fig:plt.Figure=None
    ax:plt.Axes=None
    fig, ax=plt.subplots()
    ax.plot(x,y)
    plt.xlabel('Gercs')
    plt.ylabel('Amplitude')
    ax.legend()
    plt.savefig(_file)
    print("Graphic saved")
    logger.info("Graphic saved")
    plt.show()
 
def DFT_slow(x):
    x=np.asarray(x, dtype=float)
    
    N=x.shape[0]
    
    n=np.arange(N)
    
    k=n.reshape((N,1))
    
    M=np.exp(-2j * np.pi * k * n / N)
    
    dot_=np.dot(M, x)
    return dot_
       
 
#def dft(data:list, direction:int)->tuple:
    #n = len(data) # Сколько элементов в data
    #arg = 0
    #cos = 0
    #sin = 0
    #dst = [Complex(0,0)] * n
    #for i in range(n):
        #arg=- direction * 2.0 *math.pi * i / n # i индекс данного сигнала в data
        
        #for j in range(n):
            #cos = math.cos( j * arg )
            #sin = math.sin( j * arg )
            #dst[i].real+=(data[j].real* cos - data[j].imag * sin)
            #dst[i].imag+=(data[j].real * sin + data[j].imag * cos)
    #if direction==Forward:
        #for i in range(n):
            #data[i].real=dst[i].real/n
            #data[i].imag=dst[i].imag        
    #return dst
 
 
(push_i, push_fl, push_str, push_obj,dft_,rfft_,fft_,dft_slow,plot_,fftfreq_) = range(9)
 
 
def vm(buffer, loger=None, date=None):
    len_ = 25
    data=None
    out=None
    if loger:
        loger.info(f'Log started {date}')
    vm_is_running = True
    ip = 0
    sp = -1
    steck = [0] * len_
    op = buffer[ip]
    while ip < len(buffer):
        if op == push_i:
            sp += 1
            ip += 1
            steck[sp] = int(buffer[ip])  
        elif op == push_fl:
            sp += 1
            ip += 1
            steck[sp] = float(buffer[ip]) 
        elif op == push_str:
            sp += 1
            ip += 1
            steck[sp] = buffer[ip]
        elif op == push_obj:
            sp += 1
            ip += 1
            steck[sp] = buffer[ip]
        elif op==dft_:
            data=steck[sp]
            sp-=1
            direction=steck[sp]
            sp-=1
            out=dft(data,direction)
            print("out dft")
            for i in out:
               print(i, end=' ')
            print()   
        elif op==rfft_:
            data=steck[sp]
            sp-=1
            out=np.fft.rfft(data)
            print("out np-fft-rfft",out) 
            loger.info(f'signal________"{data}\nout np-fft-fft{out}')            
        elif op==fft_:
            data=steck[sp]
            sp-=1
            print("signal________",data)
            out=np.fft.fft(data)
            print("out np-fft-fft",out) 
            loger.info(f'signal________"{data}\nout np-fft-fft{out}')
        elif op==dft_slow:
            data=steck[sp]
            sp-=1
            print("signal________",data)
            out=DFT_slow(data)
            print("out DFT_slow",out) 
            loger.info(f'signal________"{data}\nout DFT_slow{out}') 
        elif op==plot_:
            x=range(len(data))
            y=np.abs(out)/len(data)
            plot("./graphic/gr.png",x,y,loger)
            
        ip += 1
        if ip > (len(buffer) - 1):
            return
        try:
            op = buffer[ip]
        except IndexError:
            raise RuntimeError('Maybe arg of bytecode skipped')
 
 
if __name__ == '__main__':
    loger,date=get_logger("debug","log.txt",__name__)
    signal = np.array([1, 2, 3, 4, 3, 2])
    signal1=np.array([0.1,0.001,0.9,2,0.9])
    p1 = (push_obj,signal,rfft_,push_obj,signal,fft_)
    p2=(push_obj,signal,dft_slow,plot_)
    p3=(push_obj,signal1,dft_slow,plot_)
    vm(p2, loger, date)
При p2 показан график функции:
Нажмите на изображение для увеличения
Название: grp2.png
Просмотров: 931
Размер:	19.0 Кб
ID:	6361
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 2
Комментарии
  1. Старый комментарий
    Аватар для Curry
    Быстрое преобразование Фурье : https://ru.wikipedia.org/wiki/... 1%8C%D0%B5
    Оконные функции https://ru.wikipedia.org/wiki/... 1%8C%D0%B5
    на практике используют именно это, а не так, в лоб. И, в целом, цифровая обработка сигналов - огромное поле для освоения.
    Запись от Curry размещена 22.07.2020 в 14:20 Curry вне форума
  2. Старый комментарий
    Лучше в лоб!)
    Запись от Konst2016 размещена 26.07.2020 в 14:37 Konst2016 вне форума
 
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru