전체 글 (34) 썸네일형 리스트형 컨볼루션과 푸리에 변환의 관계 — \(Y(f) = X(f)\cdot H(f)\) 유도 💡 나중에 다시 볼 때를 위한 정리.목표시간 영역의 컨볼루션:\[ y(t) = \int_{-\infty}^{\infty} x(\tau) \cdot h(t-\tau) \, d\tau \]이걸 푸리에 변환하면 왜 곱셈이 되는지 유도한다.\[ Y(f) = X(f) \cdot H(f) \]핵심 트릭 2개 (먼저 파악하면 전체 흐름이 보임)트릭 1. 지수를 쪼갠다.\[ e^{-j2\pi ft} = e^{-j2\pi f(t-\tau)} \cdot e^{-j2\pi f\tau} \]→ \(h(t-\tau)\)랑 묶이는 항, \(x(\tau)\)랑 묶이는 항으로 분리하려고.트릭 2. \(u = t-\tau\) 치환.→ \(h(t-\tau)\cdot e^{-j2\pi f(t-\tau)}\) 에서 \(t-\tau\)를 .. CT 컨볼루션 유도 -> \(y(t) = \int x(\tau)h(t-\tau)\,d\tau\) 가 되는 과정 💡 나중에 다시 볼 때를 위한 정리.목표\(x(t)\)를 LTI 시스템에 넣었을 때 출력이 왜 이게 되는지 유도한다.\[ y(t) = \int_{-\infty}^{\infty} x(\tau) \cdot h(t-\tau) \, d\tau \]이건 외우는 공식이 아니라 LTI 시스템의 두 성질에서 자연스럽게 나오는 결과다.사전 지식: \(\delta_\Delta(t)\) 란?\[ \delta_\Delta(t) = \begin{cases} \dfrac{1}{\Delta} & 0 \leq t 폭 = \(\Delta\), 높이 = \(1/\Delta\), 넓이 = 항상 1높이를 \(1/\Delta\)로 잡은 이유: \(\Delta \to 0\) 극한에서 신호가 사라지지 않고 살아남기 위한 설계 조건\[ \lim.. CT 컨볼루션(Continuous-Time Convolution) 유도 정리 CT 컨볼루션(Continuous-Time Convolution) 유도 정리💡 나중에 다시 볼 때를 위한 정리. 유도 과정에서 헷갈렸던 포인트 위주로 정리했다.0. 이 글의 목적임의의 연속 신호 \(x(t)\)를 LTI(Linear Time-Invariant) 시스템에 입력했을 때의 출력 \(y(t)\)를 계산하는 공식이 왜 아래와 같은 형태를 갖는지 유도해보자.\[ y(t) = \int_{-\infty}^{\infty} x(\tau) h(t - \tau) d\tau \]1. 핵심 아이디어\(x(t)\)를 아주 작은 임펄스(충격) 조각들의 합으로 표현하는 것이 시작이다. LTI 시스템의 성질(선형성 및 시불변성) 덕분에, 전체 출력 \(y(t)\)는 각 조각에 대한 개별 응답을 모두 합산하여 구할 수 .. 디바이스 드라이버 올릴 때, 발생한 오류(다른 디바이스 드라이버가 사용 중) 1. PetaLinux에서 발생한 오류PetaLinux에서 드라이버를 로드하려고 했을 때 다음과 같은 오류가 발생했다.sudo depmod -a; sudo modprobe -r ledmutex_driver;sudo modprobe ledmutex_driverled_device: gpio_request failed: -16led_device: gpio_request failed: -16modprobe: can't load module ledmutex_driver (extra/ledmutex_driver.ko): Device or resource busy❌ 이 오류의 핵심은 gpio_request failed: -16이다. 여기서 -16은 리눅스 커널의 EBUSY에 해당한다. 의미는 해당 GPIO 자원이 이.. 커널 모듈 심볼 버전 오류 정리 bh_io_driver 모듈이 로드되지 않으면서 다음과 같은 오류가 발생한 상황이다.bh_io_driver: disagrees about version of symbol __register_chrdevbh_io_driver: Unknown symbol __register_chrdev (err-22)modprobe: can't load module bh_io_driver (extra/bh_io_driver.ko): Invalid argumentFailed to open device: No such device or address이 오류는 처음 보면 __register_chrdev라는 함수가 커널 안에 없어서 생긴 것처럼 보인다. 그러나 이 문제는 심볼 버전 정보가 현재 커널과 맞지 않다는 문제이다. 즉, .. 📬 POSIX 메시지 큐 (Message Queue) 정리 메시지 큐란?프로세스(프로그램)는 기본적으로 서로 메모리를 공유하지 않는다. 그래서 두 프로그램이 데이터를 주고받으려면 별도의 통로가 필요한데, 그 통로 중 하나가 메시지 큐이다.독립적인 공간: 프로그램 내부가 아니라, 리눅스 커널(OS) 메모리 영역에 만들어진다 (/dev/mqueue에 파일 형태로 존재한다)단방향 FIFO: 먼저 들어간 데이터가 먼저 나온다. 특정 데이터를 골라서 뽑아올 수 없고, 줄을 선 순서대로 읽을 수 있다양방향 통신: 양방향 통신을 하려면 반드시 2개의 큐(요청 큐, 응답 큐)를 만들어야 한다메시지 큐는 우체통이라고 생각하면 된다.보내는 쪽이 메시지를 우체통에 넣고, 받는 쪽은 우체통에서 편지를 꺼낸다둘이 동시에 있을 필요도 없고, 편지는 줄 세워서 순서대로 쌓인다핵심 구조체 .. [백준 2473, C++] 세 용액 (3개의 val을 선택 후, 0에 가까운 수 구하기) 알고리즘 공부를 하면서 가장 까다로운 부분 중 하나가 바로 '세 개 이상의 변수'를 동시에 다루는 상황입니다."용액이 2개일 땐 투 포인터로 풀리는데, 3개가 되면 어떻게 기준을 잡아야 할까?"이 의문을 해결하기 위해 공부한 내용을 '하나를 고정하고 나머지 둘을 푼다'는 전략으로 정리해 보았습니다.1. 접근 방법: 시간 복잡도로 필터링무식하게 3중 for문으로 3개를 고르면 어떻게 될까요?시간 복잡도: O(N3)N = 5,000일 때 약 1,250억 번 연산 → 시간 초과목표 복잡도: 일반적으로 1초 제한일 때 N = 5,000이면 O(N2) 정도가 허용 한계선입니다.즉, 반복문 하나 * 내부 처리(투 포인터) 구조로 설계를 변경해야 합니다.2. 핵심 설계 전략: 하나 고정하고 투 포인터3개의 변수가 동.. [임베디드 CS] 메모리 주소 체계와 32비트 CPU가 데이터를 읽는 법 (feat. 책장 비유) 임베디드 공부를 시작하면서 가장 먼저 헷갈렸던 부분이 바로 '주소값'과 '데이터 크기'의 관계였습니다."ARM은 32비트 프로세서라는데, 왜 주소는 1바이트 단위로 매겨질까?" 이 의문을 해결하기 위해 공부한 내용을 '책장'에 비유하여 정리해 보았습니다.1. 메모리를 '긴 책장'이라고 상상해보자메모리(RAM)를 아주 긴 책장이라고 생각하면 이해가 쉽습니다. 이 책장에는 다음과 같은 절대적인 규칙이 있습니다.1. 책장 한 칸(주소 1개)에는 책 1권(1바이트)만 꽂을 수 있다.2. 책장 칸마다 고유 번호(주소, Address)가 붙어 있다. 이 규칙을 가지고 int형 변수와 char형 변수가 어떻게 저장되는지 살펴보겠습니다. 2. 상황 A: int (4바이트) 변수를 저장할 때C언어에서 int형 변수는 덩.. 이전 1 2 3 4 5 다음