使用matlab信号的卷积

79(30天)
Jiby
Jiby 2022年9月27日
编辑: 保罗 2022年10月3日
文件的心电图。txt”是人类的心电图(EKG)记录损坏很大的噪音。这是记录在30秒采样频率= 200 Hz。
)此文件加载到Matlab或python和把一个不错的情节在水平轴作为时间的函数。
numberOfSeconds = 30
samplingRate = 200%样本每秒。
numberOfSamples = samplingRate * numberOfSeconds
t = linspace (0 numberOfSeconds numberOfSamples);
v =负载(“ekg.txt”,“ascii”);
%的情节:
情节(t, v);
b)在线性系统分析中,我们常常使用卷积应用“过滤器”(系统的脉冲响应的另一个名称)输入信号。创建自己的1 d因果长度25日移动平均滤波器,缠绕的心电图信号。图原文件和生成的信号在同一图2 x1网格使用次要情节命令。比较两个信号。过滤器做了什么呢?
windowWidth = 25;%移动平均滤波器长度
举止优雅的人= movmean (v, windowWidth);
情节(t,举止优雅的人);
w = conv(举止优雅的人,v);
情节(w)
windowWidth = 25;%移动平均滤波器长度
内核= 1 (windowWidth 1) / windowWidth;
出=过滤器(内核、1 v);
情节(t);
k = conv (v,“相同”);
情节(k);
次要情节(1,1);
情节(t, v);
次要情节(3、1、2);
情节(t,举止优雅的人);
次要情节(3,1,3);
情节(w);
次要情节(1,1);
情节(t, v);
次要情节(3、1、2);
情节(t,举止优雅的人);
次要情节(3,1,3);
情节(k);
我可以在以下问题上得到帮助吗?
c)在b)过滤器原始信号延迟?由多少?你能调整你的移动平均滤波器,它仍然具有长度25日,但没有延迟的信号吗?这还算是因果吗?
d)反卷积的顺序(即你在c)。,convolve the input with the filter instead of the filter with the input). What happens? What convolution property does this demonstrate?
e)创建一个过滤器来延迟5秒的信号。由此产生的信号卷积信号和阴谋。编写一个简单的表达式延时信号卷积y (t),使用x (t)作为输入声音文件和内核的数学表达式。
f)创建一个时间反演版本的原始信号。情节和描述结果。你能发明一个过滤器来创建时间反演通过卷积信号?为什么或为什么不呢?

接受的答案

图像分析
图像分析 2022年9月28日
@Jiby 你的代码是不正确的。创建一个因果滤波器,一个只取决于当前和之前的值,你需要一个assymmetric内核,而不仅仅是一个统一的盒子过滤器1。还记得 卷积翻转内核 为了得到一个因果滤波器需要的内核在上半场0和1的 第二个 一半。像12 0,那么13的。
接下来,如果您正在使用 conv 做一个完整的卷积(即不使用相同的选项)得到一个数组,只要信号长度+内核长度的总和。我不相信这个“延迟”的信号,它只是有不同的元素是时间= 0点。而不是第一个元素,它是半内核窗口宽度到输出向量。所以25元素内核t = 0时发生在指数13和索引1是负的时间。我不会说,信号延迟如果使用因果滤波器,只是信号t = 0次有点进数组,它有不同的/过滤值。信号可能看起来被推迟取决于你的内核是什么。让我们来简单的δ函数的情况下,卷积,返回给你相同的数组。如果内核25岁长,12 0 1然后12 0,1是中间的内核和没有任何延迟。但是记住t = 0时间将会在13号元素的输出,而不是输出的第一个元素。现在,如果你把1而不是在中间的左边或右边的中间,它将看起来像信号被推迟或高级,因为你只会得到相同的信号与原始但开始之前或之后元素13 (t = 0点之前或之后)。
我知道这很令人困惑,我相信你会需要重读这个几次,但是我希望它有帮助。
5个评论
图像分析
图像分析 2022年9月29日
是的,这将是一个不对称的过滤器。如果你使用conv,未来的信号将是一个模糊的版本值(相反的因果关系)。记住conv()翻转你的内核。

登录置评。

答案(1)

