0% found this document useful (0 votes)
160 views

LABEX3

The document contains the code for a MATLAB program (Program P3_1) that evaluates the discrete-time Fourier transform (DTFT) of a signal. The program generates plots of the real part, imaginary part, magnitude, and phase of the DTFT. It also contains questions about the DTFT properties and modifications required to evaluate other DTFT expressions.

Uploaded by

dangvuduong
Copyright
© © All Rights Reserved
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
160 views

LABEX3

The document contains the code for a MATLAB program (Program P3_1) that evaluates the discrete-time Fourier transform (DTFT) of a signal. The program generates plots of the real part, imaginary part, magnitude, and phase of the DTFT. It also contains questions about the DTFT properties and modifications required to evaluate other DTFT expressions.

Uploaded by

dangvuduong
Copyright
© © All Rights Reserved
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 28

Name:L Tin S 12141638

ng V Dng 12141039
Section:

LaboratoryExercise3
DISCRETETIMESIGNALS:FREQUENCYDOMAINREPRESENTATIONS
3.1

DISCRETE-TIME FOURIER TRANSFORM

Project 3.1

DTFT Computation

A copy of Program P3_1 is given below :

% Program P3_1
% Evaluation of the DTFT
clf;
% Compute the frequency samples of the DTFT
w = -4*pi:8*pi/511:4*pi;
%num=[1 1 1 1 1];den=1;
num = [2 1];den = [1 -0.6];
h = freqz(num, den, w);
% Plot the DTFT
% subplot(2,1,1)
% plot(w/pi,real(h));grid
% title('Real part of H(e^{j\omega})')
% xlabel('\omega /\pi');
% ylabel('Amplitude');
% subplot(2,1,2)
% plot(w/pi,imag(h));grid
% title('Imaginary part of H(e^{j\omega})')
% xlabel('\omega /\pi');
% ylabel('Amplitude');
% pause
subplot(2,1,1)
plot(w/pi,abs(h));grid
title('Magnitude Spectrum |H(e^{j\omega})|')
xlabel('\omega /\pi');

ylabel('Amplitude');
subplot(2,1,2)
plot(w/pi,angle(h));grid
title('Phase Spectrum arg[H(e^{j\omega})]')
xlabel('\omega /\pi');
ylabel('Phase in radians');
Answers:
Q3.1 The expression of the DTFT being evaluated in Program P3_1 is

The function of the

pausecommand istopauseexecutionofaMatlabprogram.

Q3.2 The plots generated by running Program P3_1 are shown below :

Real part of H(ej )

Amplitude

8
6
4
2
0
-4

-3

-2

Imaginary part of H(ej )

4
Amplitude

-1

2
0
-2
-4
-4

-3

-2

-1

Magnitude Spectrum |H(ej )|

Amplitude

8
6
4
2
0
-4

-3

-2

Phase Spectrum arg[H(ej )]

2
Phase in radians

-1

1
0
-1
-2
-4

-3

The DTFT is a
Its period is

-2

-1

__periodic_ function of .

The types of symmetries exhibited by the four plots are as follows:


The real part and the magnitude are 2 periodic and EVEN SYMMETRIC.
The imaginary part and the phase are 2 periodic and ODD SYMMETRIC.
Q3.3 The required modifications to Program P3_1 to evaluate the given DTFT of Q3.3 are given
below:

clf;
N = 512;
num = [0.7 -0.5 0.3 1];
den = [1 0.3 -0.5 0.7];
[h,w] = freqz(num, den, N);
% Plot the DTFT
subplot(2,1,1)
plot(w/pi,real(h));grid
title('Real part of H(e^{j\omega})')

xlabel('\omega /\pi');
ylabel('Amplitude');
subplot(2,1,2)
plot(w/pi,imag(h));grid
title('Imaginary part of H(e^{j\omega})')
xlabel('\omega /\pi');
ylabel('Amplitude');
pause
% subplot(2,1,1)
% plot(w/pi,abs(h));grid
% title('Magnitude Spectrum |H(e^{j\omega})|')
% xlabel('\omega /\pi');
% ylabel('Amplitude');
% subplot(2,1,2)
% plot(w/pi,angle(h));grid
% title('Phase Spectrum arg[H(e^{j\omega})]')
% xlabel('\omega /\pi');
% ylabel('Phase in radians');

