Matlab通信仿真系列——信号处理函数

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等
在这里插入图片描述
本节目录

一、Matlab信号产生函数
(1)随机信号函数
(2)方波信号函数
(3)锯齿波信号函数
(4)正弦波信号函数
二、Matlab信号分析函数
(1)滤波函数filter
(2)单位抽样响应函数impz
(3)频率响应函数
(4)零极点增益函数
(5)快速傅里叶变换函数
三、Matlab源码
(1)Matlab信号产生函数源码
(2)Matlab信号分析函数源码一
(3)Matlab信号分析函数源码二

本节内容
一、Matlab信号产生函数

在进行数字信号处理仿真或设计时,需要产生随机信号、方波信号、锯齿波信号、正弦信号,以及带有加性白噪声的某种输入信号。
(1)随机信号函数
Matlab提供了两种随机信号产生函数rand(1,N)和randn(1,N)
rand——产生长度为N的在[0,1]上均匀分布的随机序列
randn——产生均值为0,方差为1的高斯随机序列,功率为1W的白噪声序列
具有其他分布特性的序列可以由这两种随机数变换产生。
(2)方波信号函数
Matlab提供了方波信号产生函数square。
两种格式square(T)和square(T,DUTY)
square(T)——对时间变量T产生周期为2π,幅值为±1的方波
square(T,DUTY)——产生指定占空比的方波,DUTY指定信号为正值的区域在一个周期T内所占的比例,取值为0-100,当DUTY为50时,产生方波信号,与square(T)函数相同
(3)锯齿波信号函数
Matlab提供的锯齿波函数sawtooth。
有两种格式sawtooth(T)和sawtooth(T,WIDTH)
sawtooth(T)——对时间变量T产生周期为2π,幅值为±1的锯齿波
sawtooth(T,WIDTH)——对时间变量T产生三角波,WIDTH指定三角波的尺度值,取值为0-1,当WIDTH为0.5时,产生对称的三角波信号,当WIDTH为1时,产生锯齿波信号。
(4)正弦波信号函数
Matlab提供了完整的三角函数,如正弦函数sin、双曲正弦函数sinh、反正弦函数asin、反双曲正弦函数asinh、余弦函数cos、双曲余弦函数cosh、反余弦函数acos、反双曲余弦函数acosh、正切函数tan、余切函数cot等。均是对时间变量T产生周期为2π,幅值为±1的对应函数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、Matlab信号分析函数
(1)滤波函数filter

filter是利用递归滤波器或非递归滤波器对数据进行滤波处理的函数。
任何一个离散系统可以作为一个滤波器,系统的输出即输入信号经过滤波器滤波后的结果。
一个N阶的离散系统函数
在这里插入图片描述
差分方程为
在这里插入图片描述
filter函数有三个参数:filter(b,a,x)
b为系统函数的分子项组成的行矩阵
a为系统函数的分母项组成的行矩阵
x为输入信号序列
函数返回值为输入序列x经滤波处理后的输出结果
(2)单位抽样响应函数impz
Matlab提供了一个可以直接求取系统单位抽样响应的函数impz
impz函数有两种用法:impz(b,a,p)及h=impz(b,a,p)
b、a为系统函数向量
p为计算的数据点数
h为单位抽样响应结果数据
impz(b,a,p)是直接在Matlab中绘制系统的单位响应杆图(Stem)
h=impz(b,a,p)是将单位抽样响应结果存入变量h中,但不绘图
(3)频率响应函数
频率响应指系统的幅频(幅度-频率)响应及相频(相位-频率)响应。
频率响应是系统最基本最重要的特征,在设计系统时,通常以达到系统所需要的频率响应为目标。
Matlab提供了获取系统的频率响应的函数freqz
freqz有两种用法:freqz(b,a,n,Fs)及[h,f]=freqz(b,a,n,Fs)
b、a分别为系统函数向量
Fs为采样频率
n为在[0,Fs/2]范围内计算的频率点数量,并将频率值存放在f中
h存放频率响应计算结果
freqz(b,a,n,Fs)可直接绘出系统的幅频响应及相频响应曲线
[h,f]=freqz(b,a,n,Fs)将频率响应结果存放在h及f变量中,但不绘图
(4)零极点增益函数
对于离散系统,系统的零极点及增益参数可明确地反映系统的因果性、稳定性等重要特性,进行系统分析及设计时需计算其零极点和增益参数。
Matlab提供root函数来计算系统的零极点,直接使用zplane函数画出系统的零极点图。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(5)快速傅里叶变换函数
快速傅里叶变换(Fast Fourier Transform,FFT),充分利用离散傅里叶变换(Discrete Fourier Transform,DFT)运算中的对称性和周期性,从而将DFT运算量N^2(N为计算的数据点数)减少到Nlog2(N)。
N较小时,FFT优势并不明显,但当N大于32时,点数越大,FFT对运算量的改善越明显。
Matlab提供了fft及ifft两个函数分别用于快速傅里叶正/反变换。
常用方法y=fft(x,n)
x是输入信号序列
n是参与计算的数据点数,通常取2的整数幂次方
y存放函数运算结果
当n大于输入序列的长度,fft函数在x的尾部补零构成n点数据
当n小于输入序列的长度,fft函数对序列x进行截尾。
在这里插入图片描述
在这里插入图片描述

