Modulation in MATLAB

This part is regarding acquiring information for the modulation process of a WAV file saved on the computer’s memory to be modulated using MATLAB, taken directly from online help documentations:

http://www.mathworks.com/access/helpdesk/help/toolbox/comm/ug/fp59183.html

Modulation [1] in MATLAB


In most media for communication, only a fixed range of frequencies is available for transmission. One way to communicate a message signal whose frequency spectrum does not fall within that fixed frequency range, or one that is otherwise unsuitable for the channel, is to alter a transmittable signal according to the information in your message signal. This alteration is called modulation, and it is the modulated signal that you transmit. The receiver then recovers the original signal through a process called demodulation.

The sections of this chapter are as follows.

Modulation Features of the Toolbox

Modulation Terminology

Analog Modulation

Digital Modulation

Using Modem Objects

Selected Bibliography for Modulation

Modulation Features of the Toolbox [2]

The available methods of modulation depend on whether the input signal is analog or digital. The tables below show the modulation techniques that the Communications Toolbox supports for analog and digital signals, respectively.

Analog Modulation Method Acronym Function or Method
Amplitude modulation (suppressed or transmitted carrier) AM ammod, amdemod
Frequency modulation FM fmmod, fmdemod
Phase modulation PM pmmod, pmdemod
Single sideband amplitude modulation SSB ssbmod, ssbdemod

Digital Modulation Method Acronym Function or Method
Differential phase shift keying modulation DPSK dpskmod, dpskdemod
Frequency shift keying modulation FSK fskmod, fskdemod
Minimum shift keying modulation MSK mskmod, mskdemod
Offset quadrature phase shift keying modulation OQPSK oqpskmod, oqpskdemod
Phase shift keying modulation PSK modulate method on modem.pskmod object, demodulate method on modem.pskdemod object
Pulse amplitude modulation PAM pammod
Quadrature amplitude modulation QAM modulate method on modem.qammod object, demodulate method on modem.qamdemod object

Baseband vs. Passband Simulation

For a given modulation technique, two ways to simulate modulation techniques are called baseband and passband. Baseband simulation, also known as the lowpass equivalent method, requires less computation. This toolbox supports baseband simulation for digital modulation and passband simulation for analog modulation.

Modulation Terminology

Modulation is a process by which a carrier signal is altered according to information in a message signal. The carrier frequency, denoted Fc, is the frequency of the carrier signal. The sampling rate is the rate at which the message signal is sampled during the simulation.

The frequency of the carrier signal is usually much greater than the highest frequency of the input message signal. The Nyquist sampling theorem requires that the simulation sampling rate Fs be greater than two times the sum of the carrier frequency and the highest frequency of the modulated signal in order for the demodulator to recover the message correctly.

Analog Modulation [3]

This section describes how to represent analog signals using vectors or matrices. It provides examples of using the analog modulation and demodulation functions.

Representing Analog Signals

To modulate an analog signal using this toolbox, start with a real message signal and a sampling rate Fs in hertz. Represent the signal using a vector x, the entries of which give the signal’s values in time increments of 1/Fs. Alternatively, you can use a matrix to represent a multichannel signal, where each column of the matrix represents one channel.

For example, if t measures time in seconds, then the vector x below is the result of sampling a sine wave 8000 times per second for 0.1 seconds. The vector y represents the modulated signal.

Fs = 8000; % Sampling rate is 8000 samples per second. Fc = 300; % Carrier frequency in Hz t = [0:.1*Fs]'/Fs; % Sampling times for .1 second x = sin(20*pi*t); % Representation of the signal y = ammod(x,Fc,Fs); % Modulate x to produce y. figure; subplot(2,1,1); plot(t,x); % Plot x on top. subplot(2,1,2); plot(t,y)% Plot y below.

As a multichannel example, the code below defines a two-channel signal in which one channel is a sinusoid with zero initial phase and the second channel is a sinusoid with an initial phase of pi/8.

Fs = 8000; t = [0:.1*Fs]'/Fs; x = [sin(20*pi*t), sin(20*pi*t+pi/8)];
 

