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

(内容源自详解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,:))));%功率谱密度是自相关函数的傅里叶变换
endRx_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:N1y(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,:))));
endRy_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.mzph.cn/diannao/43818.shtml

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

相关文章

解决本地操作云服务器上的Redis

方案一:开放Redis默认端口,本地通过公网IP端口号的形式访问。 方案二:每次将本地编写好的Java代码打包,放在云服务器上运行。 方案三:配置ssh端口转发,把云服务器的redis端口,映射到本地主机。 …

【大模型】微调实战—使用 ORPO 微调 Llama 3

ORPO 是一种新颖微调(fine-tuning)技术,它将传统的监督微调(supervised fine-tuning)和偏好对齐(preference alignment)阶段合并为一个过程。这减少了训练所需的计算资源和时间。此外&#xff0…

使用微pe装系统

本文仅作为记录,不作为教程。 今天心血来潮想下点游戏玩玩,一看之前分的200gc盘已经红了,再加上大学之后这个笔记本已经用得很少了,于是打算重装电脑。 参考: 微PE辅助安装_哔哩哔哩_bilibil… 1.下载微pe和win10系统到U盘 我这…

Xilinx zc706 USB电路解析

作者 QQ群:852283276 微信:arm80x86 微信公众号:青儿创客基地 B站:主页 https://space.bilibili.com/208826118 参考 USB OTG检测原理 USB3320 USB_ID为低电平时候,为host模式,USB_ID为悬空(高…

python-23-零基础自学python open()和replace()函数运用

学习内容:《python编程:从入门到实践》第二版练习10-2 知识点: 打开文件,replace()替换文件内容,open(), 练习内容: 练习10-2:C语言学习笔记 可使用方法replace()将字符串中的特定单词都替换为另一个单…

kafka系列之offset超强总结及消费后不提交offset情况的分析总结

概述 每当我们调用Kafka的poll()方法或者使用Spring的KafkaListener(其实底层也是poll()方法)注解消费Kafka消息时,它都会返回之前被写入Kafka的记录,即我们组中的消费者还没有读过的记录。 这意味着我们有一种方法可以跟踪该组消费者读取过的记录。 如前…

6.824/6.5840 的Debugging by Pretty Printing配置

TA的原文在:Debugging by Pretty Printing (josejg.com) 为了在WSL2中配置好打印运行日志,我可是忙活了一下午。可恶的log配置 首先是安装rich库Textualize/rich: Rich is a Python library for rich text and beautiful formatting in the terminal. …

用于视频生成的扩散模型

学习自https://lilianweng.github.io/posts/2024-04-12-diffusion-video/ 文章目录 3D UNet和DiTVDMImagen VideoSora 调整图像模型生成视频Make-A-Video(对视频数据微调)Tune-A-VideoGen-1视频 LDMSVD稳定视频扩散 免训练Text2Video-ZeroControlVideo 参…

需求分析|泳道图 ProcessOn教学

文章目录 1.为什么使用泳道图2.具体例子一、如何绘制确定好泳道中枢的角色在中央基于事实来绘制过程不要纠结美观先画主干处理流程再画分支处理流程一个图表达不完,切分子流程过程数不超25 ,A4纸的幅面处理过程过程用动词短语最后美化并加上序号酌情加上…

后端——全局异常处理

一、老办法try-catch 当我们执行一些错误操作导致程序报错时,程序会捕捉到异常报错,这个异常会存在一个Exception对象里 那我们在spring boot工程开发时,当我们执行一个sql查询时报错了,那就会从最底层的Mapper层捕捉到Exceptio…

Android应用程序调试Logcat的使用

Android的程序调试主要使用Logcat进行,本节主要介绍Logcat的使用。 开启调试模式 使用Android Studio进行程序调试,首先需要连接虚拟Android设备或真实Android设备,设备上需要启用调试功能。 虚拟Android设备默认情况下会启用调试功能。对…

微软清华提出全新预训练范式,指令预训练让8B模型实力暴涨!实力碾压70B模型

现在的大模型训练通常会包括两个阶段: 一是无监督的预训练,即通过因果语言建模预测下一个token生成的概率。该方法无需标注数据,这意味着可以利用大规模的数据学习到语言的通用特征和模式。 二是指令微调,即通过自然语言指令构建…

通过高德地图 JS API实现单击鼠标进行标注

效果图: 核心代码: <template><a-modal title="选择地图所在位置" :width="width" :visible="visible" @ok="handleOk" @cancel="handleCancel" cancelText="关闭"><div class="location-…

场外期权有交割日吗?场外期权应该怎么交割?

今天带你了解场外期权有交割日吗&#xff1f;场外期权应该怎么交割&#xff1f;场外个股期权是一种非标准化的金融衍生品&#xff0c;它允许投资者在未来某一特定日期以特定价格买入或卖出某一特定股票。 交割日就是买卖双方进行交割的日期,期权合约具有到期日,到期日的后一天…

C电池 和 D 电池的作用和类型详解及其之间的区别

C 和 D 电池是我们日常生活中必不可少的部件。它们通常用于高功率设备。例如手电筒和玩具。 D 型电池和 C 型电池是两种常见的电池类型。它们是一次性圆柱形电池。您可以在很多设备上使用它们。虽然它们有很多相似之处&#xff0c;但它们也有不同的特点。这些特点使它们适合某…

如何用qq邮箱注册outlook邮箱

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ​ 目录 第一步输入qq邮箱 第二步…

数据类型及数据块认知

西门子STEP7编程语言 梯形图(LAD) 功能块图(FBD) 语句表(STL) 其中梯形图和功能块图可以相互转换 CPU常用数据区 信号输入区 I 信号输出区 Q 程序中表现形式&#xff0c;IX.X/QX.X;IWX/QWX-访问的是CPU输出输入过程映像区 另一种形式IWX:P/QWX:P-访问的是信号端口地址&#xf…

深度整合全球资源,分贝通打造高效、合规的海外差旅管理平台

在全球化商业活动的背景下,中国企业出海已成为常态。然而,随着海外差旅市场的全面增长,企业在海外支出管理上面临诸多挑战。据2023年数据显示,分贝通出海差旅业务GMV同比增长高达500倍,这一增长背后隐藏着企业对于更省钱、更高效管控方式的迫切需求。 面对与日俱增的开支,企业开…

Websocket 替代方案:如何使用 Firestore 监听实时事件

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 ​在现代 Web 开发中,实时更新功能对于许多应用程序(如聊天应用、协作工具和在线游戏)都是必不可少的。虽然 WebSocket 是一种常用的实时通信技术,但 Google 的 Firestore 也提供了一种强大的替代方案,使得实时监听变得…

Golang中defer和return顺序

在Golang中&#xff0c;defer 和 return 的执行顺序是一个重要的特性&#xff0c;它们的执行顺序如下&#xff1a; return语句不是一条单独的语句&#xff0c;实际上&#xff0c;它是由赋值和返回两部分组成的。赋值步骤会先执行&#xff0c;这一步会计算return语句中的表达式…