写一个一维信号奇异值分解降噪代码 python
时间: 2023-09-14 10:11:26 浏览: 100
以下是一个简单的一维信号奇异值分解降噪的 Python 代码示例:
```python
import numpy as np
from scipy.linalg import svd
def svd_denoise(signal, threshold):
# 对信号进行奇异值分解
U, s, V = svd(signal)
# 保留大于阈值的奇异值,并将小于阈值的奇异值置为0
s[s < threshold] = 0
# 重构信号
reconstructed_signal = U.dot(np.diag(s)).dot(V)
return reconstructed_signal
```
在上面的代码中,我们使用了 `scipy.linalg` 库中的 `svd` 函数来对一维信号进行奇异值分解。接着,我们将小于阈值的奇异值置为0,并使用保留的奇异值重构信号。这样就能够实现降噪的效果了。
下面是一个简单的测试代码示例:
```python
import matplotlib.pyplot as plt
# 生成一个含有噪声的正弦波信号
t = np.linspace(0, 1, 100)
signal = np.sin(2 * np.pi * 5 * t) + 0.2 * np.random.randn(100)
# 降噪
denoised_signal = svd_denoise(signal, 0.5)
# 绘制原始信号和降噪后的信号
plt.plot(t, signal, label='Original signal')
plt.plot(t, denoised_signal, label='Denoised signal')
plt.legend()
plt.show()
```
在上面的测试代码中,我们生成了一个含有噪声的正弦波信号,并使用 `svd_denoise` 函数对其进行了降噪。最后,我们将原始信号和降噪后的信号绘制在了同一个图像中,以便比较它们的差异。