Analog Modulation Example

This example illustrates the basic format of the analog modulation and demodulation functions. Although the example uses phase modulation, most elements of this example apply to other analog modulation techniques as well.
The example samples an analog signal and modulates it. Then it simulates an additive white Gaussian noise (AWGN) channel, demodulates the received signal, and plots the original and demodulated signals.
% Prepare to sample a signal for two seconds, % at a rate of 100 samples per second. Fs = 100; % Sampling rate t = [0:2*Fs+1]'/Fs; % Time points for sampling  % Create the signal, a sum of sinusoids. x = sin(2*pi*t) + sin(4*pi*t);  Fc = 10; % Carrier frequency in modulation phasedev = pi/2; % Phase deviation for phase modulation  y = pmmod(x,Fc,Fs,phasedev); % Modulate. y = awgn(y,10,'measured',103); % Add noise. z = pmdemod(y,Fc,Fs,phasedev); % Demodulate.  % Plot the original and recovered signals. figure; plot(t,x,'k-',t,z,'g-'); legend('Original signal','Recovered signal');
Other examples using analog modulation functions appear in the reference pages for ammod, amdemod, ssbdemod, and fmmod.
 

Digital Modulation [4]

Like analog modulation, digital modulation alters a transmittable signal according to the information in a message signal. However, in this case, the message signal is restricted to a finite set. Using this toolbox, you can modulate or demodulate signals using various digital modulation techniques, listed in Modulation Features of the Toolbox. You can also plot signal constellations.

The topics in this section are as follows:

Representing Digital Signals

To modulate a signal using digital modulation with an alphabet having M symbols, start with a real message signal whose values are integers from 0 to M-1. Represent the signal by listing its values in a vector, x. Alternatively, you can use a matrix to represent a multichannel signal, where each column of the matrix represents one channel.

For example, if the modulation uses an alphabet with eight symbols, then the vector [2 3 7 1 0 5 5 2 6]' is a valid single-channel input to the modulator. As a multichannel example, the two-column matrix

[2 3;  3 3;  7 3;  0 3;] 

defines a two-channel signal in which the second channel has a constant value of 3.

Baseband Modulated Signals Defined

If you use baseband modulation to produce the complex envelope y of the modulation of a message signal x, then y is a complex-valued signal that is related to the output of a passband modulator. If the modulated signal has the waveform

where fc is the carrier frequency and θ is the carrier signal’s initial phase, then a baseband simulation recognizes that this equals the real part of

and models only the part inside the square brackets. Here j is the square root of -1. The complex vector y is a sampling of the complex signal

If you prefer to work with passband signals instead of baseband signals, then you can build functions that convert between the two. Be aware that passband modulation tends to be more computationally intensive than baseband modulation because the carrier signal typically needs to be sampled at a high rate.

Gray Encoding a Modulated Signal

For the PSK, DPSK, FSK, QAM, and PAM modulation types, Gray constellations are obtained by selecting the gray parameter in the corresponding modulation function or method.

Note that Gray-encoding the signal with bin2gray and then modulating it without the gray parameter does not result in a Gray-encoded modulation for the PSK, DPSK, FSK, QAM, and PAM cases. This is due to the modulation functions using symbol values instead of the symbol positions.

As an example, let’s try to make a Gray constellation using PSK modulation. The following examples describe incorrect and correct procedures for making a Gray constellation.

Incorrect Procedure

As an example of how not to do this, this procedure uses bin2gray to Gray-code a signal, and subsequently modulates it. The result is a modulation that is not Gray-coded.

y = bin2gray([0:7],'psk',8); xmap = modulate(modem.pskmod(8),y); k=log2(8); scatterplot(xmap); set(get(gca,'Children'),'Marker','d','MarkerFaceColor','auto'); hold on; for jj=1:length(xmap)         text(real(xmap(jj))-0.15,imag(xmap(jj))+0.15,...         dec2base(jj-1,2,3)); end set(gca,'yTick',(-(k+1)/4:(k+1)/4),'xTick',(-(k+1)/4:(k+1)/4),...         'XLim',[-(k+1)/2 (k+1)/2],'YLim',...         [-(k+1)/2 (k+1)/2],'Box','on','YGrid','on', 'XGrid','on'); hold off; title({'Scatter plot 8-PSK pre Gray encoding',...         'input = bin2gray([0:7],''psk'',8)=[0,1,3,2,6,7,5,4]'}); 

