wordpress文章審核發(fā)郵件國內(nèi)seo公司
🎯要點(diǎn)
- 視頻圖像修復(fù)
- 模數(shù)轉(zhuǎn)換中混合信號(hào)鏈噪音測(cè)量
- 頻譜計(jì)算和量化周期性視覺刺激腦電圖
- 高斯噪聲的矩形脈沖 總諧波失真 周期圖功率譜密度
- 各種心率失常檢測(cè)算法
- 膠體懸浮液跟蹤檢測(cè)計(jì)算
- 交通監(jiān)控?cái)z像頭圖像噪音計(jì)算
Python信噪比
信噪比是科學(xué)和工程中使用的一種測(cè)量方法,用于比較所需信號(hào)水平與背景噪聲水平。信噪比定義為信號(hào)功率與噪聲功率之比,通常以分貝表示。高于 1:1(大于 0 dB)的比率表示信號(hào)大于噪聲。
信噪比是影響處理或傳輸信號(hào)的系統(tǒng)(例如通信系統(tǒng)、音頻系統(tǒng)、雷達(dá)系統(tǒng)、成像系統(tǒng)和數(shù)據(jù)采集系統(tǒng))的性能和質(zhì)量的重要參數(shù)。高信噪比意味著信號(hào)清晰且易于檢測(cè)或解釋,而低信噪比意味著信號(hào)被噪聲破壞或遮蔽,可能難以區(qū)分或恢復(fù)??梢酝ㄟ^各種方法來提高信噪比,例如增加信號(hào)強(qiáng)度、降低噪聲水平、濾除不需要的噪聲或使用糾錯(cuò)技術(shù)。
信噪比的一種定義是信號(hào)(有意義的輸入)的功率與背景噪聲(無意義或不需要的輸入)的功率之比:
S N R = P 信號(hào)? P 噪聲? SNR =\frac{P_{\text {信號(hào) }}}{P_{\text {噪聲 }}} SNR=P噪聲??P信號(hào)???
其中 P P P 是平均功率。信號(hào)功率和噪聲功率必須在系統(tǒng)中相同或等效的點(diǎn)以及相同的系統(tǒng)帶寬內(nèi)進(jìn)行測(cè)量。
隨機(jī)變量 ( S ) (S) (S) 與隨機(jī)噪聲 N N N 的信噪比為:
S N R = E [ S 2 ] E [ N 2 ] SNR =\frac{ E \left[S^2\right]}{ E \left[N^2\right]} SNR=E[N2]E[S2]?
其中 E 指的是期望值,在本例中是 N N N 的均方。
如果信號(hào)只是 s s s 的常數(shù)值,則該方程簡(jiǎn)化為
S N R = s 2 E [ N 2 ] SNR =\frac{s^2}{ E \left[N^2\right]} SNR=E[N2]s2?
如果噪聲的預(yù)期值為零(通常如此),則分母是其方差,即其標(biāo)準(zhǔn)差的平方 σ N \sigma_{ N } σN?。
信號(hào)和噪聲必須以相同的方式測(cè)量,例如相同阻抗上的電壓。它們的均方根也可以根據(jù)以下公式使用:
S N R = P 信號(hào)? P 噪聲? = ( A 信號(hào)? A 噪聲? ) 2 SNR =\frac{P_{\text {信號(hào) }}}{P_{\text {噪聲 }}}=\left(\frac{A_{\text {信號(hào) }}}{A_{\text {噪聲 }}}\right)^2 SNR=P噪聲??P信號(hào)???=(A噪聲??A信號(hào)???)2
其中 A A A 是均方根 (RMS) 幅度(例如,RMS 電壓)。
Python量化噪聲
一種情景,估算信號(hào)本身的功率,從而估算出信號(hào)與噪聲功率之間的比率(假設(shè)噪聲功率保持不變)。
S N R d b = 10 ? log ? 10 P s ? P n P n S N R_{d b}=10 \cdot \log _{10} \frac{P_s-P_n}{P_n} SNRdb?=10?log10?Pn?Ps??Pn??
另一種情景,使系統(tǒng)盡可能干凈(例如,在單位增益下繞過或類似裝置!),測(cè)量輸入信號(hào)功率和輸出信號(hào)功率,并假設(shè)它們之間的差異就是所添加的噪聲水平:
P n = P o ? P i P_n=P_o-P_i Pn?=Po??Pi?
其余換算與第一種情景相同。
import seaborn as sn
from scipy.stats import norm
import scipy.signal as sig
sr = 48000
T = 0.1 #seconds
N = int(T*sr)
n = arange(N)
t = n/srsilence = zeros(N)
np.random.seed(1) A = 1.0
a = 0.5
s = 0.1
powFund = A**2/2
powHarm = a**2/2
varnoise = s**2
f0 = 9000#*(sr/2)
h1 = f0*2.
noiseOnly = s*matlabRandn(len(t))
signalOnly = A * cos(pi*2*f0*t)
harmonicsOnly = a*sin(pi*2*t*h1)
y = signalOnly + harmonicsOnly + noiseOnlyfaxis,psX = sig.periodogram(signalOnly,fs=sr, window=('kaiser',38))
faxis,psH = sig.periodogram(harmonicsOnly,fs=sr, window=('kaiser',38))defSNR = 10*log10(powFund/varnoise)
print('SNR by definition, not computation: {} dB'.format(defSNR))faxis,ps = sig.periodogram(y,fs=sr, window=('kaiser',38))
fundBin = argmax(ps) _=plot(faxis,10*log10(ps), label='$y(n)$, the test signal')
_=plot(faxis,10*log10(psX),'--', label='$x(n)$, signal only', alpha=0.7)
_=plot(faxis,10*log10(psH),'--', label='$h(n)$, harmonics only', alpha=0.7)
title('Test Signal, SNR by definition: {} dB'.format(defSNR))
ylim([-100,0])
xlabel('Freq[Hz]')
ylabel('power [dB]')
legend()
grid(True)
輸出
SNR by definition, not computation: 16.989700043360187 dB
def signalPower(x):return average(x**2)
def SNR(signal, noise):powS = signalPower(signal)powN = signalPower(noise)return 10*log10((powS-powN)/powN)
def SNRsystem(inputSig, outputSig):noise = outputSig-inputSigpowS = signalPower(outputSig)powN = signalPower(noise)return 10*log10((powS-powN)/powN)
method1 = SNR(exampleOutput,noiseOnly)
print("Result Method 1: {} dB".format(method1))
輸出
Result Method 1: 17.971278119623197 dB
method2 = SNRsystem(exampleInput,exampleOutput)
print("Result Method 2: {} dB".format(method2))
輸出
Result Method 2: 5.7231662754316766 dB