我在生物信号采集领域工作。我做了如下详述的实验,现在我试图从数据中获得一些结果。
我在Matlab中有一个信号的文本文件。我将信号加载到波形发生器上,然后在示波器上记录发生器输出。 我将示波器中记录的信号输入Matlab。 原始信号和示波器信号之间的Pearson相关系数为0.9958(使用corrcoeff函数获得)。
我想计算示波器信号的SNR(我称之为信号加上通过数模转换引入的噪声,反之亦然)。我附上了2个信号的片段以供参考。
所以我原来的信号是X,示波器信号是X + N. 我使用snr函数计算SNR如下。
snr(original, (oscilloscope - original))
我得到的结果是20.44 dB。 这对我来说似乎不像我想的那样具有如此高的相关性,SNR应该高得多吗?
或者在这种情况下尝试计算SNR是不合适的?
感谢所有帮助。
由于
编辑:与Sleutheye的模拟关系相比,几个结果的图表
答案 0 :(得分:1)
您可能会对这种中等SNR如何仍能产生相当高的相关性感到惊讶。
我进行了一项实验来说明相关性和信噪比估计之间的近似关系。由于我没有你的特定脑电信号,我只使用了参考常数信号和一些白高斯噪声。请记住,这种关系可能会受到信号和噪音性质的影响,但它可以让您了解预期的结果。可以使用以下代码执行此模拟:
SNR = [10:1:40];
M = 10000;
C = zeros(size(SNR));
for i=1:length(SNR)
x = ones(1,M);
K = sqrt(sum(x.*x)/M)*power(10, -SNR(i)/20);
z = x + K*randn(size(x));
C(i) = xcorr(x,z,0)./sqrt(sum(x.*x)*sum(z.*z));
end
figure(1);
hold off; plot(SNR, C);
corr0 = 0.9958;
hold on; plot([SNR(1) SNR(end)], [corr0 corr0], 'k:');
snr0 = 20.44;
hold on; plot([snr0 snr0], [min(C) max(C)], 'r:');
xlabel('SNR (dB)');
ylabel('Correlation');
黑色虚线水平线突出显示0.9958相关性测量值,红色虚线垂直线突出显示您的20.44 dB SNR结果。
我说这是一场非常好的比赛!
事实上,对于我的模拟中的特定情况(x = 1
; z = x + N(0,σ)
),如果我们将C(x,z)
表示为x
和z
之间的相关性和σ
作为噪音标准偏差,我们实际上可以表明:
给定相关值0.9958,这将产生20.79dB的SNR,这与您的结果一致。