主頁 >  其他 > 《數字信號處理》課程實驗1 – FFT的實作

《數字信號處理》課程實驗1 – FFT的實作

2020-09-19 01:37:44 其他

一、按時間抽選的基-2 FFT實作原理


觀察DIT(基2)FFT的流圖(N點,N為2的冪次),可以總結出如下規律:
(1)共有\(L=\log_2?N\)級蝶形運算;
(2)輸入倒位序,輸出自然順序;
(3)第\(m\)級(\(m\)從1開始,下同)蝶形結對偶結點距離為\(2^{m-1}\)
(4)第\(m\)級蝶形結計算公式:
\(X_m (k)=X_{m-1} (k)+X_{m-1 } (k+2^{m-1} ) W_N^r\)
\(X_m (k+2^{m-1} )=X_{m-1} (k)-X_{m-1} (k+2^{m-1} ) W_N^r\)
\(m=1,2,…,L\)
(5)第\(m\)級不同旋轉因子數為\(2^{m-1}\)
(6)第\(m\)級每一種旋轉因子關聯\(2^{L-m}\)個蝶形結;
(7)第\(m\)級一種旋轉因子的兩次相鄰出現間隔\(2^m\)個位置;
(8)第\(m\)級第\(i\)種(\(i\)從0開始)旋轉因子\(W_N^r\)的指數\(r\)\(2^{L-m}i\)
(7)每個蝶形結運算完成后,輸出的兩節點值可以直接放到原輸入的兩節點的存盤器中(原位運算),

二、按時間抽選的基-2 FFT實作細節

依據如上觀察,使用Python語言撰寫下列相關程式:

(1)倒位變址運算

自然序排列的二進制數,其下一個數總比前一個大1,而倒序二進制數的下一個數,是前一個數最高位加1,然后由高位向低位進位得到的,使用Rader演算法,可以方便地計算倒位序,
Rader演算法利用一個遞推關系——如果已知第\(k\)步倒位序為\(J\),則第\(k+1\)步倒位序計算方法為:從\(J\)最高位看向最低位,為1則變0;為0則變1并立刻退出,即得到下一步倒位序,由于已知遞推起點第1步的序號0的倒位序也為0,故可以使用該演算法求出所有倒位序,
進行倒位變址運算時,為避免重復調換,設輸入為\(x(n)\),倒位序后為\(x(m)\),當且僅當\(m>n\)時進行對調,
下面是相關代碼:

new_index = [0]
J = 0 # J為倒位序
for i in range(N - 1): # i為當前數
  mask = N // 2
  while mask <= J: # J的最高位為1
    J -= mask # J的最高位置0
    mask = mask >> 1 # 準備檢測下一位
  J += mask # 首個非1位置1
  new_index.append(int(J))
for i in range(N):
  if new_index[i] <= i:
    continue # 無需對調
  seq[i], seq[new_index[i]] = seq[new_index[i]], seq[i] # 交換

(2)旋轉因子的計算

利用歐拉公式可知:
\(W_N^k=\cos?(2kπ/N)-j \sin?(2kπ/N)\)
\(k=0,1,…,N-1\)范圍內回圈一次,即可計算所有旋轉因子,
一種優化策略是利用如下遞推關系來加速計算,遞推起點\(W_N^0=1\)
\(W_N^{(k+1)}=W_N^k \exp?(-j 2π/N)\)
相關代碼如下:

