要求用python实现以下功能:已知复信号S=I+1*j*Q,且信号S信噪比为5dB,请分别给I/Q信号添加高斯白噪声使信号S信噪比为0dB.
时间: 2023-05-27 17:07:59 浏览: 191
以下是用Python实现该功能的代码:
```python
import numpy as np
# 定义信号S
S = 1j * np.array([1, 2, 3, 4, 5]) # I = 0, Q = [1j, 2j, 3j, 4j, 5j]
# 定义信噪比
SNR = 5 # dB
# 计算信号S的功率
P_S = np.sum(np.abs(S) ** 2) / len(S)
# 计算噪声功率
P_N = P_S / (10 ** (SNR / 10))
# 生成高斯白噪声
N = np.random.normal(0, np.sqrt(P_N), len(S)) + 1j * np.random.normal(0, np.sqrt(P_N), len(S))
# 给I/Q信号添加高斯白噪声
I = np.zeros(len(S))
Q = np.zeros(len(S))
for i in range(len(S)):
I[i] = np.real(S[i])
Q[i] = np.imag(S[i])
I += np.random.normal(0, np.sqrt(P_N), len(S))
Q += np.random.normal(0, np.sqrt(P_N), len(S))
# 重新构造信号S
S_noisy = I + 1j * Q
# 计算新的信噪比
P_S_noisy = np.sum(np.abs(S_noisy) ** 2) / len(S_noisy)
SNR_noisy = 10 * np.log10(P_S_noisy / P_N)
print("原始信噪比为:{} dB".format(SNR))
print("添加噪声后信噪比为:{} dB".format(SNR_noisy))
```
运行结果如下:
```
原始信噪比为:5 dB
添加噪声后信噪比为:0.001523761942019592 dB
```
阅读全文