三、Matlab源码
(1)Matlab信号产生函数源码

%产生方波、三角波及正弦波序列信号
%定义参数
Ps=10;          %正弦信号功率为10dB
Pn=1;           %噪声信号功率为0dB
f=100;          %信号频率为100Hz
Fs=1000;        %采样频率为1kHz
width=0.5;      %函数sawtooth()的尺度参数为0.5
duty=50;        %函数square()的尺度参数为50
%产生信号
t=0:1/Fs:0.1;
c=2*pi*f*t;
sq=square(c,duty);      %产生方波
tr=sawtooth(c,width);   %产生三角波
si=sin(c);              %产生正弦波
%产生随机信号
noi=rand(1,length(t));      %产生均匀分布的随机序列
noise=randn(1,length(t));   %产生高斯白噪声序列
%产生带有加性高斯白噪声的正弦信号序列
sin_noise=sqrt(2*Ps)*si+sqrt(Pn)*noise;
%归一化处理
sin_noise=sin_noise/max(abs(sin_noise));
%绘图
subplot(3,2,1);
plot(t,noi);
axis([0 0.1 -1.1 1.1]);
xlabel('时间(s)','fontsize',8,'position',[0.08,-1.5,0]);
ylabel('幅度(v)','fontsize',8);
title('均匀分布随机信号','fontsize',8);

subplot(3,2,2);
plot(t,noise);
axis([0 0.1 -1.1 1.1]);
xlabel('时间(s)','fontsize',8,'position',[0.08,-1.5,0]);
ylabel('幅度(v)','fontsize',8);
title('高斯白噪声信号','fontsize',8);

subplot(3,2,3);
plot(t,sq);
axis([0 0.1 -1.1 1.1]);
xlabel('时间(s)','fontsize',8,'position',[0.08,-1.5,0]);
ylabel('幅度(v)','fontsize',8);
title('方波信号','fontsize',8);

subplot(3,2,4);
plot(t,tr);
axis([0 0.1 -1.1 1.1]);
xlabel('时间(s)','fontsize',8,'position',[0.08,-1.5,0]);
ylabel('幅度(v)','fontsize',8);
title('三角波信号','fontsize',8);

subplot(3,2,5);
plot(t,si);
axis([0 0.1 -1.1 1.1]);
xlabel('时间(s)','fontsize',8,'position',[0.08,-1.5,0]);
ylabel('幅度(v)','fontsize',8);
title('正弦波信号','fontsize',8);

subplot(3,2,6);
plot(t,sin_noise);
axis([0 0.1 -1.1 1.1]);
xlabel('时间(s)','fontsize',8,'position',[0.08,-1.5,0]);
ylabel('幅度(v)','fontsize',8);
title('SNR=10dB的正弦波信号','fontsize',8);

(2)Matlab信号分析函数源码一

L=128;                          %单位抽样序列的长度
Fs=1000;                        %采样频率为1kHz
b=[0.8 0.5 0.6];                %系统函数的分子系数向量
a=[1 0.2 0.4 -0.8];             %系统函数的分母系数向量
delta=[1 zeros(1,L-1)];         %生成长度为L的单位抽样序列

Filter_out=filter(b,a,delta);   %filter函数获取单位抽样响应
Impz_out=impz(b,a,L);           %impz函数获取单位抽样响应
[h,f]=freqz(b,a,L,Fs);          %freqz函数求频率响应
mag=20*log10(abs(h));           %幅度转换dB单位
ph=angle(h)*180/pi;             %相位值单位转换
zr=roots(b);                    %求系统的零点
pk=roots(a);                    %求系统的极点
g=b(1)/a(1);                    %求系统的增益

