추천 게시물

VIM 윈도우 지저분한 backup, swap, undo 파일 정리하기

VIM을 사용하다 보면 다양한 부수적인 파일들이 생성된다. 이런 파일들이 정신없게 만드는데 하위 폴더에 자동으로 수집되도록하면 편리하다. 아래는 VIM으로 인해 생성되는 파일이다. [확장자].swap : 수정 중 생성되는 backup [확장자]~ : 수정 전 파일 [확장자].un~ : Undo 파일 나는 각각의 폴더로 정리하지 않고 vim_backup이라는 폴더에 한번에 정리한다. 아래는 _vimrc에 넣어야하는 코드 예시이다. mkdir로 vim_backup 폴더도 생성한다. set backup set writebackup set undofile "set backupdir=C:/vim_backup// "set directory=C:/vim_backup// "set undodir=C:/vim_backup// set backupdir=./.vim_backup// set directory=./.vim_backup// set undodir=./.vim_backup// if !isdirectory("./.vim_backup")   call mkdir("./.vim_backup", "p") endif

파이썬 이미지에서 글자 추출 코드 (Simple version)

이미지
파이썬에서 글자를 추출하는 pkg가 있어서 소개한다. 이 코드로는 딱 글자만 있는 이미지만 추출 가능하다. 그래서 실용성은 조금 떨어지지만 그래도 간혹 필요한 사람이 있을 수 있으니 코드를 공유해 본다. 참고로 그림판으로 손글씨를 써봤는데 인식했다. Python 사전 설치 Tesseract OCR 설치 Tesseract를 먼저 설치해야 한다. 설치 방법은 운영체제에 따라 다르다. Windows: Tesseract 설치 파일 을 다운로드하여 설치. Linux: sudo apt install tesseract-ocr Mac: brew install tesseract Python 라이브러리 설치 pytesseract와 opencv-python 라이브러리를 설치해야 한다. 이를 위해 다음 명령어를 사용한다. pip install pytesseract opencv-python 이미지에서 글자 추출 예제 사전 세팅이 끝나면 아래 예제 코드를 참고해서 코드를 만들면 된다. import cv2 import pytesseract # Tesseract의 경로 설정 (윈도우에서만 필요) pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # 이미지 로드 image_path = 'your_image.jpg' # 이미지 파일 경로 image = cv2.imread(image_path) # 이미지를 흑백으로 변환 gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 이미지 전처리 (이진화 처리) _, binary_image = cv2.threshold(gray_image, 150, 255, cv2.THRESH_BINARY) # 글자 추출 extracted_text = pytesseract.image_to_strin...

삼성 그룹 분할이 이미 확정이라 생각하는 이유

이미지
삼성 그룹은 장기적으로 분할될 가능성이 높아 보인다. 특히 삼성전자조차도 이런 흐름을 피하기 어려울 것이다. 지배 구조 측면에서 이부진, 이재용, 이서현에게 각각 삼성 일가는 자산을 나눠주어야 할 것이고, 이로 인해 그룹 전체의 재편이 불가피하다. 삼성의 기업 분할은 이미 예정된 수순 삼성전자는 그동안 사법 리스크와 상속 리스크에서 어느 정도 벗어났지만, 이재용의 리더십은 아직 뚜렷하게 증명된 바 없다. 50대에 접어든 그는 지금이야말로 기업가로서의 안목과 능력을 보여주어야 할 시기이지만, 실적 부진과 함께 그 한계를 드러내고 있다. 과거 삼성전자는 실적이 낮은 사업부의 적자를 다른 사업부의 이익으로 메우는 방식으로 안정성을 유지해 왔다. 그러나 전체 사업부가 다 어려워지는 상황에서는 오히려 분할을 통해 각 부문이 독자적으로 생존하고 경쟁하는 체제를 구축해야 한다. 큰 기업은 변화의 유연성이 떨어지기 때문에, 작은 단위로 나눠 살아남는 기업만이 다시 성장할 것이다. 우주적 법칙은 국가와 기업에도 적용된다. 항성이 커지다 결국 자신의 중력에 의해 블랙홀이 되거나 폭발하는 것처럼, 기업도 자멸하거나 분리되어 새로운 시작을 맞게 된다. 역사를 보아도 분열된 국가는 통일되고 제국의 속국으로 점점 편입된다. 그리고 다시 수많은 나라로 분열되는 것을 반복해왔다. 지금이 기업 분할의 골든타임 특히 삼성전자의 파운드리 부문은 2024년 내로 분사를 고려해야 한다. 골든타임을 놓치면 반도체 부문 전체가 타격을 입을 수밖에 없다. 메모리 부문이 경쟁력을 유지할지라도, 파운드리와 LSI에서 발생하는 손실을 감당하지 못할 것이기 때문이다. 메모리는 D램과 낸드를 중심으로 어느 정도 자생할 수 있을 것으로 보이지만, AI 산업의 발전에 뒤처진 지금, 과거 이건희 시절처럼 해외 전문가를 초빙해 위기를 돌파하려는 노력은 기대하기 어렵다. 현재의 삼성은 과거와 같은 발 빠른 대응력을 보여주지 못하고 있다. 결국, 삼성은 여러 회사로 쪼개지고 각 부문의 사장들 중 특출난 인재가 이끄는 기업...