WNk = []
two_pi_div_N = 2 * PI / N # 避免多次計算
for k in range(N // 2):
  # WN^k = cos(2kPI/N) - j sin(2kPI/N)
  WNk.append(Complex(math.cos(two_pi_div_N * k), math.sin(two_pi_div_N * -k)))

(3)蝶形結按層運算

以旋轉因子的種類為回圈標準,每一輪就算掉該種旋轉因子對應的\(2^{L-m}\)個蝶形結,結合觀察(3)~(8),相關代碼如下:

L = int(math.log2(N)) # 蝶形結層數
for m in range(1, L + 1): # m為當前層數,從1開始
  distance = 2 ** (m - 1) # 對偶結點距離,也是該層不同旋轉因子的數量
  for k in range(distance): # 以結合的旋轉因子為回圈標準,每一輪就算掉該旋轉因子對應的2^(L-m)個結
    r = k * 2 ** (L - m) # 該旋轉因子對應的r
    for j in range(k, N, 2 ** m): # 2^m為每組旋轉因子對應的分組的下標差
      right = seq[j + distance] * WNk[r]
      t1 = seq[j] + right; t2 = seq[j] - right
      seq[j] = t1; seq[j + distance] = t2

三、反變換IFFT的實作

由于IDFT公式為:
\(x(n)={\rm IDFT}[X(k)]=\frac {1}{N} ∑_{k=0}^{N-1} X(k) W_N^{-nk}\)
將該式取共軛:
\(x^* (n)=\frac {1}{N} [∑_{k=0}^{N-1}X(k) W_N^{-nk} ]^*=\frac {1}{N} ∑_{k=0}^{N-1}[X^* (k) W_N^{nk} ]=\frac {1}{N} {\rm DFT}[X^* (k)]\)
那么:
\(x(n)=\frac {1}{N} {{\rm DFT}[X^* (k)]}^*\)
這意味著IFFT可以共用FFT程式,只要將\(X(k)\)取共軛后做FFT,結果再取共軛并除以\(N\)即完成了IFFT,相關代碼如下:

def ifft(seq: list):
  # 檢查是否為2^L點序列
  N = len(seq)
  if int(math.log2(N)) - math.log2(N) != 0:
    raise ValueError('[ifft] Not 2^L long sequence.')
  # 先對X(k)取共軛
  seq = list(map(lambda x : x.conjugate(), seq))
  # 再次利用FFT
  seq = fft_dit2(seq)
  # 再取共軛
  seq = map(lambda x : x.conjugate(), seq)
  # 最后除以N
  seq = map(lambda x : x * Complex(1 / N, 0), seq)
  return list(seq)

四、程式測驗

按照要求,分別使用如下三種信號測驗演算法,使用matplotlib庫作圖,使用numpy庫的FFT結果與自行撰寫的FFT結果進行對照,
(1)正弦序列
產生\([-π,π]\)上的16點均勻采樣,計算相應的\(\sin\)函式值,進行FFT,結果如下,正確無誤:

繪制序列及其幅度頻譜圖,同時繪制IFFT結果以測驗IFFT程式:

(2)三角波序列
從0開始向正方向,以\(π/8\)為間隔,產生三角波的16點\(x\)值,并按\([0, 0.5, 1, 0.5, 0, 0.5, 1…]\)規律賦\(y\)值,作FFT,結果如下,正確無誤:

繪制序列及其幅度頻譜圖,同時繪制IFFT結果以測驗IFFT程式:

(3)方波序列
產生\([-π,π]\)上的32點均勻采樣作為方波的\(x\)值,并按\([0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1…]\)規律賦\(y\)值(占空比50%,周期8點),作FFT,結果如下,正確無誤:

繪制序列及其幅度頻譜圖,同時繪制IFFT結果以測驗IFFT程式:

五、補充說明

本程式的fft_dit2函式默認對輸入的\(N\)長度序列作\(N\)點FFT,即采樣點數與FFT點數相同,但有時候,需要對\(N\)長度序列作\(L(L>N)\)點FFT,為此,程式提供了一個實用函式add_zero_to_length來把\(N\)點序列末尾補0到指定長度以支持上述FFT運算,
使用一個矩形窗序列\(R_8 (n)\),對其作16點FFT,測驗程式正確性,程式正確無誤,如下所示:

該段測驗用的代碼由于不是實驗要求,故在fft_demo.py中作注釋處理,
除了補0函式外,程式還提供了下列這些實用函式來幫助更方便地使用FFT:

附錄:全部代碼

fft.py

# coding: utf-8

# 《數字信號處理》課程實驗
# FFT與IFFT實作(一維)
# 09017227 卓旭

import math

'''
  自定義復數類
'''
class Complex:

  def __init__(self, re, im):
    self.set(re, im)

  def set(self, re, im):
    self._re = re
    self._im = im

  def get(self, what):
    return self._re if what == 're' else self._im

  def __add__(self, other):
    return Complex(
      self._re + other._re,
      self._im + other._im
    )

  def __sub__(self, other):
    return Complex(
      self._re - other._re,
      self._im - other._im
    )

  def __mul__(self, other):
    return Complex(
      (self._re * other._re) - (self._im * other._im),
      (self._re * other._im) + (self._im * other._re)
    )

  def conjugate(self):
    return Complex(
      self._re, -self._im
    )

  def __abs__(self):
    return math.sqrt(self._re ** 2 + self._im ** 2)

  def __str__(self):
    return (str(round(self._re, 3)) + ' + j' + str(round(self._im, 3))) if (self._im >= 0) \
      else (str(round(self._re, 3)) + ' - j' + str(round(-self._im, 3)))

PI=math.pi

'''
  按時間抽選的基-2快速傅里葉變換(n點)
  需要傳入list<Complex>
'''
def fft_dit2(seq: list):
  # 檢查是否為2^L點FFT
  N = len(seq)
  if int(math.log2(N)) - math.log2(N) != 0:
    raise ValueError('[fft_dit2] Not 2^L long sequence.')

  # 輸入資料倒位序處理
  new_index = [0]
  J = 0 # J為倒位序
  for i in range(N - 1): # i為當前數
    mask = N // 2
    while mask <= J: # J的最高位為1
      J -= mask # J的最高位置0
      mask = mask >> 1 # 準備檢測下一位
    J += mask # 首個非1位置1
    new_index.append(int(J))
  for i in range(N):
    if new_index[i] <= i:
      continue # 無需對調
    seq[i], seq[new_index[i]] = seq[new_index[i]], seq[i] # 交換

  # 計算所有需要的旋轉因子WN^k(k在0~N/2-1)
  # 一種優化策略是使用遞推式WN(k+1) = WN(k) * e^(-j 2PI/N)計算
  WNk = []
  two_pi_div_N = 2 * PI / N # 避免多次計算
  for k in range(N // 2):
    # WN^k = cos(2kPI/N) - j sin(2kPI/N)
    WNk.append(Complex(math.cos(two_pi_div_N * k), math.sin(two_pi_div_N * -k)))

  # 蝶形運算
  L = int(math.log2(N)) # 蝶形結層數
  for m in range(1, L + 1): # m為當前層數,從1開始
    # 見課本P219表4.1
    distance = 2 ** (m - 1) # 對偶結點距離,也是該層不同旋轉因子的數量
    for k in range(distance): # 以結合的旋轉因子為回圈標準,每一輪就算掉該旋轉因子對應的2^(L-m)個結
      r = k * 2 ** (L - m) # 該旋轉因子對應的r
      for j in range(k, N, 2 ** m): # 2^m為每組旋轉因子對應的分組的下標差
        right = seq[j + distance] * WNk[r]
        t1 = seq[j] + right; t2 = seq[j] - right
        seq[j] = t1; seq[j + distance] = t2

  return seq

'''
  快速傅里葉變換的反變換
  需要傳入list<Complex>
'''
def ifft(seq: list):
  # 檢查是否為2^L點序列
  N = len(seq)
  if int(math.log2(N)) - math.log2(N) != 0:
    raise ValueError('[ifft] Not 2^L long sequence.')

  # 先對X(k)取共軛
  seq = list(map(lambda x : x.conjugate(), seq))
  # 再次利用FFT
  seq = fft_dit2(seq)
  # 再取共軛
  seq = map(lambda x : x.conjugate(), seq)
  # 最后除以N
  seq = map(lambda x : x * Complex(1 / N, 0), seq)

  return list(seq)

'''
  實用函式,將實序列轉化為list<Complex>
'''
def convert_to_complex(seq: list):
  return list(map(lambda x : Complex(x, 0), seq))

'''
  實用函式,將list<Complex>轉化為實序列(丟棄虛部)
'''
def convert_to_real(seq: list):
  return list(map(lambda x : x.get('re'), seq))

'''
  實用函式,獲取Complex的幅度值
'''
def convert_to_amplitude(seq: list):
  return list(map(lambda x: math.sqrt(x.get('re') ** 2 + x.get('im') ** 2), seq))

'''
  實用函式,獲取Complex的相位值
'''
def convert_to_phase(seq: list):
  return list(map(lambda x: math.atan2(x.get('im'), x.get('re')), seq))

'''
  實用函式,列印FFT結果
'''
def print_fft_result(seq: list):
  toprint = '[\n'
  modder = 0
  for cplx in seq:
    toprint += str(cplx)
    toprint += '\t\t' if modder != 3 else '\n'
    modder += 1
    modder %= 4
  toprint += ']'
  return toprint

'''
  實用函式,給實序列補0到指定長度,可用于采樣點數小于FFT點數
'''
def add_zero_to_length(seq: list, n: int):
  if len(seq) == n:
    return seq
  # 如果點數不足,把seq補到n點
  if len(seq) > n:
    raise ValueError('[add_zero_to_length] n < len(seq).')
  if len(seq) < n:
    res = [*seq]
    while (len(res) < n):
      res.append(0)
  return res

fft_demo.py

# coding: utf-8

# 《數字信號處理》課程實驗
# FFT與IFFT實測應用(作圖)
# 09017227 卓旭

import matplotlib.pyplot as plt
import numpy as np

from fft import *

PI=math.pi

def ft_test(name, xs, ys):
  # 產生測驗點
  y_points = ys
  # 繪制原圖
  plt.subplots_adjust(hspace=0.7)
  plt.subplot(311)
  plt.title('Original Singal: ' + name)
  plt.plot(xs, y_points, '.')
  # 繪制FFT結果(幅度譜)
  fft_res = fft_dit2(convert_to_complex(y_points))
  plt.subplot(312)
  plt.title('FFT Result (Amplitude Spectrum)')
  fft_res_amp = convert_to_amplitude(fft_res)
  plt.plot(xs, fft_res_amp, '.')
  max_height = np.max(fft_res_amp)
  for (idx, val) in enumerate(xs):
    plt.axvline(val, 0, fft_res_amp[idx] / max_height) # 繪制豎線
  # 繪制IFFT
  ifft_res = convert_to_real(ifft(fft_res))
  plt.subplot(313)
  plt.title('IFFT Result')
  plt.plot(xs, ifft_res, '.')
  plt.show()

if __name__ == '__main__':
  # 正弦函式測驗
  xs = np.linspace(-PI, PI, 16)
  ys = [math.sin(x) for x in xs]
  print("========正弦函式========")
  print("np.fft標準結果:")
  print(np.fft.fft(ys))
  print("我的FFT結果:")
  print(print_fft_result(fft_dit2(convert_to_complex(ys))))
  ft_test('sin(x)', xs, ys)
  print("========三角波========")
  xs = [i * PI / 8 for i in range(16)]
  ys = [0, 0.5, 1, 0.5, 0, 0.5, 1, 0.5, 0, 0.5, 1, 0.5, 0, 0.5, 1, 0.5]
  print("np.fft標準結果:")
  print(np.fft.fft(ys))
  print("我的FFT結果:")
  print(print_fft_result(fft_dit2(convert_to_complex(ys))))
  ft_test('Tri(x)', xs, ys)
  print("========方波========")
  xs = np.linspace(-PI, PI, 32)
  ys = [-1,-1,-1,-1, 1, 1, 1, 1] * 4
  print("np.fft標準結果:")
  print(np.fft.fft(ys))
  print("我的FFT結果:")
  print(print_fft_result(fft_dit2(convert_to_complex(ys))))
  ft_test('Square(x)', xs, ys)
  # print("========R_8========")
  # xs = range(16)
  # ys = [1, 1] * 4
  # ys = add_zero_to_length(ys, 16)
  # print("np.fft標準結果:")
  # print(np.fft.fft(ys, 16))
  # print("我的FFT結果:")
  # print(print_fft_result(fft_dit2(convert_to_complex(ys))))
  # ft_test('R_8(x), 16 dot', xs, ys)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/77811.html

標籤:其他

上一篇:CF750D New Year and Fireworks

下一篇:單鏈表操作(帶頭節點)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more