%绘图
figure(1);
subplot(2,2,1);
stem(Filter_out);
title('filter函数的单位抽样响应');
subplot(2,2,2);
stem(Impz_out);
title('impz函数的单位抽样响应');
subplot(2,2,3);
plot(f,mag);
title('freqz函数的幅度响应');
subplot(2,2,4);
plot(f,ph);
title('freqz函数的相位响应');
%用freqz绘制频率响应
figure(2);
freqz(b,a);
title('freqz的频率响应');
%用zplane绘制零极点图
figure(3);
zplane(b,a);
title('zplane的零极点图');
(3)Matlab信号分析函数源码二

N=512;      %数据长度
f1=100;     %f1信号频率,单位Hz
f2=150;     %f2信号频率,单位Hz
Fs=400;    %采样评论,单位Hz

t=0:1/Fs:1/Fs*(N-1);                %产生时间序列
s=sin(2*pi*f1*t)+sin(2*pi*f2*t);    %产生两个频率信号的叠加信号
f=fft(s,N);                         %计算傅里叶变换
f=20*log10(abs(f));                 %转化成dB单位
ft=[0:(Fs/N):Fs/2];                 %转化横坐标以Hz为单位
f=f(1:length(ft));                  

%绘图
subplot(2,1,1);
plot(t,s);
xlabel('时间(s)');
ylabel('幅度(v)');
title('时域信号波形');

subplot(2,1,2);
plot(ft,f);
xlabel('频率(Hz)');
ylabel('功率(dB)');
title('信号频谱图');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/158938.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python网络编程多线程实现异步服务端

在《Python中通过socketserver库创建服务端》中提到的使用socketserver库创建的服务端是同步服务端。当有多个客户端接入服务端时,必须接收了客户端A发送的数据之后,才会再接收客户端B的服务端。而如果客户端A连接服务端后,没有发送数据&…

三菱FX3U小项目—运料小车自动化

目录 一、项目描述 二、IO口分配 三、项目流程图 四、项目程序 五、总结 一、项目描述 设备如下图所示,其中启动按钮SB1用来开启运料小车,停止按钮SB2用来手动停止运料小车(其工作方式任务模式要求)。当小车在原点SQ1位置,按下启动按钮S…

RocketMQ(三):集成SpringBoot

RocketMQ系列文章 RocketMQ(一):基本概念和环境搭建 RocketMQ(二):原生API快速入门 RocketMQ(三):集成SpringBoot 目录 一、搭建环境二、不同类型消息1、同步消息2、异步消息3、单向消息4、延迟消息5、顺序消息6、带tag消息7、带key消息 一…

关于python中内存分配的问题,运行一些操作可能会导致为新结果分配内存,用Python的id()函数演示

一、考虑背景: 一般在python中不会考虑像C中的内存问题,但是在一些高级应用中会考虑,例如有一个特别特别大的矩阵,最好不要不断的赋值,导致内存问题产生。 二、python中的id: 在python中有个id&#xff…

内网渗透之信息收集

目录 本机信息收集 查看系统配置信息 查看系统服务信息 查看系统登录信息 自动信息收集 域内信息收集 判断是否存在域 本机信息收集 查看系统配置信息 查看系统服务信息 查看系统登录信息 自动信息收集 域内信息收集 查看机器相关信息 查看用户相关信息 powershel…

【Java 进阶篇】深入浅出:JQuery 事件绑定的奇妙世界

在前端的世界里,事件是不可或缺的一部分。用户的点击、输入、滚动等行为都触发着各种事件,而如何在代码中捕捉并处理这些事件是每位前端开发者必须掌握的技能之一。本文将带你深入浅出,探索 JQuery 中的事件绑定,为你揭开这个奇妙…

ke11..--2其他界面也要提取我的locatStarage

获取浏览器里面的本地缓存 localStorage就是我们的浏览器缓存在哪都可以用 下面代码是获取打印到我们的页面上 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> …

【杂谈】-蓝牙低功耗数据传输模式比较

蓝牙低功耗数据传输模式比较 文章目录 蓝牙低功耗数据传输模式比较1、无连接数据传输2、无连接数据传输的优点3、无连接数据传输的局限性 3、面向连接的数据传输4、面向连接模式的优点5、面向连接模式的局限性6、家庭自动化项目的性能观察 物联网&#xff08;IoT&#xff09;设…

