用Matlab求余弦信号的频谱

article/2025/8/10 2:13:59

如果你是电子信息类专业的学生,一定对频谱这个词听过无数次了,当然求频谱的方法之一就是可以采取快速傅里叶的方法,今天来给大家介绍一种用Matlab对余弦信号求频谱的实际操作。

第一步:构建原始余弦信号

Matlab代码如下:

f = 2.4;          %信号频率hz
fs = 16;          %采样频率hz
N = 16;           %采样点数
t = (0:N-1)/fs;   %采样时间s
y = cos(2*pi*f*t);

我们采用的信号频率是2.4Hz,信号频率就是这个信号周期的倒数,也就是说我们的余弦信号的信号周期是1/2.4s。有一定数学基础的你肯定知道, y = c o s t y=cost y=cost的周期是 2 π 2\pi 2π,而 y = c o s 2 t y=cos2t y=cos2t的周期是 π \pi π,计算方法就是用 π \pi π除以t前面的系数。那么很容易得到2.4Hz(1/2.4s为周期)的余弦信号的表达式就是 y = c o s ( 2 π ∗ 2.4 ∗ t ) y=cos(2\pi*2.4*t) y=cos(2π2.4t)
我们这里还规定采样的频率为16Hz,也就是说如果你想要让它显示出来波形,你必须通过采样才能显示,因为计算机只能显示离散的数据,说白了就是计算机只能处理离散的信号。我们规定的采样时间就是上面的表达式t,也就是0-15/16S。

第二步:画出采样的余弦信号

代码如下:

subplot(211)
plot(t, y);
title('16Hz采样的余弦信号');
xlabel('t/s');
ylabel('y');

结果如下图:
在这里插入图片描述
这里图像不光滑的原因,是因为我们选用的16Hz频率有点低,不过没关系,这样能够看出来效果。

第三步:求频谱并且画图

代码如下:

subplot(212)
y_f = abs(fft(y));
y_f_s = fftshift(y_f);
y = linspace(-fs/2,fs/2-1,N);
plot(f, y_f_s);
title('余弦信号频谱');
xlabel('f/Hz');
ylabel('幅度');

首先我们对y求傅里叶变换,直接用到fft这个函数,这个函数返回的是y对应每个点求出的傅里叶变换,是许多个复数,我们需要取每个复数的模,因为这个模就可以表示能量的大小,也就是幅值。求模和求绝对值用到相同的函数abs。
接着fftshift这步是什么意思呢?首先我们先看下如果不加这步画出来的图像是什么样的。假如代码是下面这样的:

subplot(212)
y_f = abs(fft(y));
f = linspace(0, fs, N);
plot(f, y_f);
title('余弦信号频谱');
xlabel('f/Hz');
ylabel('幅度');

然后你会得到一个神奇的频谱图:
在这里插入图片描述
二点几赫兹?10几赫兹?这频率到底是多少……
那究竟是什么原因造成了这种情况呢?其实罪魁祸首在于fft函数,fft函数返回傅里叶变换的结果时,会在信号的后半部分也就是中心点以后的部分将取值区间倒了过来。为什么他会这么做呢?我觉得这其实也是它迫不得已而为之,因为原来16Hz采样的到的信号在频率fs/2的地方会发生混叠的现象,让我们的fft函数不得不把区间倒过来而避开混叠的部分。所以我们要做的就是把后半部分的区间再反转回来,这时候fftshift函数就闪亮登场了。
用fftshift调整了区间之后,我们还需要构建一个表示频率的x轴,因为频谱的x轴可不是时间,而是频率!用linspace函数我们就简单地构建除了s轴,他的意思是从 − f s / 2 -fs/2 fs/2 + f s / 2 +fs/2 +fs/2取N个值作为s轴。这里没有采用错误代码的0到fs,因为我们用fftshift函数其实把频谱的中心值调整到了0的位置,所以整体的区间也要对应的改变。
最后我们就得到了正确的频谱图:
在这里插入图片描述
大功告成!但是是不是有点小失望,似乎结果并不是2.4,那是因为我们的采样率有限,所以2.4就变成了2。


http://chatgpt.dhexx.cn/article/iRcTigZM.shtml

相关文章

2、信号与频谱

2.1、概述 信号传输的实质:信息传输的过程就是信号变换和处理的过程。如何观察信息传输过程中信号发生了什么变化? 一种方法是在时域 观察信号波形的变化,另一种方法是在频域观察信号频谱的变化。最常见的基本信号:正弦信号。 2…

matlab画信号频谱

为了让大学生活充实一点,多学点东西,我选修了《数字信号处理》。现在充实得不要不要的。 clc close all clear%参数设置% Fs 1000; % Sampling frequency T 1/Fs; % Sampling period L 1500; …

利用DFT分析信号频谱【信号与系统二】

利用DFT分析信号频谱 1. 利用FFT分析信号频谱2. 产生一个淹没在噪声中的信号x(t),分析信号的频谱3. 利用有限项分析三角波信号4. 利用频域分析方法,重新对第一次实验时的含噪信号进行滤波处理5. 通过频谱分析,识别电话拨号音的电话号码6. 试着…

信号与系统(3)——周期矩形脉冲信号频谱及特点

周期矩形脉冲 如图所示信号为脉冲宽度τ,脉冲幅度A,周期为T的周期矩形脉冲信号。 傅里叶变换推导 上述周期矩形脉冲信号的傅里叶系数推导方式如下: 由此式可得知,该信号频谱谱线大致按照采样函数(Sa(t))…

