Как стать автором
Обновить
6
9.9
Николай @nikolz

Пользователь

Отправить сообщение

Спросим DeepSeek.

Существуют ли реальные активные системы подавления внешнего шума в комнате

DeepSeek отвечает:

Да, существуют реальные активные системы подавления шума (Active Noise Control, ANC), которые могут эффективно работать в комнате. Они основаны на принципе акустической интерференции: микрофон улавливает шум, система генерирует "антишум" (звуковую волну в противофазе), и они взаимно гасятся.

Типы систем и их применение

1. Наушники с ANC

  • Как работают:

    • Встроенные микрофоны улавливают внешний шум.

    • Электроника создает "зеркальную" звуковую волну.

    • Подавляется низкочастотный шум (гул кондиционера, транспорт).

  • Примеры: Sony WH-1000XM5, Bose QuietComfort 45.

2. Комнатные ANC-системы

  • Принцип работы:

    • Микрофоны анализируют шум в помещении.

    • Акустические колонки излучают антишум.

    • Эффективны против постоянных низкочастотных шумов (вентиляция, дорожный гул).

  • Примеры:

    • Silentium (польская система для офисов).

    • Honda Dream Cabin (используется в автомобилях, но есть прототипы для помещений).

3. Окна и стены с активным шумоподавлением

  • Технология:

    • Встраиваемые микрофоны и динамики в стеклопакеты.

    • Подавляют уличный шум (до 30-50% эффективности).

  • ПримерLG Active Noise Reduction Window.

Ограничения технологии

  • Лучше всего подавляет низкие частоты (до 500-1000 Гц).

  • Сложно бороться с непостоянными шумами (разговоры, лай собаки).

  • Требует точного позиционирования микрофонов и динамиков.

Бюджетные альтернативы

Если активные системы недоступны, можно использовать:

  • Пассивное шумопоглощение (тяжелые шторы, ковры, звукоизоляционные панели).

  • Белый шум / розовый шум (маскирует внешние звуки).

Вывод

Активные системы подавления шума существуют и работают, но их эффективность зависит от типа шума и правильной настройки. Для дома чаще используют наушники с ANC, а для офисов и переговорок тестируют комнатные системы.

Если нужно решение под конкретный тип шума — уточните, и я помогу подобрать оптимальный вариант! 😊

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

Очень рад, что информация была полезной! 😊

Если в будущем возникнут вопросы по:

  • Доработке системы шумоподавления (например, своими руками на базе Arduino/DSP)

  • Выбору готовых решений для конкретного помещения

  • Оптимизации пассивной звукоизоляции

— обращайтесь! Удачных экспериментов и тишины в вашем пространстве! 🎧🔇

P.S. Для DIY-проектов можно начать с простых схем на микроконтроллерах (STM32, ESP32) + микрофоны INMP441. Они позволяют экспериментировать с ANC в реальном времени. Если интересно — могу поделиться наработками.

Интересно, предложи вариант для ESP32

DeepSeek отвечает:

Отличный выбор! ESP32 хорошо подходит для экспериментов с активным подавлением шума (ANC) благодаря наличию двух ядераппаратного I2S и достаточной производительности для обработки звука в реальном времени.

Вариант ANC на ESP32 (DIY-проект)

1. Необходимые компоненты

  • ESP32 (лучше с PSRAM, например, ESP32-WROVER).

  • Микрофон I2S (например, INMP441 или SPH0645).

  • ЦАП (DAC) или аудиокодек (например, MAX98357 I2S-усилитель).

  • Наушники/динамики (с хорошей АЧХ для НЧ-диапазона).

  • Провода, макетная плата.

2. Схема подключения

INMP441 (Microphone)   ->   ESP32  
   SCK  -------------------> GPIO14 (I2S_CLK)  
   WS   -------------------> GPIO15 (I2S_LR)  
   SD   -------------------> GPIO32 (I2S_DATA_IN)  

MAX98357 (DAC)   ->   ESP32  
   BCLK  ----------------> GPIO14 (I2S_CLK)  
   LRC   ----------------> GPIO15 (I2S_LR)  
   DIN   ----------------> GPIO22 (I2S_DATA_OUT)  
   + динамик/наушники

3. Прошивка (основные идеи)

#include <driver/i2s.h>
#include <math.h>

