Hướng dẫn sampling a sine wave in python - lấy mẫu một làn sóng sin trong python

0

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Vì vậy, tôi muốn tạo tín hiệu 1.95kHz, đó là đơn giản.

N=1024

signal=[np.sin(2*np.pi*i/512)*20000+30000 for i in np.arange(0,N,1)]

Để có ít nhất 2 giai đoạn. Làm thế nào tôi có thể mô phỏng rằng tôi đang đọc nó lại, sử dụng tần số mẫu là 96kHz. Tôi muốn 1024 mẫu. Ngoài ra, khi tôi gửi nó ra, mỗi điểm được gửi mỗi 1040ns (mỗi phần tử của mảng tín hiệu được gửi mỗi 1040ns).

hỏi ngày 17 tháng 1 năm 2016 lúc 11:54Jan 17, 2016 at 11:54

Hướng dẫn sampling a sine wave in python - lấy mẫu một làn sóng sin trong python

2

N = 1024
ix = np.arange(N)
signal = np.sin(2*np.pi*ix/float(N/2))*20000+30000
time = ix/96e3

Sau đó, thời gian vectơ chứa thời gian lấy mẫu của bạn và tín hiệu chứa tín hiệu của bạn tại thời điểm này.

Đã trả lời ngày 18 tháng 1 năm 2016 lúc 9:28Jan 18, 2016 at 9:28

Hướng dẫn sampling a sine wave in python - lấy mẫu một làn sóng sin trong python

PeterpeterPeter

11.1k9 Huy hiệu vàng65 Huy hiệu bạc77 Huy hiệu đồng9 gold badges65 silver badges77 bronze badges

Tôi đã cố gắng lấy mẫu tín hiệu sóng hình sin 12,8 MHz (78.125 ns) sau mỗi 160us (micro giây). Vì 160US là bội số của giai đoạn cơ sở 78.125Ns (x2048), tôi dự kiến ​​sẽ nhận được một mẫu biên độ cố định nhưng thay vào đó, những gì tôi đang thấy là một sóng hình sin định kỳ khác. Tôi không hiểu tại sao?

Tôi nghi ngờ lỗi lượng tử hóa nhưng không nên tạo ra tiếng ồn đồng nhất thay vì tạo sóng hình sin định kỳ.

    import numpy as np
    from matplotlib import pyplot as plt

    fig2 = plt.figure()
    ax2 = fig2.add_subplot(1, 1, 1)

    capture_size1 = 2048
    timestep1 = 160e-6
    freq1 = 12.8e6
    time1 = np.linspace(0, capture_size1 * timestep1, capture_size1)
    w1 = np.sin(time1 * 2 * np.pi * freq1)
    ax2.plot(time1, w1, '.')

    plt.show()

Edit1: 1. 12,8 MHz được cố tình lấy mẫu

  1. Thêm ảnh chụp màn hình của cốt truyện với Capture_Size1 = 2048, sóng hình sin có biên độ phù hợp của [+1, -1]

Hướng dẫn sampling a sine wave in python - lấy mẫu một làn sóng sin trong python

EDIT2: Tôi đã cố gắng tăng độ chính xác bằng cách sử dụng thập phân và tôi thấy nó đang hoạt động như mong đợi. Tôi mong đợi một đường thẳng vì điểm lấy mẫu là một bội số chính xác của giai đoạn.

Hướng dẫn sampling a sine wave in python - lấy mẫu một làn sóng sin trong python

from decimal import Decimal
from math import pi as mpi
from math import sin as msin
import numpy as np
from matplotlib import pyplot as plt

fig2 = plt.figure()
ax2 = fig2.add_subplot(1, 1, 1)

capture_size1 = 2048
timestep1 = 160e-6
freq1 = 12.8e6
time1 = np.linspace(0, capture_size1 * timestep1, capture_size1)
w1 = np.sin(time1 * 2 * np.pi * freq1)
ax2.plot(time1, w1, '.')

