MATLAB Answers

Why this message appears?

1 view (last 30 days)
clear all;
f1=200;
f2=250;
a1=1;
a2=1.5;
fe=10e3;
temps=0:1/fe:0.02-1/fe;
m1=a1*sin(2*pi*f1*temps);
m2=a2*sin(2*pi*f2*temps);
mt=m1*m2;
Error using *
Inner matrix dimensions must agree.

  0 Comments

Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 1 May 2019
It appears because you are multiplying two row vector using matrix mulktiplication.
You need to use element-wise array multiplication (using .* instead of *):
mt = m1 .* m2;

  10 Comments

Show 7 older comments
Star Strider
Star Strider on 2 May 2019
This takes the absolute values of the fft results, so the warning will not appear:
f1=200;
f2=250;
a1=1;
a2=1.5;
fe=10e3;
temps=0:1/fe:0.02-1/fe;
m1=a1*sin(2*pi*f1*temps);
m2=a2*sin(2*pi*f2*temps);
mt=m1.*m2;
n=length(temps);
freqs=0:fe/n:fe-1/n;
spec_mt=fft(abs(mt))/n;
figure(1)
subplot(211),plot(temps,mt);grid;
subplot(212),plot(freqs,abs(spec_mt));grid;
fmod=3e3;
xt=mt.*cos(2*pi*fmod*temps);
spec_xt=fft(abs(xt))/n;
figure(2)
plot(freqs,abs(spec_xt));grid;
yt=xt.*cos(2*pi*fmod*temps);
spec_yt=fft(abs(yt))/n;
y2=abs(spec_yt);
figure(3)
plot(freqs,y2);grid;
y2(200:n)=zeros(1,n-200+1);
spec_y2=abs(y2);
x2=real(ifft(y2));
figure(5)
subplot(211),plot(temps,mt);grid;
subplot(212),plot(temps,x2);grid;
You should probably shift the frequency axes so that ‘0’ is in the centre, or plot a one-sided fft. .
taher zaouali
taher zaouali on 4 May 2019
I've figured it out:
spec_mt=fft(mt,n);
plot(freqs,abs(spec_mt));grid;
the comma is between 2 parts of the fft not of the abs.
Thanks for the help.
Star Strider
Star Strider on 4 May 2019
As always, my pleasure.
I took the ‘n’ out of the fft call entirely. I was not certain where you wanted to put the ‘n’, or what you wanted to do with it. If ‘n’ is the same as the size as the time-domain vector, using it as the size of the fft does not change anything, because the length of the time-domain vector is the default length of the fft for that vector.

Sign in to comment.

More Answers (0)

Sign in to answer this question.