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

2023-03-30 12:00:42 浏览数 (1)

文章目录

  • 一、相关函数应用场景
    • 1、生成高斯白噪声
    • 2、信噪比 SNR
    • 3、根据信噪比 SNR 求信号幅度
    • 4、产生单载波信号及最终信号
    • 5、求自相关函数及功率
    • 6、matlab 完整代码

一、相关函数应用场景


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

x(n) = sin(2pi fn) N(n)

其中

N(n)

为 高斯白噪声 ;

高斯白噪声 符合 正态分布 特性 , 其 均值为

0

, 方差为

1

, 其功率谱密度是白的 , 在所有的频率上 , 其功率都相同 ;

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

下面开始使用 matlab 计算

x(n) = sin(2pi fn) N(n)

的相关函数 ;

1、生成高斯白噪声

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

代码语言:javascript复制
randn(1,200); 

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

如果是 randn(2, 200) 代码 , 则生成的是一个

2 times 200

的矩阵 ;

2、信噪比 SNR

SNR 是信噪比 ,

P_s

是信号功率 ,

P_N

是噪声功率 , 其关系是 :

SNR = 10 log_{10}cfrac{P_s}{P_N}

在 matlab 中 , 设置信噪比为

7

;

代码语言:javascript复制
% 设置 信噪比 
SNR = 7;

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

信号

A sin omega n

, 其功率是

P_s = cfrac{A^2}{2}

, 噪声功率 是

P_N=1

, 将其带入到信噪比公式中 :

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}

根据信噪比 计算 幅度

A

:

cfrac{SNR}{10} = log_{10}cfrac{A^2}{2}
cfrac{A^2}{2} = 10^{cfrac{SNR}{10}}
A^2 = 2 times 10^{cfrac{SNR}{10}}
A = sqrt{2 times 10^{cfrac{SNR}{10}}}

写成 matlab 代码为 :

代码语言:javascript复制
% 根据 信噪比 计算信号幅度
SignalAmplitude = sqrt( 2 * 10^(SNR/10) );

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

根据

A sin omega n

公式 , 产生 200 个信号 , 其中

A

之前已经求出 ;

代码语言:javascript复制
% 根据 Asinωn 产生 200 个信号 
x1 = A * sin( pi * 0.165 * (0:199) ); 

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

代码语言:javascript复制
% 信号   高斯白噪声
x = x1   xn; 

5、求自相关函数及功率

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

代码语言:javascript复制
% 求 x 的 自相关函数 , 长度为2N-1
y = xcorr(x, x); 

求信号功率 :

代码语言:javascript复制
% 功率 : 自相关函数 幅度 求平均
% 自相关函数 就是 200 个功率之和
y = y / 200; 

6、matlab 完整代码

matlab 完整代码 :

代码语言:javascript复制
% 清除之前的变量或内存
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;

执行结果 :

0 人点赞