matlab避免使用for_MATLAB编程如何不用for循环

本文详细介绍了如何利用矩阵和向量操作改进MATLAB中DFT(离散傅立叶变换)的for循环效率,通过实例展示了dftmtx函数的工作原理,并提供了未归一化的矩阵生成方法。适用于初学者理解高级技巧,提升编程水平。
摘要由CSDN通过智能技术生成

for

循环

--

DFT

变换矩阵为例

缘起:大家都知道

MATLAB

中用

for

循环编写的代码执行起来效率不高,如何用矩阵和向量的运算提升效率对每一个

matlab

的人来说都是很有必要的,但是此项功夫高手一般不愿意给初学者讲,此功夫是高手和低手的分水岭,高手

们更是拿此功夫在初学者面前炫耀。本人当初怀着很恭敬的心向高手请教,高手笑笑说这要我自己编。出于让后来人

受益,帮助和我一样无助的求知者。本人今天话了一天时间将此问题研究下,并且将代码毫无保留的公布出来。希望

大家能够受益,阿弥陀佛!

上述

W

矩阵的第一列代表直流成分,第二列到最后一列是信号的交流成分,可以看出倍频关系!我以前不知道

DFT

可以通过矩阵表示。注意

matlab

dftmtx

实现上述

W

矩阵的时候没有用

1/sqrt(N)

进行归一化!可以通过

dftmtx(2)

验证,没有

1/sqrt(2)

1 DFT matrix

Hermitian

Nfft = 8;  xn=rand(1,Nfft);

y=dftmtx(Nfft)*xn.'

%

结果是个列向量

y=dftmtx(Nfft)*x.'

y=fft(x,Nfft)

是等价的

y = xn*dftmtx(Nfft)

%

结果是个行向量

y=fft(xn,Nfft) %

结果是个行向量

%dft

变换公式,

n

代表时域采样点,

k

代表频域采样点

Y(k)=sum(x.*exp(-j*2*pi*n*k))

相应的,

dftmtx(Nfft)

产生的矩阵中,

k

行,

n

列元素

=exp(-j*2*pi*k*n/Nfft)

x.'

相乘正好对应

fft

变换后的每个

频点值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值