
Problem in Addition of sine waves with different frequencies
13 views (last 30 days)
Show older comments
Asad Zubair
on 15 Oct 2016
Commented: Image Analyst
on 16 Apr 2023
What is my mistake here? bcz this code is giving error
fs=1000;
f1=30;
f2=60;
t1=1/f1;
t2=1/f2;
ta=0:(1/fs):10*t1;
tb=0:(1/fs):10*t2;
A=sin(2*pi*f1*ta);
B=sin(2*pi*f2*tb);
subplot(211)
plot(ta,A)
subplot(212)
plot(tb,B)
n = min(min(ta) ,min(tb)) :max(max(ta) ,max(tb))
y1 = zeros (1,length(n))
y2=y1;
y1 (n>=min(ta)&n<=max(ta))=A
y2 (n>=min(tb)&n<=max(tb))=B
y = y1+y2;
ERROR:In an assignment A(I) = B, the number of elements in B and I must be the same.
Error in Untitled2 (line 20) y1 (n>=min(ta)&n<=max(ta))=A
0 Comments
Accepted Answer
Image Analyst
on 16 Oct 2016
"I want to add two sine waves of 30 and 60 hz having sampling frequency of 1khz." <=== Try the code below:
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 20;
% Make 0.1 seconds sampled every 1/1000 of a second
t = 0 : 1/1000 : 0.1;
% Define sine wave parameters.
f1 = 30; % per second
T1 = 1/f1; % period, seconds
amp1 = 1; % amplitude
f2 = 60; % per second
T2 = 1/f2; % period, seconds
amp2 = 1; % amplitude
% Make signals.
signal1 = amp1 * sin(2*pi*t/T1);
signal2 = amp2 * sin(2*pi*t/T2);
signal = signal1 + signal2;
plot(t, signal1, 'r.-', 'LineWidth', 2, 'MarkerSize', 16);
hold on;
plot(t, signal2, 'm.-', 'LineWidth', 2, 'MarkerSize', 16);
plot(t, signal, 'b.-', 'LineWidth', 2, 'MarkerSize', 16);
grid on;
title('Sine Waves', 'FontSize', fontSize);
xlabel('Time', 'FontSize', fontSize);
ylabel('Signal', 'FontSize', fontSize);
% Make bolder x axis
line(xlim, [0,0], 'Color', 'k', 'LineWidth', 3);
legend('30 Hz', '60 Hz', 'Sum');
% Set up figure properties:
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
% Get rid of tool bar and pulldown menus that are along top of figure.
set(gcf, 'Toolbar', 'none', 'Menu', 'none');
% Give a name to the title bar.
set(gcf, 'Name', 'Demo by ImageAnalyst', 'NumberTitle', 'Off')

2 Comments
Image Analyst
on 16 Oct 2016
Edited: Image Analyst
on 16 Oct 2016
I think each element of the fft array represents 1/(sampling time) = 1/(0.001) = 1000. So you could add this code:
% Take spectrum and plot it.
spectrum = fft(signal);
numElements = length(spectrum)
indexOf0 = numElements / 2
shiftedSpectrum = fftshift(abs(spectrum));
subplot(2, 1, 2);
f = (1 / sampleTime) * linspace(-numElements/2, numElements/2, numElements);
plot(f, shiftedSpectrum, 'r.-', 'LineWidth', 2, 'MarkerSize', 16);
grid on;
title('Spectrum of sum of 2 Sine Waves', 'FontSize', fontSize);
xlabel('Frequency', 'FontSize', fontSize);
ylabel('Power', 'FontSize', fontSize);
% Make bolder y axis
line([indexOf0, indexOf0], ylim, 'Color', 'k', 'LineWidth', 3);
I think I'm off by a slight amount due to the shifting and discretization though, so perhaps someone else, like you or dpb or Star, can correct it.

But you'll see spikes at close to +/- 30 and +/- 60 Hz.
More Answers (3)
Image Analyst
on 15 Oct 2016
I think you can fix n by doing this:
% Find min locations
[~, a1] = min(ta)
[~, a2] = max(ta)
[~, b1] = min(tb)
[~, b2] = max(tb)
% Find overall min and max over both arrays.
n = min([a1, b1]) : max([a2, b2])
However the rest of the code is still messed up but I don't know what you intend to do since you chose not to add any comments to explain it. Comments in code are always good.
partha pratim talukdar
on 26 Aug 2021
Considering two frequency tones fm1=10 Hz and fm2=20Hz, with corresponding amplitudes
Am1=2V and Am2=4V, show the modulated and demodulated waveforms. Use built in functions.
0 Comments
Lungani
on 16 Apr 2023
Edited: Lungani
on 16 Apr 2023
t=0:0.1:100;
F1=30;
x=sin(2*pi*F1*t);
subplot(4,1,1);
plot(t,F1);
F2=50;
y=sin(2*pi*F2*t);
subplot(4,1,1);
plot(t,F2);
F3=70;
z=sin(2*pi*F3*t);
subplot(4,1,1);
plot(t,F3);
a=F1+F2+F3;
subplot(4,1,1);
plot(a)
i am generating the code with 3 frequencies, so i must add and multiple these frequencies
what i want to know is the code, am i write it right or not?
1 Comment
Image Analyst
on 16 Apr 2023
No, you need to plot the signal, not the frequency. Corrected code is below:
% Demo by Image Analyst to sum sine harmonics.
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format short g;
format compact;
fontSize = 16;
markerSize = 6;
numSamples = 1000;
t = linspace(0, 100, numSamples);
Frequency1 = 30;
y1 = sin(2*pi*Frequency1*t);
subplot(4,1,1);
plot(t, y1);
grid on;
title('y1', 'FontSize',fontSize);
Frequency2 = 50;
y2 = sin(2*pi*Frequency2*t);
subplot(4,1,2);
plot(t, y2);
grid on;
title('y2', 'FontSize',fontSize)
Frequency3 = 70;
y3 = sin(2*pi*Frequency3*t);
subplot(4,1,3);
plot(t, y3);
grid on;
title('y3', 'FontSize',fontSize)
all3y = y1 + y2 + y3;
subplot(4,1,4);
plot(all3y, 'b-')
grid on;
title('y1 + y2 + y3', 'FontSize',fontSize)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!