The plots generated by running the modified Program P3_1 are shown below :

Real part of H(ej )

Amplitude

1
0.5
0
-0.5
-1

0.1

0.2

0.3

0.5

0.6

0.7

0.8

0.9

0.7

0.8

0.9

0.8

0.9

0.8

0.9

Imaginary part of H(ej )

1
Amplitude

0.4

0.5
0
-0.5
-1

0.1

0.2

0.3

0.4

0.5

0.6

Magnitude Spectrum |H(ej )|

Amplitude

1
1
1
1

0.1

0.2

0.4

0.5

0.6

0.7

Phase Spectrum arg[H(ej )]

4
Phase in radians

0.3

2
0
-2
-4

0.1

0.2

0.3

0.4

0.5

0.6

0.7

The DTFT is a

periodic function of.

Its period is - 2
The jump in the phase spectrum is caused by -

a branch cut in the arctan function used by

angle in computing the phase.


The phase spectrum evaluated with the jump removed by the command
below:

unwrapis as given

Phase Spectrum arg[H(ej )]

Phase in radians

-1

-2

-3

-4

-5

-6

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

Q3.4 The required modifications to Program P3_1 to evaluate the given DTFT of Q3.4 are given
below:

clf;
%ComputethefrequencysamplesoftheDTFT
w=4*pi:8*pi/511:4*pi;
num=[1357911131517];
den=1;
h=freqz(num,den,w);

%PlottheDTFT
subplot(2,1,1)
plot(w/pi,real(h));grid
title('RealpartofH(e^{j\omega})')
xlabel('\omega/\pi');
ylabel('Amplitude');
subplot(2,1,2)
plot(w/pi,imag(h));grid
title('ImaginarypartofH(e^{j\omega})')
xlabel('\omega/\pi');
ylabel('Amplitude');
pause
subplot(2,1,1)
plot(w/pi,abs(h));grid
title('MagnitudeSpectrum|H(e^{j\omega})|')
xlabel('\omega/\pi');
ylabel('Amplitude');
subplot(2,1,2)
plot(w/pi,angle(h));grid
title('PhaseSpectrumarg[H(e^{j\omega})]')
xlabel('\omega/\pi');
ylabel('Phaseinradians');

The plots generated by running the modified Program P3_1 are shown below :

Real part of H(ej )

Amplitude

100
50
0
-50
-4

-3

-2

-1

Imaginary part of H(ej )

100

50
0
-50
-100
-4

-3

-2

-1

Magnitude Spectrum |H(ej )|

Amplitude

100

50

0
-4

-3

-2

-1

Phase Spectrum arg[H(ej )]

4
Phase in radians

Amplitude

2
0
-2
-4
-4

-3

-2

-1


The DTFT is a

periodicfunction of.

Its period is - 2
The jump in the phase spectrum is caused by angle

returns the principal value of

the arc tangent.


Q3.5 The required modifications to Program P3_1 to plot the phase in degrees are
indicated below:
% plot phase in degrees
subplot(2,1,2)
plot(w/pi,180*angle(h)/pi);grid
title('Phase Spectrum arg[H(e^{j\omega})]') xlabel('\omega /\pi');
ylabel('Phase in degrees');

Project 3.2

DTFT Properties

Answers:
Q3.6

The modified Program P3_2 created by adding appropriate comment statements,


and adding program statements for labeling the two axes of each plot being
generated by the program is given below :
% Program P3_2
% Time-Shifting Properties of DTFT
clf;
w = -pi:2*pi/255:pi; wo = 0.4*pi; D = 10;
num = [1 2 3 4 5 6 7 8 9];
h1 = freqz(num, 1, w);
h2 = freqz([zeros(1,D) num], 1, w);
subplot(2,2,1)
plot(w/pi,abs(h1));grid
title('Magnitude Spectrum of Original Sequence')
subplot(2,2,2)
plot(w/pi,abs(h2));grid
title('Magnitude Spectrum of Time-Shifted Sequence')
subplot(2,2,3)
plot(w/pi,angle(h1));grid
title('Phase Spectrum of Original Sequence')
subplot(2,2,4)
plot(w/pi,angle(h2));grid
title('Phase Spectrum of Time-Shifted Sequence')

