matlab - 为什么从matlab得到的卷积与理论上得到的不同?
问题描述
指数函数与正弦函数卷积的理论结果如下所示。
这两个地块看起来很相似,但它们并不相同,请参阅比例。matlab的产量是理论结果的十倍。为什么?
matlab代码在这里。
clc;
clear all;
close all;
t = 0:0.1:50;
x1 = exp(-t);
x2 = sin(t);
x = conv(x1,x2);
x_theory = 0.5.*(exp(-t) + sin(t) - cos(t));
figure(1)
subplot(313), plot(t, x(1:length(t))); subplot(311), plot(t, x1(1:length(t))); subplot(312), plot(t, x2(1:length(t)))
figure(2)
subplot(313), plot(t, x_theory); subplot(311), plot(t, x1(1:length(t))); subplot(312), plot(t, x2(1:length(t)))
解决方案
conv
做离散时间卷积,它不做数学积分函数。从数值上讲,这基本上意味着将两个信号的结果多次相乘和相加,每个点一次,其中一个信号有一个小的偏移。
如果您考虑这一点,您会意识到信号的采样会产生影响。即,如果每 0.1 个值或 0.001 个值有一个点,则乘以的点数不同,因此结果的值不同(不是形状)。
因此,每次进行数值卷积时,总是需要乘以采样率,以“归一化”操作。
只需更改您的代码即可
sampling_rate= 0.1;
t = 0:sampling_rate:50;
x = conv(x1,x2)*sampling_rate;
推荐阅读
- android - savedInstanceState ViewModel 在 android 中存储数据的位置?
- node.js - 接收无法 GET/错误 NodeJS 和 Express
- r - 如何从密度 ggplot2 图中排除 NA?
- java - 如何使用 IntelliJ 从 Selenium Java 自动化项目构建 jar 文件
- python - 在 Django Rest Framework 中提供主键后检索用户详细信息
- javascript - JS语句问题:在'for循环'中替换'return'以从'for循环'中获取所有值
- php - 在我创建动态选择选项的地方变得不确定
- matlab - MATLAB 新手。获取错误第一个输入参数必须是函数句柄。在尝试整合当前功能时
- javascript - 父内容出现在子 sub_routes
- arrays - 在数组中声明可选的最后一个元素?