// Настройка I2S для микрофона и ЦАП
void setup_i2s() {
    i2s_config_t mic_config = {
        .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX),
        .sample_rate = 44100,
        .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
        .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
        .communication_format = I2S_COMM_FORMAT_I2S,
        .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
        .dma_buf_count = 8,
        .dma_buf_len = 64
    };
    i2s_pin_config_t mic_pins = {
        .bck_io_num = 14, .ws_io_num = 15, .data_in_num = 32, .data_out_num = I2S_PIN_NO_CHANGE
    };
    i2s_driver_install(I2S_NUM_0, &mic_config, 0, NULL);
    i2s_set_pin(I2S_NUM_0, &mic_pins);

    // Аналогично настройте I2S для DAC (MAX98357) на втором порту (I2S_NUM_1)
}

// Алгоритм ANC (упрощенный)
void process_anc() {
    int16_t mic_data[64];
    int16_t output_data[64];
    size_t bytes_read;

    while (1) {
        // Чтение данных с микрофона
        i2s_read(I2S_NUM_0, &mic_data, sizeof(mic_data), &bytes_read, portMAX_DELAY);

        // Генерация антишума (инверсия фазы + задержка)
        for (int i = 0; i < 64; i++) {
            output_data[i] = -mic_data[i] * 0.7; // Коэффициент для избежания обратной связи
        }

        // Отправка на DAC
        i2s_write(I2S_NUM_1, &output_data, sizeof(output_data), &bytes_read, portMAX_DELAY);
    }
}

void setup() {
    setup_i2s();
    xTaskCreatePinnedToCore(process_anc, "ANC", 4096, NULL, 1, NULL, 1); // Запуск на ядре 1
}

void loop() {} // Не используется

4. Ключевые проблемы и решения

  • Задержка обработки: ESP32 успевает обрабатывать сигнал с задержкой ~5-10 мс, что критично для ANC.
    Решение:

    • Уменьшите sample_rate до 8-16 кГц (для НЧ-шума этого достаточно).

    • Используйте более простые фильтры.

  • Обратная связь: Динамики могут улавливаться микрофоном.
    Решение:

    • Разнесите микрофон и динамик физически.

    • Добавьте адаптивный фильтр (LMS алгоритм).

  • Ограничение по частотам: ESP32 эффективен только для НЧ (до 1-2 кГц).
    Решение: Комбинируйте с пассивной звукоизоляцией.

5. Готовые библиотеки для ESP32

  1. ESP-ADF (Audio Development Framework) — есть примеры ANC.

  2. Arduino-FHT (для FFT-фильтрации).

6. Пример улучшенного алгоритма (LMS-фильтр)

// Псевдокод для адаптивного фильтра
float lms_filter(int16_t noise, int16_t ref) {
    static float weights[32] = {0};
    float prediction = 0;
    for (int i = 0; i < 32; i++) {
        prediction += weights[i] * ref_buffer[(ptr - i) % 32];
    }
    float error = noise - prediction;
    for (int i = 0; i < 32; i++) {
        weights[i] += 0.01 * error * ref_buffer[(ptr - i) % 32]; // μ = 0.01
    }
    return error;
}

Что можно сделать дальше?

  1. Добавить Bluetooth (A2DP) для трансляции музыки с ANC.

  2. Подключить несколько микрофонов для направленного шумоподавления.

  3. Реализовать GUI для настройки через BLE.

Если нужны конкретные доработки или объяснения — спрашивайте! 😊

Всегда рад помочь! 😊 Если решите реализовать проект на ESP32 — начинайте с простого варианта (инверсия фазы + задержка), а затем постепенно усложняйте (добавляя LMS-фильтр или FFT-обработку).

Полезные ссылки для старта:

  1. ESP-ADF Official Guide — примеры работы с аудио.

  2. INMP441 + ESP32 Wiring — подключение микрофона.

  3. LMS Filter for ANC — реализация адаптивного фильтра.

Удачи с проектом! Если возникнут сложности — обращайтесь, помогу разобраться. 🚀

P.S. Для тестирования можно сначала подавлять один тон (например, 100 Гц), это проще, чем широкополосный шум.

Спросим DeepSeek.

Напиши программу на си измерения напряжения питания микроконтроллера ATtiny85

