Генерировать сигнал с шумом - PullRequest
0 голосов
/ 21 ноября 2018

Чтобы иметь возможность измерить производительность моего аналого-цифрового преобразователя, я хотел бы сделать выборку и нормировать произвольный сигнал.Созданный сигнал должен иметь шум со среднеквадратичным значением, и я должен построить спектральную плотность мощности сигнала.

Итак, я написал этот код (я не знаю, нормально ли я, я новичок) иЯ хотел бы знать, почему я ничего не представляю на нарисованной фигуре.

import matplotlib.pyplot as plt 
import numpy as np
%matplotlib notebook
%matplotlib notebook

StopTime = 0.01
N = 1024  
Te = 1.0
Fe = 1.0/Te
t = np.arange(0,Te,StopTime-Te)
f = Fe/2
x = np.sin(2*np.pi*f*t*N)
plt.plot(x)
plt.show()

1 Ответ

0 голосов
/ 21 ноября 2018

Потому что это то, что вы (непреднамеренно) приказали сделать matplotlib.

>>> x
array([], dtype=float64)

x - пустой массив, поэтому при его построении ничего не строится.Он пуст, потому что t также является пустым массивом.Я не уверен, каковы ваши параметры, но arange обычно следует использовать только с целочисленными значениями, а шаг (третий параметр) должен быть меньше значения остановки (второй параметр).Для генерации последовательности операций с плавающей точкой лучше использовать np.linspace.

Исправляя это (и определяя генерацию сигнала с точки зрения частоты дискретизации, поскольку я не уверен, каковы ваши параметры), код для генерации сигнала сшум

import matplotlib.pyplot as plt 
import numpy as np

## Parameters used
StopTime = 0.5 # End of signal 
Fs = 1024 # Sampling rate
f = 30     # Frequency of simulated signal

## Generate sample times
t = np.linspace(0,StopTime, StopTime*Fs)

## Generate signal
x = np.sin(2*np.pi*t*f)

## Add noise to signal
noise = np.random.randn(len(x))
print('rms noise value:', sqrt(mean(randn(10000)**2)))
xn = x + noise

plt.plot(t, x)
plt.plot(t, xn)
plt.show()
...