首页 > 其他分享 >LTI系统,已知系统输入和输出,求脉冲响应

LTI系统,已知系统输入和输出,求脉冲响应

时间:2023-05-17 09:44:48浏览次数:52  
标签:fs 卷积 fft 系统 len2 脉冲响应 h1 LTI

 

https://www.ilovematlab.cn/forum.php?mod=viewthread&tid=298897&ordertype=1&_dsign=961ef8cf

问题描述:一个LTI系统,输入序列为x(n),输出序列是y(n),均已知。求系统的脉冲响应。
我的思路是这样的:
设系统响应为h(n),那么有:
        y(n) = x(n)*h(n)
即是将输入信号和脉冲响应做卷积,得到输出信号。
两边做fft,有:
       Y(w) = X(w).*H(w)
则有:
       H(w) = Y(w)./X(w)
然后两边再同时取ifft。左边即是h(n).
也就是说,要求h(n),我们只需要求得y(n)和x(n)的fft,然后做点除,最后做ifft即可。
——实际上,是这样的么?

我用下面的例子验证:
clear,clc

f = 64;
fs = 1024;
n = 0:1/fs:1-1/fs;
len = length(n);
x = sin(2*pi*f*n);

xw = fft(x,len);
xw1_inv = 1./xw;

h = [1 2 3 4 ];
y = conv(x,h);

h1 = ifft(fft(y,len).*xw1_inv,'symmetric');
figure
stem(h1)


我想先用x(n)和h(n)做卷积得到y(n),然后用上面的方法,将y(n)和x(n)做fft后点除,再ifft解出h(n).
但是,结果却完全是乱的。不仅值不等,连长度也不等!原来脉冲响应是4点的,得到的h1是频谱长度的,因为ifft反解时点数默认是和频谱点数相等。改为
h1 = ifft(fft(y,len).*xw1_inv,4,'symmetric');
还是不等。

那么,我的问题出在哪里?是原来的推理不对,还是验证的编程不对呢?恳请大家指教。谢谢。

 

这里的线性卷积不知道有没问题,这个例子固然没问题,但是当我将脉冲响应变的很长时,会有计算不准出现。具体实验这里没记录下来。
有些地方说如果输入是周期信号,那么这里要用圆周卷积。但没有详细介绍。
关于已知系统输入和输出求解脉冲响应的问题,应该还有诸多解法,比如用胡功率谱和自功率谱法。欢迎大家指教、讨论。
另外,如果有人在做正弦扫频信号测量系统频率响应相关课题,可以深入研讨。

 

还是自己回复了吧,最近人品不够,发帖连个回音都没。在别的地方发了一下,还好有人讨论下。自己想了一下,应该是解决了。同意的记得点赞哈 呵呵
程序修改如下:

f = 64;
fs = 1024;
n = 0:1/fs:1-1/fs;
len1 = length(n);
x = sin(2*pi*f*n);

h = [1 2 3 4 ];
stem(h);

y = conv(x,h);

len2 = length(y);
xw = fft(x,len2);
xw1_inv = 1./xw;


h1 = ifft(fft(y,len2).*xw1_inv,'symmetric');
figure
stem(h1(1:len2-len1+1))
两个图一样,这个问题应该算解决了吧。原帖出错的原因是,时域信号做线性卷积,对应到频域就是扩展的点乘,也就是将激励和响应先补零(按照线性卷积长度)再变换到频域,再点乘。而在最后恢复响应时,将算得的响应后面的一定长度(激励的长度)去掉即可。这应该算一种计算脉冲响应你的方法吧。查阅一些资料上,有直接用矩阵逆运算的,或者说是逐步迭代反解。借助于matlab的卷积和fft、iff,这种方法应该要方便和实用多了。

 

还是自己回复了吧,最近人品不够,发帖连个回音都没。在别的地方发了一下,还好有人讨论下。自己想了一下,应该是解决了。同意的记得点赞哈 呵呵
程序修改如下:

f = 64;
fs = 1024;
n = 0:1/fs:1-1/fs;
len1 = length(n);
x = sin(2*pi*f*n);

h = [1 2 3 4 ];
stem(h);

y = conv(x,h);

len2 = length(y);
xw = fft(x,len2);
xw1_inv = 1./xw;


h1 = ifft(fft(y,len2).*xw1_inv,'symmetric');
figure
stem(h1(1:len2-len1+1))
两个图一样,这个问题应该算解决了吧。原帖出错的原因是,时域信号做线性卷积,对应到频域就是扩展的点乘,也就是将激励和响应先补零(按照线性卷积长度)再变换到频域,再点乘。而在最后恢复响应时,将算得的响应后面的一定长度(激励的长度)去掉即可。这应该算一种计算脉冲响应你的方法吧。查阅一些资料上,有直接用矩阵逆运算的,或者说是逐步迭代反解。借助于matlab的卷积和fft、iff,这种方法应该要方便和实用多了。

 

还是自己回复了吧,最近人品不够,发帖连个回音都没。在别的地方发了一下,还好有人讨论下。自己想了一下,应该是解决了。同意的记得点赞哈 呵呵
程序修改如下:

f = 64;
fs = 1024;
n = 0:1/fs:1-1/fs;
len1 = length(n);
x = sin(2*pi*f*n);

