다양한 진폭, 지속 시간 및 주파수의 13 개 파형을 생성하는 프로그램을 MATLAB에 작성하고 있습니다. 각 파형이 5 번 반복되므로 총 65 번의 '시행'이 있습니다.
각 시도의 총 길이 = 1.5ms. 샘플링 주파수 = 4kHz. 파도가 0.5ms에서 시작되기를 바랍니다. 파동이 시작되기 전과 그 오프셋 이후에 나는 진폭이 0이되기를 원합니다 (즉, 파동 전후의 '평탄 선').
65x3 행렬을 만들었습니다. 여기서 열은 65 사인파의 주파수 ( 'hz'), 진폭 ( 'a') 및 지속 시간 (ms)을 나타냅니다. 각 행은 단일 웨이브를 나타냅니다.
이 65x3 매트릭스에 포함 된 정보를 사용하여 진폭 'a', 주파수 'hz'및 기간 'ms'의 65 개의 사인파를 생성하고 싶습니다. 구체적으로 말하자면, 각 웨이브는 행렬의 n 번째 행에 지정된 매개 변수 (hz, a, ms)를 사용하여 생성되어야합니다. 예를 들어 행 1 = 100, 1, 50 ... 이것은 50ms 동안 지속되는 100Hz 사인파 (진폭 = 1)를 생성하고 싶다는 의미입니다.
이 문제를 해결하기 위해 for 루프를 구성하려고 시도했습니다. 그러나 루프는 여러 오류를 반환하며 해결 방법을 모르겠습니다. 오류가 반환되지 않도록 코드를 수정했습니다. 그러나 내 최근 시도는 동일한 지속 시간의 65 개의 파동을 생성하는 것 같습니다. 사실 각 파동의 지속 시간은 벡터 'ms'에 명시된 것이어야합니다.
내 최근의 시도는 비록 초보자이지만 여전히 성공하지 못한 시도입니다. ( 'trials'는 위에서 논의한 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
좋은 출발을하신 것 같습니다. 해결 방법으로 더 나아가도록 도와 드리겠습니다.
사인파 만들기
우선 가변 속도, 진폭 및 길이를 가진 사인파를 만들어 보겠습니다.
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);
여전히 하나의 조각이 더 있습니다. 신호의 프런트 엔드를 제로 패딩하는 방법은 많습니다. 한 가지 방법은 제가 설명한 방식으로 신호를 생성 한 다음 적절한 수의 0을 앞에 연결하는 것입니다. 신호 배열. 막히면 새로운 질문을 자유롭게하십시오. 행운을 빕니다!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다