前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【数字信号处理】相关函数应用 ( 使用 matlab 计算相关函数 )

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

作者头像
韩曙亮
发布于 2023-03-30 04:00:42
发布于 2023-03-30 04:00:42
2.5K00
代码可运行
举报
运行总次数:0
代码可运行

文章目录

一、相关函数应用场景


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

x(n)=sin(2πfn)+N(n)

其中

N(n)

为 高斯白噪声 ;

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

0

, 方差为

1

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

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

下面开始使用 matlab 计算

x(n)=sin(2πfn)+N(n)

的相关函数 ;

1、生成高斯白噪声

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
randn(1,200); 

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

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

2×200

的矩阵 ;

2、信噪比 SNR

SNR 是信噪比 ,

Ps

是信号功率 ,

PN

是噪声功率 , 其关系是 :

SNR=10log10PsPN

在 matlab 中 , 设置信噪比为

7

;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% 设置 信噪比 
SNR = 7;

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

信号

Asinωn

, 其功率是

Ps=A22

, 噪声功率 是

PN=1

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

SNR=10log10PsPN=10log10A221=10log10A22

根据信噪比 计算 幅度

A

:

SNR10=log10A22
A22=10SNR10
A2=2×10SNR10
A=2×10SNR10

写成 matlab 代码为 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% 根据 信噪比 计算信号幅度
SignalAmplitude = sqrt( 2 * 10^(SNR/10) );

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

根据

Asinωn

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

A

之前已经求出 ;

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% 信号 + 高斯白噪声
x = x1 + xn; 

5、求自相关函数及功率

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

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

求信号功率 :

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

6、matlab 完整代码

matlab 完整代码 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% 清除之前的变量或内存
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;

执行结果 :

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C++面向对象程序设计(谭浩强)第三章第五节学习笔记
一个对象存储空间的起始地址就是对象的指针。可以定义一个指针变量,用来存放对象的地址,这就是指向对象的指针变量。
xxxflower
2023/04/16
1760
C++面向对象程序设计(谭浩强)第三章第五节学习笔记
C++中的指针用法汇集
  说明:在建立对象时,编译系统就为每个对象分配一定的存储空间以存放其成员,不过注意,在一般情况下不同对象的数据存储单元中存放的数据成员是不相同,而不同对象的函数代码却是相同的,也就是说,它们的函数代码是共享的。这时我们可以定义一个指针变量用来存放对象的指针。
