我很想知道是否有更好的方法來表達以下回圈:
To = 1;
fileName = "fourier/signal.txt";
spectrum_left(abs(spectrum_left) < 1e-3) = 0 0i;
Ts = 1 / Fs;
t = 0:Ts:To-Ts;
signal = load(fileName, "-ascii");
Ns = numel(signal);
Fs = Ns / To;
fr = f(abs(spectrum_left) > 0)
a = abs(spectrum_left(abs(spectrum_left) > 0))
p = angle(spectrum_left(abs(spectrum_left) > 0))
signal_synth = 0;
len = length(a);
for i=1:len
a_i = a(i);
p_i = p(i);
f_i = fr(i);
s_i = a_i * cos(2*pi*f_i*t p_i)
signal_synth = signal_synth s_i;
end
任何建議都非常感謝。新年快樂!
uj5u.com熱心網友回復:
在 MATLAB 中,可以對陣列應用以句點字符 開頭的逐元素運算子(.)。我使用(:)運算子將向量轉換為列向量。請注意,這t是一個行向量,當它與列向量組合時,結果將是一個由隱式擴展形成的矩陣。為了對這些值求和,函式sum被使用,默認情況下沿矩陣的第一維求和,結果將是一個與 大小相同的行向量t。
signal_synth = sum(a(:) .* cos(2 * pi * f(:) .* t p(:)));
使用矩陣乘法的更緊湊的形式:
signal_synth = a(:).' * cos(2 * pi * f(:) .* t p(:));
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/405414.html
標籤:
上一篇:如何回圈遍歷陣列的3個元素?