The parameter controlling the amount of time-shift is D


Q3.7

The plots generated by running the modified program are given below :

Magnitude Spectrum of Original Sequence


Magnitude Spectrum of Time-Shifted Sequence
60
60
40

40

20

20

0
-1

-0.5

0.5

0
-1

-0.5

0.5

Phase Spectrum of Original Sequence Phase Spectrum of Time-Shifted Sequence


4
4
2

-2

-2

-4
-1

-0.5

0.5

-4
-1

-0.5

0.5

From these plots we make the following observations :

Thetime shift does not haveanyeffect at all on the magnitudespectrum. Butithas a


significanteffect on thephase spectrum.
Q3.8

Program P3_2 was run for the following value of the time-shift

D=2

The plots generated by running the modified program are given below :

Magnitude Spectrum of Original Sequence


Magnitude Spectrum of Time-Shifted Sequence
60
60
40

40

20

20

0
-1

-0.5

0.5

0
-1

-0.5

0.5

Phase Spectrum of Original Sequence Phase Spectrum of Time-Shifted Sequence


4
4
2

-2

-2

-4
-1

-0.5

0.5

-4
-1

-0.5

0.5

From these plots we make the following observations :

in this case with D=2 instead of D=10, theincreaseinthe


slopeislessthanitwasbefore.
The same Q3.7, but

Q3.9

Program P3_2 was run for the following values of the time-shift and for the following
values of length for the sequence D=4andD=14
The plots generated by running the modified program are given below :

Magnitude Spectrum of Original Sequence


Magnitude Spectrum of Time-Shifted Sequence
60
60
40

40

20

20

0
-1

-0.5

0.5

0
-1

-0.5

0.5

Phase Spectrum of Original Sequence Phase Spectrum of Time-Shifted Sequence


4
4
2

-2

-2

-4
-1

-0.5

0.5

-4
-1

-0.5

0.5

Magnitude Spectrum of Original Sequence


Magnitude Spectrum of Time-Shifted Sequence
60
60
40

40

20

20

0
-1

-0.5

0.5

0
-1

-0.5

0.5

Phase Spectrum of Original Sequence Phase Spectrum of Time-Shifted Sequence


4
4
2

-2

-2

-4
-1

-0.5

0.5

-4
-1

-0.5

From these plots we make the following observations :

0.5

Increasingthelengthmakesthemagnitude spectrum more narrowandIt alsomakesthe


phasesteeper.
Q3.10

The modified Program P3_3 created by adding appropriate comment statements,


and adding program statements for labeling the two axes of each plot being
generated by the program is given below :
clf;
w = -pi:2*pi/255:pi; wo = 0.4*pi;
num1 = [1 2 3 4 5 6 7 8 9];
L=length(num1);
h1 = freqz(num1, 1, w);
n=0:L-1;
num2 = exp(wo*i*n).*num1;
h2 = freqz(num2, 1, w);
subplot(2,2,1)
plot(w/pi,abs(h1));grid
title('Magnitude Spectrum of Original Sequence')
subplot(2,2,2)
plot(w/pi,abs(h2));grid
title('Magnitude Spectrum of Time-Shifted Sequence')
subplot(2,2,3)
plot(w/pi,angle(h1));grid
title('Phase Spectrum of Original Sequence')
subplot(2,2,4)
plot(w/pi,angle(h2));grid
title('Phase Spectrum of Time-Shifted Sequence')

The parameter controlling the amount of frequency-shift is


Q3.11

wo

The plots generated by running the modified program are given below :

Magnitude Spectrum of Original Sequence


Magnitude Spectrum of Time-Shifted Sequence
60
60
40

40

20

20

0
-1

-0.5

0.5

0
-1

-0.5

0.5

Phase Spectrum of Original Sequence Phase Spectrum of Time-Shifted Sequence


4
4
2

-2

-2

-4
-1

-0.5

0.5

-4
-1

-0.5

0.5

From these plots we make the following observations :

Both the magnitude and phasespectraareshiftedrightbywo.


Q3.12

Program P3_3 was run for the following value of the frequency-shift 0.5
The plots generated by running the modified program are given below :

Magnitude Spectrum of Original Sequence


Magnitude Spectrum of Time-Shifted Sequence
60
60
40