h = [1 2 3 4 ];
stem(h);

y = conv(x,h);

len2 = length(y);
xw = fft(x,len2);
xw1_inv = 1./xw;


h1 = ifft(fft(y,len2).*xw1_inv,'symmetric');
figure
stem(h1(1:len2-len1+1))
两个图一样,这个问题应该算解决了吧。原帖出错的原因是,时域信号做线性卷积,对应到频域就是扩展的点乘,也就是将激励和响应先补零(按照线性卷积长度)再变换到频域,再点乘。而在最后恢复响应时,将算得的响应后面的一定长度(激励的长度)去掉即可。这应该算一种计算脉冲响应你的方法吧。查阅一些资料上,有直接用矩阵逆运算的,或者说是逐步迭代反解。借助于matlab的卷积和fft、iff,这种方法应该要方便和实用多了。

 

 

标签:fs,卷积,fft,系统,len2,脉冲响应,h1,LTI
From: https://www.cnblogs.com/jiangkejie/p/17407596.html

相关文章

  • Qt编写视频监控系统73-不同视频流不同类型的判断和解析(http/m3u8/rtsp/rtmp等)
    一、前言这套视频监控系统大概从2018年起步整体框架,一步步积累到现在,中间经历了无数次的各种视频文件、视频流、视频设备的播放测试,比如光视频文件就有mp4/wmv/rmvb/mkv/avi等格式,视频设备有本地USB摄像头、桌面等,视频流有rtmp/rtsp/rtp/http等,其中http开头的就有视频文件和视频......
  • 系统2
    packagecom.example.accessingdatajpa;importjakarta.persistence.Entity;importjakarta.persistence.GeneratedValue;importjakarta.persistence.GenerationType;importjakarta.persistence.Id;@EntitypublicclassCustomer{@Id@GeneratedValue(strategy=Gene......
  • 关于centos7操作系统RX-DRP值每隔30s加1问题
    现象如下图所示:RX-DRP每隔30s,自动+1原因分析CentOS7系列操作系统在处理LLDP等不能直接解析的二层数据帧的过程中,会将ifconfigeth0或者netstat-i等输出信息中的rx_drop值增加。其主要特点为每隔30s(上层交换机LLDP数据帧发送频率)加1、但是采用tcpdump等软件抓包过程的过程中rx......
  • 计算机操作系统的基本概念及功能
     GUI(图形用户界面):如windows、安卓、ios的图形操作界面;命令接口(可以直接使用):联机命令接口特点是说一句做一句,脱机命令接口是说一堆做一堆;程序接口:系统调用,用户通过程序进行间接使用......
  • 智能排班系统--今日学习总结
    今天我完成了android端连接mysql并且实现增、删、改、查的每个操作,为实现web端和android端的信息互通奠定了基础,在此基础上,能够实现员工安卓端向web管理端的请假信息的传递。明天我要在安卓端实现信息通知推送功能,能够及时提示员工请假的过程以及结果。packagecom.example.pai......
  • 【Cocos2d游戏开发之七】添加/删除系统组件,并解决View设置透明会影响View中的其他组件
    好像有段时间没有更新了,主要项目比较着急,不过现在cocos2d基本算是全拿下了,进展很顺利,那么在这里主要给大家介绍下一些Himi遇到的问题;本章介绍两个知识点:        1.在Cocos2d中添加系统组件;(本例中添加UIView并嵌套一些View)  “   如何把背景图片设置为半透明......
  • DBeaver 22.3.0 Ultimate最新和谐版本(windows+linux)
    概述 DBeaver是一款流行的开源数据库管理工具,支持多种数据库,如MySQL、PostgreSQL、SQLite、Oracle、MicrosoftSQLServer等。它提供了一个统一的界面,使得用户能够方便地连接、管理和查询各种类型的数据库。功能支持多种数据库:DBeaver支持多种数据库引擎,如MySQL、PostgreSQL......
  • windows系统下校验测序数据MD5?
    本地上传测序文件到Linux系统,做md5时发现有少数文件失败。$catmd5.check84305_FDSW190448400-1a_1.fq.gz:OK84305_FDSW190448400-1a_2.fq.gz:FAILEDmd5sum:WARNING:1computedchecksumdidNOTmatch可能是上传有误,也可能是本地测序文件本身不完整。但是文件太大,在没......
  • C/C++银行账户管理系统程序[2023-05-06]
    C/C++银行账户管理系统程序[2023-05-06]编写一个银行账户管理系统程序。银行客户信息以一个账户一条记录的形式存储,每个账户记录包含的信息有身份标识号(ID)、姓名、电话、电子邮箱、身份证号、银行卡号、账户余额等信息。具体功能如下:对于银行客户实现①开户,若无账户,申请开户......
  • 基于C语言开发一个图书管理系统[2023-05-16]
    基于C语言开发一个图书管理系统[2023-05-16]2020级计算机应用专业毕业设计题目及要求一、设计内容及要求:基于C语言开发一个图书管理系统,完成系统分析、设计和开发。设计目的:设计一个可以实现增删改查、借书还书的图书借阅管理系统。功能要求:图书管理系统一般包括:借书还书、......