Looking at the map above, notice that this is not a Gray-encoded map; there are cases where adjacent elements differ by more than one bit.

Correct Procedure

The correct procedure uses the pskmod function with the gray parameter.

y = [0:7]; xmap = modulate(modem.pskmod('M',8,'SymbolOrder','Gray'),y); k=log2(8); scatterplot(xmap); set(get(gca,'Children'),'Marker','d','MarkerFaceColor','auto'); hold on; for jj=1:length(xmap)         text(real(xmap(jj))-0.15,imag(xmap(jj))+0.15,...         dec2base(jj-1,2,3)); end set(gca,'yTick',(-(k+1)/4:(k+1)/4),'xTick',(-(k+1)/4:(k+1)/4),...         'XLim',[-(k+1)/2 (k+1)/2],'YLim',[-(k+1)/2 (k+1)/2],...         'Box','on','YGrid','on', 'XGrid','on'); hold off; 

Looking at the map above, notice that this is indeed a Gray-encoded map; all adjacent elements differ by only one bit.

Examples of Digital Modulation and Demodulation

This section contains examples that illustrate how to use the digital modulation and demodulation functions.

Computing the Symbol Error Rate

The example generates a random digital signal, modulates it, and adds noise. Then it creates a scatter plot, demodulates the noisy signal, and computes the symbol error rate. For a more elaborate example that is similar to this one, see Modulating a Random Signal.

% Create a random digital message M = 16; % Alphabet size x = randint(5000,1,M);  % Use 16-QAM modulation to produce y. y=modulate(modem.qammod(M),x);  % Transmit signal through an AWGN channel. ynoisy = awgn(y,15,'measured');  % Create scatter plot from noisy data. scatterplot(ynoisy);  % Demodulate ynoisy to recover the message. z=demodulate(modem.qamdemod(M),ynoisy);  % Check symbol error rate. [num,rt]= symerr(x,z) 

The output and scatter plot are below. Your numerical results and plot might vary, because the example uses random numbers.

num =      83   rt =      0.0166 

The scatter plot does not look exactly like a signal constellation. Where the signal constellation has 16 precisely located points, the noise causes the scatter plot to have a small cluster of points approximately where each constellation point would be.

Combining Pulse Shaping and Filtering with Modulation

Modulation is often followed by pulse shaping, and demodulation is often preceded by a filtering or an integrate-and-dump operation. This section presents an example involving rectangular pulse shaping. For an example that uses raised cosine pulse shaping, see Pulse Shaping Using a Raised Cosine Filter.

Rectangular Pulse Shaping. Rectangular pulse shaping repeats each output from the modulator a fixed number of times to create an upsampled signal. Rectangular pulse shaping can be a first step or an exploratory step in algorithm development, though it is less realistic than other kinds of pulse shaping. If the transmitter upsamples the modulated signal, then the receiver should downsample the received signal before demodulating. The “integrate and dump” operation is one way to downsample the received signal.

The code below uses the rectpulse function for rectangular pulse shaping at the transmitter and the intdump function for downsampling at the receiver.

M = 16; % Alphabet size x = randint(5000,1,M); % Message signal Nsamp = 4; % Oversampling rate  % Use 16-QAM modulation. y = modulate(modem.qammod(M),x);  % Follow with rectangular pulse shaping. ypulse = rectpulse(y,Nsamp);  % Transmit signal through an AWGN channel. ynoisy = awgn(ypulse,15,'measured');  % Downsample at the receiver. ydownsamp = intdump(ynoisy,Nsamp);  % Demodulate to recover the message. z = demodulate(modem.qamdemod(M),ydownsamp); 

Plotting Signal Constellations

