数字信号处理_编程实例1

stem([1,2,3])

一、初始设置

%% 初始设置

% 清空工作空间,关闭无关页面

clc,clear,close all;

% 绘图变量

font_size = 12; %全局基础字体大小

axis_size = 10; %坐标轴刻度标签字体大小

line_width = 2; %绘图线条宽度

legend_size = 10.5; %图例字体大小

marker_size = 12; %数据点标记尺寸

figure_width = 14; %图形整体宽度(单位:英寸)

figure_height = 8; %图形整体高度(单位:英寸)

BiaValue = 0; %偏置值/基准值(用于数据校准或零值参考)

二、波形、图

原始信号波形

%% //绘制原信号波形

t = 0:0.0001:10;

y = 3*sin(2*pi*10*t) + sin(2*pi*40*t) + sin(2*pi*200*t);

figure

%% 图形窗口参数设置

% 单位转换:英寸→厘米(1英寸=2.54厘米)

% 窗口位置:[左下角x坐标, y坐标, 宽度, 高度]

set(gcf,'Unit','centimeters','Position',[3 3 3+figure_width 3+figure_height]); % 边距3cm+内容尺寸

%% 坐标轴精细调整

% LooseInset: 控制坐标轴与图形边界的间距

% TightInset: 系统自动计算的最小边距

% BiaValue: 用于X轴方向的额外偏移补偿(如避免标签截断)

set(gca,'LooseInset',get(gca,'TightInset')+[BiaValue,0,0,0],'FontName','Times New Roman','FontSize',font_size);

plot(t, y, 'b-', 'LineWidth', line_width) % 蓝色实线 线宽控制

set(gca,'FontSize',font_size,'FontName','Times New Roman') % 字体统一配置(确保中英文字体兼容)

xlim([0 1]); % 显示1秒时长

ylim([-6 6]); % 幅值范围覆盖所有分量(3*1 + 1 + 1 = 5 +余量)

set(gca, 'XTick', 0:0.25:1); % 每250ms一个主刻度

set(gca, 'YTick', -6:3:6); % 幅值刻度步长3

xlabel('时间 (s)', 'FontSize', font_size, 'FontName', 'Times New Roman');

ylabel('信号幅值', 'FontSize', font_size, 'FontName', 'Times New Roman');

title('原信号波形', 'FontSize', font_size*1.5, 'FontName', 'Times New Roman');

理想信号波形

%% //绘制理想信号波形

t = 0:0.0001:10;

y = 3*sin(2*pi*10*t);

figure

set(gcf,'Unit','centimeters','Position',[3 3 3+figure_width 3+figure_height]);

set(gca,'LooseInset',get(gca,'TightInset')+[BiaValue,0,0,0],'FontName','Times New Roman','FontSize',font_size);

plot(t, y, 'b-', 'LineWidth', line_width)

set(gca,'FontSize',font_size,'FontName','Times New Roman')

xlim([0 1])

ylim([-4 4])

set(gca,'XTick',0:0.25:1)

set(gca,'YTick',-4:2:4)

xlabel('时间 (s)', 'FontSize', font_size, 'FontName', 'Times New Roman')

ylabel('信号幅值', 'FontSize', font_size, 'FontName', 'Times New Roman')

title('理想信号波形', 'FontSize', font_size*1.5, 'FontName', 'Times New Roman')

幅频、相频图

%% //采样,采样频率:100Hz,采样时长:1s

t = 0:0.01:1;

y = 3*sin(2*pi*10*t) + sin(2*pi*40*t) + sin(2*pi*200*t);

% figure

% set(gcf,'Unit','centimeters','Position',[3 3 3+figure_width 3+figure_height]);

% set(gca,'LooseInset',get(gca,'TightInset')+[BiaValue,0,0,0],'FontName','Times New Roman','FontSize',font_size);

% plot(t, y, 'b-', 'LineWidth', line_width)

% set(gca,'FontSize',font_size,'FontName','Times New Roman')

% xlim([0 1])

% ylim([-6 6])

% set(gca,'XTick',0:0.25:1)

% set(gca,'YTick',-6:3:6)

% xlabel('时间 (s)', 'FontSize', font_size, 'FontName', 'Times New Roman')

% ylabel('信号幅值', 'FontSize', font_size, 'FontName', 'Times New Roman')

% title('原信号采样后的波形', 'FontSize', font_size*1.5, 'FontName', 'Times New Roman');

% set(gca,'Fontname','Monospaced'); %中文乱码问题

%% //信号分析

% 数据长度

datalength = length(y);

% 对数据进行FFT

yFFT = fft(y, datalength);

mag = abs(yFFT);

% 幅值归一化

mag = mag*2/datalength;

pha = angle(yFFT)*180/pi;

% 对无效相位进行置0

for i = 1:datalength

if (mag(1,i)<0.3)

pha(1,i) = 0;

end

end

% 序列坐标

n = 0:datalength-1;

% 采样频率

fs = 1/0.01;

% 序列频率

f = (0:datalength-1)*fs/datalength;

figure