capture_size3 = Decimal(2048 * 16)
timestep3 = Decimal(160e-6)
freq3 = Decimal(12.8e6)
time3 = [Decimal(i) * timestep3 for i in range(capture_size1)]
w3 = [msin(Decimal(i) * timestep3 * Decimal(2) * Decimal(mpi) * freq3) for i in range(capture_size1)]
ax2.plot(time3, w3, '.')

plt.legend(["Actual", "Expected"])
plt.show()

EDIT3: Tôi tiếp tục thực hiện một số phân tích nhờ bình luận của @jithin. Có vẻ như đây là một vấn đề với Linspace. Tôi đã cố gắng tạo khoảng thời gian chỉ bằng phép nhân như trong mã bên dưới và loại bỏ sơ đồ gốc sử dụng không gian linspace (điều này rất quan trọng) vì vậy bây giờ tôi có thể thấy các giá trị trong phạm vi 1E-9 như các giá trị khác. Vì vậy, có thực sự có vấn đề với Linspace?So is there indeed issue with linspace ?

from decimal import Decimal
from math import pi as mpi
from math import sin as msin
import numpy as np
from matplotlib import pyplot as plt

fig2 = plt.figure()
ax2 = fig2.add_subplot(1, 1, 1)

capture_size1 = 2048
# timestep1 = 160e-6
# freq1 = 12.8e6
# time1 = np.linspace(0, capture_size1 * timestep1, capture_size1)
# w1 = np.sin(time1 * 2 * np.pi * freq1)
# ax2.plot(time1, w1, '.')

capture_size2 = 2048
timestep2 = 160e-6
freq2 = 12.8e6
time2 = [i * timestep2 for i in range(capture_size2)]
w2 = [np.sin(i * timestep2 * 2 * np.pi * freq2) for i in range(capture_size2)]
ax2.plot(time2, w2, '.')

capture_size3 = Decimal(2048)
timestep3 = Decimal(160e-6)
freq3 = Decimal(12.8e6)
time3 = [Decimal(i) * timestep3 for i in range(capture_size1)]
w3 = [msin(Decimal(i) * timestep3 * Decimal(2) * Decimal(mpi) * freq3) for i in range(capture_size1)]
ax2.plot(time3, w3, '.')

plt.legend(["multiply", "Decimal"], fontsize='xx-large')
plt.show()

Hình ảnh của mã python ở trên là bên dưới

Hướng dẫn sampling a sine wave in python - lấy mẫu một làn sóng sin trong python

Làm thế nào để bạn tìm thấy mẫu của sóng hình sin?

Số hóa sóng hình sin Thời gian liên tục, T, được thay thế bằng N/SR được số hóa trong đó N là số mẫu.Do đó, chúng ta có thể sử dụng công thức sn = a sin (2πfn/sr) trong đó n là một số nguyên dương để tạo ra các mẫu cho tần số f chu kỳ F mỗi giây.sn = A sin(2πfn/sr) where n is a positive integer to generate samples for a frequency of f cycles per second.

Làm thế nào để bạn mã hóa một sóng hình sin trong Python?

Example:..
Nhập Numpy dưới dạng NP ..
Nhập matplotlib.pyplot dưới dạng cốt truyện ..
# Nhận x giá trị của sóng hình sin ..
thời gian = np.Arange (0, 10, 0.1) ;.
# Biên độ của sóng hình sin là hình sin của một biến như thời gian ..
Biên độ = np.sin (thời gian).
# Vẽ một sóng hình sin sử dụng thời gian và biên độ thu được cho sóng hình sin ..
lô.plot (thời gian, biên độ).

Làm thế nào để bạn vẽ đồ thị sinx trong Python?

Âm mưu sin và cosin với matplotlib và python..
Trong [1]: Nhập matplotlib.pyplot như PLT Nhập Numpy dưới dạng NP # nếu sử dụng máy tính xách tay Jupyter %matplotlib nội tuyến ..
Trong [2]: x = np.Arange (0,4*np. ....
Trong [3]: plt.Lô đất (x, y) plt.....
Trong [4]: x = np.Arange (0,4*np. ....
Trong [5]: plt.Biểu đồ (x, y, x, z) plt.....
Trong [6]: x = np.....
Trong [7]: plt ..