To plot the signal constellation associated with a modulation process, follow these steps:

  1. If the alphabet size for the modulation process is M, then create the signal [0:M-1]. This signal represents all possible inputs to the modulator.

  2. Use the appropriate modulation function to modulate this signal. If desired, scale the output. The result is the set of all points of the signal constellation.

  3. Apply the scatterplot function to the modulated output to create a plot.

Examples of Signal Constellation Plots

The following examples produce plots of signal constellations:

The reference entries for the modnorm and genqammod functions provide additional examples.

Constellation for 16-PSK.

The code below plots a PSK constellation having 16 points.

M = 16; x = [0:M-1]; scatterplot(modulate(modem.pskmod(M),x)); 

Constellation for 32-QAM.

The code below plots a QAM constellation having 32 points and a peak power of 1 watt. The example also illustrates how to label the plot with the numbers that form the input to the modulator.

M = 32; x = [0:M-1]; y = modulate(modem.qammod(M),x); scale = modnorm(y,'peakpow',1); y = scale*y; % Scale the constellation. scatterplot(y); % Plot the scaled constellation.  % Include text annotations that number the points. hold on; % Make sure the annotations go in the same figure. for jj=1:length(y)    text(real(y(jj)),imag(y(jj)),[' ' num2str(jj-1)]); end hold off; 

Gray-Coded Signal Constellation.

The example below plots an 8-QAM signal Gray-coded constellation, labeling the points using binary numbers so you can verify visually that the constellation uses Gray coding.

M = 8; x = [0:M-1]; y = modulate(modem.qammod('M',M,'SymbolOrder','Gray'),x);  % Plot the Gray-coded constellation. scatterplot(y,1,0,'b.'); % Dots for points. % Include text annotations that number the points in binary. hold on; % Make sure the annotations go in the same figure. annot = dec2bin([0:length(y)-1],log2(M)); text(real(y)+0.15,imag(y),annot); axis([-4 4 -4 4]); title('Constellation for Gray-Coded 8-QAM'); hold off;

Customized Constellation for QAM. The code below describes and plots a constellation with a customized structure.

% Describe constellation. inphase = [1/2 -1/2 1 0 3/2 -3/2 1 -1]; quadr = [1 1 0 2 1 1 2 2]; inphase = [inphase; -inphase]; inphase = inphase(:); quadr = [quadr; -quadr]; quadr = quadr(:); const = inphase + j*quadr;  % Plot constellation. scatterplot(const,1,0,'*'); hold on; axis([-3 3 -3 3]); title('Customized Constellation for QAM'); hold off;

Using Modem Objects [5]

Modulation of signals is generally done through the use of functions, such as pammod and dpskmod. For PSK and QAM, however, modulation is done through the use of modem objects. This section gives an overview of how you use these objects.

A modem object is a type of MATLAB variable that contains information about the modulation algorithm, such as the name of the modulation class, M-ary number, and the constellation mapping. The object can be operated upon using specific methods to perform certain tasks.

Constructing a Modem Object

To construct PSK and QAM modulator and demodulator objects, use the modem.pskmod, modem.pskdemod, modem.qammod, and modem.qamdemod functions (constructors). See individual reference pages for details.

Managing the Object’s Properties

To view the properties of a modem object, use its disp method, as shown in the following example:

h=modem.pskmod; % Construct a PSK modulator object. h.disp          % Display object properties. 

You can directly assign a value to a property as follows:

h=modem.pskmod(8);    % Construct a PSK modulator object. % Set the 'symbolorder' property of the object to 'gray'. h.symbolorder='gray';  

The properties can also be set to specific values when constructing the object. See reference pages of individual objects for details.

Basic Procedure for Modulating or Demodulating a Signal

Modulating a signal with PSK or QAM involves these steps:

  1. Create a modem object using modem.pskmod or modem.qammod, depending on your modulation type.

  2. Adjust properties of the modem object, if necessary, to tailor it to your needs. For example, you can change the phase offset or symbol order.

  3. Modulate your signal by applying the modulate method of the modem object.

    
    

Demodulating a PSK or QAM modulated signal is performed in a way similar to how you did the modulation except that you use modem.pskdemod or modem.qamdemod objects, and apply the demodulate method of the modem object.

