Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 34

Final Project Part II

MATLAB Session
ES 156 Signals and Systems
2007
SEAS
PreparedbyFrankTompkins

Outline
freqz() command
Step by step through the communication
system
Explanation of new concepts and new
MATLAB functions
High-level view of flow through the system
Next week we talk in more detail about
implementation

Eye diagrams

Start Early!
Project is complex
Not something you can do in one day
Less hand-holding than MATLAB
exercises in homework
More like real-life projects

Extra office hours possible


Email us if you have questions/problems

freqz()
Same inputs as filter()
Plots frequency response
channelFilterTaps = [1 0 -1/2 3/8 zeros(1,28)];
freqz(channelFilterTaps, 1);

Outputs frequency response


channelFilterTaps = [1 0 -1/2 3/8 zeros(1,28)];
H = freqz(channelFilterTaps, 1, 256); % evaluate H(e j) at 256
points

Overall Idea
Want to transmit a digital image from point A to
point B using radio waves, etc.
We wont actually build antennas/wires
Simulate the whole thing in MATLAB

Have to convert digital image to a wave that can


travel through the air, a wire, etc. at point A
Then convert wave back to a digital image at
point B
Well transmit DCTs instead of actual image
pixels, as is often done in real life applications

Image Pre-Processing
Break image into 8 pixel by 8 pixel blocks and
take DCT of each block
Quantize DCT coefficients into 256 levels by
representing them as 8-bit unsigned numbers

blkproc()
MATLAB command for applying a function
in blocks to a matrix
Example: apply DCT in 8 by 8 blocks
I = imread(myimage.tif');
fun = @dct2;
J = blkproc(I, [8 8], fun);

Quantization
Approximate a continuous range of values by a
set of discrete values

Quantization
In MATLAB uint8()
x = 5.7;

% x is double precision (32-bit floating point)

xq = uint8(x);

% xq is an 8-bit unsigned integer

For images, we have to scale to [0,1]


before quantizing with im2uint8()
xscaled = (1.4 - x) / (1.4 - 6.3); % x is an image matrix
xq = im2uint8(xscaled);

Conversion to a bit stream


Using reshape()and permute()
Arrange 8 x 8 DCT blocks into groups of N blocks
each
Reshape each block into a vector (length 8*8*N) to
be transmitted later
Convert each pixel in vector to a binary number

Conversion

reshape()
Takes elements columnwise
>> x = [1 2 3; 4 5 6; 7 8 9]'
x=
1

>> reshape(x,1,9)
ans =
1

permute()
>> x = rand(1,2,2)
x(:,:,1) =
0.4565

0.0185

x(:,:,2) =
0.8214

0.4447

>> permute(x,[2 1 3])


ans(:,:,1) =
0.4565
0.0185
ans(:,:,2) =
0.8214
0.4447

de2bi()
>> x = [4; 212; 19]
x=
4
212
19
>> de2bi(x)
ans =
0

Modulation
Modulate each bit by a sine wave and put into the channel
Implementation details are up to you
What is written in the PDF file is a suggestion
We will however take off points if you use more than one for
loop in your code
That one should loop over the N-sized block groups to send
each one through the channel in turn

Pulse Amplitude Modulation


PAM for short
We will use a specific simple type:
half-sine pulse
To send a bit
1

0.5

-0.5

For a 1 send sin(t)


For a 0 send sin(t)

-1

10

15
t

20

25

30

10

15
t

20

25

30

1
0.5
0
-0.5
-1

Modulated [1 0 0 1]
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1

20

40

60

80

100

120

140

Channel
Atmosphere, telephone wire, coaxial cable
We model it as an LTI system
Impulse response h(t)

In using MATLAB, must approximate by


discrete time system h[n]

Noise
We will use zero mean AWGN
Additive White Gaussian Noise

Add an independent Gaussian random


variable to each sample passed through the
channel

AWGN
>> randn(2,3)
ans =
-0.4326

0.1253 -1.1465

-1.6656

0.2877

1.1909

y[n] = h[n] * x[n] + noise[n]


noisePower = 2;

% variance of Gaussian random variable

result = signalFromChannel + sqrt(noisePower) * randn(rows, cols);

[1 0 0 1] After Channel and Noise


3

-1

-2

-3

20

40

60

80

100

120

140

Receiver Equalization
Attempt to undo distortion of modulated signal
(sine wave) due to channel and noise
We will try two equalizing filters
Zero Forcing (ZF)
Minimum Mean Square Error (MMSE)

Zero Forcing (ZF) Filter


Just the inverse of the channel response
If H(ej) is the response of the channel, then the
ZF filter has response 1 / H(ej)
Clearly if there were no noise, ZF filter would
perfectly recover modulated signal
But since ZF doesnt take noise into account at
all, it will perform very badly if noise is strong

MMSE Filter
Takes noise into account
Derived by minimizing the average error
Well just take it on faith

If H(ej) is the response of the channel,


then the MMSE filter has response

Detection
Examine equalized signal to determine
whether a 1 or a 0 was sent over channel
Optimal detector is a thresholder

Threshold Detector
Integrate (sum) the transmitted and
equalized half-sine pulse
If integral (sum) < 0, decide a 0 was sent
Else decide a 1 was sent

Conversion to an Image
After receiving all block groups, use
reshape()and permute() to rebuild the
block DCT image

Conversion to an Image

Image Post-Processing
Use blkproc() to compute inverse block
DCT
Thats it!

Things To Play With


Noise Power
Increasing noise power will cause more distortion in
received image

ZF/MMSE Equalizers
Since MMSE handles noise, it should perform better
than ZF

Eye Diagrams
Coming up next

Different Channels
Optional

Eye Diagrams
Used to visualize how waveforms used to
send (modulate) multiple bits of data can
lead to detection errors
The more open the eye, the lower the
probability of error
Consider modulated half-sine pulses for
four subsequent transmitted bits

Modulated [1 0 0 1]
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1

20

40

60

80

100

120

140

[1 0 0 1] After Channel and Noise


3

-1

-2

-3

20

40

60

80

100

120

140

[1 0 0 1] Eye Diagrams
Before Channel

After Channel

You might also like