40

20

20

0
-1

-0.5

0.5

0
-1

-0.5

0.5

Phase Spectrum of Original Sequence Phase Spectrum of Time-Shifted Sequence


4
4
2

-2

-2

-4
-1

-0.5

0.5

-4
-1

-0.5

0.5

From these plots we make the following observations :

the magnitude andphase spectra are shifted left by /2 rad


Q3.13

Program P3_3 was run for the following values of the frequency-shift and for the
following values of length for the sequence

L=4,wo=0.2
The plots generated by running the modified program are given below :

Magnitude Spectrum of Original Sequence


Magnitude Spectrum of Time-Shifted Sequence
10
10
8

2
-1

-0.5

0.5

2
-1

-0.5

0.5

Phase Spectrum of Original Sequence Phase Spectrum of Time-Shifted Sequence


4
4
2

-2

-2

-4
-1

-0.5

0.5

-4
-1

-0.5

0.5

From these plots we make the following observations :


Q3.14

The modified Program P3_4 created by adding appropriate comment statements,


and adding program statements for labeling the two axes of each plot being
generated by the program is given below :
% Program P3_4
% Convolution Property of DTFT
clf;
w = -pi:2*pi/255:pi;
x1 = [1 3 5 7 9 11 13 15 17];
x2 = [1 -2 3 -2 1];
y = conv(x1,x2);
h1 = freqz(x1, 1, w);
h2 = freqz(x2, 1, w);
hp = h1.*h2;
h3 = freqz(y,1,w);
subplot(2,2,1)
plot(w/pi,abs(hp));grid
title('Product of Magnitude Spectra')
subplot(2,2,2)
plot(w/pi,abs(h3));grid
title('Magnitude Spectrum of Convolved Sequence')
subplot(2,2,3)
plot(w/pi,angle(hp));grid
title('Sum of Phase Spectra')
subplot(2,2,4)
plot(w/pi,angle(h3));grid
title('Phase Spectrum of Convolved Sequence')

Q3.15

The plots generated by running the modified program are given below :

100

Product of Magnitude Spectra

Magnitude Spectrum of Convolved Sequence


100

50

0
-1
4

50

-0.5

0.5

Sum of Phase Spectra

0
-1

-2

-2
-0.5

0.5

0.5

Phase Spectrum of Convolved Sequence


4

-4
-1

-0.5

-4
-1

-0.5

0.5

From these plots we make the following observations :

The DTFT magnitude and phase spectra obtained by performing pointwise


multiplication of the two DTFTs of the original sequences are identical to those
obtained by performing time domain convolution of the two original sequences;
this verifies the convolution property of the DTFT.

Q3.16

Program P3_4 was run for the following two different sets of sequences of varying
lengths
Length of x1=7; x1 = [1 3 5 7 9 11 13];
Length of x2=7; x2 = [1 -2 3 -2 1 -2 3];
The plots generated by running the modified program are given below :

100

Product of Magnitude Spectra

Magnitude Spectrum of Convolved Sequence


100

50

0
-1
4

50

-0.5

0.5

Sum of Phase Spectra

0
-1

-2

-2
-0.5

0.5

0.5

Phase Spectrum of Convolved Sequence


4

-4
-1

-0.5

-4
-1

-0.5

0.5

From these plots we make the following observations :


Q3.17

The modified Program P3_5 created by adding appropriate comment statements,


and adding program statements for labeling the two axes of each plot being
generated by the program is given below:
% Program P3_5
% Modulation Property of DTFT
clf;
w = -pi:2*pi/255:pi;
x1 = [1 3 5 7 9 11 13 15 17];
x2 = [1 -1 1 -1 1 -1 1 -1 1];
y = x1.*x2;
h1 = freqz(x1, 1, w);
h2 = freqz(x2, 1, w);
h3 = freqz(y,1,w);
subplot(3,1,1)
plot(w/pi,abs(h1));grid
title('Magnitude Spectrum of First Sequence')
subplot(3,1,2)
plot(w/pi,abs(h2));grid
title('Magnitude Spectrum of Second Sequence')
subplot(3,1,3)
plot(w/pi,abs(h3));grid
title('Magnitude Spectrum of Product Sequence')

Q3.18

The plots generated by running the modified program are given below :