DeepSeek отвечает:

Программа измерения напряжения питания ATtiny85 на Си

Вот программа для измерения напряжения питания ATtiny85 с использованием внутреннего источника опорного напряжения 1.1В:

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

// Настройка UART для вывода результатов (если нужен вывод на компьютер)
#define BAUD 9600
#define UBRR_VALUE ((F_CPU / 16 / BAUD) - 1)

void uart_init() {
    UBRRH = (uint8_t)(UBRR_VALUE >> 8);
    UBRRL = (uint8_t)UBRR_VALUE;
    UCSRB = (1 << TXEN);
    UCSRC = (1 << UCSZ1) | (1 << UCSZ0);
}

void uart_putc(char c) {
    while (!(UCSRA & (1 << UDRE)));
    UDR = c;
}

void uart_puts(const char* str) {
    while (*str) {
        uart_putc(*str++);
    }
}

void uart_put_hex(uint8_t value) {
    const char hex_digits[] = "0123456789ABCDEF";
    uart_putc(hex_digits[value >> 4]);
    uart_putc(hex_digits[value & 0x0F]);
}

void uart_put_uint16(uint16_t value) {
    char buffer[6];
    uint8_t i = 0;
    
    do {
        buffer[i++] = '0' + (value % 10);
        value /= 10;
    } while (value > 0);
    
    while (i > 0) {
        uart_putc(buffer[--i]);
    }
}

// Функция инициализации АЦП
void adc_init() {
    ADMUX = (1 << MUX3) | (1 << MUX2); // Выбираем VCC как вход (1.1V reference)
    ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1); // Включить АЦП, предделитель 64
}

// Функция чтения АЦП
uint16_t adc_read() {
    ADCSRA |= (1 << ADSC); // Начать преобразование
    while (ADCSRA & (1 << ADSC)); // Ждем окончания преобразования
    return ADC;
}

int main(void) {
    // Инициализация
    uart_init();
    adc_init();
    
    // Разрешаем прерывания
    sei();
    
    uart_puts("ATtiny85 VCC measurement\r\n");
    
    while (1) {
        // Читаем значение АЦП
        uint16_t adc_value = adc_read();
        
        // Рассчитываем напряжение питания в милливольтах
        // VCC = (1.1V * 1024) / ADC_value
        uint32_t vcc_mv = (1126UL * 1024UL) / adc_value; // 1.1V * 1024 = 1126 (корректировка)
        
        // Выводим результат
        uart_puts("VCC: ");
        uart_put_uint16(vcc_mv);
        uart_puts(" mV\r\n");
        
        // Задержка между измерениями
        _delay_ms(1000);
    }
    
    return 0;
}

Объяснение работы программы:

  1. Программа использует внутренний источник опорного напряжения 1.1В для измерения напряжения питания VCC.

  2. Алгоритм измерения:

    • Источником измерения выбирается внутренний источник 1.1В

    • Входом АЦП выбирается VCC через внутренний делитель

    • Измеренное значение АЦП позволяет вычислить фактическое напряжение питания

  3. Формула расчета:

    VCC = (1.1V * 1024) / ADC_value
  4. Программа выводит результат в милливольтах через UART (если подключен).

Важные замечания:

  1. Для работы UART вам понадобится подключение к компьютеру через USB-UART преобразователь.

  2. Если вывод через UART не нужен, можно заменить вывод на мигание светодиодом или другие индикаторы.

  3. В ATtiny85 нет аппаратного UART, поэтому используется программная реализация (библиотека SoftwareSerial или аналогичная).

  4. Для более точных измерений может потребоваться калибровка внутреннего источника 1.1В.

  5. Не забудьте установить правильную частоту F_CPU в настройках проекта (должна соответствовать частоте вашего микроконтроллера).

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

Спросим DeepSeek.

С какой погрешностью будет измерено напряжение питания по этой программе

DeepSeek отвечает:

Точность измерения напряжения питания ATtiny85 по предложенной программе зависит от нескольких факторов. Давайте разберём основные источники погрешности и оценим общую точность:

