【MATLAB第18期】#源码分享 | 基于MATLAB的一维数字信号的FFT及频谱分析

简介: 【MATLAB第18期】#源码分享 | 基于MATLAB的一维数字信号的FFT及频谱分析

一维数字信号的FFT及频谱分析


给定如下式(1)所示的 1D 连续信号:

x=2sin(30πt)+0.5cos(120πt)+4sin(240πt)


(1) 设采样频率 fs = 1000Hz,对信号 x 进行离散化,并画出一个周期内的信号振幅随时间变化的波形图。


(2) 对离散信号 x 进行傅立叶变换,分别画出频谱中心化及有效频率范围(不含负频)2 种方式下的幅值(|F(u)|)随频率(u)变化的分布图,要求纵横坐标正确标注物理量和单位。


(3) 对式(1)信号,加随机噪声,重复步骤(1)和(2)的处理过程。


(4) 通过对变换结果的分析,说明采样频率 fs、奈奎斯特(Nyquist)频率(fn)及采样时间间隔△T 三者之间的相互关系,并简要描述模拟信号的采样定理。

clc,clear,close all;
T=1/15;                             %周期
fs=1000;                            %采样频率
dt=1/fs;                            %采样间隔
L=1000/fs;                          %采样长度
t=0:dt:L;                           %采样时间序列
N=length(t);                        %采样点数
df=fs/(N-1);                        %频率分辨率
f=t*fs*df-max(t*fs*df)/2;           %频率基数
x=2*sin(30*pi*t)+0.5*cos(120*pi*t)+4*sin(240*pi*t);%函数
subplot(231),plot(t(1:ceil(T/dt)),x(1:ceil(T/dt))),title('采样后的图像'),xlabel('t/s'),ylabel('幅度');%ceil是为了取序列前面部分
fx=fftshift(fft(x));               %傅里叶变换,并中心化
subplot(232),plot(f(:),abs(fx)),title('频谱中心化,幅值随频率变化的分布图'),xlabel('f/Hz'),ylabel('频谱分量');
subplot(233),plot(f(ceil(length(f)/2):length(f)),abs(fx(ceil(length(fx)/2):length(fx)))),title('有效频率范围,幅值随频率变化的分布图'),xlabel('f/Hz'),ylabel('频谱分量');
xNoise=x+2*randn(size(x));              %加随机噪声
subplot(234),plot(t(1:ceil(T/dt)),xNoise(1:ceil(T/dt))),title('(加噪声)采样后的图像'),xlabel('t/s'),ylabel('幅度');
fxNoise=fftshift(fft(xNoise));         %傅里叶变换,并中心化
subplot(235),plot(f(:),abs(fxNoise)),title('频谱中心化,(加噪声)幅值随频率变化的分布图'),xlabel('f/Hz'),ylabel('频谱分量');
subplot(236),plot(f(ceil(length(f)/2):length(f)),abs(fxNoise(ceil(length(fxNoise)/2):length(fxNoise)))),title('有效频率范围,(加噪声)幅值随频率变化的分布图'),xlabel('f/Hz'),ylabel('频谱分量');
set(gcf,'unit','normalized','position',[0,0,1.0,1.0]);%[0,0,1.0,1.0]表示左下角为原点,长和宽分别占屏幕的100%
saveas(gcf,strcat(mfilename,'_pic'),'jpg');           %以文件名加'_pic'为名保存文件
相关文章
|
11天前
|
机器学习/深度学习 数据采集 算法
【信号识别】识别半监督粗糙模糊拉普拉斯特征图(Matlab代码实现)
【信号识别】识别半监督粗糙模糊拉普拉斯特征图(Matlab代码实现)
|
27天前
|
安全 算法 自动驾驶
使用SSTL规范控制信号化交叉口研究(Matlab代码实现)
使用SSTL规范控制信号化交叉口研究(Matlab代码实现)
|
11天前
|
机器学习/深度学习 算法 语音技术
【语音分离】通过分析信号的FFT,根据音频使用合适的滤波器进行语音信号分离(Matlab代码实现)
【语音分离】通过分析信号的FFT,根据音频使用合适的滤波器进行语音信号分离(Matlab代码实现)
|
20天前
|
存储 编解码 并行计算
【快速傅里叶变换FFT、窗函数法、希尔伯特-黄变换、小波变换】电力系统同步相量计算研究(Matlab代码实现)
【快速傅里叶变换FFT、窗函数法、希尔伯特-黄变换、小波变换】电力系统同步相量计算研究(Matlab代码实现)
|
24天前
|
算法 Python
【国防科大硕士论文】V调频信号脉冲压缩+V-FM ISAR成像研究(Matlab代码实现)
【国防科大硕士论文】V调频信号脉冲压缩+V-FM ISAR成像研究(Matlab代码实现)
|
11天前
|
数据格式
表面肌电信号(sEMG)完整处理流程 MATLAB
表面肌电信号(sEMG)完整处理流程 MATLAB
|
6天前
|
传感器 算法 安全
基于分布式模型预测控制DMPC的单向拓扑结构下异构车辆车队研究(Matlab代码实现)
基于分布式模型预测控制DMPC的单向拓扑结构下异构车辆车队研究(Matlab代码实现)
|
6天前
|
传感器 机器学习/深度学习 算法
【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)
【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)
|
8天前
|
机器学习/深度学习 传感器 算法
基于全局路径的无人地面车辆的横向避让路径规划研究[蚂蚁算法求解](Matlab代码实现)
基于全局路径的无人地面车辆的横向避让路径规划研究[蚂蚁算法求解](Matlab代码实现)
|
6天前
|
机器学习/深度学习 并行计算 算法
基于二进制粒子群优化(BPSO)最佳PMU位置(OPP)配置研究(Matlab代码实现)
基于二进制粒子群优化(BPSO)最佳PMU位置(OPP)配置研究(Matlab代码实现)

热门文章

最新文章