Magnitude Spectrum of First Sequence

100
50
0
-1

-0.8

-0.6

-0.4

-0.2

0.2

0.4

0.6

0.8

0.8

0.8

Magnitude Spectrum of Second Sequence

10
5
0
-1

-0.8

-0.6

-0.4

-0.2

0.2

0.4

0.6

Magnitude Spectrum of Product Sequence

100
50
0
-1

-0.8

-0.6

-0.4

-0.2

0.2

0.4

0.6

From these plots we make the following observations :


Q3.19

Program P3_5 was run for the following two different sets of sequences of varying
lengths
Length of x1=10; x1 = [1 3 5 7 9 11 13 15 17 19 21];
Length of x2=10; x2 = [1 -1 1 -1 1 -1 1 -1 1 -1 1];
The plots generated by running the modified program are given below:

Magnitude Spectrum of First Sequence

200
100
0
-1

-0.8

-0.6

-0.4

-0.2

0.2

0.4

0.6

0.8

0.8

0.8

Magnitude Spectrum of Second Sequence

20
10
0
-1

-0.8

-0.6

-0.4

-0.2

0.2

0.4

0.6

Magnitude Spectrum of Product Sequence

200
100
0
-1

-0.8

-0.6

-0.4

-0.2

0.2

0.4

0.6

From
these plots we make the following observations :

Q3.20

The modified Program P3_6 created by adding appropriate comment statements,


and adding program statements for labeling the two axes of each plot being
generated by the program is given below :
% Program P3_6
% Time Reversal Property of DTFT
clf;
w = -pi:2*pi/255:pi;
num = [1 2 3 4];
L = length(num)-1;
h1 = freqz(num, 1, w);
h2 = freqz(fliplr(num), 1, w);
h3 = exp(w*L*i).*h2;
subplot(2,2,1)
plot(w/pi,abs(h1));grid
title('Magnitude Spectrum of Original Sequence')
subplot(2,2,2)
plot(w/pi,abs(h3));grid
title('Magnitude Spectrum of Time-Reversed Sequence')
subplot(2,2,3)
plot(w/pi,angle(h1));grid
title('Phase Spectrum of Original Sequence')
subplot(2,2,4)
plot(w/pi,angle(h3));grid
title('Phase Spectrum of Time-Reversed Sequence')

The program implements the time-reversal operation as follows

Theoriginalrampsequenceisnonzerofor0n3.
Q3.21

The plots generated by running the modified program are given below :

Magnitude Spectrum of Original Sequence


Magnitude Spectrum of Time-Reversed Sequence
10
10
8

2
-1

-0.5

0.5

2
-1

-0.5

0.5

Phase Spectrum of Original Sequence Phase Spectrum of Time-Reversed Sequence


4
4
2

-2

-2

-4
-1

-0.5

0.5

-4
-1

-0.5

From these plots we make the following observations :

reversedramp sequences are realvalued.


Q3.22

0.5

Boththeoriginalandtime

Program P3_6 was run for the following two different sets of sequences of varying
lengths
Length of num = 10,; num = [1 2 3 4 5 6 7 8 9 10]
The plots generated by running the modified program are given below :

Magnitude Spectrum of Original Sequence


Magnitude Spectrum of Time-Reversed Sequence
60
60
40

40

20

20

0
-1

-0.5

0.5

0
-1

-0.5

0.5

Phase Spectrum of Original Sequence Phase Spectrum of Time-Reversed Sequence


4
4
2

-2

-2

-4
-1

-0.5

0.5

-4
-1

-0.5

0.5

From
these plots we make the following observations :

TheDTFTofthetimereversedsequenceisafrequencyreversedversionoftheDTFTof
theoriginalsequence
3.3

z-TRANSFORM

Project 3.5

Analysis of z-Transforms

Answers:
Q3.46

The frequency response of the z-transform obtained using Program P3_1 is plotted
below:

Q3.47

The MATLAB program to compute and display the poles and zeros, to compute and
display the factored form, and to generate the pole-zero plot of a rational ztransform is given below :
clf;
%initialize
num = [2
5 9 5 3];
den = [5 45 2 1 1];
% compute poles and zeros and display
[z p k] = tf2zpk(num,den);
disp('Zeros:');
disp(z);
disp('Poles:');
disp(p);
input('Hit <return> to continue...');
% compute and display factored form of G(z)
[sos k] = zp2sos(z,p,k)
input('Hit <return> to continue...');
% generate pole-zero plot
zplane(z,p);