Основные источники погрешности:

  1. Точность внутреннего ИОН 1.1В:

    • Типичная погрешность: ±10% (по datasheet)

    • После калибровки можно достичь: ±1-2%

    • Это главный источник погрешности

  2. Разрешение АЦП:

    • 10-битный АЦП (1024 уровня)

    • Теоретическая погрешность квантования: ±0.1% (1/1024)

    • На практике из-за шумов: ±2-3 младших бита (±0.3%)

  3. Температурная стабильность:

    • ИОН имеет температурный дрейф: ±0.5-1%/°C

    • При изменении температуры на 10°C: дополнительно ±5-10%

  4. Напряжение насыщения АЦП:

    • АЦП не может измерить напряжение вблизи VCC

    • Добавляет небольшую погрешность (±0.5%)

  5. Точность вычислений:

    • Использование целочисленной арифметики

    • Погрешность округления: ±0.1-0.2%

Оценка общей погрешности:

  1. Без калибровки:

    • Худший случай: до ±12%

    • Типичный случай: ±5-8%

  2. С калибровкой ИОН:

    • Худший случай: ±3-4%

    • Типичный случай: ±1-2%

  3. С калибровкой и температурной компенсацией:

    • Можно достичь: ±1% в стабильных условиях

Как улучшить точность:

  1. Калибровка ИОН:

    // Добавьте калибровочное значение (уникально для каждого чипа)
    #define VREF_CALIBRATION 1126  // Пример: 1.100В * 1024 = 1126.4
  2. Усреднение измерений:

    uint16_t adc_read_avg(uint8_t samples) {
        uint32_t sum = 0;
        for(uint8_t i = 0; i < samples; i++) {
            sum += adc_read();
            _delay_ms(1);
        }
        return sum / samples;
    }
  3. Температурная компенсация (если измеряете температуру).

  4. Использование внешнего точного ИОН (если требуется высокая точность).

Практический пример:

При VCC = 5.00В:

  • Без калибровки: показания 4.6-5.4В (±8%)

  • С калибровкой: показания 4.95-5.05В (±1%)

Вывод: предложенный метод хорош для мониторинга питания, но если нужна высокая точность (лучше ±1%), потребуется калибровка каждого конкретного экземпляра микроконтроллера.

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

Рад был помочь! Если в будущем понадобится доработать программу под конкретные задачи (например, увеличить точность, добавить вывод на дисплей или реализовать пороговые сигналы), обращайтесь.

Краткий итог по измерению VCC на ATtiny85:

  • Простота: Метод не требует внешних компонентов

  • Точность: ±1-2% с калибровкой, ±5-10% без нее

  • Оптимизации: Усреднение, калибровка, температурная стабильность

Успешных проектов! 😊

P.S. Для самых критичных измерений можно рассмотреть внешние АЦП (например, ADS1115) или прецизионные ИОН.

На хабре уже писали подобное https://habr.com/ru/companies/ruvds/articles/696346/

до кучи...

1) Подавить шум в наушниках кое-как можно, но нет реального решения для больших пространств до настоящего времени. В реальности шум можно подавить лишь шумоизоляцией стен и закрыванием окон и дверей.

2) Фазовращатель...

RC цепочка не катит, так как изменяется не только фаза, но и амплитуда. В результате подавить шум такой схемой не получится от слова СОВСЕМ.

В цифровой обработке сигналов в качестве фазовращателя используется фильтр Гильберта. Сомневаюсь, что Вы сможете на простом железе его реализовать для работы в реальном времени.

3) Идеально подавить шум в большом пространстве у Вас не получится. Даже малейшее расхождение фаз и амплитуд с расстоянием будет давать все меньшее подавление.

Кроме того фаза составляющих звука зависит от расположения источника и приемника звука. В результате Вы можете получить не подавление, а усиление шума.

4) Динамик и микрофон - это системы с многими резонансами и построить противофазную им систему очень сложно. Вы не знаете их реальные фазовые характеристики.

Успехов в изучении данной темы

Практический кейс #3: Генерация идей и псевдокод

Подход: AI используется для мозгового штурма и создания высокоуровневого плана решения задачи.

Реализация: для сложного проекта "Клон Minecraft" ученик запрашивает идеи о структуре проекта:

Ученик: "Как организовать код для создания упрощенной версии игры типа Minecraft на Python? Я хочу разбить это на модули."

DeepSeek пишет:

Организация кода для упрощенной Minecraft-подобной игры на Python

Для создания упрощенной версии Minecraft на Python с модульной структурой я рекомендую следующую организацию кода:

