matlab仿真 通信信号和系统分析(下)

news2024/10/5 17:22:44

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真   刘学勇编著第三章内容,有兴趣的读者请阅读原书)

一、离散傅里叶变换

 

 

clear all
n=0:30;%信号的时间范围
x=sin(0.2*n).*exp(-0.1*n);
k=0:30;%频率范围
N=31;
Wnk=exp(-j*2*pi/N).^(n'*k);%DFT公式
X=x*Wnk;
subplot(2,1,1);stem(n,x);title('序列x');
subplot(2,1,2);stem(-15:15,[abs(X(17:end)) abs(X(1:16))]);%将DFT下标重新排列(DFT的默认下标为[0,N-1])
title('X幅度');

二、循环卷积

clear all
h=[6 3 4 2 1 -2];
x=[3 2 6  7 -1 -3];
h1=fliplr(h)%反转序列h
H=toeplitz(h,[h(1) h1(1:5)]);%生成循环矩阵
%T = toeplitz(c,r) 返回非对称托普利茨矩阵,
%其中 c 作为第一列,r 作为第一行。如果 c 和 r 的首个元素不同,toeplitz 将发出警告并使用列元素作为对角线
y=H*x';%计算循环卷积序列

H=fft(h);
X=fft(x);%两个序列的DFT
Y=H.*X;%循环卷积序列的DFT
y1=ifft(Y);%求循环卷积

subplot(2,1,1);stem(y);title('直接计算');
subplot(2,1,2);stem(y1);title('DFT计算');

 

这里用两种方得到的结果相同证明DFT运算内部是采用循环卷积而不是线性卷积

三、利用DFT求线性卷积

 

clear all
n1=0:20;
n2=0:10;
h=sinc(0.2*n1);
x=exp(-0.2*n2);
y=conv(x,h);%1.直接时域卷积

h1=[h zeros(1,length(x)-1)];
x1=[x zeros(1,length(h)-1)];%对x(n),h(n)进行扩展
H1=fft(h1);
X1=fft(x1);%计算DFT
Y1=H1.*X1;
y1=ifft(Y1);%2.利用IDFT算出时域卷积结果
subplot(2,1,1);stem(y);title('直接计算');
subplot(2,1,2);stem(y1);title('DFT计算');

 

虽然DFT内部采用的是循环卷积,但是我们可以利用DFT实现线性卷积结果的求解

四、Hilbert变换

clear all
ts=0.01;%这里是连续信号,所以需要对其进行采样才能处理,因为载波频率为20HZ,由采样定理至少需要40HZ,这里采用0.01s作为时间间隔
fs=1/ts;
t=0:ts:10;
df=fs/length(t);%DFT的频谱分辨率
f=-50:df:50-df;%生成频率矢量(用于画图)
x=exp(-10*abs(t-5)).*cos(2*pi*20*t);
X=fft(x)/fs;%求信号的频谱,因为原始信号是模拟信号,由抽样定理,必须求出FFT后再除以fs才是原模拟信号的频谱

xa=hilbert(x);%求解析信号
Xa=fft(xa)/fs;%求解析信号的频谱
subplot(2,1,1);plot(t,x);%利用时间分辨率画图
title('信号x');xlabel('时间t');
subplot(2,1,2);plot(f,fftshift(abs(X)));title('信号x幅度谱');xlabel('频率f');
%fftshift将0频分量移到中心,重新排列abs(X),由于X是复数,所以利用abs求包络
figure
subplot(2,1,1);plot(t,abs(xa));title('信号xa包络');xlabel('时间t');
subplot(2,1,2);plot(f,fftshift(abs(Xa)));title('信号xa幅度谱');xlabel('频率f');

 可以看到解析信号只包含正频率部分,且幅度值是原始信号频谱幅度值的两倍

五、带通信号的低通表示

clear all
ts=0.01;%这里是连续信号,所以需要对其进行采样才能处理,因为载波频率为20HZ,由采样定理至少需要40HZ,这里采用0.01s作为时间间隔
fs=1/ts;
t=0:ts:10;
df=fs/length(t);%DFT的频谱分辨率
f=-50:df:50-df;%生成频率矢量(用于画图)
x=exp(-10*abs(t-5)).*cos(2*pi*20*t);
X=fft(x)/fs;%求信号的频谱,因为原始信号是模拟信号,由抽样定理,必须求出FFT后再除以fs才是原模拟信号的频谱

xa=hilbert(x);%求解析信号

fc1=20;
x11=xa.*exp(-j*2*pi*fc1*t);%3-41公式,求20hz的低通信号
X11=fft(x11)/fs;%模拟信号,fft之后要除以fs
subplot(2,1,1);plot(t,real(x11));title('fc=20HZ时的低通信号同相分量');xlabel('时间t');
%同相分量就是解析信号中的实部
subplot(2,1,2);plot(f,fftshift(abs(X11)));title('fc=20HZ时的低通信号幅度谱');xlabel('频率f');

fc2=10;
x12=xa.*exp(-j*2*pi*fc2*t);
X12=fft(x12)/fs;
figure
subplot(2,1,1);plot(t,real(x12));title('fc=10HZ时的低通信号同相分量');xlabel('时间t');
subplot(2,1,2);plot(f,fftshift(abs(X12)));title('fc=10HZ时的低通信号幅度谱');xlabel('频率f');

总结来说,就是利用解析信号和频移公式实现了带通信号的低通表示。

六、平稳随机过程

clear all
N1=2000;
N2=100;
x=randn(N2,N1);%产生一个100行,2000列的高斯分布随机数
for ii=1:N2%对每行进行循环
    [Rx(ii,:),lags]=xcorr(x(ii,:),50,'coeff');%xcorr是用来计算自相关函数,第一个参数是自相关函数序列,
    %第二个参数50是自相关值的最大时间偏移,lags就是[-50:50],可以理解为x中的每一行有2000个数,经过xcorr后每一行转化为101个数的
    %自相关函数
    Sf(ii,:)=fftshift(abs(fft(Rx(ii,:))));%功率谱密度是自相关函数的傅里叶变换
end

Rx_av=sum(Rx)/N2;%求100行的平均值
Sf_av=sum(Sf)/N2;

subplot(2,1,1);plot(lags,Rx_av);title('自相关函数')%画出在最大时间偏移上的自相关函数的变化情况
subplot(2,1,2);plot(lags,Sf_av);title('功率谱密度')
axis([-50 50 0 2]);

 

七、带通随机过程

clear all
ts=0.002;
tao=-1:ts:1;%时间序列,因为自相关函数是连续函数,所以计算时需要抽样,因为函数是sinc形式,所以在【-1,1】之外值会很小
%可以忽略不计
B=20;
f0=100;
R=sinc(2*B*tao).*cos(2*pi*f0*tao);

fs=1/ts;
df=fs/length(tao);%频域分辨率,用采样频率/时间序列的长度
f=-fs/2:df:fs/2-df;
S=fft(R)/fs;%因为这里自相关函数是连续函数,所以求功率谱密度时还要在除以fs
%类似于之前的例子中模拟信号求fft之后还要再除以fs才是正确地结果
subplot(2,1,1);plot(tao,R);title('自相关函数');xlabel('tao');ylabel('R');
subplot(2,1,2);plot(f,fftshift(abs(S)));title('功率谱密度');xlabel('f');ylabel('S');

八、随机过程通过线性系统

clear all
N1=2000;
N2=100;
x=randn(N2,N1);%相同于例3.17
for ii=1:N2%对每一行进行循环
    y(ii,1)=x(ii,1);%由滤波器的响应可以推出来y(n)=0.6*y(n-1)+x(n),y(-1)=0,所以y(0)=x(0);
    for jj=2:N1
        y(ii,jj)=0.6*y(ii,jj-1)+x(ii,jj);%递推公式
    end
    [Ry(ii,:),lags]=xcorr( y(ii,:),50,'coeff');
    Sf(ii,:)=fftshift(abs(fft(Ry(ii,:))));
end

Ry_av=sum(Ry)/N2;%平均化
Sf_av=sum(Sf)/N2;
subplot(2,1,1);plot(lags,Ry_av);title('自相关函数');
subplot(2,1,2);plot(lags,Sf_av);title('功率谱密度');

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

firewalld(6)自定义services、ipset

简介 在前面的文章中我们已经介绍了zone、rich rule 、--direct等功能和基本配置。在前面文章中,我们提到过firewalld内置了很多服务,可以通过firewall-cmd --get-services来查看服务,也可以通过配置文件查看这些服务/var/lib/firewalld/ser…

短视频电商源码的优势及软件架构解析

短视频电商源码是目前电商行业中非常火热的一个新兴领域,它通过短视频内容和电商商品的结合,为用户提供了一种新的购物体验。下面将介绍短视频电商源码的优势以及软件架构。 首先,短视频电商源码具有以下几个优势: 1、创新的购物体…

WGAN(Wassertein GAN)

WGAN E x ∼ P g [ log ⁡ ( 1 − D ( x ) ) ] E x ∼ P g [ − log ⁡ D ( x ) ] \begin{aligned} & \mathbb{E}_{x \sim P_g}[\log (1-D(x))] \\ & \mathbb{E}_{x \sim P_g}[-\log D(x)] \end{aligned} ​Ex∼Pg​​[log(1−D(x))]Ex∼Pg​​[−logD(x)]​ 原始 GAN …

项目范围管理(信息系统项目管理师)

收集需求的输出是需求文件、需求跟踪矩阵定义范围是制定项目和产品详细描述的过程。本过程的主要作用是描述产品、服务或成果的边界和验收标准。本过程需要在整个项目期间多次反复开展项目范围说明书:是对项目范围、主要可交付成果、假设条件和制约因素的描述。明确…

思维导图插件--jsMind的使用

vue引入jsmind(右键菜单)_jsmind.menu.js-CSDN博客 第一版 vue-JsMind思维导图实现(包含鼠标右键自定义菜单)_jsmind 右键菜单-CSDN博客 // 新增节点addNode() {console.log(this.get_selected_nodeid());this.get_selected_…

Jenkins 创建流水线任务

Jenkins是一个流行的持续集成(Continuous Integration,CI)工具。 Jenkins 创建任务 选择“流水线”类型,该类型的优点是定制化程度非常高 (可选)添加“参数化构建” 配置仓库选项(ssh连接、分支)和凭据…

Element-UI - el-table中自定义图片悬浮弹框 - 位置优化

该篇为前一篇“Element-UI - 解决el-table中图片悬浮被遮挡问题”的优化升级部分,解决当图片位于页面底部时,显示不全问题优化。 Vue.directive钩子函数已在上一篇中详细介绍,不清楚的朋友可以翻看上一篇, “Element-UI - 解决el-…

【Python】字典练习

python期考练习 目录 1. 首都名​编辑 2. 摩斯电码 3. 登录 4. 学生的姓名和年龄​编辑 5. 电商 6. 学生基本信息 7. 字母数 1. 首都名 初始字典 (可复制) : d{"China":"Beijing","America":"Washington","Norway":…

企业如何管理安全生产工作?(附模板)

总结一下在企业内管理安全中遇到的一些问题: 1、 管理方式落后,还在使用纸质记录 2、 人员信息杂乱无章,无人整理 3、出现问题找不到源头和负责人 我做系统管理已经7年了,题主说的这些问题我之前也遇到过,相信也有…

Java学习高级一

修饰符 static 类变量的应用场景 成员方法的分类 成员变量的执行原理 成员方法的执行原理 Java之 main 方法 类方法的常见应用场景 代码块 设计模式 单例设计模式 饿汉式单例设计模式 懒汉式单例设计模式 继承 权限修饰符

【MindSpore学习打卡】应用实践-计算机视觉-FCN图像语义分割-基于MindSpore实现FCN-8s进行图像语义分割的教程

图像语义分割是计算机视觉领域中的一个重要任务,它旨在对图像中的每个像素进行分类,从而实现对图像内容的详细理解。在众多图像语义分割算法中,全卷积网络(Fully Convolutional Networks, FCN)因其端到端的训练方式和高…

Git使用中遇到的问题(随时更新)

问题1.先创建本地库,后拉取远程仓库时上传失败的问题怎么解决? 操作主要步骤: step1 设置远程仓库地址: $ git remote add origin gitgitee.com:yourAccount/reponamexxx.git step2 推送到远程仓库: $ git push -u origin "master&qu…

API接口测试/Swgger-ui未授权访问

目录 API接口 接口文档 接口测试的方法 单流程 多流程 Swgger-ui未授权访问 在之间的一次面试中面试官问到了API接口测试,我回答的不好,因为自己确实不太会,后面才下去学习了,这里复习和练习一下 API接口 API(…

DevOps:开发与运维的无缝融合

目录 前言1. DevOps的起源与概念1.1 DevOps的起源1.2 DevOps的定义 2. DevOps的核心实践2.1 持续集成2.2 持续交付2.3 自动化 3. DevOps工具链3.1 版本控制系统3.2 持续集成工具3.3 配置管理工具3.4 容器化与编排工具3.5 监控和日志工具 4. DevOps的实际应用4.1 案例分析&#…

【技巧分享】对接多平台:高效接入淘宝、抖音、京东、拼多多等电商平台API的实战策略

当电商商家想要自研电商管理系统,或是线下ERP厂商想要开发电商业务管理功能,需要对接电商平台API,但电商平台众多,各类平台API接口也需要花费大量的时间和精力去对接,如何快速接入多个电商平台API呢?点三来…

FormMaking表单设计器V3.8发布,数据表格上线,支持多选、多级表头、列模板自定义、操作列、分页等设置

介绍 FormMaking 是基于Vue的可视化表单设计器,赋能企业实现可视化低代码开发模式;帮助开发者从传统枯燥的表单代码中解放出来,更多关注业务,快速提高效率,节省研发成本。 目前已经在OA系统、考试系统、报表系统、流程…

docker push 推送镜像到阿里云仓库

1.登陆阿里云 镜像服务,跟着指引操作就行 创建个人实例,创建命名空间、镜像仓库,绑定代码源头 2.将镜像推送到Registry $ docker login --username*** registry.cn-beijing.aliyuncs.com $ docker tag [ImageId] registry.cn-beijing.aliy…

AI商品图生成定制技术公司

AI绘画模型训练、定制服务公司案例分析— 触站AI,塑造智能设计新纪元 第一:触站AI的创新之路 触站AI的崛起标志着AI技术在艺术与设计领域应用的一个新高度。作为一家专注于企业AI图像领域的技术解决方案服务公司,触站AI以其前沿的技术和定制…

数字化精益生产系统--SRM供应商关系管理

SRM供应商关系管理,全称为Supplier Relationship Management(供应商关系管理)系统,是一种专门用于管理采购供应链和供应商关系的软件系统。该系统通过集成各个环节的采购活动,帮助企业实现采购流程的自动化、标准化和优…

AI智能体|AI打工我躺平!使用扣子Coze智能体自动生成和发布文章到微信公众号(一)

大家好,我是无界生长,国内最大AI付费社群“AI破局俱乐部”初创合伙人。这是我的第 44 篇原创文章——《AI智能体|AI打工我躺平!使用扣子Coze智能体自动生成和发布文章到微信公众号(一)》 AI智能体&#xf…