Zeros:
-1.0000 + 1.4142i
-1.0000 - 1.4142i
-0.2500 + 0.6614i
-0.2500 - 0.6614i
Poles:
-8.9576
-0.2718
0.1147 + 0.2627i
0.1147 - 0.2627i
sos =
1.0000
1.0000

2.0000
0.5000

3.0000
0.5000

1.0000 9.2293 2.4344


1.0000 -0.2293 0.0822

k=
0.4000
G(z) 0.4

1 2z 3z
1 0.5z 0.5z
1
2
1
2
1 9.2293z 2.4344z 1 0.2293z 0.0822z

Using this program we obtain the following results on the z-transform

G(z)of Q3.46:

4
3

Imaginary Part

2
1
0
-1
-2
-3
-4
-9

Q3.48

-8

-7

-6

-5

-4
-3
Real Part

-2

-1

From the pole-zero plot generated in Question Q3.47, the number of regions of convergence
(ROC) ofG(z)are4
All possible ROCs of this z-transform are sketched below :

R1 :
R2 :
R3 :
R4 :

| z | 0.2718(leftsided,notstable)
0.2718 | z | 0.2866(twosided,notstable)
0.2866| z | 8.9576(twosided,stable)
| z | 8.9576(rightsided,notstable)

From the pole-zero plot it can be seen that the DTFT


Q3.49

The MATLAB program to compute and display the rational z-transform from its zeros, poles
and gain constant is given below :
% Program Q3_49
% Given the poles and zeros of G(z), compute and display the rational
% z-transform.
clf;
%
initialize
z = [0.3 2.5 -0.2+i*0.4 -0.2-i*0.4]';
p = [0.5 -0.75 0.6+i*0.7 0.6-i*0.7]';
k = 3.9;
% find numerator and denominator polynomial coefficients
[num den] = zp2tf(z,p,k)
The rational form of a z-transform with the given poles, zeros, and gain is found to be

num=3.90009.36000.66301.01400.5850

den=1.00000.95000.17500.66250.3187
1

G(z) 3.9 9.36z 0.663z 1.014z 0.585z


1

1 0.95z 0.175z 0.6625z 0.3187z

Project 3.6

Inverse z-Transform

Answers:
Q3.50

The MATLAB program to compute the first Lsamples of the inverse of a rational z-transform
is given below :
clf;
%
initialize
num = [2
5 9 5 3];
den = [5 45 2 1 1];
% Query user for parameter L
L = input('Enter the number of samples L: ');
% find impulse response
[g t] = impz(num,den,L);
%plot the impulse response
stem(t,g);
title(['First ',num2str(L),' samples of impulse response']);
xlabel('Time Index n');
ylabel('h[n]');

The plot of the first 50 samples of the inverse of


program is sketched below :

G(z) of Q3.46 obtained using this

45

First 50 samples of impulse response

x 10

0
-2

h[n]

-4
-6
-8
-10
-12
-14
-16

Q3.51

10

15

20
25
30
Time Index n

35

40

45

50

The MATLAB program to determine the partial-fraction expansion of a rational z-transform is


given below :
clf;
%
initialize
num = [2
5 9 5 3];
den = [5 45 2 1 1];
% partial fraction expansion
[r p k] = residuez(num,den)

The partial-fraction expansion of


below:
r=
0.3109 + 0.0000i
-1.0254 - 0.3547i
-1.0254 + 0.3547i
-0.8601 + 0.0000i

G(z) of Q3.46 obtained using this program is shown

p=
-8.9576 + 0.0000i
0.1147 + 0.2627i
0.1147 - 0.2627i
-0.2718 + 0.0000i
k=
3.0000

G(z)

1.0254

0.3547
j 1.0254

0.3547
j
0.8601

1
1
1
1 8.9576z 1(0.11470.2627j)z
1(0.11470.2627j)z 1
1
0.2718z
0.3109

From the above partial-fraction expansion we arrive at the inverse z-transform


g[n]as shown below:
Date:6/3/2015

Signature:

You might also like