求了当输入信号和输出信号给定时LTI系统的脉冲响应。

260次浏览(过去30天)
您好,我是Matlab的新手,不知道如何解决下面的问题,提前感谢您的友好解释。
将信号序列x(n) ={1,1,1}应用于脉冲响应未知h(n)的LTI系统,观测输出为y(n) ={1,4,8,10,8,4,1},编写matlab程序求出h(n)。

答案(2)

Yazan
Yazan 2021年8月12日
编辑:Yazan 2021年8月12日
下面是用3种等效方法估计脉冲响应的代码:
clc,清晰
inpSig = [1 1 1];
outSig = [1,4,8,10,8,4,1];
将带零的输入和输出信号填充到一个公共长度(1024个样本)
comLength = 1024;
inpSig, 0 (1, comLength - length(inpSig))];
outSigPad = [outSig, zero (1, comLength - length(outSig))];
%方法1
%直接用Matlab估计脉冲响应
这个函数使用韦尔奇平均周期图来估计信号的psd
我在这里使用矩形窗口,重叠为0%(相当于常规fft)
[H1, f] = tfestimate(inpSigPad, outSigPad, rectwin(comLength), 0, [], 1,“中心”);
%方法2
您可以估计交叉和自动psd使用Matlab
%假设采样频率是单一的
pxx = cpsd(inpSigPad, inpSigPad, rectwin(comLength), 0, [], 1,“中心”);
pxy = cpsd(inpSigPad, outSigPad, rectwin(comLength), 0, [], 1,“中心”);
传递函数的%定义
H2 = pxy./pxx;
数字
情节(f, mag2db (abs (H1)));
持有
情节(f, mag2db (abs (H2)),“——”
%方法3
使用FFT估计输入和输出的PSD
X = fftshift(fft(inpSigPad));
Y = fftshift(fft(outSigPad));
%重新排序样本使频率响应在(-fs/2, fs/2]之间
X = [X(2:end), X(1)];
Y = [Y(2:结束),Y(1)];
H3 = y (:)./ x (:);
情节(f(1:30:结束),mag2db (abs (H3(1:30:结束))),“o”);网格
包含(“频率-赫兹”), ylabel (“幅度- dB”
传奇({“使用tfestimate”“使用运行cpsd”“使用FFT”})

保罗
保罗 2021年8月13日
编辑:保罗 2021年8月13日
我们知道y[n] = h[n] * x[n]其中*表示卷积。有x[n]和y[n]。设h[n]记为[h0 h1 h2 etc.]。利用卷积和的定义,用x[n]和h0定义y[0]。然后就能解出h0。重复以x[n]、h0和h1定义y[1]。解出h1。重复此步骤直到完成。回忆一下卷积和的定义:
信谊N k整数
信谊Y (n) h(n) x(n)
Y (n) = symsum(x(k)*h(n-k),k,-inf,inf)
y (n) =
我们可以做一个标准的假设,当n < 0时,x[n] = y[n] = 0,而没有任何关于x和y索引的其他信息
Y (n) = symsum(x(k)*h(n-k),k,0,无穷大)
y (n) =
但我们也知道x[n] = 0对于n> 2。因此
Y (n) = symsum(x(k)*h(n-k),k,0,2)
y (n) =
现在你可以写一个程序来解这个未知h[n]的方程。在这样做的过程中,您必须弄清楚将什么值赋给h[-1]和h[-2],并且还考虑到matlab数组使用基于1的索引,但上面的开发假设数组x和y中的第一个值对应于n = 0。
一旦你得到一个结果,你可以检查它是正确的使用
医生deconv

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!