python jupyter 설치 및 실행 방법

파이썬에서 jupyter 환경을 셋업하고 간단한 코드를 예제로 실행하는 방법을 알아보자. 터미널에서 아래 패키지를 입력한다. pip install lckr-jupyterlab-variableinspector pip install jupyterlab pip install jupyter_contrib_nbextensions 설치가 완료되면 아래 명령어로 jupter-lab을 실행한다. jupyter-lab 

비트코인이 2025년 2억 가능한 이유

이미지
지난번에 비트코인이 2억 갈꺼라는 글을 썼는데, 글로만 전달하면 뭔가 아쉬워서 AI 음성을 사용해서 숏츠 영상도 만들었다. 매 반감기 마다 발행량은 줄어들고, 비트코인의 가격 상승도 점점 줄어든다. 코인이 시중에 풀리면서 점점 무거워지는 것은 다연해 보이며, 로그 차트에서의 기울기가 피보나치 비율을 추종한다는 것이 매우 흥미롭다. 아마 이번 예상이 맞는다면 나는 내년엔 더 좋은 지역으로 이사를 갈 수 있을 것 같다. 아래는 쇼츠 영상이니 투자에 참고하길 바란다.

파이썬 (Python) 독립 성분 분석 (ICA) 예제 코드

파이썬으로 독립 성분 분석 (Independent component analysis, 이하 ICA)를 활용하여 독립 성분을 추출하는 예제 코드이다. 실행하기 전에 numpy, matplotlib, sklearn을 미리 설치 해야한다. pip install numpy pip install scikit-learn pip install numpy 아래는 파이썬 코드이다. 두 성분 X, Y가 서로 다른 비율로 조합되어 생성된 신호 A, B를 만들고, 두 신호를 fastICA로 분리하고 잘 분리가 되었는지 Plot으로 확인한다. import numpy as np import matplotlib.pyplot as plt from sklearn.decomposition import FastICA # 샘플 데이터 생성 np.random.seed(0) time = np.linspace(0, 1, 500) X = np.sin(2 * np.pi * 7 * time) # X 성분 (주파수 7Hz) Y = np.sin(2 * np.pi * 13 * time) # Y 성분 (주파수 13Hz) # 실제 신호 A, B 생성 A = 0.5 * X + 0.2 * Y + 0.05 B = 0.1 * X + 0.4 * Y + 0.05 # 두 신호를 행렬로 만듭니다 (2 x N) signals = np.c_[A, B] # 독립 성분 분석 (ICA) ica = FastICA(n_components=2) components = ica.fit_transform(signals) # 분리된 신호 플롯 plt.figure(figsize=(10, 10)) # Original A Signal plt.subplot(4, 1, 1) plt.plot(time, A, label='Original A Signal') plt.legend() plt.title('Original Signals and ICA Components') # Original B Signal plt...

