उन लोगों के लिए जो एसएनआर और सामान्य रैंडम वैरिएबल के बीच संबंध बनाने की कोशिश कर रहे हैं :
[१]
, जहाँ यह ध्यान रखना महत्वपूर्ण है कि पी औसत शक्ति है।
या डीबी में:
[२]
इस मामले में, हमारे पास पहले से ही एक संकेत है और हम हमें वांछित एसएनआर देने के लिए शोर उत्पन्न करना चाहते हैं।
जबकि शोर अलग-अलग स्वादों में आ सकता है जो आप मॉडलिंग कर रहे हैं, इस पर निर्भर करता है कि एक अच्छी शुरुआत (विशेष रूप से इस रेडियो टेलीस्कोप उदाहरण के लिए) एडिटिव व्हाइट गॉसियन शोर (AWGN) है । जैसा कि पिछले उत्तरों में कहा गया है, AWGN को मॉडल करने के लिए आपको अपने मूल सिग्नल में शून्य-माध्य गॉसियन रैंडम वैरिएबल जोड़ना होगा। उस यादृच्छिक चर का विचलन औसत शोर शक्ति को प्रभावित करेगा ।
एक गाऊसी यादृच्छिक चर X के लिए, औसत शक्ति
, जिसे दूसरे क्षण के रूप में भी जाना जाता है ,
[3] 
तो सफेद शोर के लिए,
और औसत शक्ति तब विचरण के बराबर होती है
।
जब यह अजगर में मॉडलिंग करता है, तो आप या तो
1. वांछित वांछित SNR और मौजूदा मापों के एक सेट के आधार पर विचरण की गणना कर सकते हैं , जो तब काम करेगा जब आप अपने माप से काफी सुसंगत आयाम मानों की अपेक्षा करेंगे।
2. वैकल्पिक रूप से, आप रिसीवर के शोर जैसी किसी चीज़ से मेल खाने के लिए ध्वनि शक्ति को ज्ञात स्तर पर सेट कर सकते हैं। टेलीस्कोप को मुक्त स्थान में इंगित करके और औसत शक्ति की गणना करके रिसीवर के शोर को मापा जा सकता है।
किसी भी तरह से, यह सुनिश्चित करना महत्वपूर्ण है कि आप अपने सिग्नल में शोर जोड़ते हैं और रैखिक अंतरिक्ष में औसत लेते हैं और डीबी इकाइयों में नहीं।
सिग्नल और प्लॉट वोल्टेज, वाट्स में पावर और डीबी में पावर उत्पन्न करने के लिए यहां कुछ कोड दिए गए हैं:
import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(1, 100, 1000)
x_volts = 10*np.sin(t/(2*np.pi))
plt.subplot(3,1,1)
plt.plot(t, x_volts)
plt.title('Signal')
plt.ylabel('Voltage (V)')
plt.xlabel('Time (s)')
plt.show()
x_watts = x_volts ** 2
plt.subplot(3,1,2)
plt.plot(t, x_watts)
plt.title('Signal Power')
plt.ylabel('Power (W)')
plt.xlabel('Time (s)')
plt.show()
x_db = 10 * np.log10(x_watts)
plt.subplot(3,1,3)
plt.plot(t, x_db)
plt.title('Signal Power in dB')
plt.ylabel('Power (dB)')
plt.xlabel('Time (s)')
plt.show()

यहां वांछित SNR के आधार पर AWGN को जोड़ने के लिए एक उदाहरण दिया गया है:
target_snr_db = 20
sig_avg_watts = np.mean(x_watts)
sig_avg_db = 10 * np.log10(sig_avg_watts)
noise_avg_db = sig_avg_db - target_snr_db
noise_avg_watts = 10 ** (noise_avg_db / 10)
mean_noise = 0
noise_volts = np.random.normal(mean_noise, np.sqrt(noise_avg_watts), len(x_watts))
y_volts = x_volts + noise_volts
plt.subplot(2,1,1)
plt.plot(t, y_volts)
plt.title('Signal with noise')
plt.ylabel('Voltage (V)')
plt.xlabel('Time (s)')
plt.show()
y_watts = y_volts ** 2
y_db = 10 * np.log10(y_watts)
plt.subplot(2,1,2)
plt.plot(t, 10* np.log10(y_volts**2))
plt.title('Signal with noise (dB)')
plt.ylabel('Power (dB)')
plt.xlabel('Time (s)')
plt.show()

और यहाँ एक ज्ञात शोर शक्ति के आधार पर AWGN को जोड़ने के लिए एक उदाहरण है:
target_noise_db = 10
target_noise_watts = 10 ** (target_noise_db / 10)
mean_noise = 0
noise_volts = np.random.normal(mean_noise, np.sqrt(target_noise_watts), len(x_watts))
y_volts = x_volts + noise_volts
plt.subplot(2,1,1)
plt.plot(t, y_volts)
plt.title('Signal with noise')
plt.ylabel('Voltage (V)')
plt.xlabel('Time (s)')
plt.show()
y_watts = y_volts ** 2
y_db = 10 * np.log10(y_watts)
plt.subplot(2,1,2)
plt.plot(t, 10* np.log10(y_volts**2))
plt.title('Signal with noise')
plt.ylabel('Power (dB)')
plt.xlabel('Time (s)')
plt.show()
