[Haptics] .wav 파일을 DAQ 에서 실행하기 / Python 파이썬

2025. 2. 25. 20:26·HCI/Haptics
728x90
반응형

오늘은 wav 파일을 바로 DAQ 에서 실행해보겠습니다.

 

예시 input wav는 macaron 에서 만들었습니다. :)

 

https://hapticdesign.github.io/macaron/

 

Macaron Editor

 

hapticdesign.github.io

input.wav
0.13MB

 
In [3]:
import numpy as np
import soundfile as sf
import nidaqmx
import time
import matplotlib.pyplot as plt

# DAQ 설정값
samplingRate = 10000  # DAQ 샘플링 속도 (10kHz)
duration = 1  # 신호 지속 시간 (초)

# 1️⃣ WAV 파일 불러오기
wav_file = "input.wav"  # 사용할 WAV 파일 경로
data, fs = sf.read(wav_file)  # 오디오 데이터 불러오기

data
 
Out[3]:
array([ 0.046875 ,  0.046875 ,  0.0390625, ..., -0.0546875, -0.0625   ,
       -0.0703125])
 
In [4]:
# 스테레오인 경우 한 채널만 사용
if len(data.shape) > 1:
    data = np.mean(data, axis=1)  # 모노 변환

# 2️⃣ DAQ 샘플링 속도에 맞게 리샘플링
num_samples = int(duration * samplingRate)
resampled_data = np.interp(np.linspace(0, duration, num_samples), np.linspace(0, duration, len(data)), data)

# 3️⃣ 신호 범위 스케일링 (진동자 전압 범위 고려)
max_voltage = 5  # 진동자 입력 전압 최대값 (±5V)
resampled_data = resampled_data / np.max(np.abs(resampled_data)) * max_voltage

# 4️⃣ DAQ 출력 전, 원본 WAV 신호 시각화
plt.figure(figsize=(10, 4))
plt.plot(np.linspace(0, duration, num_samples), resampled_data, label="Resampled WAV Signal", color='b')
plt.xlabel("Time (s)")
plt.ylabel("Amplitude (V)")
plt.legend()
plt.title("Resampled WAV Signal Before DAQ Output")
plt.grid()
plt.show()
 
 
No description has been provided for this image
 
In [6]:
# 5️⃣ DAQ를 이용하여 신호 출력 및 측정 함수
def accels_data(title, sig):
    recorded_data = []

    for i in range(1):
        readtask = nidaqmx.Task()
        writetask = nidaqmx.Task()

        readtask.ai_channels.add_ai_voltage_chan("Dev1/ai0:2", 
                                                 terminal_config=nidaqmx.constants.TerminalConfiguration.RSE, 
                                                 min_val=-10, max_val=10)
        readtask.timing.cfg_samp_clk_timing(samplingRate, 
                                            sample_mode=nidaqmx.constants.AcquisitionType.FINITE, 
                                            samps_per_chan=samplingRate * duration)
        writetask.ao_channels.add_ao_voltage_chan("Dev1/ao0")
        writetask.timing.cfg_samp_clk_timing(samplingRate, 
                                             sample_mode=nidaqmx.constants.AcquisitionType.FINITE, 
                                             samps_per_chan=samplingRate * duration)

        writetask.write(sig)
        writetask.start()
        
        # DAQ에서 측정된 데이터 읽기
        data = readtask.read(samplingRate * duration)

        writetask.wait_until_done()
        writetask.close()
        readtask.close()

        # 저장
        with open(f"{title}_{i}.txt", "a") as f:
            for j in range(samplingRate * duration):
                f.write(f"{data[0][j]}\n")  # X 축 데이터만 저장
        time.sleep(2)

        recorded_data.append(data)

    return recorded_data
 
In [7]:
# 6️⃣ DAQ 출력 실행 및 측정
recorded_data = accels_data(title="Wav_Accels", sig=resampled_data)
 
In [8]:
# 7️⃣ DAQ 출력 후, 측정된 신호 시각화
plt.figure(figsize=(10, 4))
plt.plot(np.linspace(0, duration, samplingRate * duration), recorded_data[0][0], label="DAQ Measured Signal", color='r')
plt.xlabel("Time (s)")
plt.ylabel("Amplitude (V)")
plt.legend()
plt.title("DAQ Measured Signal After Output")
plt.grid()
plt.show()
 
 
No description has been provided for this image

 

해당 코드에는 아직 Calibration을 적용하지 않고 파형을 출력해서 그대로 나오지 않은 모습을 볼 수 있습니다 ㅜㅜ

728x90
반응형

'HCI > Haptics' 카테고리의 다른 글

[Haptics] 50 ~ 500 Hz Frequency 영역대 Calibration (진행중) - H(f) 구하기 (FFT)  (0) 2025.03.13
[Haptics - Dynamic compensation] Calibration Using NI DAQ, Python and Matlab  (0) 2025.02.25
[Haptics - Dynamic compensation] Matlab에서 Chirp Signal 출력하기  (1) 2025.02.25
[Haptics - Haptuator Single Frequency] Calibration Using NI DAQ and Python  (0) 2025.02.24
[Haptics] 진동 측정 캘리브레이션 이론 정리  (0) 2025.02.18
'HCI/Haptics' 카테고리의 다른 글
  • [Haptics] 50 ~ 500 Hz Frequency 영역대 Calibration (진행중) - H(f) 구하기 (FFT)
  • [Haptics - Dynamic compensation] Calibration Using NI DAQ, Python and Matlab
  • [Haptics - Dynamic compensation] Matlab에서 Chirp Signal 출력하기
  • [Haptics - Haptuator Single Frequency] Calibration Using NI DAQ and Python
sillon
sillon
꾸준해지려고 합니다..
    반응형
  • sillon
    sillon coding
    sillon
  • 전체
    오늘
    어제
    • menu (614)
      • notice (2)
      • python (68)
        • 자료구조 & 알고리즘 (23)
        • 라이브러리 (19)
        • 기초 (8)
        • 자동화 (14)
        • 보안 (1)
      • coding test - python (301)
        • Programmers (166)
        • 백준 (76)
        • Code Tree (22)
        • 기본기 문제 (37)
      • coding test - C++ (5)
        • Programmers (4)
        • 백준 (1)
        • 기본기문제 (0)
      • 공부정리 (5)
        • 신호처리 시스템 (0)
        • Deep learnig & Machine lear.. (41)
        • Data Science (18)
        • Computer Vision (17)
        • NLP (40)
        • Dacon (2)
        • 모두를 위한 딥러닝 (강의 정리) (4)
        • 모두의 딥러닝 (교재 정리) (9)
        • 통계 (2)
      • HCI (23)
        • Haptics (7)
        • Graphics (11)
        • Arduino (4)
      • Project (21)
        • Web Project (1)
        • App Project (1)
        • Paper Project (1)
        • 캡스톤디자인2 (17)
        • etc (1)
      • OS (10)
        • Ubuntu (9)
        • Rasberry pi (1)
      • App & Web (9)
        • Android (7)
        • javascript (2)
      • C++ (5)
        • 기초 (5)
      • Cloud & SERVER (8)
        • Git (2)
        • Docker (1)
        • DB (4)
      • Paper (7)
        • NLP Paper review (6)
      • 데이터 분석 (0)
        • GIS (0)
      • daily (2)
        • 대학원 준비 (0)
      • 영어공부 (6)
        • job interview (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    소수
    programmers
    Python
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
sillon
[Haptics] .wav 파일을 DAQ 에서 실행하기 / Python 파이썬
상단으로

티스토리툴바