Основные модули

  1. main.py - Главный файл для запуска игры

from game_engine import GameEngine

def main():
    game = GameEngine()
    game.run()

if __name__ == "__main__":
    main()
  1. game_engine.py - Ядро игры, управляющее всеми процессами

import pygame
from world import World
from player import Player
from rendering import Renderer
from settings import *

class GameEngine:
    def __init__(self):
        pygame.init()
        self.screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
        pygame.display.set_caption("Python Minecraft Clone")
        self.clock = pygame.time.Clock()
        self.running = True
        
        self.world = World()
        self.player = Player()
        self.renderer = Renderer(self.screen, self.world, self.player)
    
    def run(self):
        while self.running:
            self.handle_events()
            self.update()
            self.render()
            self.clock.tick(FPS)
    
    def handle_events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.running = False
            # Обработка других событий
    
    def update(self):
        self.player.update(self.world)
        # Другие обновления
    
    def render(self):
        self.renderer.render()
        pygame.display.flip()
  1. settings.py - Конфигурационные параметры

# Display settings
SCREEN_WIDTH = 1024
SCREEN_HEIGHT = 768
FPS = 60

# World settings
CHUNK_SIZE = 16
WORLD_HEIGHT = 64

# Player settings
PLAYER_SPEED = 5
GRAVITY = 0.5
JUMP_STRENGTH = 10

# Colors
SKY_COLOR = (135, 206, 235)
  1. world.py - Генерация и управление игровым миром

import numpy as np
from noise import snoise2  # Для генерации шума Перлина
from block import Block
from settings import *