狼啸风云
2023/10/07
1570
C++之类和对象的使用(三)
对象数组 如果构造函数只有一个参数,在定义数组时可以直接在等号后面的花括号内提供。Student stud[3]={90,92,01};//合法 如果构造函数有多个参数,则不能用在定义时直接所提供所有实参的方法。 但可以如下定义: //构造函数有三个参数:学号,年龄,成绩 Student stud[3]{ Student(1000,19,22); Student(1001,19,22); Student(1002,19,22); };   对象指针 指向对象的指针 class Box {public:
互联网金融打杂
2018/04/03
8910
C++之类和对象的使用(三)
C++对象成员的引用 | 对象成员引用
C++不仅可以在类外引用对象的公用数据成员,还可以调用对象的公用成员函数,但同样必须指出对象名,应该注意所访问的成员是公用的还是私有的,只能访问public成员,而不能访问 private成员。
小林C语言
2021/01/21
2.2K0
C++对象成员的引用 | 对象成员引用
12.4 C++常引用
在C++中,常用常指针和常引用作函数参数,既能保证数据安全,使数据不能被随意修改,在调用函数时又不必建立实参的拷贝。
小林C语言
2021/06/17
5380
12.4 C++常引用
12.3 C++常指针
在C++中,虽然指向对象的常指针变量的值不能改变,但可以改变其所指向对象的值,如果想将一个指针变量固定地与一个对象相联系,可以将它指定为const指针变量。
小林C语言
2021/06/11
6820
12.3 C++常指针
C++教程(凯格尔训练法教程)
七种基本的C++数据类型:bool、char、int、float、double、void、wchar_t 类型修饰符:signed、unsigned、short、long 注:一些基本类型可以使用一个或多个类型修饰符进行修饰,比如:signed short int简写为short、signed long int 简写为long。
全栈程序员站长
2022/08/01
3K0
C++教程(凯格尔训练法教程)
大学C++课程提炼概括【C++笔记】
如果未写明限制幅(public: private: protected: )则默认为私有
来杯Sherry
2023/05/25
4020
C++知识总结
1.*p++和(*p)++的区别      *p++是先取值,然后将指针地址执行++操作      (*p)++是先取值,然后对(*p)这个值进行++操作 2.枚举变量enum的值如何计算 enum{a,b=5,c,d=4,e}; cout<<a<<b<<c<<d<<e  结果为0 5 6 4 5 因为在枚举变量的值默认为前一个变量的值加1,而第一个枚举值没有被赋值,所以默认为0 3.static的应用 (1)局部静态变量      存储空间分配不同,auto类型分配在栈上, 属于动态存储类别, 占动
用户1624346
2018/04/17
1K0
【c++】类和对象(七)
这个n就不属于某一个对象,而是属于所有对象,属于整个类,所以它的初始化不能放在初始化列表执行,那么它的初始化应该在哪里呢?所以需要在类外面定义:
用户11029103
2024/04/04
960
【c++】类和对象(七)
C++定义指针变量 | 使用指针变量
C++规定所有变量在使用前必须先定义,即指定其类型,在编译时按变量类型分配存储空间,对指针 变量必须将它定义为指针类型。
小林C语言
2020/12/11
2.7K0
C++定义指针变量 | 使用指针变量
《C++面向对象程序设计》✍千处细节、万字总结(建议收藏)「建议收藏」
面向对象程序设计(Object-Oriented Programming,OOP)是一种新的程序设计范型。程序设计范型是指设计程序的规范、模型和风格,它是一类程序设计语言的基础。
全栈程序员站长
2022/09/10
3.5K0
《C++面向对象程序设计》✍千处细节、万字总结(建议收藏)「建议收藏」
C/C++开发基础——类对象与构造析构
private: 类的成员可以被同一个类中的成员函数访问,或者被友元函数访问,该修饰符可以禁止一些针对类中成员的高风险操作。
Coder-ZZ
2023/09/18
2990
C/C++开发基础——类对象与构造析构
【C++】类和对象(一)
C 语言结构体中只能定义变量,在 C++ 中,结构体内不仅可以定义变量,也可以定义函数。 比如:
啊QQQQQ
2024/11/19
600
【C++】类和对象(一)
【C++】类和对象核心总结
a. 在C语言阶段我们就已经认识到了结构体,它可以帮助我们实现多种数据结构,功能强大不言而喻。在C++中为了更好的封装,以及更好的将现实生活抽象化为计算机世界,采用面向对象的思想帮助程序猿能够对用户需求进行抽象思维化,不得不需要类class的出现。
举杯邀明月
2023/04/12
7810
【C++】类和对象核心总结
后台开发:核心技术与应用实践 -- C++
本书介绍的“后台开发”指的是“服务端的网络程序开发”,从功能上可以具体描述为:服务器收到客户端发来的请求数据,解析请求数据后处理,最后返回结果。
范中豪
2021/03/08
1.3K0
C++类声明和成员函数定义 | 引用多个成员对象
在C++中,一般做法是将类的声明放在指定的头文件中,程序员如果想用该类,只要把有关的头文件包含进来即可,不必在程序中重复书写类的声明,以减少工 作量,提高编程的效率。
小林C语言
2021/01/25
2K0
C++类声明和成员函数定义 | 引用多个成员对象
C++类的封装 | 类的封装
C++通过类来实现封装性,把数据和与这些数据有关的操作封装在一个类中,或 者说,类的作用是把数据和算法封装在用户声明的抽象数据类型中,在声明了一个类以后,用户主要是通过调用公用的成员函数来实现类提供的功能
小林C语言
2021/01/22
1.7K0
C++类的封装 | 类的封装
C++区别于其他语言的知识点总结
C++是博主的一门限选课,所使用的课本为谭浩强老师的《C++面向对象程序设计》(第二版),这本书内容全面,简单易懂,也强烈推荐给大家(尤其是初学者)。但对于有Java/C#知识的人来说很多地方的讲解略显冗余。这门课的授课老师编程经验丰富,因此可以跳开课本进行更为简洁精确的说明讲解。虽然是只有8周的限选课,博主依然对课堂知识作了记录,这些都是精华所在,即大家所言的老程序员的经验。 (正文字体采用“等线”,最新版win10可以达到最佳显示效果) 1.使用const定义常量 //C语言定义常量 #defin
Steve Wang
2018/02/05
9310
c++那些事儿9.0指针
知识点综述: ---- 指针:地址。 1.0在32位的cpu上,cpu一般由32根地址线组成,所以地址大小为32位 即4byte,同理可得指针大小为4byte; 2.0指针是有类型的,和它指向的数据类型相同; double p1=11,*p2; p2=&p1;//p2为double型指针 3.0数组名是一个const指针。 int arr[6]; arr是常量指针。 二维数组名是指向行的指针,它指向一整行元素而非个
热心的社会主义接班人
2018/04/27
7130
c++那些事儿9.0指针
相关推荐
C++面向对象程序设计(谭浩强)第三章第五节学习笔记
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档