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
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
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
- 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]
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.
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