作业帮 > 综合 > 作业

Matlab 一下这个函数该如何表达

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/11 16:36:07
Matlab 一下这个函数该如何表达
我想实现 下面这个函数 但是没有办法得到数字解
函数是:Xe(jw)=∑x[n]*e^(-jwn) 其中n ∈(-20,20) 且n 为整数
其中的变量 :x[n] 为一个数组 比如说 x[n]=[2,3,1,4];
j 为虚数单位 ; e 为自然对数的底数 ; w 为 变量; n ∈(-20,20)
当我取 w ∈(-20,20) 即 w=-20:0.1:20 的时候得到一组对应的 Xe(jw) 的一组数值解; 这该如何实现
有点类似DFT运算呢,如果不考虑运算速度的话还是好实现的.
首先函数等号左边应该是X(e^jw)吧?
等号右边e的负jwn次方可以根据欧拉公式
e^jx=cosx+jsinx
变换成正弦和余弦函数,比如说w=-20则X(e^jw)=∑x[n]*[cos(20n)+jsin(20n)] n ∈(-20,20)根据你提供的条件x[n]是一个实数序列,则程序需要两个变量分别存储实部和虚部,采用循环方式从-20加到20,此为第一层循环,得到X(e^j(-20)),然后在将w从-20循环到20依次得到各个w值对应的函数值,最后便可以用plot函数将这些值话出来,当然程序执行到这一步函数的结果将虚部和实部分开来存放的,可以求把实部虚部分别平方求和后开放得到复数的幅值然后画点,得到幅频谱,也可以求出不同w对应的相位然后画点得到相位谱.
第一,对于你的问题中w的取值间隔还有待商榷.第二,这种计算方法比较费时,不适于实时分析,当然耗时也是相对而言,如果x[n]是实数序列的话程序执行完也要不了多久.
如果还不明白的话可以参考一下数字信号处理的DFT(离散傅里叶变化)部分和FFT快速算法部分.
这个答案只是探讨问题的解决方案,如下程序供参考:
function Y=myfun(X,w)
Y=[];n=1:length(X);
for m=1:length(w)
Y=[Y,X.*exp(-1*w(m)*sqrt(-1)*(n-1)/2)];
end
保存此函数为myfun.m文件,当你给定数组X和w时,调用函数输出的就是所求.
恳请验证!