端口映射软件

今天给大家介绍一个自己制作的工具&#xff0c;本工具可以把本地自己的项目映射到外网可以访问,自己有域名可以使用自己的,没有可以用软件自带的三级域名! Token获取 地址&#xff1a;传送 打开上面网址注册账号&#xff0c;然后点击验证&#xff0c;复制里面的值即可。 软件…

报错:HikariPool-1 - Exception during pool initialization.

问题发现&#xff1a; 原本可以运行的springboot2项目突然无法运行且报错&#xff0c;HikariPool-1 - Exception during pool initialization。 问题分析&#xff1a; 观察报错信息发现是JDBC连接失败&#xff0c;进而搜索HikariPool-1&#xff0c;搜索得知应该是applicatio…

为什么鸿蒙调用弹窗组件(CommonDialog )却不展示或闪退?

鸿蒙OS开发问题 1.效果展示2.问题代码3.问题分析4.完整代码 1.效果展示 1.为什么调用弹窗不展示会闪退? 2.问题代码 1.前端代码: <?xml version"1.0" encoding"utf-8"?> <DirectionalLayoutxmlns:ohos"http://schemas.huawei.com/res/…

01线性回归

目录 常规求解&#xff1a; 矩阵求解 sklean算法求解 # 二元一次方程 # x y 14 # 2x - y 10 常规求解&#xff1a; x np.array([[1,1],[2,-1]])print(x) # [[ 1 1] # [ 2 -1]]y np.array([14, 10])w np.linalg.solve(x, y)print(正常求救&#xff1a;)print(w) …

契约锁助力货物进出口全程无纸化,加速通关、降低贸易成本

我国作为全球最大的制造业国家和最大的货物贸易国家&#xff0c;政府始终注重引入数字化技术&#xff0c;创新管理和服务模式&#xff0c;帮助降低企业进出口成本&#xff0c;加速货物流通。 近年国家海关总署、商务部、税务总局及各地政府在进出口“报关”、“提货”、“收货备…

Redis持久化策略之RDB与AOF

文章目录 1.RDB1)基本介绍2)自动触发3)手动触发4)RDB文件5)优点缺点 2.AOF1)基本介绍2)使用方式3)工作流程4)重写机制5)AOF文件6)优点缺点 3.RDB AOF 我们都知道&#xff0c;redis 是一个基于内存的数据库。基于内存的好处是访问速度快&#xff0c;缺点是“不持久”——当数据…

golang标准库-crc32的使用

1.概述 crc32实现了32位循环冗余检测算法的实现。目前crc32内部提供 了三种常用的多项式,采用查表法来提高计算checksum的效率。通过crc32.MakeTable()可以获取对应的表&#xff0c;crc32提供了一个IEETABLE可以直接使用&#xff0c;官方链接如下&#xff1a;crc32 package - h…

录屏软件无水印免费的有哪些?我来告诉你!

在日常生活和工作中&#xff0c;我们经常需要使用录屏软件来记录屏幕活动。然而&#xff0c;许多免费录屏软件在录制视频时会添加水印&#xff0c;给用户带来不便。那录屏软件无水印免费的都有哪些呢&#xff1f;在本文中&#xff0c;我们将介绍三款无水印的免费录屏软件&#…

如果面试也能这样说HashMap,那么就不会有那么多遗憾!

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…

jenkins清理缓存命令

def jobName "yi-cloud-operation" //删除的项目名称 def maxNumber 300 // 保留的最小编号&#xff0c;意味着小于该编号的构建都将被删除 Jenkins.instance.getItemByFullName(jobName).builds.findAll { it.number < maxNumber }.each { it.delet…

SourceTree修改Git密码

SourceTree用的好好的&#xff0c;无奈公司隔段时间强制更改电脑密码。更改完成后SourceTree无法使用&#xff0c;重新输入密码。VS的nuget也是。查资料虽然也能比较快的解决&#xff0c;但是。。。。在此转载记录下。 1. 找到 SourceTree 配置文件所在目录 ‘userhosts’ 目录…

锐捷OSPF认证

一、知识补充 1、基本概述 OSPF区域认证和端口认证是两种不同的认证机制&#xff0c;用于增强OSPF协议的安全性。 OSPF区域认证&#xff08;OSPF Area Authentication&#xff09;&#xff1a;这种认证机制是基于区域的。在OSPF网络中&#xff0c;每个区域都可以配置一个区域…