保罗
保罗 2022年9月28日
编辑:保罗 2022年9月29日
嗨Jiby,
对b部分),您可能想要考虑:
b)在线性系统分析中,我们常常使用卷积应用“过滤器”(系统的脉冲响应的另一个名称)输入信号。创建自己的1 d因果长度25日移动平均滤波器,缠绕的心电图信号。图原文件和生成的信号在同一图2 x1网格使用次要情节命令。比较两个信号。过滤器做了什么呢?
问题要求定义一个一维因果滤波器,将其应用于数据,并分析结果
这里,我们应用 movmean 的数据。但如果你看看文档页面,和/或尝试一些简单的例子,您将看到movmean,使用的问题,是一个非因果的操作。同时,必须注意它如何对待样本从输入数据的边缘。再一次,检查文档页面,尝试一些简单的例子。
windowWidth = 25;%移动平均滤波器长度
举止优雅的人= movmean (v, windowWidth);
情节(t,举止优雅的人);
即使举止优雅的人是期望的结果,目前还不清楚为什么会再次与输入卷积结果。
w = conv(举止优雅的人,v);
情节(w)
这部分看起来很合理。它来自 过滤器 吗?我认为它是,但在Matab更常见的代表polymomial作为一个行向量,而不是一个列向量。
windowWidth = 25;%移动平均滤波器长度
内核= 1 (windowWidth 1) / windowWidth;
出=过滤器(内核、1 v);
情节(t);
当然,问题要求使用卷积,这让我们在这里。不幸的是,相同的选择并不是你想要的东西在这里。相反,看看“全部”选项,记住结果将是超过输入数据(conv '全部'假设根据需要补零),所以你必须调整结果。
k = conv (v,“相同”);
情节(k);
我建议你试着与一个小得多的windowWidth工作这个问题,说3,和一个简单的输入向量,说v = 1:10,所以你可以很容易地比较结果从这些不同的代码片段直接,“手工”计算。
3评论
保罗
保罗 2022年10月2日
编辑:保罗 2022年10月3日
如果它仍然是值得继续讨论用一个简单的示例....
考虑一个简单的过滤器输出y [n]当前和以前的平均四个输入:
y [n] = 0.2 * (u [n] + u (n - 1) + (2) + u [n] + [4])
这个过滤器是因果的,因为输出不依赖于未来的输入。它的冲动,或单位脉冲响应是通过检查发现:
h1 [n] = 0.2, 0 < = n < = 4
h1 [n] = 0,否则
定义这个滤波器结构:
h1。瓦尔斯= 0.2 *(1、5)的;
h1。n = 0:4;
明白h1。vals = 0 n不存储在h1.n离散时间点。
次要情节(511)
茎(h1.n h1.vals);
ylabel (“h1 [n]”)
让我们定义一个简单的输入序列
u [n] = 1 + n, 0 < = n < = 9
你[n] = 0,否则
u。n = 0:9;
u。瓦尔斯= 1 +联合国;
次要情节(512)
茎(联合国、u.vals);
ylabel (“你[n]”)
因为h1 [n]和u [n]都是有限时间信号,我们可以使用 conv 卷积来计算他们的总和(用默认选项“完整的”)
y1 [n] u = h1 [n] * [n]
y1 [n]只是的价值
日元。瓦尔斯= conv (h1.vals u.vals);
相应的离散点
日元。n = h1.n(1) +联合国(1)+(0:(元素个数(y1.vals) 1));
h1 Verifty一次,事实上,执行所需的平均,然后阴谋
[y1.vals y1.n = = 6)意味着(u.vals(找到(联合国= = 6))+ (4:0)))
ans = 1×2
5个5
次要情节(513)
茎(y1.n y1.vals)
ylabel (“y1 [n]”)
现在,让我们来定义一个不同的,5点平均滤波,输出,y [n], u [n]的平均值,前后两个输入的样本
y [n] = 0.2 * (u (n + 2) + u [n + 1] + [n] + u (n - 1) + u [2])
这个过滤器显然非因果因为输出取决于未来的输入。再次,通过检查,其单位脉冲响应
h2 [n] = 0.2, 2 < = n < = 2
h2 [n] = 0,否则
作为一个非因果滤波器必须如此,单位脉冲响应非零的n值< 0
h2。瓦尔斯= 0.2 *(1、5)的;
h2。n = 2:2;
次要情节(514)
茎(h2.n h2.vals)
ylabel (“h2 [n]”)
注意,h2。vals = = h1。瓦尔斯,但离散时间点对应于这些值是不一样的。再一次,使用conv输出的计算值和设置相应的离散时间点
y2。瓦尔斯= conv (h2.vals u.vals);%明显,这些值作为y1.vals相同
y2。n = h2.n(1) +联合国(1)+(0:(元素个数(y2.vals) 1));
验证单点和阴谋
[y2.vals y2.n = = 6)意味着(u.vals(找到(联合国= = 6))+ (2:2)))
ans = 1×2
7.0000 - 7.0000
次要情节(515)
茎(y2.n y2.vals)
ylabel (“y2 [n]”)
包含(“n”)
集(get (gcf,“孩子”),“XLim”15 [3])

登录置评。

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!