文章目录






一、相关函数应用场景



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

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;

执行结果 :

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