Example Illustrating the Basic Procedure

This code briefly illustrates the steps in the basic procedure previously described.

x = randint(n,1);      % Create a signal source. h = modem.qammod(8)    % Create a modulator object                        % and display its properties. y = modulate(h,x);     % Modulate the signal x. g = modem.qamdemod(h)  % Create a demodulator object                        % from a modem.qammod object                        % and display its properties. z = demodulate(g,y);   % Demodulate the signal y.      

Selected Bibliography for Modulation [6]

[1] Jeruchim, Michel C., Philip Balaban, and K. Sam Shanmugan, Simulation of Communication Systems, New York, Plenum Press, 1992.

[2] Proakis, John G., Digital Communications, 3rd ed., New York, McGraw-Hill, 1995.

[3] Sklar, Bernard, Digital Communications: Fundamentals and Applications, Englewood Cliffs, NJ, Prentice-Hall, 1988.

Special Filters


The Communications Toolbox includes several functions that can help you design and use filters. Other filtering capabilities are in the Signal Processing Toolbox. The sections of this chapter are as follows.

Noncausality and the Group Delay Parameter An implementation issue relating to the group delay of a filter
Designing Hilbert Transform Filters Designing a Hilbert transform filter using the hilbiir function
Filtering with Raised Cosine Filters Filtering data with a raised cosine filter, using the rcosflt function
Designing Raised Cosine Filters Designing a raised cosine filter using the rcosine function
Selected Bibliography for Special Filters Works containing background information about filters

For a demonstration involving raised cosine filters, type showdemo rcosdemo.

Noncausality and the Group Delay Parameter

Without propagation delays, both Hilbert filters and raised cosine filters are noncausal. This means that the current output depends on the system’s future input. In order to design only realizable filters, the hilbiir, rcosine, and rcosflt functions delay the input signal before producing an output. This delay, known as the filter’s group delay, is the time between the filter’s initial response and its peak response. The group delay is defined as

where θ is the phase of the filter and ω is the frequency in radians. This delay is set so that the impulse response before time zero is negligible and can safely be ignored by the function.

For example, the Hilbert filter whose impulse is shown below uses a group delay of one second. In the figure, the impulse response near time 0 is small and the large impulse response values occur near time 1.

Example: Compensating for Group Delays When Analyzing Data

Comparing filtered with unfiltered data might be easier if you delay the unfiltered signal by the filter’s group delay. For example, suppose you use the code below to filter x and produce y.

tx = 0:4; % Times for data samples x = [0 1 1 1 1]'; % Binary data samples % Filter the data and use a delay of 2 seconds. delay = 2; [y,ty] = rcosflt(x,1,8,'fir',.3,delay);

The elements of tx and ty represent the times of each sample of x and y, respectively. However, y is delayed relative to x, so corresponding elements of x and y do not have the same time values. Plotting y against ty and x against tx is less useful than plotting y against ty and x against a delayed version of tx.

% Top plot subplot(2,1,1), plot(tx,x,'*',ty,y); legend('Data','Filtered data'); title('Data with No Added Delay'); % Bottom plot delays tx. subplot(2,1,2), plot(tx+delay,x,'*',ty,y); legend('Data','Filtered data'); title('Data with an Added Delay');

For another example of compensating for group delay, see the raised cosine filter demo by typing showdemo rcosdemo.

Designing Hilbert Transform Filters

The hilbiir function designs a Hilbert transform filter and produces either

  • A plot of the filter’s impulse response

  • A quantitative characterization of the filter, using either a transfer function model or a state-space model

Example with Default Parameters

For example, typing

hilbiir

plots the impulse response of a fourth-order digital Hilbert transform filter having a one-second group delay. The sample time is 2/7 seconds. In this particular design, the tolerance index is 0.05. The plot also displays the impulse response of the ideal Hilbert transform filter having a one-second group delay. The plot is in the figure in Noncausality and the Group Delay Parameter.

To compute this filter’s transfer function, use the command below.

