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

抱歉,如果提供的信息很少。这是我第一次在这个网站上提问。如果需要,我可以提供更多信息。

谢谢您的帮助。

最好的,H

4

1 回答 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); 

你还有一块,零填充你的信号的前端,有很多方法可以做到这一点,一种方法是按照我描述的方式构建信号,然后将适当数量的零连接到前面你的信号阵列。如果您遇到困难,请随时提出新问题。祝你好运!

于 2016-12-13T14:52:41.780 回答