冲激信号的卷积性质采样信号频谱的周期性延拓

文章目录 1. 冲激信号的卷积2. 性质:3. 仿真验证: 1. 冲激信号的卷积 由冲激信号的卷积性质可知:冲激信号具有显像性。 任何信号对单位冲激函数的卷积等于该信号本身,那么单位冲激函数就相当于是一种“显像”信号,当冲激函数对冲激…

Matlab使用fft画出信号频谱(详细注释)

做雷原作业,需要对信号进行频谱分析,网上一搜太乱了,很多不是我想要的,特此整理。 DSP还没学到fft,就不对fft原理进行详细解释了,直接上代码。 fs500;%采样率 f15;%信号频率 f210;%信号频率 T1;%时宽1s nr…

连续信号频域分析:功率信号的频谱与能量信号频谱密度

频域分析: 周期信号非周期信号频谱(离散)频谱密度(也称频谱,连续)功率谱密度能量谱密度 周期信号and非周期信号幅度谱都是偶函数。 一、功率(周期)信号的频谱 认为周期信号为功率信号、非周期信号为能量 信号 1.1周期信号的虚指数/三角傅里…

FFT_频谱分析(数字信号处理)

~~ 如果有什么问题可以在我的个人博客留言 ,我会及时回复。欢迎来访交流 ~~ FFT_频谱分析(数字信号处理) (一)实验原理 用FFT对信号作频谱分析是学习数字信号处理的重要内容。经常需要进行谱分析的信号是模拟信号和时…

数字信号处理(matlab)——FFT对信号频谱分析

FFT频谱分析法 频谱分辨率D FFT能够实现的频率分辨率是2pi/N 要求2pi/N≤D 误差主要来自于用FFT做频谱分析时,得到的是离散谱,但是信号是连续谱,只有当N较大时,离散谱的包络才能逼近离散谱,因此N要大一些。 为了方便读…

matlab信号频谱分析FFT详解

前言 做OFDM通信少不了频谱分析,基带信号DA后的频谱,以及基带数字上变频后的DA信号都要频谱分析。我觉得其实做任何工程都是这样,先规定实施方案,然后仿真成功,再实际开发,不过也可以一边开发,…

信号与频谱

身为一名通信专业出生的我,居然淡忘了信号的基本知识,今天带大家回顾一下,通俗易懂。 信号(singal)简介 我们在生活中经常遇到信号。比如说,股票的走势图,心跳的脉冲图等等。在通信领域,无论是的GPS、手机…

【信号与系统】笔记(3-2)信号的频谱与傅里叶变换(一图看懂傅里叶变换)

Author:AXYZdong 自动化专业 工科男 有一点思考,有一点想法,有一点理性! 文章目录 一图看懂傅里叶变换前言一、周期信号的频谱1、周期信号频谱的相关概念2、周期信号频谱的特点3、谱线的结构与波形参数的关系 二、非周期信号的频谱…

信号频谱

2019独角兽企业重金招聘Python工程师标准>>> 频谱是指一个时域的信号在频域下的表示方式,可以针对信号进行傅里叶变换而得,所得的结果会是以分别以幅度及相位为纵轴,频率为横轴的两张图,不过有时也会省略相位的信息&am…

晋南讲堂之持久层框架ORM简介

1. 什么是ORM? ORM全称 Object/Relation Mapping,即对象/关系映射,它完成了面向对象语言到关系型数据库的映射,作用是把对持久化对象(POJO,Plain Old Java Object)的保存、修改、删除等操作转换成对数据库的操作,是两者…

持久层框架的比较Hibernate与 MyBatis 胡俊铭

最近网上 看到很多人质疑....现在好多Web项目用了MyBatis,没感觉MyBatis好到哪里了,从开发效率上讲,不管是Hibernate的反向工程,还是自动建表,关联映射都比MyBatis方便得多。难道仅仅是因为运行速度,Hibernate也有缓存啊。或者,二者适用场合不同,再或者,MyBatis就是比…

一起来学SpringBoot(七)持久层框架

springboot具有非常棒的持久层框架支持,下面我将介绍我用过的三种持久层框架进行简述使用。 由于这里操作的都是一张表,这里贴出通用的yml和建表语句 切记这里使用的是mysql8 ,5.8之前的朋友请修改后缀去掉com.mysql.cj.jdbc.Driver 中的cj。…

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Obje…

Mysql的持久层_持久层(数据层,Dao层) MyBatis框架

所谓的持久层就是把数据可以永久保持的存储到设备中,不像放到内存中那样断电就消失,一般来说,持久层为直接的理解就是对数据库的各种操作,如CRUD(增加,删除,修改,查询),更新等操作 持久层,就是把持久的动作封装成一个独立的层,这是为了降低功能代码之间的关联.创建一个更清晰的…

Spring 从入门到精通 (二十) 持久层框架 MyBatis

关键词:Spring | 整合 | 持久层 | MyBatis 本专栏通过理论和实践相结合,系统学习框架核心思想及简单原理,原创不易,如果觉得文章对你有帮助,点赞收藏支持博主 ✨ 目录 一、MyBatis开发步骤1.1、创建实体类1.2、实体别名…

持久层框架:Mybatis快速入门

Mybatis/Hibernate/JPA作为持久层使用广泛的框架,在实际的项目中有很多的追随者。这篇文章将会通过简单的实例让完全不知道Mybatis为何物的入门者迅速Catchup,对于有一些Java基础的入门者应该能够很快学会如何使用Mybatis进行CRUD(增查改删&a…