[num,den] = hilbiir  num =     -0.3183   -0.3041   -0.5160   -1.8453    3.3105   den =      1.0000   -0.4459   -0.1012   -0.0479   -0.0372 

The vectors num and den contain the coefficients of the numerator and denominator, respectively, of the transfer function in ascending order of powers of z-1.

The commands in this section use the function’s default parameters. You can also control the filter design by specifying the sample time, group delay, bandwidth, and tolerance index. The reference entry for hilbiir explains these parameters. The group delay is also mentioned in Noncausality and the Group Delay Parameter.

Filtering with Raised Cosine Filters

The rcosflt function applies a raised cosine filter to data. Because rcosflt is a versatile function, you can

This section discusses the use of sampling rates in filtering and then covers these options. For an additional example, type showdemo rcosdemo in the MATLAB Command Window.

Sampling Rates

The basic rcosflt syntax

y = rcosflt(x,Fd,Fs...) % Basic syntax 

assumes by default that you want to apply the filter to a digital signal x whose sampling rate is Fd. The filter’s sampling rate is Fs. The ratio of Fs to Fd must be an integer. By default, the function upsamples the input data by a factor of Fs/Fd before filtering. It upsamples by inserting Fs/Fd-1 zeros between consecutive input data samples. The upsampled data consists of Fs/Fd samples per symbol and has a sampling rate of Fs.

An example using this syntax is below. The output sampling rate is four times the input sampling rate.

y1 = rcosflt([1;0;0],1,4,'fir'); % Upsample by factor of 4/1.

Maintaining the Input Sampling Rate

You can also override the default upsampling behavior. In this case, the function assumes that the input signal already has a sampling rate of Fs and consists of Fs/Fd samples per symbol. You might want to maintain the sampling rate in a receiver’s filter if the corresponding transmitter’s filter has already upsampled sufficiently.

To maintain the sampling rate, modify the fourth input argument in rcosflt to include the string Fs. For example, in the first command below, rcosflt uses its default upsampling behavior and the output sampling rate is four times the input sampling rate. By contrast, the second command below uses Fs in the string argument and thus maintains the sampling rate throughout.

y1 = rcosflt([1;0;0],1,4,'fir'); % Upsample by factor of 4/1. y2 = rcosflt([1;0;0],1,4,'fir/Fs'); % Maintain sampling rate.

The second command assumes that the sampling rate of the input signal is 4, and that the input signal contains 4/1 samples per symbol.

An example that uses the 'Fs' option at the receiver is in Combining Two Square-Root Raised Cosine Filters.

Designing Filters Automatically

The simplest syntax of rcosflt assumes that the function should both design and implement the raised cosine filter. For example, the command below designs an FIR raised cosine filter and then filters the input vector [1;0;0] with it. The second and third input arguments indicate that the function should upsample the data by a factor of 8 (that is, 8/1) during the filtering process.

y = rcosflt([1;0;0],1,8);

Types of Raised Cosine Filters

You can have rcosflt design other types of raised cosine filters by using a fourth input argument. Variations on the previous example are below.

y = rcosflt([1;0;0],1,8,'fir'); % Same as original example y = rcosflt([1;0;0],1,8,'fir/sqrt'); % FIR square-root RC filter y = rcosflt([1;0;0],1,8,'iir'); % IIR raised cosine filter y = rcosflt([1;0;0],1,8,'iir/sqrt'); % IIR square-root RC filter

Specifying Filters Using Input Arguments

If you have a transfer function for a raised cosine filter, then you can provide it as an input to rcosflt so that rcosflt does not design its own filter. This is useful if you want to use rcosine to design the filter once and then use the filter many times. For example, the rcosflt command below uses the 'filter' flag to indicate that the transfer function is an input argument. The input num is a vector that represents the FIR transfer function by listing its coefficients.

num = rcosine(1,8); y = rcosflt([1;0;0],1,8,'filter',num);

This syntax for rcosflt works whether num represents the transfer function for a square-root raised cosine FIR filter or an ordinary raised cosine FIR filter. For example, the code below uses a square-root raised cosine FIR filter. Only the definition of num is different.

