如何从 n×m 矩阵的元素创建 n 个正弦波?

问题描述 投票:0回答:1

我正在 MATLAB 上编写一个程序,该程序生成 13 个不同幅度、持续时间和频率的波形。每个波形重复 5 次,这意味着我总共有 65 次“试验”。

每次试验的总长度 = 1.5 毫秒。采样频率 = 4 kHz。我希望波从 0.5 毫秒开始。在波开始之前以及在其偏移之后,我希望振幅为零(即波之前和之后的“平线”)。

我创建了一个 65x3 矩阵,其中各列表示 65 个正弦波的频率 ('hz')、幅度 ('a') 和持续时间 (ms)。每行表示一个波。

我想使用这个 65x3 矩阵中包含的信息来生成 65 个振幅为“a”、频率为“hz”、持续时间为“ms”的正弦波。具体来说:每个波应使用矩阵第 n 行中指定的参数 (hz,a,ms) 创建。例如。如果第 1 行 = 100, 1, 50...这意味着我想生成持续 50 毫秒的 100 Hz 正弦波(振幅 = 1)。

我尝试构建一个for循环来解决这个问题。但是,循环返回许多错误,我不知道如何解决它们。我已将代码调整为不返回错误;然而,我最近的尝试似乎生成了 65 个持续时间相等的波,而实际上每个波的持续时间应该是矢量“ms”中规定的时间。

这是我最新的尝试,尽管是新手,但仍然不成功:(请注意,“试验”代表上面讨论的 65x3 矩阵;mA = 幅度)。

hz=trials(:,1); mA=trials(:,2); ms=trials(:,3); 
trials_waves=zeros(65,500); % the max duration (= 500ms); unsure of this part?
for n = 1:size(order,1)
    trials_waves = mA*sin(2*pi*hz*0:ms);
end
matlab for-loop trigonometry
1个回答
1
投票

制作正弦波

对于初学者来说,让我们制作一个具有可变速率、幅度和长度的正弦波。

Fs = 4e3; % sample rate of 4 kHz
Sr = 100; % example rate
Sa = 1;   % amplitude
St = 10e-3; % signal duration is 10 ms

% To create a sine wave in MATLAB, I'm going to first create a vector of time, 
% `t`, and then create the vector of sine wave samples.

N = St * Fs; % number of samples = duration times sample rate;
t = (1:N) * 1/Fs; % time increment is one over sample rate

% Now I can build my sine wave:

Wave = Sa * sin( 2 * pi * Sr * t );
figure; plot(t, Wave); 

注意!这对于全波长来说几乎不够,所以要小心缓慢的速率和短的时间长度。

产生许多正弦波

为了将其变成循环,我需要索引输入变量的向量。使用我之前的例子:

Fs = 4e3; % sample rate of 4 kHz
Sr = [100 200 300]; % rates
Sa = [1 .8 .5];   % amplitudes
St = [10e-3 20e-3 25e-3]; % signal durations

nWaves = length(Sr);

N = max(St) * Fs; % number of samples = duration times sample rate;
t = (1:N) /Fs; % time increment is one over sample rate
% initialize the array
waves = zeros(nWaves, N);

for iWaves = 1:nWaves
    % index into each variable
    thisT = (1:St(iWaves) * Fs) * 1/Fs;
    myWave = Sa(iWaves) * sin( 2 * pi * Sr(iWaves) * thisT );
    waves(iWaves,1:length(myWave)) = myWave;
end
figure; plot(t, waves); 

您还有一块,在信号的前端进行零填充,有很多方法可以做到这一点,一种方法是按照我描述的方式构建信号,然后在前面连接适当数量的零您的信号阵列。

© www.soinside.com 2019 - 2024. All rights reserved.