켈리 공식 유도와 켈리 공식의 유도

 켈리 공식(Kelly Criterion)은 도박이나 투자에서 수익을 극대화하면서도 파산 가능성을 최소화하는 최적의 베팅 금액을 계산하는 수학적 공식이다. 이 공식은 정보 이론을 연구하던 존 켈리(John Kelly)에 의해 1956년에 처음 제안되었다. 켈리 공식을 사용하면, 베팅이나 투자의 기대수익을 극대화할 수 있으며, 위험을 효과적으로 관리할 수 있다. 켈리 공식 켈리 공식은 다음과 같다. f ∗ = b p − q b f^* = \frac{bp - q}{b} ​ f ∗ f^*  : 총 자산에서 베팅할 비율 (Optimal Bet Fraction) b b  : 베팅에서 승리할 경우의 배당 (예를 들어, 1:1일 경우 b = 1 b = 1 ) p p  : 베팅에서 이길 확률 (win probability) q q   : 베팅에서 질 확률 ( q = 1 − p q = 1 - p ) 이 공식은 주어진 조건 하에서, 자산의 비율을 최적화하여 장기적인 수익을 최대화하는 비율을 나타낸다. 켈리 공식 유도 문제 정의 : 당신은 베팅을 여러 번 반복하며, 각 베팅에서 자산의 일정 비율 f f f 를 걸고 있다. 이길 확률이 p p p , 질 확률이 1 − p 1 - p 1 − p , 승리 시 수익 배율이 b b b 인 베팅 상황에서, 베팅 비율 f f f 를 어떻게 정해야 하는지 결정하는 문제다. 기대 자산의 수익률 계산 : 베팅을 한 번 했을 때의 결과는 두 가지다: 이길 경우: 자산은 ( 1 + f ⋅ b ) (1 + f \cdot b)  배 증가. 질 경우: 자산은 ( 1 − f ) (1 - f)  배 감소. 따라서 n n 번 베팅 후 자산을 최대화하려면 다음을 최대화해야 한다. E [ log ( W ) ] = p ⋅ log ⁡ ( 1 + f ⋅ b ) + ( 1 − p ) ⋅ log ⁡ ( 1 − f ) E[\text{log}(W)] = p \cdot \log(1 + f \cdot b) + (1 - p...

해외 코인 선물 거래소 레퍼럴 홍보 주요 5가지 방법

 해외 코인 선물 거래소의 레퍼럴 프로그램을 효과적으로 홍보하는 방법은 다양하다. 하지만 모든 전략을 동시에 적용하기 어렵기 때문에, 가장 효과적이고 실질적인 5가지 방법을 소개하고자 한다. 레퍼럴 홍보의 5가지 방법 1. 유튜브 쇼츠 활용 유튜브 쇼츠는 짧고 강렬한 영상으로 많은 사람들에게 도달할 수 있는 좋은 플랫폼이다. 코인 선물 거래의 간단한 팁이나 거래소 사용법을 짧은 영상으로 소개하면서 레퍼럴 링크를 포함하면 큰 효과를 볼 수 있다. 이 방법은 유입 속도가 빠르고, 모바일 사용자들에게 적합하다. 나는 현재의 인터넷 환경에서 처음 시작하는 사람들에겐 유튜브 쇼츠를 통한 유입을 가장 추천한다. 2. 소셜 미디어 홍보 트위터, 텔레그램, 디스코드와 같은 소셜 미디어 플랫폼은 가상화폐 투자자들이 많이 모여 있는 공간이다. 적극적으로 관련 커뮤니티에 참여하여 신뢰를 쌓고, 거래소의 장점과 레퍼럴 혜택을 소개하는 것이 좋다. 특히 코인 선물 거래소에서 제공하는 혜택이나 수수료 할인을 강조하며 자연스럽게 레퍼럴 링크를 배포할 수 있다. 3. 이벤트 및 인센티브 레퍼럴 가입자만 참여 가능한 대회나 이벤트를 개최하는 것도 좋은 방법이다. 예를 들어, 일정 금액 이상의 거래를 한 레퍼럴 가입자에게 특별 보상을 제공하는 이벤트를 통해 신규 가입자가 실거래로 이어지게 만들 수 있다. 이는 단순 홍보를 넘어 실제 거래 참여를 유도하는 강력한 방법이다. 특히 큰 상금이 걸린 대회를 개최하고 레퍼럴 링크를 통해 가입한 사람만 참가 가능하도록 하여 가입을 유도하는 방식도 있다. 4. SEO 최적화된 블로그 포스팅 거래소 관련 리뷰나 가이드 글을 작성하고, 검색 엔진 최적화를 통해 상위에 노출되게 하는 방법도 효과적이다. 많은 사람들이 검색하는 질문이나 문제를 해결하는 글을 작성하면서 레퍼럴 링크를 자연스럽게 포함하면, 오랜 기간 동안 안정적인 유입을 기대할 수 있다. 5. 인플루언서 마케팅 코인 관련 인플루언서가 되어 팬층을 형성하고, 이들에게 거래소를 추천하는 방법이다...

켈리 공식 계산기 (진입 비율에 따른 변화)

진입 비율에 따른 켈리 공식 확인 진입 비율을 높일 수록 이겼을 때의 수익은 커지지만 졌을 때의 손실 역시 커진다.  욕심에 사로잡혀 승률과 기대 값만 보고 무리한 투자를 하면 손실로 이어진다. 50%이상의 승률과 좋은 손익비로 투자를 하더라도 진입 비중이 일정 수준을 넘어가면 손실로 전환된다. 본인이 생각했을 때 충분히 가능할 듯한 최적의 승률을 입력한 뒤 투자 비율을 얼마까지 가져가야 할지 판단해 보기 바란다. 켈리 계산기 이용방법 승률: 도박이나 투자에서 수익을 얻을 확률 승리 시 이익: 투자 수익률, 도박에서 베팅액 기준 얻는 돈 손실: 투자 손실율, 도박에서 베팅액 잃는 돈.  최소 수익: 차트 표시 옵션. 수익률이 표시되는 최소 지점을 보여준다. -100%로 하면 전재산을 잃는 지점까지 표시하라는 의미이다. 예를 들어, 6면체 주사위의 짝수가 나오면 베팅 금액의 3배를 돌려받고, 홀수가 나오면 0원을 돌려 받는 다고 하면, 이익은 +200%, 손실은 (-100%)이다. 홀짝은 50% 승률이므로 아래와 같이 입력한다. 승률: 50 / 승리 시 이익: 200 / 손실: 100 결과: 최적의 베팅 비율은 자산의 25%이며, 1회당 수익률은 6.07%이다. Kelly Criterion Calculator 승률 (Win Probability, %): 승리 시 이익 (Win Gain, %): 손실 (Loss, %): 최소 수익 (Min Return, %), >-100%: 차트 업데이트 (Update Chart)

켈리 공식 계산기 (승률에 따른 변화)

이미지
승률의 변화로 보는 켈리 공식 켈리 공식을 계산할 때 승률을 명확히 알 수 없는 경우가 있다. 도박과 같이 승률이 명확한 경우는 그 승률을 입력하면 되지만, 투자는 승률을 정확히 알기 어렵다.  이는 다양한 투자 환경의 변화 때문이다. 투자환경은 투자자들의 실력의 향상으로 과거의 투자 방식이 적용되지 않거나, 투자 대상의 변동성과 내재가치의 변화, 거시적 지표의 변화 등에 의해 달라진다.  우리가 승률의 예측에 틀리더라도 욕심을 부리지 않고 베팅 비율을 적절히 유지한다면 크게 손해 보지 않지만 과도한 욕심을 부리면 손실로 이어질 수 있다.  진입 비율이 일정할 때 승률에 따른 수익률의 변화를 확인해 보자. 켈리 계산기 이용방법 베팅 비율: 도박이나 투자에서 자본 대비 베팅하는 금액 승리 시 이익: 투자 수익률, 도박에서 베팅액 기준 얻는 돈 손실: 투자 손실율, 도박에서 베팅액 기준 잃는 돈.  위의 값을 입력한 뒤 차트 업데이트를 클릭한다. 계산기 예제 예를 들어, 어떤 시스템 트레이딩 봇의 손절은 -5%, 익절은 20% 이다.  나의 총 투자금에서 50%를 투자할 계획이며, 과거 거래 시뮬레이션에서 승률은 40%이다. 만약 앞으로 승률이 그 보다 더 낮아진다면 수익을 얻을 수 있을지 알고 싶다. 아래와 같이 입력하자. 베팅 비율: 50 / 승리 시 이익: 20 / 손실: 5  계산기 결과 해석 아래는 예제를 입력했을 때 결과이다. 그래프: 1회 시행 당 예상 수익, X축은 승률이다. 설정 된 배팅 비율, 익절, 손절 비율이다. 수익=0 ...

z-transform 공식에서 z^-n의 의미

z-transform은 이산 시간 신호를 주파수 도메인에서 분석하기 위한 중요한 도구입니다. 신호 처리와 제어 시스템에서 많이 사용되지만, 처음 접할 때는 낯설게 느껴질 수 있습니다. 하지만 그 원리를 이해하면 시스템을 분석하고 설계할 때 매우 유용한 도구가 됩니다. 이번 글에서는 z-transform이 무엇을 의미하는지, 그리고 이를 어떻게 해석할 수 있는지 초심자도 쉽게 이해할 수 있도록 설명하겠습니다. 1. z-transform이란? 우선, z-transform의 공식부터 살펴보겠습니다: Y ( z ) = ∑ n = − ∞ ∞ y [ n ] z − n Y(z) = \sum_{n=-\infty}^{\infty} y[n] z^{-n} 시간 도메인에서의 신호 : y [ n ] = { 1 , 2 , 3 } y[n] = \{1, 2, 3\} 이라고 가정해 봅시다. 주파수 도메인으로 변환 : 각 샘플에 z − n z^{-n} 을 곱하고, 모든 샘플의 합을 구합니다. Y ( z ) = 1 ⋅ z 0 + 2 ⋅ z − 1 + 3 ⋅ z − 2 Y(z) = 1 \cdot z^{0} + 2 \cdot z^{-1} + 3 \cdot z^{-2} 여기서: y [ n ] y[n] 은 시간 도메인에서의 이산 신호입니다. 예를 들어, y [ 0 ] = 1 y[0] = 1 ,  y [ 1 ] = 2,  y [ 2 ] = 3 이런 식으로 정의될 수 있습니다. z z 는 복소수 변수로, 주파수 성분과 관련이 있습니다. z − n z^{-n} 은 각 샘플 y [ n ] y[n] 이 주파수 도메인에서 어디에 위치하는지를 나타냅니다. 이 공식을 통해 우리는 시간 도메인의 신호를 주파수 도메인으로 변환하여 신호의 주파수 특성을 분석할 수 있게 됩니다. 2. z-transform의 의미: 신호의 주파수 성분 분석 z-transform은 각 시간 샘플 y [ n ] y[n] y [ n ] 이 신호 전체에서 차지하는 비율이나 주파수 특성을 표현하는 데 사용됩니다. 예를 들어, 신호가...

VIM에서 VIMDIFF 실행 및 VIMDIFF 단축키

 어떤 두 파일의 다른 점을 비교해야하는 경우가 많다. 특히 어떤 파일을 수정하고 뭘 고쳤는지 까먹었다거나, 데이터들의 차이를 비교하는 등의 경우에 활용도가 높다. VIMDIFF를 사용해서 바로 두 파일을 비교해도 되지만 VIMDIFF 파일명 파일명을 치기도 귀찮고, 열려있는 VIM을 그대로 활용하고 싶을 때가 많다. 그럴 때 아래와 같이 현재 열려있는 VIM 창에서 바로 VIMDIFF를 할 수 있다. 1. ^w+v로 창을 2개로 분리한다. 그럼 두 창 모두 현재 파일이 보일 것이다. 2. 둘 중 한개의 창에 다른 파일을 open한다. (불러오는 단축키는 :e, 새롭게 생성하는 커맨드는 :enew) 3. :diffthis 를 커맨드로 입력한다. 4. vimdiff를 종료하고 싶으면 :diffoff 를 입력한다. 5. ^w+c를 입력하여 2개의 창 중 1개를 닫는다. 아래는 VIMDIFF에서 내가 주로 사용하는 단축키 들이다. ^w + (좌우)화살표 : 활성 윈도우 선택 do : 현재 윈도우의 라인을 다른 윈도우의 내용으로 변경 여러 줄 변경이 필요하면 Visual Mode로 진입한 뒤 :'<,'>diffget 을 커맨드에 입력한다. :'<,'>는 Visual에서 :을 입력하면 바로 선행 입력된다. dp : 반대로 다른 윈도우의 내용을 현재 윈도우의 내용으로 변경한다. 커맨드로는 diffput이다. zo : 동일한 내용이 접혀있으면 펼쳐서 보여준다. zc : 일치하는 내용은 접는다. zr : 양쪽 윈도우 모두 펼친다. zm : 양쪽 윈도우 모두 접는다.

Bitget 선물 1분봉 (1min candle, ohlc) 데이터 수집 코드 (파이썬)

퀀트 트레이딩 시스템을 개발하고 적용하기 위해서는 아이디어가 잘 작동하는지 확인하는 작업이 필요하다. 나같은 회로 개발자들은 Testbench 또는 시뮬레이션이라 부르는데, 이 쪽 분야에서는 백테스트(Backtest)라는 용어가 흔히 사용된다. 이 Backtest를 하기 위해서 다양한 데이터가 필요한데, 일반적으로 차트 분석을 기반으로 하는 시스템 트레이딩은 캔들(시고저종)과 거래량이 주요 지표이다. 이 글을 검색해서 왔다면 뭐 다 아는 얘기일테니 서론은 이만하고 바로 코드를 예시로 적어보겠다. import configparser import hmac import base64 import json import time import os import requests import pandas as pd from datetime import datetime, timedelta import pytz import hashlib # Configurations config = configparser.ConfigParser() config.read( 'config.ini' ) try : API_KEY = config.get( 'bitget' , 'API_KEY' ) API_SECRET_KEY = config.get( 'bitget' , 'API_SECRET' ) except configparser.NoOptionError as e: print ( f"Config error: { e } " ) API_KEY = 'your_api_key_here' API_SECRET_KEY = 'your_secret_key_here' API_BASE_URL = 'https://api.bitget.com' # Helper functions def get_timestamp (): ret...

FFT Peak 주파수 추정 방식 (이차 보간법, 가중평균법, parabolic inpterpolation, weighted average) 비교

이미지
FFT를 그냥 진행하면 Leakage(누설)가 발생한다. 누설이라는 용어보단 Leakage가 편해서 Leakage로 표현하겠다. 이는 우리가 흔히 FBIN이라고 하는 주파수 Resolution이 입력 신호와 맞지 않아 발생하는 흔한 현상이다. 이해를 돕기 위해서 부연하면 FBIN은 FFT의 X축의 간격이다. 이런 현상을 완화시키기 위해서 윈도우를 씌우기도 하지만 Leakage를 완전히 막지는 못한다. 따라서 정확한 Peak 주파수를 얻기 위해선 Peak 주파수 주변 신호를 활용해 정확도를 높이는 방식을 적용해 볼 수 있다. 여기서 소개할 방식은 2가지로 신호에서 흔히 사용되는 이차 보간법과 가중평균법이다. 결론적으로 주파수를 가변하며 FFT를 하고 FFT의 결과에서 2가지 방식을 통해 주파수를 다시 계산했다. 그리고 원래 입력 주파수와 계산된 주파수의 차이를 Error로 하여 결과에 Plot하는 코드를 작성했다. 코드는 OCTAVE로 작성되어서 MATLAB에서도 무난히 동작할 것이다. 코드 예제 이차보간법 코드 (Parabolic Interpolation) % Load the signal package pkg load signal; % Octave Script for Precise Peak Frequency Estimation Considering Windowing Effect % Parameters Fs = 128;                   % Sampling frequency NFFT = 2048;                % FFT points freq_range = 0.5:0.0001:4;     % Frequency range to test errors = zeros(size(freq_range)); % Initialize error array % Window...

FFT 예제: 윈도우 적용 시 Normalized Wegith Value, SNR 계산, Sinusoidal + Noise Signal Generation, Prime Cycle Frequency 등 포함

측정한 신호를 FFT로 변환하기 위해서는 다양한 방법들을 고려 해야 한다. 단순히 인터넷에 있는 ideal sinewave를 바탕으로 깔끔하게 나온 FFT 결과는 현실적으로 적용하기 어렵기 때문이다. 아래 항목들이 측정 및 FFT 코드 작성 시 고민해야할 사항이다. 1. Normalize 2. Sine wave cycle 3. Signal and Noise power, rms calculation 4. Window selection and weight 각각의 항목에 관해서는 나중에 별도의 글로 다시 정리할 예정이다. 아래는 위의 사항을 고려하여 작성한 FFT 코드이다. OCTAVE를 기준으로 작성되었다. FFT 코드 clc; pkg load signal; pkg load io; % Functions function weight_result = fft_weight2(window, NFFT)   %weight_result=1/sum(abs(fft(window,NFFT)./NFFT.*2));   window_fft=abs(fft(window,NFFT)./NFFT);   weight_result=1/sqrt(sum(window_fft.^2))   %window2=window.^2;   %weight_result=sqrt(sum(abs(fft(window2,NFFT)./NFFT)));   return; end function adjusted_frequency = closest_prime_frequency(sampling_time, target_frequency)   % Calculate the number of cycles for the target frequency   num_cycles = sampling_time * target_frequency;   % Define the search range around num_cycles   search_range = 1000; ...