'프로그램 사용'에 해당되는 글 2276건

  1. 2023.05.24 openfoam on ubuntu
  2. 2023.05.24 openFOAM tutorial 4
  3. 2023.04.17 semgrep
  4. 2023.04.17 cppcheck 사용
  5. 2023.04.10 gstremaer videobox + videomixer
  6. 2023.04.07 fft phase 연산
  7. 2023.04.07 fftw input range?
  8. 2023.04.07 fft 복소수(complex) - 실수, 허수부(real, imaginary)
  9. 2023.04.06 gst-inspector.c
  10. 2023.04.05 fft 0 Hz 2

예전에는 직접 빌드했던것 같은데 이제 빌드된 바이너리도 배포하고 좋아졌네

curl https://dl.openfoam.com/add-debian-repo.sh | sudo bash
sudo apt-get update
sudo apt-get install openfoam2212-default
openfoam2212

[링크 : https://develop.openfoam.com/Development/openfoam/-/wikis/precompiled/debian]

 

헉.. 용량이.. 

$ sudo apt-get install openfoam2212-default
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
다음의 추가 패키지가 설치될 것입니다 :
  flex gfortran gfortran-7 libcgal-dev libcgal13 libfl-dev libfl2 libgfortran-7-dev libgmp-dev libgmpxx4ldbl libhwloc-dev
  libibverbs-dev libmpfr-dev libnuma-dev libopenmpi-dev libptscotch-6.0 libptscotch-dev libreadline-dev libscotch-6.0 libscotch-dev
  libtinfo-dev mpi-default-bin mpi-default-dev openfoam-selector openfoam2212 openfoam2212-common openfoam2212-dev
  openfoam2212-source openfoam2212-tools openfoam2212-tutorials
제안하는 패키지:
  bison flex-doc gfortran-multilib gfortran-doc gfortran-7-multilib gfortran-7-doc libgfortran4-dbg libcoarrays-dev libmpfi-dev
  libntl-dev gmp-doc libgmp10-doc libmpfr-doc openmpi-doc readline-doc gnuplot
다음 새 패키지를 설치할 것입니다:
  flex gfortran gfortran-7 libcgal-dev libcgal13 libfl-dev libfl2 libgfortran-7-dev libgmp-dev libgmpxx4ldbl libhwloc-dev
  libibverbs-dev libmpfr-dev libnuma-dev libopenmpi-dev libptscotch-6.0 libptscotch-dev libreadline-dev libscotch-6.0 libscotch-dev
  libtinfo-dev mpi-default-bin mpi-default-dev openfoam-selector openfoam2212 openfoam2212-common openfoam2212-default
  openfoam2212-dev openfoam2212-source openfoam2212-tools openfoam2212-tutorials
0개 업그레이드, 31개 새로 설치, 0개 제거 및 0개 업그레이드 안 함.
131 M바이트 아카이브를 받아야 합니다.
이 작업 후 767 M바이트의 디스크 공간을 더 사용하게 됩니다.
 

 

흐음.. 멀 어떻게 해야하나 막막하네?

나가는 방법은 exit

$ openfoam2212
openfoam = /usr/lib/openfoam/openfoam2212

 * Using:     OpenFOAM-v2212 (2212) - visit www.openfoam.com
 * Build:     _f8e05934-20230403 (patch=230110)
 * Arch:      label=32;scalar=64
 * Platform:  linux64GccDPInt32Opt (mpi=sys-openmpi)

OpenFOAM shell session - use 'exit' to quit

openfoam2212:~/
minimonk$ help
GNU bash, version 4.4.20(1)-release (x86_64-pc-linux-gnu)
쉘 명령어는 내부적으로 정의되어 있습니다.  'help'를 입력하면 목록이 보입니다.
`name' 함수에 대해 더 많은 것을 알아보려면 `help name' 을 입력하십시오.
일반적인 쉘에 대해서 더 많은 것을 알아보려면 `info bash' 를 사용하십시오.
목록에 없는 명령어에 대해 더 많은 것을 알아보려면 `man -k' 또는 `info'를 사용하십시오.

별표(*)가 옆에 있는 명령어는 사용할 수 없음을 의미합니다.

 job_spec [&]                                                       history [-c] [-d offset] [n] or history -anrw [filename] or his>
 (( expression ))                                                   if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]..>
 . filename [arguments]                                             jobs [-lnprs] [jobspec ...] or jobs -x command [args]
 :                                                                  kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or k>
 [ arg... ]                                                         let arg [arg ...]
 [[ expression ]]                                                   local [option] name[=value] ...
 alias [-p] [name[=value] ... ]                                     logout [n]
 bg [job_spec ...]                                                  mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u f>
 bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [>  popd [-n] [+N | -N]
 break [n]                                                          printf [-v var] format [arguments]
 builtin [shell-builtin [arg ...]]                                  pushd [-n] [+N | -N | dir]
 caller [expr]                                                      pwd [-LP]
 case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac         read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nch>
 cd [-L|[-P [-e]] [-@]] [dir]                                       readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C ca>
 command [-pVv] command [arg ...]                                   readonly [-aAf] [name[=value] ...] or readonly -p
 compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W>  return [n]
 complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G>  select NAME [in WORDS ... ;] do COMMANDS; done
 compopt [-o|+o option] [-DE] [name ...]                            set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
 continue [n]                                                       shift [n]
 coproc [NAME] command [redirections]                               shopt [-pqsu] [-o] [optname ...]
 declare [-aAfFgilnrtux] [-p] [name[=value] ...]                    source filename [arguments]
 dirs [-clpv] [+N] [-N]                                             suspend [-f]
 disown [-h] [-ar] [jobspec ... | pid ...]                          test [expr]
 echo [-neE] [arg ...]                                              time [-p] pipeline
 enable [-a] [-dnps] [-f filename] [name ...]                       times
 eval [arg ...]                                                     trap [-lp] [[arg] signal_spec ...]
 exec [-cl] [-a name] [command [arguments ...]] [redirection ...>   true
 exit [n]                                                           type [-afptP] name [name ...]
 export [-fn] [name[=value] ...] or export -p                       typeset [-aAfFgilnrtux] [-p] name[=value] ...
 false                                                              ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]
 fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command>   umask [-p] [-S] [mode]
 fg [job_spec]                                                      unalias [-a] name [name ...]
 for NAME [in WORDS ... ] ; do COMMANDS; done                       unset [-f] [-v] [-n] [name ...]
 for (( exp1; exp2; exp3 )); do COMMANDS; done                      until COMMANDS; do COMMANDS; done
 function name { COMMANDS ; } or name () { COMMANDS ; }             variables - Names and meanings of some shell variables
 getopts optstring name [arg]                                       wait [-n] [id ...]
 hash [-lr] [-p pathname] [-dt] [name ...]                          while COMMANDS; do COMMANDS; done
 help [-dms] [pattern ...]                                          { COMMANDS ; }
openfoam2212:~/
minimonk$ quit

Command 'quit' not found, but can be installed with:

sudo snap install quit

openfoam2212:~/
minimonk$ exit
exit

 

'프로그램 사용 > openFOAM' 카테고리의 다른 글

openFOAM + freecad + salome  (0) 2023.06.07
openFOAM tutorial with youtube  (0) 2023.05.24
openFOAM tutorial  (4) 2023.05.24
openfoam7 on ubuntu 18.04  (0) 2020.08.09
openFOAM tutorial  (0) 2020.07.19
Posted by 구차니

한참 시도하다가 실패했던 openFOAM 사용예를 찾아보려는데

chatGPT 시대니까 한번 시도!

실행 예제:
OpenFOAM을 실행해보기 위해 예제 중 하나를 실행해보겠습니다. tutorials 디렉토리에는 다양한 예제가 포함되어 있습니다. 예를 들어, heatTransfer/buoyantSimpleFoam 디렉토리로 이동한 후 다음 명령을 실행하여 해당 예제를 실행합니다.

shell
Copy code
$ cd $FOAM_TUTORIALS/heatTransfer/buoyantSimpleFoam
$ blockMesh  # 메쉬 생성
$ buoyantSimpleFoam  # 시뮬레이션 실행
이 예제는 열전달과 대류 역학을 시뮬레이션하는 것으로, blockMesh로 메쉬를 생성한 후 buoyantSimpleFoam으로 시뮬레이션을 실행합니다. 실행 결과는 해당 디렉토리 내에 저장됩니다.

 

일단은 heatTransfer / buoyantSimpleFoam 

라는 키워드를 얻었으니 이걸 기반으로 역으로 추적해보면..

 

머.. 검은 건 글씨고 흰건 종이라는 건 변함없다.. -_ㅠ

[링크 : https://www.tfd.chalmers.se/~hani/kurser/OS_CFD_2016/VarunVenkatesh/Varun_report.pdf]

[링크 : https://www.openfoam.com/documentation/guides/latest/doc/guide-applications-solvers-heat-transfer-buoyantSimpleFoam.html]

[링크 : https://cpp.openfoam.org/v4/dir_90706e5b82a3613c0a5b601bc80a6bc4.html]

 

+

bard에게 물어보니

OpenFOAM 워크벤츠 프로그램을 엽니다 라고 해서 찾아보니..

뜬금없이(?) freecad에 plugin이 튀어나온다.. bard가 나에게 맞말을 해주는게 아닌 느낌?

[링크 : https://wiki.freecad.org/Cfd_Workbench]

 

+

$ sudo find / -name cavity
/usr/lib/openfoam/openfoam2212/applications/test/mapDistributePolyMesh/cavity
/usr/lib/openfoam/openfoam2212/applications/test/volField/cavity
/usr/lib/openfoam/openfoam2212/tutorials/mesh/parallel/cavity
/usr/lib/openfoam/openfoam2212/tutorials/compressible/rhoPimpleFoam/RAS/cavity
/usr/lib/openfoam/openfoam2212/tutorials/preProcessing/createZeroDirectory/cavity
/usr/lib/openfoam/openfoam2212/tutorials/incompressible/icoFoam/cavity
/usr/lib/openfoam/openfoam2212/tutorials/incompressible/icoFoam/cavity/cavity
/usr/lib/openfoam/openfoam2212/tutorials/incompressible/pisoFoam/RAS/cavity

 

파일 경로는 찾았는데 실행 방법을 모르겠다 ㅠㅠ

[링크 :https://www.openfoam.com/documentation/tutorial-guide/2-incompressible-flow/2.1-lid-driven-cavity-flow#x6-60002.1]

[링크 : https://www.openfoam.com/documentation/tutorial-guide]

 

+

paraView 혹은 paraFoam이 먼진 모르겠는데.. 이거 맞나?

$ apt-cache search paraview
libxdmf3 - eXtensible Data Model and Format library
paraview - Parallel Visualization Application
paraview-dev - Parallel Visualization Application. Development header files
paraview-doc - Parallel Visualization Application. Comprehensive documentation
paraview-python - Parallel Visualization Application. python-support
rheolef - efficient Finite Element environment

$ sudo apt-get install paraview
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
다음의 추가 패키지가 설치될 것입니다 :
  cython libcgns3.3 libqt4-help libqt5positioning5 libqt5sensors5 libqt5webchannel5 libqt5webkit5 libtcl8.5 libvtk6.3-qt paraview-doc
  paraview-python python-attr python-autobahn python-automat python-cbor python-click python-colorama python-concurrent.futures
  python-constantly python-hyperlink python-incremental python-lz4 python-mpi4py python-nacl python-pam python-pyasn1
  python-pyasn1-modules python-qrcode python-serial python-service-identity python-snappy python-trie python-trollius python-twisted
  python-twisted-bin python-twisted-core python-txaio python-u-msgpack python-ubjson python-vtk6 python-wsaccel python-zope.interface
  tcl8.5
제안하는 패키지:
  cython-doc hdf5-tools h5utils python-attr-doc python-nacl-doc python-pam-dbg python-trie-doc python-twisted-bin-dbg python-glade2
  python-qt3 python-txaio-doc mayavi2 vtk6-doc vtk6-examples tcl-tclreadline
다음 새 패키지를 설치할 것입니다:
  cython libcgns3.3 libqt4-help libqt5positioning5 libqt5sensors5 libqt5webchannel5 libqt5webkit5 libtcl8.5 libvtk6.3-qt paraview
  paraview-doc paraview-python python-attr python-autobahn python-automat python-cbor python-click python-colorama
  python-concurrent.futures python-constantly python-hyperlink python-incremental python-lz4 python-mpi4py python-nacl python-pam
  python-pyasn1 python-pyasn1-modules python-qrcode python-serial python-service-identity python-snappy python-trie python-trollius
  python-twisted python-twisted-bin python-twisted-core python-txaio python-u-msgpack python-ubjson python-vtk6 python-wsaccel
  python-zope.interface tcl8.5
0개 업그레이드, 44개 새로 설치, 0개 제거 및 0개 업그레이드 안 함.
61.2 M바이트 아카이브를 받아야 합니다.
이 작업 후 286 M바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까? [Y/n] 

[링크 : https://www.openfoam.com/documentation/user-guide/7-post-processing/7.1-parafoam]

'프로그램 사용 > openFOAM' 카테고리의 다른 글

openFOAM tutorial with youtube  (0) 2023.05.24
openfoam on ubuntu  (0) 2023.05.24
openfoam7 on ubuntu 18.04  (0) 2020.08.09
openFOAM tutorial  (0) 2020.07.19
openFOAM 우분투 패키지  (0) 2020.07.18
Posted by 구차니
프로그램 사용/clang2023. 4. 17. 12:09

c 외에 go 등을 정적분석해주는 툴을 찾아보는데 걸려 나온(?) 툴

python 패키지로 깔려서 apt로 지원하진 않는다.

$ pip3 install semgrep

[링크 : https://freernd.tistory.com/entry/Semgrep-CLI-설치-실행-방법]

 

Initial release February 6, 2020; 3 years ago[1]
Stable release 1.16.0 Edit this on Wikidata / March 31, 2023; 17 days ago [2]
Repository github.com/returntocorp/semgrep Edit this at Wikidata
Written in OCaml (core) and Python (CLI)

[링크 : https://en.wikipedia.org/wiki/Semgrep#Services]

[링크 : https://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis]

'프로그램 사용 > clang' 카테고리의 다른 글

cppcheck 사용  (0) 2023.04.17
clang 으로 컴파일  (0) 2015.08.03
clang on ubnutu  (0) 2015.08.03
llvm / clang / cppcheck  (0) 2015.02.21
Posted by 구차니
프로그램 사용/clang2023. 4. 17. 11:11

그냥 옵션주면 밋밋(?)한데

--enable=all 주면 조금 더 나오긴 한다.

 

$ cppcheck
Cppcheck - A tool for static C/C++ code analysis

Syntax:
    cppcheck [OPTIONS] [files or paths]

If a directory is given instead of a filename, *.cpp, *.cxx, *.cc, *.c++, *.c,
*.tpp, and *.txx files are checked recursively from the given directory.

Options:
/// 생략 ///

Example usage:
  # Recursively check the current folder. Print the progress on the screen and
  # write errors to a file:
  cppcheck . 2> err.txt

  # Recursively check ../myproject/ and don't print progress:
  cppcheck --quiet ../myproject/

  # Check test.cpp, enable all checks:
  cppcheck --enable=all --inconclusive --std=posix test.cpp

  # Check f.cpp and search include files from inc1/ and inc2/:
  cppcheck -I inc1/ -I inc2/ f.cpp

For more information:
    http://cppcheck.net/manual.pdf

[링크 : https://int-i.github.io/cpp/2023-01-07/cppcheck/]

 

여전히 좀 밋밋(?)한데 규칙을 지정해서 하는법 없나?

(information) Cppcheck cannot find all the include files (use --check-config for details)

 

misra 룰을 빼낼 법을 찾아야...

[링크 : https://ppiazi.tistory.com/entry/MISRA-C2012-를-위한-CppCheck-사용]

'프로그램 사용 > clang' 카테고리의 다른 글

semgrep  (0) 2023.04.17
clang 으로 컴파일  (0) 2015.08.03
clang on ubnutu  (0) 2015.08.03
llvm / clang / cppcheck  (0) 2015.02.21
Posted by 구차니

videobox를 이용해서 어느정도는 원하는 위치로 옮길순 있는데 자유자재로 옮기긴 힘든 듯?

gst-launch-1.0 \
   videotestsrc pattern=1 ! \
   video/x-raw,format=AYUV,framerate=\(fraction\)10/1,width=100,height=100 ! \
   videobox border-alpha=0 top=-70 bottom=-70 right=-220 ! \
   videomixer name=mix sink_0::alpha=0.7 sink_1::alpha=0.5 ! \
   videoconvert ! xvimagesink \
   videotestsrc ! \
   video/x-raw,format=AYUV,framerate=\(fraction\)5/1,width=320,height=240 ! mix.

[링크 : https://gstreamer.freedesktop.org/documentation/videomixer/index.html?gi-language=c]

 

bottom 
“bottom” gint
Pixels to box at bottom (<0 = add a border)
Flags : Read / Write
Default value : 0

left 
“left” gint
Pixels to box at left (<0 = add a border)
Flags : Read / Write
Default value : 0

right 
“right” gint
Pixels to box at right (<0 = add a border)
Flags : Read / Write
Default value : 0

top 
“top” gint
Pixels to box at top (<0 = add a border)
Flags : Read / Write
Default value : 0

[링크 : https://gstreamer.freedesktop.org/documentation/videobox/index.html?gi-language=c]

 

ximagesink 에다가 sync=false 하니 프레임이 잘 나온다.

videomixer가 더 앞에 있으니 videomixer에 sync=false를 넣어야 할 줄 알았는데 의외네

$ gst-launch-1.0 v4l2src device=/dev/video2 ! jpegdec ! videomixer name=mix ! videoconvert ! ximagesink sync=false v4l2src device=/dev/video0 ! jpegdec ! mix.

[링크 : https://stackoverflow.com/questions/38392956/gstreamer-videomixer-very-low-framerate]

 

 

$ gst-launch-1.0 \
v4l2src device=/dev/video2 ! jpegdec ! \
videobox top=0 bottom=0 left=-960 ! \
videomixer name=mix sink_0::alpha=1 sink_1::alpha=1 ! \
videoconvert ! \
ximagesink window-width=1920 window-height=1080 sync=false \
v4l2src device=/dev/video0 ! jpegdec ! \
videobox top=0 bottom=0 ! mix.

'프로그램 사용 > gstreamer' 카테고리의 다른 글

nnstreamer  (0) 2023.12.20
gst-device-monitor-1.0  (0) 2023.12.06
gst-inspector.c  (0) 2023.04.06
gstreamer videomixer 반쪽 성공  (0) 2023.03.27
gstreamer videomixer ... 2?  (0) 2023.03.27
Posted by 구차니

x 축은 real(실수)

y 축은 imagenary(허수)

그래서 arctan(허수/실수) 하면 각도를 radian으로 구할수 있다.

 

javascript 기준으로는

Math.atan() * 180 / Math.PI 하면 각도로 전환가능

θ = tan- 1 (b/a)

[링크 : http://sites.music.columbia.edu/cmc/MusicAndComputers/popups/chapter3/xbit_3_3.php]

 

역시나 언제나 그렇듯 radian 값

[링크 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan]

[링크 : https://velog.io/@davelee/arctan을-활용한-각도구하기]

'프로그램 사용 > fft, fftw' 카테고리의 다른 글

fft 라이브러리 목록  (0) 2023.06.01
fftw 다차원 분석  (0) 2023.05.27
fftw input range?  (0) 2023.04.07
fft 복소수(complex) - 실수, 허수부(real, imaginary)  (0) 2023.04.07
fft 0 Hz  (2) 2023.04.05
Posted by 구차니

 

chatGPT는 아래와 같이 대답을 하는데 근거가 없어서 불안하고

The input float range for FFTW depends on the specific implementation and the configuration of the library. However, in general, the input float values should be within the range of -1.0 to 1.0, which represents the normalized range of the input signal.

 

stackoverflow는 과거 글이긴 한데.. 미묘..

Surprisingly there is no single agreed definition for the FFT and the IFFT, at least as far as scaling is concerned, but for most implementations (including FFTW) you need to scale by 1/N in the forward direction, and there is no scaling in the reverse direction.

Usually (for performance reasons) you will want to lump this scaling factor in with any other corrections, such as your A/D gain, window gain correction factor, etc, so that you just have one combined scale factor to apply to your FFT output bins. Alternatively if you are just generating, say, a power spectrum in dB then you can make the correction a single dB value that you subtract from your power spectrum bins.

[링크 : https://stackoverflow.com/questions/4855958/normalising-fft-data-fftw]

 

 

일단은 실험!

1. 원본 데이터 그대로

+-1V / 1.001Khz

-600,000 ~ +600,000 범위로 들어오는 값을 그대~~~로 FFT로 던지니 결과가 이상하게 나온다.

 

2. 원본 / 1000

범위를 벗어나진 않아서 그런가 정상적으로 그나마 주파수 분석이 되는 듯

3. 원본 / 100

/ 1000 이랑 비슷하긴 한데 비율 때문에 그런가 중심 주파수 주변에 좀 높게 나온다.

그냥 나누기 만큼의 억제효과가 나오는 듯?

 

4. 원본 / 838607 (0x7FFFFF 왜 이런 값을 했지.. 홀렸나..)

 

주파수 분석결과를 확대해보면 /1000 보단 깨끗하게 분석된다.

 

5. 원본 + 100mV

FFT 값에 2,147,483이 나와서 16진수로 바꾸어 보니 0x20C49B

무슨 의미를 지닌 분석이라고 보기 힘든데 그래도 1000 근처에 좀 비어있는거 보면 어떻게 해석해야 하나 싶다.

 

6. 원본 / 24bit(0xFFFFFF)

 

아 몰랑 걍 -1.0 ~ 1.0 사이로 정규화 할래!

'프로그램 사용 > fft, fftw' 카테고리의 다른 글

fftw 다차원 분석  (0) 2023.05.27
fft phase 연산  (0) 2023.04.07
fft 복소수(complex) - 실수, 허수부(real, imaginary)  (0) 2023.04.07
fft 0 Hz  (2) 2023.04.05
partial fft  (0) 2023.04.04
Posted by 구차니

내 프로그램에서도 한번 도식화 해볼까?

amplitude만 보는데 real 값과 imaginary 값은 어떻게 보여질지 궁금해서 찾아보는데

그렇게는 잘 안써서 그런지 그림도 찾기 힘들다.

 

[링크 : https://stackoverflow.com/questions/25624548/fft-real-imaginary-abs-parts-interpretation]

 

 

+

부랴부랴 수정해서 확인해보니 실수부, 허수부는 * 100,000 해서 받아와서 표현

일단 네 가지 데이터가 오가면서 출력되는데 이걸 phase 라고 보야하려나?

 

실수, 허수 둘 다 양수

 

실수, 허수 둘 다 음수

 

실수 양수, 허수 음수

실수 음수, 허수 양수

 

'프로그램 사용 > fft, fftw' 카테고리의 다른 글

fft phase 연산  (0) 2023.04.07
fftw input range?  (0) 2023.04.07
fft 0 Hz  (2) 2023.04.05
partial fft  (0) 2023.04.04
fftw plan  (0) 2023.03.31
Posted by 구차니

한번 빌드해서 원하는 결과만 덤프하는 용도로 수정이 가능하려나?

[링크 : https://github.com/GStreamer/gstreamer/blob/main/subprojects/gstreamer/tools/gst-inspect.c]

 

 gst-inspect 에서 원하는 정보는 아래의 Pad template 부분

Pad Templates:
  SINK template: 'sink_%u'
    Availability: On request
    Capabilities:
      video/x-raw
                 format: { (string)AYUV, (string)BGRA, (string)ARGB, (string)RGBA, (string)ABGR, (string)Y444, (string)Y42B, (string)YUY2, (string)UYVY, (string)YVYU, (string)I420, (string)YV12, (string)NV12, (string)NV21, (string)Y41B, (string)RGB, (string)BGR, (string)xRGB, (string)xBGR, (string)RGBx, (string)BGRx }
                  width: [ 1, 2147483647 ]
                 height: [ 1, 2147483647 ]
              framerate: [ 0/1, 2147483647/1 ]
  
  SRC template: 'src'
    Availability: Always
    Capabilities:
      video/x-raw
                 format: { (string)AYUV, (string)BGRA, (string)ARGB, (string)RGBA, (string)ABGR, (string)Y444, (string)Y42B, (string)YUY2, (string)UYVY, (string)YVYU, (string)I420, (string)YV12, (string)NV12, (string)NV21, (string)Y41B, (string)RGB, (string)BGR, (string)xRGB, (string)xBGR, (string)RGBx, (string)BGRx }
                  width: [ 1, 2147483647 ]
                 height: [ 1, 2147483647 ]
              framerate: [ 0/1, 2147483647/1 ]

Element has no clocking capabilities.
Element has no URI handling capabilities.

 

Pad Templates를 출력하는 함수

static void
print_pad_templates_info (GstElement * element, GstElementFactory * factory)

[링크 : https://github.com/GStreamer/gstreamer/blob/main/subprojects/gstreamer/tools/gst-inspect.c#L816]

 

Capabilities 부분을 출력하는 함수

static void
print_caps (const GstCaps * caps, const gchar * pfx)

[링크 : https://github.com/GStreamer/gstreamer/blob/main/subprojects/gstreamer/tools/gst-inspect.c#L194]

'프로그램 사용 > gstreamer' 카테고리의 다른 글

gst-device-monitor-1.0  (0) 2023.12.06
gstremaer videobox + videomixer  (0) 2023.04.10
gstreamer videomixer 반쪽 성공  (0) 2023.03.27
gstreamer videomixer ... 2?  (0) 2023.03.27
gstreamer pad - sink 와 src  (0) 2023.03.27
Posted by 구차니

정리하자면

FFT를 100개 하면, 1~50 Hz와 0Hz에 대한 분석 결과가 나온다.

그래서 N / 2 + 1개

 

---

도대체 왜 N/2+1이 나오나를 찾는데 이해를 못하겠다.

 

For a real-to-complex transform you get N / 2 + 1 complex outputs for N real inputs (the redundant symmetric outputs are not generated).

The 0 Hz component is in bin 0.

 

Now out contains r0, r1, r2, ..., rn/2, i(n+1)/2-1, ..., i2, i1 , as it is written in the manual.

r0 ,out[0],is the mean value of your data/signal.
r1 ,out[1],is the real part of the first element of the DFT.
...
i0 is 0 because you're using real data , so it isn't stored in out.
i1 ,out[N-1],is the imaginary part of the first element of the DFT.
i2 ,out[N-2],is the imaginary part of the second element of the DFT.
If N is a even number , then r(N/2) out[N/2] is the Nyquist frequency amplitude.

Im new to fftw library

Remember that FFTW computes only the product of your data by the trigonometric functions, but it don't normalize them. You can find more info about the halfcomplex here.

[링크 : https://stackoverflow.com/questions/36637727/fftw-library-what-is-the-output-size-of-fftw-plan-dft-r2c-1d]

[링크 : https://kr.mathworks.com/matlabcentral/answers/42325-fft-is-finding-a-max-amplitude-at-0-hz]

 

chatGPT

The reason that the Fast Fourier Transform (FFT) in the library FFTW produces a result of N/2+1 values when applied to real input data of length N is because of the way that the FFT algorithm works.
In FFTW, the FFT algorithm used is called the "real-to-complex" FFT, which takes real-valued input data and produces complex-valued output data. When applied to real input data, the algorithm takes advantage of the symmetry properties of the Fourier transform of real-valued signals. Specifically, the Fourier transform of a real-valued signal is complex-conjugate symmetric, meaning that if x(t) is a real-valued signal, then its Fourier transform X(f) satisfies X(-f) = conj(X(f)), where "conj" denotes complex conjugation.
Because of this symmetry property, half of the output values of the FFT algorithm are redundant, and can be calculated from the other half. Specifically, the output values for frequencies from 0 to N/2 are unique, while the output values for frequencies from N/2+1 to N-1 can be calculated as the complex conjugate of the corresponding frequency from 1 to N/2-1.
Therefore, to save computation time and memory, FFTW only calculates the unique output values for frequencies from 0 to N/2, as well as the value for frequency N/2 (if N is even). This results in a total of N/2+1 output values.
FFTW 라이브러리에서 Fast Fourier Transform (FFT)를 적용하면, 길이가 N인 실수 입력 데이터에 대해 복소수 출력 데이터 N/2+1개가 생성됩니다. 이는 FFT 알고리즘이 동작하는 방식 때문입니다.
FFTW에서 사용되는 FFT 알고리즘은 "real-to-complex" FFT라고 불리며, 실수값 입력 데이터를 복소수값 출력 데이터로 변환합니다. 이 알고리즘은 실수값 신호의 푸리에 변환의 대칭성(symmetric) 특성을 활용합니다. 구체적으로, 실수값 신호 x(t)의 푸리에 변환 X(f)은 X(-f) = conj(X(f)) 라는 복소수 공액대칭성(complex-conjugate symmetric)을 만족합니다. 여기서 "conj"는 복소수 공액(conjugate)를 의미합니다.
이 대칭성 특성 때문에 FFT 알고리즘의 출력값 중 절반은 중복되는 값이며, 나머지 절반은 이 중복된 값들로부터 계산될 수 있습니다. 구체적으로, 0부터 N/2까지의 주파수 대역에서는 고유한 출력값이 존재하며, N/2+1부터 N-1까지의 주파수 대역에서는 대응하는 1부터 N/2-1까지의 주파수 대역의 복소수 공액값을 계산하여 구할 수 있습니다.
따라서 FFTW는 연산 시간과 메모리를 절약하기 위해, 0부터 N/2까지의 주파수 대역에 대한 고유한 출력값과, N이 짝수인 경우 주파수 N/2에 대한 출력값을 계산합니다. 이렇게 계산된 출력값의 총 개수는 N/2+1개가 됩니다.

 

 

The DFT results are stored in-order in the array out, with the zero-frequency (DC) component in out[0]. 

[링크 : https://www.fftw.org/fftw3_doc/Complex-One_002dDimensional-DFTs.html#Complex-One_002dDimensional-DFTs]

 

+

2023.06.16

 

Size of FFT in 1D is not half of the signal length. It's still the signal length (assuming FFT length was of the signal length). However for real data, due to conjugate symmetryhalf of this is redundant and can be dicarded to reduce storage. Note however that, when it's required to process the FFT data, you have to construct the full length from the half and proceed.

This is also the reason why spectral analysis software display only positive frequencies for real data; i.e, negative frequencies will be a mirror copy (of the magnitude) of positive frequencies.

But you don't have to discard the half. You can just retain it.

For image processing, the symmetry of FFT for real input data again exist and if you wish you can also dicard half of the image FFT data. Whether this will be employed or not depends on the intentions of the package.

[링크 : https://dsp.stackexchange.com/questions/55239/why-is-the-size-of-results-from-fft-half-the-size-of-the-input-while-that-is-no]

[링크 : https://brianmcfee.net/dstbook-site/content/ch06-dft-properties/Conjugate-Symmetry.html]

'프로그램 사용 > fft, fftw' 카테고리의 다른 글

fftw input range?  (0) 2023.04.07
fft 복소수(complex) - 실수, 허수부(real, imaginary)  (0) 2023.04.07
partial fft  (0) 2023.04.04
fftw plan  (0) 2023.03.31
libfftw3 precision  (0) 2023.03.30
Posted by 구차니