set(gcf,'Unit','centimeters','Position',[3 3 3+figure_width 3+figure_height]);

set(gca,'LooseInset',get(gca,'TightInset')+[BiaValue,0,0,0],'FontName','Times New Roman','FontSize',font_size);

stem(f(1:datalength/2), mag(1:datalength/2), 'b-', 'LineWidth', line_width)

set(gca,'FontSize',font_size,'FontName','Times New Roman')

xlim([0 50])

ylim([0 4])

set(gca,'XTick',0:10:50)

set(gca,'YTick',0:1:4)

xlabel('频率 (Hz)', 'FontSize', font_size, 'FontName', 'Times New Roman')

ylabel('幅值', 'FontSize', font_size, 'FontName', 'Times New Roman')

title('采样信号的频域分析', 'FontSize', font_size*1.5, 'FontName', 'Times New Roman')

set(gca,'Fontname','Monospaced'); %中文乱码问题

figure

set(gcf,'Unit','centimeters','Position',[3 3 3+figure_width 3+figure_height]);

set(gca,'LooseInset',get(gca,'TightInset')+[BiaValue,0,0,0],'FontName','Times New Roman','FontSize',font_size);

stem(f(1:datalength/2), pha(1:datalength/2), 'b-', 'LineWidth', line_width)

set(gca,'FontSize',font_size,'FontName','Times New Roman')

xlim([0 50])

ylim([-100 200])

set(gca,'XTick',0:10:50)

set(gca,'YTick',-100:100:200)

xlabel('频率 (Hz)', 'FontSize', font_size, 'FontName', 'Times New Roman')

ylabel('相位 (deg)', 'FontSize', font_size, 'FontName', 'Times New Roman')

title('采样信号的频域分析', 'FontSize', font_size*1.5, 'FontName', 'Times New Roman')

set(gca,'Fontname','Monospaced'); %中文乱码问题

三、低通滤波器

fdatool

打开工具箱

打开后,保存为Filter_E3.mat

保存后,双击此处

%% //滤波器低通滤波

load('Filter_E3.mat')

filteroce = Num;

y_Filter = filter(filteroce, 1, y);

% 绘制滤波后的信号

figure

set(gcf,'Unit','centimeters','Position',[3 3 3+figure_width 3+figure_height]);

set(gca,'LooseInset',get(gca,'TightInset')+[BiaValue,0,0,0],'FontName','Times New Roman','FontSize',font_size);

plot(t, y_Filter, 'b-', 'LineWidth', line_width)

set(gca,'FontSize',font_size,'FontName','Times New Roman')

xlim([0 1])

ylim([-6 6])

set(gca,'XTick',0:0.25:1)

set(gca,'YTick',-6:3:6)

xlabel('时间 (s)', 'FontSize', font_size, 'FontName', 'Times New Roman')

ylabel('信号幅值', 'FontSize', font_size, 'FontName', 'Times New Roman')

title('滤波后的信号', 'FontSize', font_size*1.5, 'FontName', 'Times New Roman')

set(gca,'Fontname','Monospaced'); %中文乱码问题

参考

数字信号处理_第1个编程实例_现代信号处理第一张程序设计-CSDN博客
【数字信号处理_第1个Matlab编程实例】 https://www.bilibili.com/video/BV1514y1w7Sw/?share_source=copy_web\&vd_source=be33b1553b08cc7b94afdd6c8a50dc5a

相关推荐
文火冰糖的硅基工坊19 小时前
[硬件电路-123]:模拟电路 - 信号处理电路 - 常见的高速运放芯片、典型电路、电路实施注意事项
嵌入式硬件·架构·信号处理·电路·跨学科融合
文火冰糖的硅基工坊2 天前
[硬件电路-115]:模拟电路 - 信号处理电路 - 功能放大器工作分类、工作原理、常见芯片
架构·信号处理·跨学科融合
demaichuandong2 天前
丝杆升降机在物流运输领域有哪些应用场景
人工智能·自动化·信号处理
文火冰糖的硅基工坊2 天前
[硬件电路-124]:模拟电路 - 信号处理电路 - 测量系统的前端电路详解
前端·嵌入式硬件·fpga开发·架构·信号处理·电路
文火冰糖的硅基工坊2 天前
[硬件电路-112]:模拟电路 - 信号处理电路 - 二极管的应用 - 峰值检测电路与波形展示
嵌入式硬件·fpga开发·信号处理·电路
SKYDROID云卓小助手3 天前
无人设备遥控器之多设备协同技术篇
网络·人工智能·嵌入式硬件·算法·信号处理
9527华安4 天前
FPGA实现AD9361采集转SRIO与DSP交互,FPGA+DSP多核异构信号处理架构,提供2套工程源码和技术支持
fpga开发·架构·信号处理·dsp·ad9361·多核异构
文火冰糖的硅基工坊4 天前
[人工智能-综述-17]:AI革命:重塑职业版图,开启文明新篇
人工智能·深度学习·神经网络·架构·信号处理·跨学科融合
【杨(_> <_)】4 天前
辐射源定位方法简述
人工智能·安全·信号处理