2013-02-20 156 views
1

我的代码如下,我想要做的是获得5个独立的ft数组,并将它们添加到for循环中,以便我可以播放它们叠加的所有声音。谢谢你的帮助!在Matlab中为For循环中汇总不同的值

`fs = 44100; % standard sampling rate 
T = 1/fs; % sampling period 
t = 0:T:5; % time vector 
conv = 1E5; % conversion factor for frequencies 

phi=2*pi*rand(1,1); % random phase 

Msun = 2E30; % mass of the sun 
Rsun = 6.9599E5; % radius of the sun 
M = 1E32; % mass of target star 
R = 7E5; % radius of target star 
Teff = 6000; 

% frequency of maximum oscillation mode 

vmax = 3090*(M/Msun)*(R/Rsun)^(-2) * (Teff/5777)^(-1/2); 

% difference between consecutive frequencies 

dv = 134.9*(M/Msun)^(1/2) * (R/Rsun)^(-3/2); 


for n = 0:1:4 

    vi = vmax + n.*dv; % pulsation mode frequencies 
    ft = sin(2*pi.*vi.*t + phi); % sinusoidal perturbation function 
    cft = conv.*ft; % converted perturbation for human audible range 
    sound(cft, fs) % play sound of each frequency mode 

end 

`

+0

我只是测试你的代码,它的工作原理我可以听到5种不同的声音,但叠加,你不加在一起,保存在矩阵和超矩阵 – Engine 2013-02-20 20:29:40

回答

1

你需要总结个人的声音获得的叠加。刚才做cft = 0;之前的循环,然后cft = cft + conv.*ft;里面。循环后,请致电sound(cft, fs)

+0

啊,是的,应该想到那。谢谢! – 2013-02-20 20:42:54