How do i do this in MATLAB?

조회 수: 2 (최근 30일)
Nathan Jaqua
Nathan Jaqua 2019년 9월 29일
답변: Walter Roberson 2019년 9월 29일
I've got 2 noise vectors(x1 and x2) that I need to add to the pwelch command but I can't figure out what's wrong with my code. How do I add the 2 vectors together for the pwelch command? please help. code is below
f1 = 4000; %sinusoidal frequency
A1 = 0.2; %amplitude
f2 = 5000; %sinusoidal frequency
A2 = 0.25; %amplitude
t1 = 0:1/f1:5-1/f1;
t2 = 0:1/f2:5-1/f2;
x1 = A1*cos(2*pi*f1*t)+randn(size(t1));
x2 = A2*cos(2*pi*f2*t)+randn(size(t2));
x = x1+x2;
[y,Fs]=audioread('doorbell.wav');
[pxx,f] = pwelch(x,500,300,500,Fs);
plot(f,10*log10(pxx)); xlabel('Frequency (Hz)'); ylabel('PSD (dB/Hz)');

채택된 답변

Walter Roberson
Walter Roberson 2019년 9월 29일
>> size(t1)
ans =
1 20000
>> size(t2)
ans =
1 25000
Your x1 is the same size as t1, and your x2 is the same size as t2. x1+x2 is therefore attempting to add a vector of length 20000 and a vector of length 25000.
You are using the wrong approach.
f1 = 4000; %sinusoidal frequency
A1 = 0.2; %amplitude
f2 = 5000; %sinusoidal frequency
A2 = 0.25; %amplitude
secs = 5;
N = lcm(f1*secs, f2*secs); %lowest common multiple
t = linspace(0, secs, N+1);
t(end) = [];
x1 = A1*cos(2*pi*f1*t)+randn(size(t));
x2 = A2*cos(2*pi*f2*t)+randn(size(t));
You should consider whether the randn should be at full magnitude or should be multiplied by A1 or A2 . As it is you have 5 times as much noise as you have signal for x1.
You do not really need the full lcm() samples over 5 seconds, but using the lcm() ensures that there are an exact integer number of cycles for each of f1 and f2 in those 5 seconds.
I am, though, seeing some clipping in cos(2*pi*f1*t) that I cannot quite explain at the moment.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Parametric Spectral Estimation에 대해 자세히 알아보기

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by