1,生成一个复合信号,包含多个不同频率的正弦波(如5Hz、10Hz 和 20Hz),并在信号中添加随机噪声。2,计算并绘制生成信号的频谱,使用快速傅里叶变换(FFT)展示频域特征3,绘制时域信号及其分解结果的图形,并展示频域变换后的频谱图
时间: 2024-10-27 11:08:58 浏览: 23
随机信号分析大作业:利用matlab程序设计设计一个正旋信号加高斯白噪声的复合信号.pdf
5星 · 资源好评率100%
首先,为了生成一个包含不同频率正弦波和随机噪声的复合信号,我们可以使用Python中的NumPy库。这里是一个简单的步骤描述:
1. 导入必要的库:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
```
2. 创建信号:
```python
fs = 1000 # 采样频率
t = np.arange(0, 1, 1/fs) # 时间序列
# 频率列表
frequencies = [5, 10, 20] # 5Hz, 10Hz, 20Hz
amplitudes = np.random.rand(len(frequencies)) # 随机振幅
# 生成正弦波并叠加
signal_sum = sum(np.sin(2*np.pi*freq*t) * amp for freq, amp in zip(frequencies, amplitudes))
noise = np.random.normal(size=len(t)) # 添加随机噪声
composite_signal = signal_sum + noise
```
3. 计算并绘制频谱:
```python
fft_spectrum = np.fft.fft(composite_signal)
freqs = np.fft.fftfreq(len(t), d=1/fs)
plt.figure()
plt.plot(freqs, np.abs(fft_spectrum)**2, 'r') # 绘制幅度谱
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.title('Composite Signal Fourier Transform')
plt.show()
```
4. 绘制时域和频域图形:
```python
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(t, composite_signal, label='Original Signal')
plt.legend()
plt.title('Time Domain - Composite Signal')
plt.subplot(2, 1, 2)
plt.plot(freqs, np.abs(fft_spectrum)**2, 'r', label='Spectrum')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.legend()
plt.title('Frequency Domain - FFT of Composite Signal')
plt.tight_layout()
plt.show()
```
阅读全文