使用python生成正弦信号并添加标准白噪声
时间: 2024-02-15 10:04:12 浏览: 172
生成正弦信号可以使用Python中的NumPy库中的sin函数,添加标准白噪声可以使用NumPy库中的random.normal函数。以下是代码示例:
```python
import numpy as np
import matplotlib.pyplot as plt
# 设置参数
fs = 1000 # 采样频率
f = 50 # 正弦信号频率
amp = 1 # 正弦信号幅度
duration = 1 # 信号持续时间
# 生成时间序列
t = np.arange(0, duration, 1/fs)
# 生成正弦信号
x = amp * np.sin(2*np.pi*f*t)
# 生成标准白噪声
noise = np.random.normal(0, 1, len(x))
# 添加噪声
x_noise = x + noise
# 绘制图像
plt.plot(t, x_noise)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.show()
```
在上述代码中,我们首先设置了采样频率、信号频率、信号幅度和信号持续时间等参数。然后,利用np.arange函数生成时间序列,再使用np.sin函数生成正弦信号。接着,使用np.random.normal函数生成标准白噪声,最后将噪声添加到正弦信号上。最终,使用matplotlib库中的plot函数绘制出信号的波形图。
相关问题
使用python生成幅值不断变化的正弦信号并添加标准白噪声
生成幅值不断变化的正弦信号可以使用Python中的NumPy库中的sin函数,而幅值不断变化可以通过一个函数来实现。添加标准白噪声可以使用NumPy库中的random.normal函数。以下是代码示例:
```python
import numpy as np
import matplotlib.pyplot as plt
# 设置参数
fs = 1000 # 采样频率
f = 50 # 正弦信号频率
duration = 1 # 信号持续时间
# 定义幅值变化函数
def envelope(t):
return 1 + 0.5*np.sin(2*np.pi*2*t)
# 生成时间序列
t = np.arange(0, duration, 1/fs)
# 生成正弦信号
x = envelope(t) * np.sin(2*np.pi*f*t)
# 生成标准白噪声
noise = np.random.normal(0, 1, len(x))
# 添加噪声
x_noise = x + noise
# 绘制图像
plt.plot(t, x_noise)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.show()
```
在上述代码中,我们首先设置了采样频率、信号频率和信号持续时间等参数。然后,定义了一个幅值变化函数envelope(t),该函数在时间t上的幅值为1加上0.5乘以一个频率为2的正弦信号。接着,生成时间序列,再使用envelope(t)函数生成幅值不断变化的正弦信号。接下来,使用np.random.normal函数生成标准白噪声,最后将噪声添加到幅值不断变化的正弦信号上。最终,使用matplotlib库中的plot函数绘制出信号的波形图。
.编程设计一正弦信号(频率 10hz)加高斯白噪声的复合信号(信号比取 10),抽样频率 1
首先,我们可以使用Python语言编写程序来生成正弦信号和高斯白噪声信号。为了生成一个频率为10Hz的正弦信号,我们可以使用正弦函数sin(),并设置其频率为10Hz,采样频率为1Hz。同时,为了生成高斯白噪声信号,我们可以使用numpy库中的random模块中的normal()函数,设置其均值为0和标准差为1。然后,将两个信号混合在一起,信号比设定为10。最后,将混合信号进行抽样,抽样频率为1Hz。
以下是一个示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成正弦信号
frequency = 10 # 频率为10Hz
sampling_rate = 1 # 采样频率为1Hz
time = np.arange(0, 1, 1/sampling_rate) # 时间从0到1秒
amplitude = np.sin(2*np.pi*frequency*time) # 正弦信号的幅值
# 生成高斯白噪声信号
mean = 0
std_deviation = 1
noise = np.random.normal(mean, std_deviation, len(time))
# 将两个信号混合
signal_ratio = 10
composite_signal = amplitude + signal_ratio*noise
# 进行抽样
sampling_frequency = 1
sampled_time = np.arange(0, 1, 1/sampling_frequency)
sampled_signal = np.interp(sampled_time, time, composite_signal)
# 绘制混合信号图像
plt.plot(time, composite_signal)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title('Composite Signal: Sinusoidal signal + Gaussian White Noise')
plt.show()
```
这段代码会生成一个混合信号的图像,其中包含一个频率为10Hz的正弦信号和一个加入了高斯白噪声的复合信号。混合信号的信号比为10,抽样频率为1Hz。你可以通过调整代码中的参数来改变信号的性质。
阅读全文