首页 > 编程知识 正文

信号的频域分析及matlab实现,线性系统时域响应分析matlab仿真

时间:2023-05-04 15:29:08 阅读:222956 作者:4717

今天做信号与系统实验,有用到这部分的知识,感觉这里面道道很多,因此拿出来与大家分享一下。

首先,我们知道matlab是一个很好的编程环境(或许这种解释性语言算不上编程?)。总之用matlab对系统的仿真尤其是对数字信号的处理简单便捷。

今天做了一下傅里叶变换求系统响应这部分的实验。matlab工具箱提供了傅里叶变换的符号求解函数,而数值方法求解则通过傅里叶变换的基本定义来实现,详细如下:

dt = 0.01;

t = 0:dt:8;

et = exp(-3*t).*uCT(t); % 激励信号,其中uCT(t)是我自己写的单位阶跃函数

N = 2000;k = -N:N;w = pi*k/(N*dt);

fet = dt*et*exp(-1i*t'*w);

下面卖点来了,怎样用频域分析法求系统的零输入响应。

我左思右想怎么都觉得用符号法来实现不怎么靠谱。我们知道频域分析法主要体现了系统函数的功能,即幅度加权和相位修正。用符号法的话,怎么能改变’sym’里的幅度和相位呢?

这里就体现了数值法比符号法的优势了,数字信号处理大都使用数值法也是这样的原因:编程人员自由度高,可以做任意的合法操作。

既然确定用数值法来完成频域分析求零输入响应,那么,我们要实现的还是那两句话:幅度加权,相位修正。

先得到系统函数,matlab提供了函数freqs,详细参数自己查吧,这里不啰嗦了。

假设我们已经求出来了系统函数记为H。幅度加权就很简单了。

设激励信号为e(t),那么加权后即为e(t) * abs(H)。

难点还在相位修正。

我们知道有这样的公式:F (w) = |F(w)| * exp(j * Ψ(w))。于是我们可以先求出Ψ(w),在对相位函数进行相位修正Ψ1(w) = Ψ(w) + angle(H(w)),最后计算exp(j * Ψ1(w))。则经过幅度加权和相位修正后的F1(w) = |F1(w)| * Ψ1(w)。在此基础上进行傅里叶逆变换得到零状态响应r(t)。

fai = log(fet./abs(fet))/1i;

fai = fai + angle(H);

fet = abs(fet).*exp(1i.*fai);

frt = abs(H).*fet;

dw = pi/20;

rt = dw*frt*(exp(-1i*t'*w))'/2/pi;

希望本文对正在研究傅里叶变换的同学有帮助吧。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。