num = rcosine(1,8,'sqrt'); y = rcosflt([1;0;0],1,8,'filter',num);

You can also use a raised cosine IIR filter. To do this, modify the fourth input argument of the rcosflt command above so that it contains the string 'iir' and provide a denominator argument. An example is below.

delay = 8; [num,den] = rcosine(1,8,'iir',.5,delay); y = rcosflt([1;0;0],1,8,'iir/filter',num,den,delay);

Controlling the Rolloff Factor

If rcosflt designs the filter automatically, then you can control the rolloff factor of the filter, as described below. If you specify your own filter, then rcosflt does not need to know its rolloff factor.

The rolloff factor determines the excess bandwidth of the filter. For example, a rolloff factor of .5 means that the bandwidth of the filter is 1.5 times the input sampling frequency, Fd. This also means that the transition band of the filter extends from .5 * Fd to 1.5 * Fd.

The default rolloff factor is .5, but if you want to use a value of .2, then you can use a command such as the one below. Typical values for the rolloff factor are between .2 and .5.

y = rcosflt([1;0;0],1,8,'fir',.2); % Rolloff factor is .2. 

Controlling the Group Delay

If rcosflt designs the filter automatically, then you can control the group delay of the filter, as described below. If you specify your own FIR filter, then rcosflt does not need to know its group delay.

The filter’s group delay is the time between the filter’s initial response and its peak response. The default group delay in the implementation is three input samples. To specify a different value, measure it in input symbol periods and provide it as the sixth input argument. For example, the command below specifies a group delay of six input samples, which is equivalent to 6 *8 /1 output samples.

y = rcosflt([1;0;0],1,8,'fir',.2,6); % Delay is 6 input samples.

The group delay influences the size of the output, as well as the order of the filter if rcosflt designs the filter automatically. See the reference page for rcosflt for details that relate to the syntax you want to use.

Example: Raised Cosine Filter Delays

The code below filters a signal using two different group delays. A larger delay results in a smaller error in the frequency response of the filter. The plot shows how the two filtered signals differ, and the output pt indicates that the first peak occurs at different times for the two filtered signals. In the plot, the solid line corresponds to a delay of six samples, while the dashed line corresponds to a delay of eight samples.

[y,t] = rcosflt(ones(10,1),1,8,'fir',.5,6); % Delay = 6 samples [y1,t1] = rcosflt(ones(10,1),1,8,'fir',.5,8); % Delay = 8 samples plot(t,y,t1,y1,'--') % Two curves indicate the different delays. legend('Delay = 6 samples','Delay = 8 samples','Location','NorthOutside'); peak = t(find(y == max(y))); % Times where first curve peaks peak1 = t1(find(y1 == max(y1))); % Times where second curve peaks pt = [min(peak), min(peak1)] % First peak time for both curves

The output is below.

pt =     14.6250   16.6250 

If Fs/Fd is at least 4, then a group delay value of at least 8 works well in many cases. In the examples of this section, Fs/Fd is 8.

Delays of Six Samples (Solid Line) and Eight Samples (Dashed Line)


[1] Communications toolbox: Modulation. MATLAB Support Documentations

http://www.mathworks.com/access/helpdesk/help/toolbox/comm/ug/index.html?/access/helpdesk/help/toolbox/comm/ug/fp45657.html

[2] Modulation Features of the Toolbox, MATLAB Online Support Documentations

http://www.mathworks.com/access/helpdesk/help/toolbox/comm/ug/fp45665.html

[3] Analog Modulation

http://www.mathworks.com/access/helpdesk/help/toolbox/comm/ug/a1041263411.html

[4] Digital Modulation

http://www.mathworks.com/access/helpdesk/help/toolbox/comm/ug/a1041263435.html

[5] Using Modem Objects

http://www.mathworks.com/access/helpdesk/help/toolbox/comm/ug/bqwswmc-1.html

[6] Selected Bibliography for Modulation

http://www.mathworks.com/access/helpdesk/help/toolbox/comm/ug/fp46681.html

4 Responses

Subscribe to comments with RSS, or TrackBack to 'Modulation in MATLAB'.

Leave a Reply