数字信号处理基础(一):常用信号产生
1.连续信号和离散信号
1.1 连续信号
连续时间信号,是指自变量的取值范围是连续的。但是从严格意义上来说,MATLAB并不能处理连续信号,而是用连续信号在等时间间隔点的样值来近似地表示连续信号的,当取样时间间隔足够小时,这些离散的样值就能较好地近似出连续信号。
连续信号的示例
1 %% 连续信号 2 t = -5:0.1:5; % 时间变量 3 y = sin(t); % 信号 4 figure(1); % 绘制第1幅图 5 plot(t,y,'LineWidth',2); % 绘制信号
1.2 离散信号
自变量的取值范围是不连续的信号。
离散信号示例
1 %% 离散信号 2 k = -2:5; % 产生-2到5间隔为1的行向量 3 sig = [1 2 -4 4 3 5 -2 3]; % 信号 4 figure(2); % 绘制第2幅图 5 stem(k,sig,'LineWidth',2); % 绘制信号
2. 常用信号的产生
2.1 单位脉冲序列
单位脉冲序列是最原点处为1,其余处为0的信号。
1 % 单位冲激函数 2 t1=-5:5; % 时间变量,-5到5间隔为1的行向量 3 y1=(t1==0); % t1中等于0的数对应的序号在x的对应位置的数为1,其余为0 4 figure(3); % 绘制第3幅图 5 stem(t1,y1,'LineWidth',2); % 单位冲激序列
2.2 单位脉冲序列
单位阶跃序列是大于等于0处值为1,其余为0的信号。
1 % 单位阶跃函数 2 t2=-5:5; % 时间变量,-5到5间隔为1的行向量 3 y2=(t2>=0); % t2中大于等于0的数对应的序号在x的对应位置的数为1,其余为0 4 figure(4); % 绘制第4幅图 5 stem(t2,y2,'LineWidth',2); % 单位阶跃序列 6 hold on; % 允许后续的图像在当前窗口绘制 7 plot(t2,y2,'LineWidth',2); % 单位阶跃函数 8 hold off; % 不允许后续的图像在当前窗口绘制
2.3 指数函数
指数函数示例
1 figure(5); % 绘制第5幅图 2 t3=-3:0.5:3; % 时间变量,-3到3间隔为0.5的行向量 3 y3=exp(-t3); % 指数函数 4 plot(t3,y3,'LineWidth',2); % 绘制连续指数函数 5 hold on; % 允许后续的图像在当前窗口绘制 6 stem(t3,y3,'LineWidth',2); % 离散指数序列 7 hold off; % 不允许后续的图像在当前窗口绘制
2.4 正弦信号和余弦信号
正弦信号和余弦信号示例
1 % 正弦波和余弦波 2 t4=0:0.01:2*pi; % 时间变量,0到2*pi间隔为0.01的行向量 3 y4=sin(2*t4); % 正弦信号 4 y5=cos(2*t4); % 余弦信号 5 figure(6); % 绘制第6幅图 6 plot(t4,y4,'-b','LineWidth',2); % 绘制正弦信号 7 hold on; % 允许后续的图像在当前窗口绘制 8 plot(t4,y5,'-r','LineWidth',2); % 绘制余弦信号 9 legend('正弦信号','余弦信号'); % 图例 10 hold off; % 不允许后续的图像在当前窗口绘制
2.5 sinc函数
sinc函数示例
1 % sinc函数 2 t5=linspace(-10,10,1024); % 产生-10到10,间隔为20/(1024-1)的行向量 3 figure(7); % 绘制第7幅图 4 sicf=sinc(t5); % sinc函数 5 plot(t5,sicf,'LineWidth',2); % 绘制sinc信号
2.6 矩形脉冲信号
矩形脉冲信号示例
1 % 矩形脉冲信号 2 t6=-2:0.01:2; % 时间变量,-2到2间隔为0.01的行向量 3 y6=rectpuls(t6); % 矩形脉冲信号 4 figure(8); % 绘制第8幅图 5 plot(t6,y6,'LineWidth',2); % 绘制矩形脉冲信号
3. 信号卷积
卷积运算是信号运算中重要的运算,用conv函数实现。
1 %% 信号卷积 2 x=[4,3,2,1]; % 输入信号 3 h=[2,5,1]; % 单位脉冲响应函数 4 y=conv(x,h); % 输出信号 5 figure(9); % 绘制第3幅图 6 subplot(1,3,1); % 将窗口分割成1*3的,当前是第1个子图 7 stem(x,'LineWidth',2); % 绘制输入信号 8 title('输入信号x'); % 标题 9 subplot(1,3,2); % 将窗口分割成1*3的,当前是第2个子图 10 stem(h,'LineWidth',2); % 绘制单位脉冲响应函数 11 title('单位脉冲响应函数h'); % 标题 12 subplot(1,3,3); % 将窗口分割成1*3的,当前是第3个子图 13 stem(y,'LineWidth',2); % 绘制输出信号 14 title('输出信号y'); % 标题
4. 完整代码
1 clear all; % 清除所有变量 2 close all; % 关闭窗口 3 clc; % 清屏 4 %% 连续信号 5 t = -5:0.1:5; % 时间变量 6 y = sin(t); % 信号 7 figure(1); % 绘制第1幅图 8 plot(t,y,'LineWidth',2); % 绘制信号 9 10 %% 离散信号 11 k = -2:5; % 产生-2到5间隔为1的行向量 12 sig = [1 2 -4 4 3 5 -2 3]; % 信号 13 figure(2); % 绘制第2幅图 14 stem(k,sig,'LineWidth',2); % 绘制信号 15 16 %% 常用信号 17 % 单位冲激函数 18 t1=-5:5; % 时间变量,-5到5间隔为1的行向量 19 y1=(t1==0); % t1中等于0的数对应的序号在x的对应位置的数为1,其余为0 20 figure(3); % 绘制第3幅图 21 stem(t1,y1,'LineWidth',2); % 单位冲激序列 22 23 % 单位阶跃函数 24 t2=-5:5; % 时间变量,-5到5间隔为1的行向量 25 y2=(t2>=0); % t2中大于等于0的数对应的序号在x的对应位置的数为1,其余为0 26 figure(4); % 绘制第4幅图 27 stem(t2,y2,'LineWidth',2); % 单位阶跃序列 28 hold on; % 允许后续的图像在当前窗口绘制 29 plot(t2,y2,'LineWidth',2); % 单位阶跃函数 30 hold off; % 不允许后续的图像在当前窗口绘制 31 32 % 指数函数 33 figure(5); % 绘制第5幅图 34 t3=-3:0.5:3; % 时间变量,-3到3间隔为0.5的行向量 35 y3=exp(-t3); % 指数函数 36 plot(t3,y3,'LineWidth',2); % 绘制连续指数函数 37 hold on; % 允许后续的图像在当前窗口绘制 38 stem(t3,y3,'LineWidth',2); % 离散指数序列 39 hold off; % 不允许后续的图像在当前窗口绘制 40 41 % 正弦波和余弦波 42 t4=0:0.01:2*pi; % 时间变量,0到2*pi间隔为0.01的行向量 43 y4=sin(2*t4); % 正弦信号 44 y5=cos(2*t4); % 余弦信号 45 figure(6); % 绘制第6幅图 46 plot(t4,y4,'-b','LineWidth',2); % 绘制正弦信号 47 hold on; % 允许后续的图像在当前窗口绘制 48 plot(t4,y5,'-r','LineWidth',2); % 绘制余弦信号 49 legend('正弦信号','余弦信号'); % 图例 50 hold off; % 不允许后续的图像在当前窗口绘制 51 52 % sinc函数 53 t5=linspace(-10,10,1024); % 产生-10到10,间隔为20/(1024-1)的行向量 54 figure(7); % 绘制第7幅图 55 sicf=sinc(t5); % sinc函数 56 plot(t5,sicf,'LineWidth',2); % 绘制sinc信号 57 58 % 矩形脉冲信号 59 t6=-2:0.01:2; % 时间变量,-2到2间隔为0.01的行向量 60 y6=rectpuls(t6); % 矩形脉冲信号 61 figure(8); % 绘制第8幅图 62 plot(t6,y6,'LineWidth',2); % 绘制矩形脉冲信号 63 64 %% 信号卷积 65 x=[4,3,2,1]; % 输入信号 66 h=[2,5,1]; % 单位脉冲响应函数 67 y=conv(x,h); % 输出信号 68 figure(9); % 绘制第3幅图 69 subplot(1,3,1); % 将窗口分割成1*3的,当前是第1个子图 70 stem(x,'LineWidth',2); % 绘制输入信号 71 title('输入信号x'); % 标题 72 subplot(1,3,2); % 将窗口分割成1*3的,当前是第2个子图 73 stem(h,'LineWidth',2); % 绘制单位脉冲响应函数 74 title('单位脉冲响应函数h'); % 标题 75 subplot(1,3,3); % 将窗口分割成1*3的,当前是第3个子图 76 stem(y,'LineWidth',2); % 绘制输出信号 77 title('输出信号y'); % 标题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通