首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matlab:计算两种高相关时域信号的信噪比

Matlab:计算两种高相关时域信号的信噪比
EN

Stack Overflow用户
提问于 2017-11-08 17:56:23
回答 1查看 1.5K关注 0票数 0

我在做生物信号采集的工作。我做了一个实验,详细如下所示,现在我正试图从这些数据中获得一些结果。

我在Matlab中有一个信号的文本文件。我把信号加载到波形发生器上,然后在示波器上记录发生器的输出。我把示波器记录的信号输入Matlab。原始信号与示波器信号的皮尔逊相关系数为0.9958。

我想要计算示波器信号的信噪比(我称之为我的信号,再加上通过数模转换引入的任何噪音,反之亦然)。我已经附上了两个信号的片段,供参考。

因此,我的原始信号是X,示波器信号是X+ N,我使用snr函数计算信噪比,如下所示。

代码语言:javascript
运行
复制
snr(original, (oscilloscope - original))

我得到的结果是20.44 dB。这在我看来是不对的,就像我想的那样,在如此高的相关性下,信噪比应该高得多?

还是在这种情况下尝试计算信噪比是不合适的呢?

所有的帮助都是感激的。

谢谢

编辑:几个结果的图与侦察的模拟关系

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-10 23:09:33

你可能会感到惊讶的是,即使是这样中等的信噪比也会导致相当高的相关性。

我做了一个实验来说明相关性和信噪比估计之间的近似关系.因为我没有你特定的脑电图信号,我只是用了一个参考常量信号和一些高斯白噪声。请记住,这种关系可能会受到信号和噪音性质的影响,但它应该让你知道该期待什么。可以使用以下代码执行此模拟:

代码语言:javascript
运行
复制
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信噪比结果。

我会说这是一个很好的匹配!

事实上,对于我的模拟(x = 1z = x + N(0,σ))中的这个具体情况,如果我们将C(x,z)表示为xz之间的相关性,而σ表示噪声标准差,我们实际上可以显示:

如果相关值为0.9958,则会产生20.79dB的信噪比,这与您的结果是一致的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47186551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档