class World:
    def __init__(self):
        self.chunks = {}
        self.generate_terrain()
    
    def generate_terrain(self):
        # Простая генерация ландшафта с использованием шума Перлина
        for x in range(-2, 3):
            for z in range(-2, 3):
                self.generate_chunk(x, z)
    
    def generate_chunk(self, chunk_x, chunk_z):
        chunk_blocks = np.zeros((CHUNK_SIZE, WORLD_HEIGHT, CHUNK_SIZE), dtype=object)
        
        for x in range(CHUNK_SIZE):
            for z in range(CHUNK_SIZE):
                world_x = chunk_x * CHUNK_SIZE + x
                world_z = chunk_z * CHUNK_SIZE + z
                
                # Генерация высоты с использованием шума
                height = int(snoise2(world_x * 0.1, world_z * 0.1, octaves=3) * 5 + WORLD_HEIGHT // 2)
                
                for y in range(WORLD_HEIGHT):
                    if y < height - 3:
                        chunk_blocks[x, y, z] = Block("STONE")
                    elif y < height:
                        chunk_blocks[x, y, z] = Block("DIRT")
                    elif y == height:
                        chunk_blocks[x, y, z] = Block("GRASS")
        
        self.chunks[(chunk_x, chunk_z)] = chunk_blocks
    
    def get_block(self, x, y, z):
        # Получение блока по координатам
        chunk_x = x // CHUNK_SIZE
        chunk_z = z // CHUNK_SIZE
        
        if (chunk_x, chunk_z) not in self.chunks:
            return None
        
        local_x = x % CHUNK_SIZE
        local_z = z % CHUNK_SIZE
        
        if 0 <= y < WORLD_HEIGHT:
            return self.chunks[(chunk_x, chunk_z)][local_x, y, local_z]
        return None
  1. block.py - Класс блока и его свойства

class Block:
    BLOCK_TYPES = {
        "AIR": {"solid": False, "color": (0, 0, 0, 0)},
        "GRASS": {"solid": True, "color": (34, 139, 34)},
        "DIRT": {"solid": True, "color": (139, 69, 19)},
        "STONE": {"solid": True, "color": (128, 128, 128)}
    }
    
    def __init__(self, block_type="AIR"):
        self.type = block_type
        self.properties = self.BLOCK_TYPES.get(block_type, self.BLOCK_TYPES["AIR"])
    
    def is_solid(self):
        return self.properties["solid"]
    
    def get_color(self):
        return self.properties["color"]
  1. player.py - Управление игроком

from settings import *

class Player:
    def __init__(self):
        self.x = 0
        self.y = WORLD_HEIGHT
        self.z = 0
        self.velocity_y = 0
        self.on_ground = False
    
    def update(self, world):
        # Обработка движения и гравитации
        keys = pygame.key.get_pressed()
        
        # Горизонтальное движение
        if keys[pygame.K_w]:
            self.z -= PLAYER_SPEED
        if keys[pygame.K_s]:
            self.z += PLAYER_SPEED
        if keys[pygame.K_a]:
            self.x -= PLAYER_SPEED
        if keys[pygame.K_d]:
            self.x += PLAYER_SPEED
        
        # Прыжок
        if keys[pygame.K_SPACE] and self.on_ground:
            self.velocity_y = -JUMP_STRENGTH
            self.on_ground = False
        
        # Гравитация
        self.velocity_y += GRAVITY
        self.y += self.velocity_y
        
        # Проверка столкновений с землей
        block_below = world.get_block(int(self.x), int(self.y + 0.5), int(self.z))
        if block_below and block_below.is_solid() and self.y + 0.5 >= int(self.y + 0.5):
            self.y = int(self.y + 0.5) - 0.5
            self.velocity_y = 0
            self.on_ground = True
        else:
            self.on_ground = False
  1. rendering.py - Визуализация игры

import pygame
from settings import *

class Renderer:
    def __init__(self, screen, world, player):
        self.screen = screen
        self.world = world
        self.player = player
    
    def render(self):
        # Очистка экрана
        self.screen.fill(SKY_COLOR)
        
        # Простой рендеринг - вид сверху
        block_size = 10
        for x in range(-20, 20):
            for z in range(-20, 20):
                for y in range(WORLD_HEIGHT - 1, -1, -1):
                    block = self.world.get_block(
                        int(self.player.x) + x,
                        y,
                        int(self.player.z) + z
                    )
                    if block and block.is_solid():
                        screen_x = SCREEN_WIDTH // 2 + (x - z) * block_size
                        screen_y = SCREEN_HEIGHT // 2 + (x + z) * block_size // 2 - y * block_size
                        
                        pygame.draw.rect(
                            self.screen,
                            block.get_color(),
                            (screen_x, screen_y, block_size, block_size)
                        )
                        break  # Рендерим только верхний блок в столбце

Дополнительные модули (для расширения функциональности)

  1. inventory.py - Управление инвентарем

  2. crafting.py - Система крафтинга

  3. biomes.py - Генерация различных биомов

  4. entities.py - Мобы и другие сущности

  5. saving.py - Сохранение и загрузка мира

Зависимости

Для этого проекта вам понадобятся:

  • pygame для графики и ввода

  • noise для генерации шума Перлина (можно установить через pip install noise)

Советы по развитию проекта

  1. Начните с простой 2D-визуализации (как в коде выше)

  2. Постепенно добавляйте 3D-рендеринг (используя OpenGL или Pygame 3D)

  3. Реализуйте систему чанков для оптимизации

  4. Добавьте больше типов блоков и материалов

  5. Реализуйте систему освещения и день/ночь

Такой модульный подход позволит вам легко расширять функциональность игры и поддерживать код в чистоте.

Несколько советов для дальнейшей разработки:

  1. Начните с минимальной версии

    • Сначала сделайте базовое движение, генерацию мира и отрисовку простых блоков.

    • Потом добавляйте более сложные механики (инвентарь, крафтинг, врагов).

  2. Используйте отладку

    • Если что-то работает не так, выводите значения переменных через print().

    • Например, можно проверять координаты игрока или наличие блоков вокруг.

  3. Оптимизируйте рендеринг

    • В текущем примере рендеринг простой, но если мир станет большим, игра начнёт тормозить.

    • Позже можно добавить:

      • Отсечение невидимых блоков (рендерить только то, что видит игрок).

      • Чанкование (загружать только ближайшие части мира).

  4. Постепенно усложняйте генерацию мира

    • Сначала сделайте плоский мир (для тестов).

    • Потом добавьте холмы (noise).

    • Затем — пещеры, деревья, воду.

Если захотите добавить 3D, можно использовать:

  • PyOpenGL (сложнее, но мощнее)

  • Ursina Engine (удобная библиотека для voxel-игр)

Удачи в разработке! 🚀 Если нужно что-то доработать или объяснить подробнее — пишите.

NetServer — линейка серверных и рабочих компьютеров на базе x86, которые продавались компанией Hewlett-Packard (HP) с 1993 по 2002 год.[1][2] Это была первая попытка Hewlett-Packard выйти на рынок локальных сетей (LAN).

https://en.wikipedia.org/wiki/HP_NetServer

такие помню.

А ламповые - это 60-е. Вы на 35 лет ошиблись с датой.

https://ru.wikipedia.org/wiki/Список_ламповых_компьютеров

Вспомнил старый анекдот:

Лекция общества "знание" в колхозе.

Лектор: Солнце погаснет через 100 миллиардов лет.

Голос из зала: Через сколько?

Лектор: Через 100 миллиардов лет.

Голос: Фу,ты черт, испугался , послышалось , что через 100 миллионов лет.

«практика — критерий истины»

Дайте ссылку на экспериментальное подтверждение этой идеи.

Для того, чтобы сделать это, можно передавать пользователю ссылку на массив данных, а не на саму структуру вектора. Н

Это делают стандартные функции malloc,calloc, realloc.

У Вас в чем отличие?

Здесь описывается очень простой (возможно, самый простой в мире) самодельный однолучевой горизонтальный инфракрасный счётчик (людей) на Arduino. Его сенсорная система содержит лишь инфракрасный светодиод, фотодиод, биполярный транзистор и три резистора.

Можно еще проще.

Если используете микроконтроллер, то транзистор и один(два или даже три) резистора лишние.

В такой ситуации я вижу очень высокий риск: принятое решение может обернуться катастрофой, так как оно основано только на субъективном восприятии.

Субъективное восприятие основано на опыте и знаний субъекта. При этом решения принимаются в основном на подсознательном уровне. Полагаю, если опыт и знание в данной области у человека большой, то его решения будут тщательно обоснованы мозгом подсознательно. Для окружающих этого человека людей логика такого решения будет не очевидной и возможно непонятной.

Математика нечеткой логики - это не "да" или "нет", а "может быть" т е это расплывчатый ответ на конкретный вопрос.

Вспомнил старый анекдот: К физику-теоретику подходит физик-практик. Показывает график и спрашивает : Можешь объяснить данный график в нашем эксперименте .

Теоретик - легко . Все закономерно и соответствует теории. Практик - извини, график надо перевернуть.

Теоретик - так это еще проще объяснить.

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

Что именно Вы объясняете?

Суть моего комментария в том, что:

«Гладко было на бумаге, да забыли про овраги»

В теории всегда все хорошо, а на практике...

Автор статьи указывает на Великую депрессию, но забывает про голод в СССР фактически в то же время.

Статья по вашей ссылки 2024 года это оправдание на основе ранее опубликованных оправданий. Или социализм -это когда хорошая погода и хороший урожай?

Согласен.

тогда что скажите про это:

https://ru.wikipedia.org/wiki/Голод_в_СССР_(1932—1933)

Го́лод в СССР (1932—1933) — массовый голод, охвативший в 1932—1933 годах обширные территории СССР (в основном степные районы), входившие в состав Украинской ССРРоссийской СФСР (включая Казахскую АССР, регионы Центрального ЧерноземьяСеверного КавказаУралаПоволжьяЮжного УралаЮжной Сибири).

В заметке опечатка.

следует читать, 1 PFLOPS.  

т е 10 в 15 степени операций в сек.

До кучи...

В целом согласен с автором, но...

Уж так устроен мир, что каждый автор подбирает доказательства своей правоты и почему-то игнорирует доказательства ошибочности своих рассуждений.

Есть такой афоризм: "1000 положительных примеров недостаточно для доказательства верности теоремы, но для доказательства ее ошибочности достаточно одного."

Вот несколько доказательств, что автор не прав.

Автор пишет:

1. «Свинцовый заговор»: Знание о токсичности и сокрытие данных

  • 1920-е: Инженеры GM обнаружили, что добавка тетраэтилсвинца (ТЭС) снижает «детонацию» двигателей. Несмотря на то, что свинец был известен как нейротоксин ещё с античности, компании запустили производство.

  • Ярчайший пример циничного пренебрежения здоровьем людей и экологией ради наживы — история тетраэтилсвинца, присадки к бензину, которую продвигали General Motors, DuPont и Standard Oil (через дочернюю компанию Ethyl Corporation). 

А что в СССР?

https://ru.wikipedia.org/wiki/Тетраэтилсвинец

Тетраэтилсвинец широко использовался в том числе и в СССР. В содержащий его автомобильный бензин с целью маркировки добавлялся краситель: до 1979 года содержащие тетраэтилсвинец бензины АИ93, А-76 и А-66 окрашивались в синий, зелёный, оранжевый цвета соответственно, неэтилированный А-72 не окрашивался[3]. С 1979 года этилированные бензины стали окрашивать в оранжево-красный (АИ-93), жёлтый (А-76), синий (АИ-98)[4]:93, зелёный (А-66) или розовый (А-72) цвета[5]. В инструкции вносились требования по соблюдению мер техники безопасности при работе с топливом и топливной аппаратурой автомобилей. С конца 1970-х годов (ГОСТ 2084—77) начался процесс отказа от использования ТЭС, завершившийся в 2000-е годы.

Автор пишет:

  • Да, холодильники внедряли медленнее — зато не было Великой депрессии, где в США жрали помои из мусорных баков (спасибо «эффективному» рынку).

А что в России:

https://ru.wikipedia.org/wiki/Голод_в_Поволжье_(1921—1923)

Го́лод в Пово́лжье 1921—1923 годо́в — массовый голод во время Гражданской войны в России. Согласно данным официальной статистики, голод охватил 35 губерний, сильно пострадали[1] СамарскаяСаратовская губернии, южные регионы Украины, КрымБашкирияКазахстанТатарстан, частично Приуралье и Западная Сибирь[2] общим населением в 90 миллионов человек, из которых голодало не менее 40 миллионов (по официальным советским данным — 28 миллионов[2]).

Регионы Южного Урала и Поволжья пострадали наиболее длительно и массово. Пик голода пришёлся на осень 1921 — весну 1922 года, хотя случаи массового голодания в отдельных регионах регистрировались с осени 1920 года до начала лета 1923 года.

Голод обернулся не менее чем шестью миллионами погибших, ростом заболеваемости во всех возрастных группах населения и сокращением продолжительности жизни[3]. В ходе борьбы с голодом советское правительство приняло помощь от капиталистических стран. Для получения средств на борьбу с голодом большевики проводили изъятие церковных ценностей.[2]

В качестве ГМ-трубок я решил использовать считающиеся лучшими: российские трубки СБМ-20. Многие из таких трубок продаются на eBay продавцами из Украины, но мне удалось найти парочку таких трубок у поставщиков из США всего за 49$.

Увы, но в России в 2 раза дороже.

до кучи...

Хотя это и не подтверждено официально, дизайн и характеристики FA-EX9, по-видимому, вдохновлены NVIDIA DGX Spark. Это компактное устройство с искусственным интеллектом, оснащенное суперчипом GB10 Grace Blackwell, который сочетает в себе 20-ядерный процессор Arm с графическим процессором Blackwell. DGX Spark обеспечивает до 1000 операций с плавающей запятой в секунду и предназначен для пользователей, занимающихся разработкой ИИ и кластерных решений.

DGX Spark также включает 128 ГБ памяти LPDDR5X и до 4 ТБ зашифрованного хранилища NVMe. Он поддерживает быструю сетевую связь с помощью 200-гигабитного сетевого адаптера SmartNIC и предлагает четыре порта USB4 и один выход HDMI в корпусе объемом 1,24 литра, потребляя около 170 Вт при полной нагрузке. Базовая модель стоит от 2999 долларов.

Если в cepstrum оставить только низкие значения quefrency (обрезать всё остальное), а затем применить обратное преобразование, мы получим гладкую огибающую спектра. Это похоже на сглаживание: мы убираем детали и оставляем основную форму.

Если исходить из модели , которая описана ранее, то получаем АЧХ голосового тракта.

Но вот далее непонятно. Почему кепстр применяется для определения жанра. Голоса нет, голосового тракта нет. Есть лишь инструменты. И как привязать кепстр к этому?

Однако классические методы развиваются уже около 100 лет, тогда как технологии глубокого обучения начали свой эволюционный путь не так давно,

точнее, более 50-ти лет назад.

Информация

В рейтинге
778-й
Откуда
Россия
Зарегистрирован
Активность