【数字信号处理】相关函数应用 ( 使用 matlab 计算相关函数 )





一、相关函数应用场景



求下面信号的 " 自相关函数 " :

x ( n ) = sin ⁡ ( 2 π f n ) + N ( n ) x(n) = \sin(2\pi fn) + N(n) x(n)=sin(2πfn)+N(n)

其中 N ( n ) N(n) N(n)高斯白噪声 ;

高斯白噪声 符合 正态分布 特性 , 其 均值为 0 0 0 , 方差为 1 1 1 , 其功率谱密度是白的 , 在所有的频率上 , 其功率都相同 ;



在上一篇博客 【数字信号处理】相关函数应用 ( 相关函数应用场景 | 噪声中检测信号原理 ) 中 , 使用了公式推导的方法求相关函数 , 本篇博客使用 matlab 求相关函数 ;



下面开始使用 matlab 计算 x ( n ) = sin ⁡ ( 2 π f n ) + N ( n ) x(n) = \sin(2\pi fn) + N(n) x(n)=sin(2πfn)+N(n) 的相关函数 ;


1、生成高斯白噪声


生成 高斯白噪声 序列 , 均值 0 , 方差 1 ;

randn(1,200); 

上述代码 生成的 高斯白噪声 序列 是一个 有 200 个元素的行向量 ,

如果是 randn(2, 200) 代码 , 则生成的是一个 2 × 200 2 \times 200 2×200 的矩阵 ;


2、信噪比 SNR


SNR 是信噪比 , P s P_s Ps 是信号功率 , P N P_N PN 是噪声功率 , 其关系是 :

S N R = 10 log ⁡ 10 P s P N SNR = 10 \log_{10}\cfrac{P_s}{P_N} SNR=10log10PNPs

在 matlab 中 , 设置信噪比为 7 7 7 ;

% 设置 信噪比 
SNR = 7;

3、根据信噪比 SNR 求信号幅度


信号 A sin ⁡ ω n A \sin \omega n Asinωn , 其功率是 P s = A 2 2 P_s = \cfrac{A^2}{2} Ps=2A2 , 噪声功率 是 P N = 1 P_N=1 PN=1 , 将其带入到信噪比公式中 :

S N R = 10 log ⁡ 10 P s P N = 10 log ⁡ 10 A 2 2 1 = 10 log ⁡ 10 A 2 2 SNR = 10 \log_{10}\cfrac{P_s}{P_N} = 10 \log_{10}\cfrac{\cfrac{A^2}{2}}{1} = 10 \log_{10}\cfrac{A^2}{2} SNR=10log10PNPs=10log1012A2=10log102A2

根据信噪比 计算 幅度 A A A :

S N R 10 = l o g 10 A 2 2 \cfrac{SNR}{10} = log_{10}\cfrac{A^2}{2} 10SNR=log102A2

A 2 2 = 1 0 S N R 10 \cfrac{A^2}{2} = 10^{\cfrac{SNR}{10}} 2A2=1010SNR

A 2 = 2 × 1 0 S N R 10 A^2 = 2 \times 10^{\cfrac{SNR}{10}} A2=2×1010SNR

A = 2 × 1 0 S N R 10 A = \sqrt{2 \times 10^{\cfrac{SNR}{10}}} A=2×1010SNR

写成 matlab 代码为 :

% 根据 信噪比 计算信号幅度
SignalAmplitude = sqrt( 2 * 10^(SNR/10) );

4、产生单载波信号及最终信号


根据 A sin ⁡ ω n A \sin \omega n Asinωn 公式 , 产生 200 个信号 , 其中 A A A 之前已经求出 ;

% 根据 Asinωn 产生 200 个信号 
x1 = A * sin( pi * 0.165 * (0:199) ); 

然后将 信号 与 高斯白噪声叠加 :

% 信号 + 高斯白噪声
x = x1 + xn; 

5、求自相关函数及功率


求自相关函数 , 使用 xcorr 函数 ;

% 求 x 的 自相关函数 , 长度为2N-1
y = xcorr(x, x); 

求信号功率 :

% 功率 : 自相关函数 幅度 求平均
% 自相关函数 就是 200 个功率之和
y = y / 200; 

6、matlab 完整代码


matlab 完整代码 :

% 清除之前的变量或内存
clear; 

% 生成 高斯白噪声 序列 , 均值 0 , 方差 1
% 生成的 高斯白噪声 序列 是一个 有 200 个元素的行向量
xn = randn(1,200); 

% 设置 信噪比 
SNR = 7;

% 根据 信噪比 计算信号幅度
A = sqrt( 2 * 10^(SNR/10) );

% 根据 Asinωn 产生 200 个信号 
x1 = A * sin( pi * 0.165 * (0:199) ); 

% 信号 + 高斯白噪声
x = x1 + xn; 

% 求 x 的 自相关函数 , 长度为2N-1
y = xcorr(x, x); 

% 功率 : 自相关函数 幅度 求平均
% 自相关函数 就是 200 个功率之和
y = y / 200; 

%建立幕布
figure;
%绘制 "输出序列" 图像 , 点用上三角表示
plot(y);

% 打开网格
grid on;

执行结果 :

在这里插入图片描述

  • 15
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值