分享

关于“Matlab Demos”的学习和总结

 昵称1838573 2012-04-07

这里总结了Matlab Demos下通信工具箱里面的examples,给出源代码和注释。

程序代码 (一):关于BPSK的Mente Carlo仿真
% -------------------------------------------------------------------------
% Matlab Demos                                                      No.1.1
% -------------------------------------------------------------------------
% Phase Shift Keying Simulation
% This demo shows how to simulate a basic Quarternary Phase Shift Keying
% (QPSK) communication link, and to generate empirical performance curves
% that can be compared to theoretical predictions.
% -------------------------------------------------------------------------
% 1. 两个函数的使用:rectpulse与intdump成对使用,重复插值与抽取,互为逆操作;
% 2. randn的seed的使用;
% 3. 这里的解调是直接采用MATLAB自带的pskmod、pskdemod函数;
% 4. 为什么在后面调用函数,当采用的EbNo越大的时候,计算需要的时间越长?甚至是
%    系统死机(大概超过10dB之后)?
% 5. 这里需要讨论的问题就是 Mente Carlo 仿真的数值问题,即当用一个试验样本函数去
%    估计一个观测值的时候,如何尽量减小估计值的方差问题(选择合适的仿真点总数和期望错误点数)。
% -------------------------------------------------------------------------
%                                       revised by lavabin  2006.07.26
% -------------------------------------------------------------------------
clc;clear all;close all;echo off;tic;

% -------------------------------------------------------------------------
%                      Parameter Definition
% -------------------------------------------------------------------------
nSamp = 8; numSymb = 100;  
M = 4; SNR = 14;
seed = [12345 54321];       
rand('state', seed(1)); randn('state', seed(2));

% -------------------------------------------------------------------------
%                Generating random information symbols
% -------------------------------------------------------------------------
numPlot = 10;
rand('state', seed(1));
msg_orig = randsrc(numSymb, 1, 0:M-1);

% -------------------------------------------------------------------------
% Phase modulating the data
% Use PSKMOD to phase modulate the data and RECTPULSE to upsample to a
% sampling rate 8 times the carrier frequency.
% -------------------------------------------------------------------------
grayencod = bitxor(0:M-1, floor((0:M-1)/2));  
% Gray coding here!
% %  a = bitxor(0:M-1, floor((0:M-1)/2))
% %  a = 0     1     3     2

msg_gr_orig = grayencod(msg_orig+1);
% % Using "looktable" to map source data to Gray code

msg_tx = pskmod(msg_gr_orig,M);
% % Mapping source data to MPSK constellation

msg_tx = rectpulse(msg_tx,nSamp);

% -----------------------------
% figure(1);
% -----------------------------
scatterplot(msg_tx);
hold on;grid on;

% -------------------------------------------------------------------------
% Creating the noisy signal
% Then use AWGN to add noise to the transmitted signal to create the noisy
% signal at the receiver. Use the 'measured' option to add noise that is
% 14 dB below the average signal power (SNR = 14 dB). Plot the
% constellation of the received signal.
% -------------------------------------------------------------------------
randn('state', seed(2));
msg_rx = awgn(msg_tx, SNR, 'measured', [], 'dB');

% -----------------------------
% figure(2); 
% -----------------------------
scatterplot(msg_rx);
hold on;grid on;

% -------------------------------------------------------------------------
% Recovering information from the transmitted signal
% Use INTDUMP to downsample to the original information rate. Then use
% PSKDEMOD to demodulate the signal, and detect the transmitted symbols.
% The detected symbols are plotted in red stems with circles and the
% transmitted symbols are plotted in blue stems with x's. The blue stems of
% the transmitted signal are shadowed by the red stems of the received
% signal. Therefore, comparing the blue x's with the red circles indicates
% that the received signal is identical to the transmitted signal.
% -------------------------------------------------------------------------

msg_rx_down  = intdump(msg_rx,nSamp);  % operation before DEMOD
msg_gr_demod = pskdemod(msg_rx_down,M);
[dummy graydecod] = sort(grayencod);
graydecod = graydecod - 1;
msg_demod = graydecod(msg_gr_demod+1)';

figure(3);
stem(0:numPlot-1, msg_orig(1:numPlot), 'bx'); hold on;
stem(0:numPlot-1, msg_demod(1:numPlot), 'ro'); hold off;
axis([ 0 numPlot -0.2 3.2]); xlabel('Time'); ylabel('Amplitude');

% -------------------------------------------------------------------------
% Comparing original message to demodulated message
% -------------------------------------------------------------------------
[errorBit ratioBit] = biterr(msg_orig, msg_demod, log2(M));
[errorSym ratioSym] = symerr(msg_orig, msg_demod);

% -------------------------------------------------------------------------
% Running simulation examples
% The next step executes an example file SIMBASEBANDEX, which is a complete
% sin of the modulated
% signal.mulation example for QPSK. It demonstrates how to create simulation
% drivers in MATLAB that plot the simulation results as they are generated.
% -------------------------------------------------------------------------
% Running the QPSK simulation example
% The green and magenta lines are the theoretical bit error rate (BER) and
% symbol error rate (SER) performance curves for QPSK, respectively. The
% example, SIMBASEBANDEX, plots the simulated BER and SER in red and blue
% lines, respectively. SIMBASEBANDEX uses PSKMOD and PSKDEMOD to simulate
% PSK at baseband using a complex envelope representation.
% -------------------------------------------------------------------------

% [MPSK_ratio, MPSK_errors] = simbasebandex_lavabin(0:2:10)
[MPSK_ratio, MPSK_errors] = simbasebandex_lavabin(0:.5:10)
% Note:这个函数simbasebandex_lavabin在整个script中只被调用了一次。

simulation_time = toc
% -------------------------------------------------------------------------
%                              End of Script
% -------------------------------------------------------------------------

displayEndOfDemoMessage(mfilename);

% ---------------------------------------
%                              Results
% ---------------------------------------
% % MPSK_ratio =
% %
% %     0.0776    0.1489
% %     0.0588    0.1139
% %     0.0373    0.0730
% %     0.0232    0.0456
% %     0.0122    0.0243
% %     0.0060    0.0120
% %     0.0024    0.0049
% %     0.0008    0.0015
% %     0.0002    0.0004
% %     0.0000    0.0001
% %     0.0000    0.0000
% %
% %
% % MPSK_errors =
% %
% %         3812        3660
% %         2890        2798
% %         1833        1794
% %         1138        1121
% %          601         596
% %          297         296
% %          120         120
% %           62          62
% %           61          61
% %           61          61
% %           61          61

% -------------------------------------------------------------------------
% Matlab Demos                                                      No.1.2
% -------------------------------------------------------------------------
% Phase Shift Keying Simulation
% -------------------------------------------------------------------------
% 注意:
% 1. 关于误码率计算的Matlab函数 berawgn;
% 2. 设置了仿真迭代次数、每次迭代中仿真的符号数;
% 3. 关于误码率 误符号率计算的Matlab函数 biterr symerr
% 4. 整个过程中都是Matlab子定义函数的调用,调制、解调、误码率与误符号率的理论值、
%    实测值都是这些函数完成的;
% 5. 实际的测试过程中,加WGN的时候,使用的是EsNo的!因为输入的源为调制后的
%    QPSK符号。
% 6. 每个EbNo点上仿真结束的条件是 错误的符号数目达到expSymErrs 或者 完成全部的迭代
%    这样的结果是 对于EbNo很大的情况下,有可能在完全了全部的迭代次数之后,错误的符号数目
%    仍然没有达到expSymErrs,于是在这个EbNo点上继续进行下一次的迭代计算。这样对于EbNo
%    很大的情况下,自然要花费更多的时间!
% % 所以,针对这个问题,仿真的代码点总数和expSymErrs两者对BER分析都有直接的影响。
% % 这个结果是,在EbNo很小的时候,往往迭代次数还不够的时候,expSymErrs就已经达到了,因此不会
% % 进行更多的迭代操作,每次计算BER时候的总点数都是symbPerIter * iters,只是每次的错误符号数随之减少;
% % 而在EbNo很大的时候,则是等待错误数大于expSymErrs的条件产生,因此总点数在不断增加。
% % 从上面的分析,我们可以预期在设置不同的expSymErrs、symbPerIter、iters时,分别会对
% % BER的估计产生什么样的后果。
    
% -------------------------------------------------------------------------
%                                       revised by lavabin  2006.07.26
% -------------------------------------------------------------------------
function [ratio, errors] = simbasebandex_lavabin(EbNo)
% Baseband QPSK simulation example
%
%   [RATIO, ERRORS] = SIMBASEBANDEX(EbNo) demonstrates how to simulate
%   modulation using a complex baseband equivalent representation of the
%   signal modulated on a carrier. It also demonstrates demodulation and
%   detection of the signal in the presence of additive white Gaussian
%   noise for quaternary phase shift keying (QPSK). EbNo is a vector that
%   contains the signal to noise ratios per bit of the channels for the
%   simulation. This file runs a simulation at each of the EbNo's listed.
%   Each simulation runs until both the minimum simulation iterations have
%   been completed and the number of errors equals or exceeds 'expSymErrs'
%   (60 symbols). SIMBASEBANDEX then plots the theoretical curves for QPSK
%   along with the simulation results as they are generated.
%
%   SIMBASEBANDEX can be changed to simulate binary PSK (BPSK) by changing
%   M from 4 to 2. Changes to other modulations (i.e. modulation type and
%   alphabet) will require changes to the equations that generate expected
%   results.

% the minimum simulation iterations 最少的仿真迭代次数

% Define alphabet (quaternary), EsNo
% Change M to 2 for BPSK instead of QPSK
M = 4; k = log2(M); EsNo = EbNo + 10*log10(k);  % in dB

% Set number of symbols per iteration, number of iterations,
% and expected number of symbol error count
symbPerIter = 1024*4; iters = 6; expSymErrs = 60;
% symbPerIter = 1024*4; iters = 6; expSymErrs = 30;

% Set random number seeds for uniform and Gaussian noise
rand('state', 123456789);  randn('state', 987654321);

% Calculate expected results only for QPSK for plotting later on
expBER = berawgn(EbNo, 'psk', 4, 'nondiff');
expSER = 1 - (1 - expBER) .^ k;
% % BERAWGN Bit error rate (BER) for uncoded AWGN channels.
% %     BER = BERAWGN(EbNo, MODTYPE, M) returns the BER for PAM or QAM over an
% %     uncoded AWGN channel with coherent demodulation.
% %     EbNo -- bit energy to noise power spectral density ratio (in dB)
% %     MODTYPE -- modulation type, either 'pam' or 'qam'
% %     M -- alphabet size, must be a positive integer power of 2
% % -----------------------------------------------------------------------
% %     BER = BERAWGN(EbNo, 'psk', M, DATAENC) returns the BER for coherently
% %     detected PSK over an uncoded AWGN channel.
% %     DATAENC -- 'diff' for differential data encoding,
% %                'nondiff' for nondifferential data encoding
% %------------------------------------------------------------------------ 
% %     BER = BERAWGN(EbNo, 'dpsk', M) returns the BER for DPSK over an uncoded
% %     AWGN channel.
% %------------------------------------------------------------------------ 
% %     BER = BERAWGN(EbNo, 'fsk', M, COHERENCE) returns the BER for orthogonal
% %     FSK over an uncoded AWGN channel.
% %     COHERENCE -- 'coherent' for coherent demodulation,
% %                  'noncoherent' for noncoherent demodulation
% %------------------------------------------------------------------------ 
% %     BER = BERAWGN(EbNo, 'msk', DATAENC) returns the BER of coherently
% %     detected MSK over an uncoded AWGN channel.
% %     DATAENC -- 'diff' for differential data encoding,
% %                'nondiff' for nondifferential data encoding
% %------------------------------------------------------------------------ 
% %     BERLB = BERAWGN(EbNo, 'cpfsk', M, MODINDEX, KMIN) returns a lower bound
% %     on the BER of CPFSK over an uncoded AWGN channel.
% %     MODINDEX -- modulation index
% %     KMIN -- number of paths having the minimum  distance
% %------------------------------------------------------------------------ 
% %     See also bercoding, berfading, bersync.
% %------------------------------------------------------------------------

% Plot the theoretical results for SER and BER.
figure;
semilogy(EbNo(:), expSER, 'g-', EbNo(:), expBER, 'm-');
legend('Theoretical SER','Theoretical BER',0);  grid on;
title('Performance of Baseband QPSK');
xlabel('EbNo (dB)');
ylabel('SER and BER');
hold on;
drawnow;

% Create Gray encoding and decoding arrays
grayencod = bitxor(0:M-1, floor((0:M-1)/2));
[dummy graydecod] = sort(grayencod); graydecod = graydecod - 1;

% Drive the simulation for each of the SNR values calculated above
for idx2 = 1:length(EsNo)
    % Exit loop only when minimum number of iterations have completed and the
    % number of errors exceeds 'expSymErrs'
    idx = 1;
    while ((idx <= iters) || (sum(errSym) <= expSymErrs))% || --> logical or
%     while (idx <= iters)

        % Generate random numbers from in the range [0, M-1]
        msg_orig = randsrc(symbPerIter, 1, 0:M-1);

        % Gray encode symbols
        msg_gr_orig = grayencod(msg_orig+1)';

        % Digitally modulate the signal
        msg_tx = pskmod(msg_gr_orig, M);

        % Add Gaussian noise to the signal. The noise is calibrated using
        % the 'measured' option.
        msg_rx  = awgn(msg_tx, EsNo(idx2), 'measured', [], 'dB');

        % Demodulate the signal
        msg_gr_demod = pskdemod(msg_rx, M);

        % Gray decode message
        msg_demod = graydecod(msg_gr_demod+1)';

        % Calculate bit error count, BER, symbol error count and SER,
        % for this iteration.
        [errBit(idx) ratBit(idx)] = biterr(msg_orig, msg_demod, k);
        [errSym(idx) ratSym(idx)] = symerr(msg_orig, msg_demod);

        % Increment for next iteration
        idx = idx + 1;
    end

    % average the errors and error ratios for the iterations.
    errors(idx2, :) = [sum(errBit),  sum(errSym)];
    ratio(idx2, :)  = [mean(ratBit), mean(ratSym)];
% %     函数说明 mean:
% %      MEAN   Average or mean value.
% %     For vectors, MEAN(X) is the mean value of the elements in X. For
% %     matrices, MEAN(X) is a row vector containing the mean value of
% %     each column.

    % Plot the simulated results for SER and BER.
    semilogy(EbNo(1:size(ratio(:,2),1)), ratio(:,2), 'bo', ...
             EbNo(1:size(ratio(:,1),1)), ratio(:,1), 'ro');
    legend('Theoretical SER','Theoretical BER','Simulated SER','Simulated BER',0);
    drawnow;
end
hold off;

% -------------------------------------------------------------------------
%                              End of Function
% -------------------------------------------------------------------------

% % 函数说明:
% % DRAWNOW Flush pending graphics events.
% %     DRAWNOW "flushes the event queue" and forces MATLAB to
% %     update the screen.
% % 
% %     There are four events that cause MATLAB to flush the event
% %     queue and draw the screen:
% % 
% %     - a return to the MATLAB prompt
% %     - hitting a PAUSE statement
% %     - executing a GETFRAME command
% %     - executing a DRAWNOW command

 

程序代码 (二):

程序代码 (三):  关于升余弦滤波器
% -------------------------------------------------------------------------
%  Matlab Demos                                                      No.3.1
% -------------------------------------------------------------------------
%  Raised Cosine Filtering
% -------------------------------------------------------------------------
% (1)
% This demonstration uses the Communications Toolbox functions, RCOSINE and
% RCOSFLT, to demonstrate the ISI rejection capability of the raised cosine
% filter.
% (2)
% It demonstrates how to use RCOSINE and RCOSFLT, how the raised cosine
% filter controls intersymbol interference, and how to split
% the raised cosine filtering between transmitter and receiver.
% (3)
% This data sequence represents a digital sequence that will be upsampled by
% zero-padding before filtering.  Raised cosine filters will be used to shape
% the waveform without introducing intersymbol interference (ISI).
% -------------------------------------------------------------------------
% 几点主要的意思:
% 1   “升余弦函数 rcosine” 和 “升余弦滤波器函数 rcosflt”的使用;
% 2   波形成形的目标是在源端就利用升余弦函数的抗ISI特性消除ISI,因为不可能生成
%     绝对的的时域有限的信号;
% 3   升余弦滤波器在源/宿端的分割。
% % 从上到下几个code板块依次讨论了:
% % Delay的影响
% % R的影响
% % 发、收端之间平方根升余弦滤波
% % 缺省方式下的rcosflt的快速调用方法
% -------------------------------------------------------------------------
%                                       revised by lavabin  2006.08.02
% -------------------------------------------------------------------------
clc;clear all;close all;echo off;tic;

% -------------------------------------------------------------------------
%                      Parameter Definition
% -------------------------------------------------------------------------
Delay = 3; DataL = 20; R = .5; Fd = 1;Fs = 8; PropD = 0;

% Generate random data.
x = randsrc(DataL, 1, [], 1245);

% at time 0, 1/Fd, 2/Fd, ...
% Fd is the sampling frequency of the data source
% 1/Fd is the symbol period of the data source
tx = [PropD: PropD + DataL - 1] ./ Fd;

% figure(1)
stem(tx, x, 'kx');
axis([0 30 -1.6 1.6]); xlabel('Time'); ylabel('Amplitude');

% -------------------------------------------------------------------------
% RCOSFLT is used to upsample and filter the data stream using the filter
% designed by RCOSINE.  The plot compares the digital data and the upsampled,
% filtered signal.  It is difficult to compare the two signals because the peak
% response of the filter is delayed by the group delay of the filter
% (order/(2*Fs)).
% -------------------------------------------------------------------------
%  RCOSINE Design raised cosine filter.
%     NUM = RCOSINE(Fd, Fs) designs an FIR raised cosine filter to filter a
%     digital signal with the digital transfer sampling frequency Fd. The
%     filter sampling frequency is Fs. Fs/Fd must be a positive integer.
%   The default rolloff factor is 0.5, and the default filter delay
%   is 3/Fd seconds.
%
%   [NUM, DEN] = RCOSINE(Fd, Fs, TYPE_FLAG) gives specific filter design
%     instructions. TYPE_FLAG can be 'iir', 'sqrt', or a combination
%     such as 'iir/sqrt'. The order of the arguments is not important.
%       'fir'    Design FIR raised cosine filter (default).
%       'iir'    Design an IIR approximation to the FIR raised cosine filter.
%       'normal' Design the regular raised cosine filter (default).
%       'sqrt'   Design square root raised cosine filter.
%       'default' Use the default (FIR, Normal raised cosine filter).

%     [NUM, DEN] = RCOSINE(Fd, Fs, TYPE_FLAG, R) specifies the
%     rolloff factor in R, which is a real number in the range [0, 1].

%     [NUM, DEN] = RCOSINE(Fd, Fs, TYPE_FLAG, R, DELAY) specifies the filter
%   delay in DELAY, which must be a positive integer. DELAY/Fd is the
%   filter delay in seconds.

%     [NUM, DEN] = RCOSINE(Fd, Fs, TYPE_FLAG, R, DELAY, TOL) specifies the
%     tolerance in TOL for IIR filter design. The default value is 0.01.

%     When the designed filter is an FIR filter, the output in DEN is 1.
% -------------------------------------------------------------------------
% Design filter.
[yf, tf] = rcosine(Fd, Fs, 'fir', R, Delay);
% Upsample and filter.
[yo, to] = rcosflt(x, Fd, Fs, 'filter', yf);

% figure(2)
stem(tx, x, 'kx'); hold on;
plot(to, yo, 'b.'); hold off;
axis([0 30 -1.6 1.6]);  xlabel('Time'); ylabel('Amplitude');

% -------------------------------------------------------------------------
% This step compensates for the raised cosine filter group delay by delaying the
% input signal.  Now it is easy to see how the raised cosine filter upsamples
% and filters the signal.  The filtered signal is identical to the delayed input
% signal at the input sample times.  This demonstrates the raised cosine filter
% capability to band-limit the signal while avoiding ISI.
% -------------------------------------------------------------------------
% Correct for propagation delay
PropD = Delay * Fd;
% at time 0, 1/Fd, 2/Fd, ...
tx = [PropD: PropD + DataL - 1] ./ Fd;

% figure(2)
% figure1 与 figure2的波形对比强烈地反映出了Delay的作用,滤波器输出的波形与输入
% 波形在包络上的相似性需要通过延迟输入信号来得到保证
figure;
stem(tx, x, 'kx'); hold on;
plot(to, yo, 'b.'); hold off;
axis([0 30 -1.6 1.6]);  xlabel('Time'); ylabel('Amplitude');

% -------------------------------------------------------------------------
% This step demonstrates the effect that changing the rolloff factor from .5
% (blue curve) to .2 (red curve) has on the resulting filtered output.  The
% lower value for rolloff causes the filter to have a narrower transition band
% causing the filtered signal overshoot to be greater for the red curve than for
% the blue curve.
% ------------------------------------------------------------------------
% Design filter.
[yg, tg] = rcosine(Fd, Fs, 'fir', .2, Delay);
% Filter data.
[yo1, to1] = rcosflt(x, Fd, Fs, 'normal/fir/filter',yg);

% figure(3)
figure;
stem(tx, x, 'kx'); hold on;
% Plot filtered data.
plot(to, yo, 'b-',to1, yo1, 'r-'); hold off;
% Set axes and labels.
axis([0 30 -1.6 1.6]);  xlabel('Time'); ylabel('Amplitude');
legend('Source Data','R = 0.5','R = 0.2')

% -------------------------------------------------------------------------
% A typical use of raised cosine filtering is to split the filtering between
% transmitter and receiver.  The data stream is upsampled and filtered at the
% transmitter using the square-root raised cosine filter.  This plot shows
% the transmitted signal when filtered using the square-root raised cosine
% filter.  The "fir/sqrt" switch was used with RCOSINE to generate the
% square-root raised cosine filter.
% -------------------------------------------------------------------------
% Design square root filter.
[ys, ts] = rcosine(Fd, Fs, 'fir/sqrt', R, Delay);
% Filter at the transmitter.
[yc, tc] = rcosflt(x, Fd, Fs, 'filter', ys);

% figure(4)
figure;
stem(tx, x, 'kx'); hold on;
plot(tc, yc, 'm.'); hold off;
axis([0 30 -1.6 1.6]);  xlabel('Time'); ylabel('Amplitude');

% -------------------------------------------------------------------------
% The transmitted signal (magenta curve) is then filtered, but not upsampled, at
% the receiver, using the same square-root raised cosine filter, resulting in a
% signal depicted by the blue curve at the receiver.  The resulting signal is
% virtually identical to the signal filtered using a single raised cosine
% filter.  The "Fs" was used to filter without upsampling.
% -------------------------------------------------------------------------
% Filter at the receiver.
[yr, tr] = rcosflt(yc, Fd, Fs, 'filter/Fs', ys);
% Adjust for propagation delay.
tcc = tc + Delay .* Fd;  txx = tx + Delay .* Fd;

% figure(5)
figure;
stem(txx, x, 'kx'); hold on;
plot(tcc, yc, 'm-',tr, yr, 'b-'); hold off;
axis([0 30 -1.6 1.6]);  xlabel('Time'); ylabel('Amplitude');

% -------------------------------------------------------------------------
% This step demonstrates a quicker way to filter data using RCOSFLT.  When
% RCOSFLT is used without the "filter" type switch, it designs a filter and uses
% it to filter the input data.  This step creates the same plot as before but
% designs the raised cosine filter and generates the filtered stream in one
% command.
% -------------------------------------------------------------------------
% Design and filter.
[yo2, to2] = rcosflt(x, Fd, Fs, 'normal/fir', R, Delay);

% figure(6)
figure;
stem(tx, x, 'kx'); hold on;
plot(to2, yo2, 'b-'); hold off;
axis([0 30 -1.6 1.6]);  xlabel('Time'); ylabel('Amplitude');

% -------------------------------------------------------------------------
displayEndOfDemoMessage(mfilename)
% -------------------------------------------------------------------------

simulation_time = toc
% -------------------------------------------------------------------------
%                              End of Script
% -------------------------------------------------------------------------
% % 关于rcosflt的函数说明
% -------------------------------------------------------------------------
% % RCOSFLT Filter the input signal using a raised cosine filter.
% %     Y = RCOSFLT(X, Fd, Fs, TYPE_FLAG, R, DELAY) filters the input signal X
% %     using a raised cosine FIR filter. The sample frequency for the input, X,
% %     is Fd (Hz).  The sample frequency for the output, Y, is Fs (Hz).  Fs must be
% %     an integer multiple of Fd.  The TYPE_FLAG gives specific filter design
% %     or filtering options.  The rolloff factor, R, determines the width of the
% %     transition band of the filter.  DELAY is the time delay from the beginning
% %     of the filter to the peak of the impulse response.
% % 
% %     R, the rolloff factor specifies the excess bandwidth of the filter.  R must
% %     be in the range [0, 1]. For example, R = .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 and 1.5 * Fd.  Since
% %     R is normalized to the input sampling frequency, Fd, it has no units.
% %     Typical values for R are between 0.2 to 0.5.
% % 
% %     DELAY determines the group delay of the filter.  The group delay is the
% %     opposite of the change in filter phase with respect to frequency.  For linear
% %     phase filters, the group delay is also the time delay between the input
% %     signal and the peak response of the filter.  DELAY also determines the
% %     length of the filter impulse response used to filter X.  This delay is
% %         Fs/Fd * (2 * DELAY + 1).
% % 
% %     Y is the output of the upsampled, filtered input stream X.  The length of
% %     vector Y is
% %         Fs/Fd * (length(X) + 2 * DELAY).
% % 
% %     TYPE_FLAG is a string which may contain any of the option strings listed
% %     below delimited by a '/'  For example, the 'iir' and 'Fs' flags may
% %     be combined as 'iir/Fs'.  While some of the pairs of option substrings
% %     are mutually exclusive, they are not mutually exclusive in general.
% % 
% %     'fir'    Design an FIR filter and use it to filter X.  When the 'filter'
% %              TYPE_FLAG is not used, an FIR filter is designed and used to
% %              filter X.  See the 'filter' TYPE_FLAG description for the behavior
% %              when the 'fir' and 'filter' TYPE_FLAGs are used together.  This
% %              option is exclusive of the 'iir' substring.
% % 
% %     'iir'    Design an IIR filter and use it to filter X.  When the 'filter'
% %              TYPE_FLAG is not used, an IIR approximation to the equivalent FIR
% %              filter is designed and used to filter X.  See the 'filter'
% %              TYPE_FLAG description for the behavior when the 'iir' and 'filter'
% %              TYPE_FLAGs are used together.  This option is exclusive of the
% %              'fir' substring.
% % 
% %     'normal' Design a normal raised cosine filter and use it to filter X.  The
% %              filter coefficients are normalized so the peak coefficient is one.
% %              This option is exclusive of the 'sqrt' substring.
% % 
% %     'sqrt'   Design a square root raised cosine filter and use it to filter X.
% %              The filter coefficients are normalized so that the impulse
% %              response of this filter when convolved with itself will result
% %              in an impulse response that is approximately equal to the 'normal'
% %              raised cosine filter.  The difference in this approximation is due
% %              to finite filter length.  This is a useful option when the raised
% %              cosine filtering is split between transmitter and receiver by
% %              using the 'sqrt' filter in each device. This option is exclusive
% %              of the 'normal' substring.
% % 
% %     'Fs'     X is input with sample frequency Fs (i.e., the input signal has
% %              Fs/Fd samples per symbol). In this case the input signal is not
% %              upsampled from Fd to Fs but is simply filtered by the raised
% %              cosine filter.  This is useful for filtering an oversampled data
% %              stream at the receiver.  When using the 'Fs' substring, the length
% %              of vector, Y is
% %                 length(X) + Fs/Fd * 2 * DELAY.
% % 
% %     'filter' Means the filter is provided by the user.  When using the 'filter'
% %              TYPE_FLAG, the input parameters are:
% % 
% %              Y = RCOSFLT(X, Fd, Fs, TYPE_FLAG, NUM) - filters with a user-
% %              supplied FIR filter.  When the TYPE_FLAG contains 'filter' and
% %              the 'fir' type substrings, the FIR filter indicated by NUM is
% %              used to filter X.
% % 
% %              Y = RCOSFLT(X, Fd, Fs, TYPE_FLAG, NUM, DEN, DELAY) - filters with
% %              a user-supplied IIR filter.  When TYPE_FLAG contains both 'filter'
% %              and 'iir' type substrings, the IIR filter defined by numerator,
% %              NUM, and denominator, DEN, is used as to filter X.  The DELAY
% %              parameter is used to force RCOSFLT to behave as if the filter were
% %              designed by RCOSFLT using the same DELAY parameter.  The DELAY
% %              parameter should match the DELAY parameter used to design the
% %              filter defined by NUM and DEN in the RCOSINE function.  The default
% %              value of DELAY is 3.
% % 
% %              The raised cosine filter should be designed using the RCOSINE
% %              function.
% % 
% %     Y = RCOSFLT(X, Fd, Fs, TYPE_FLAG, R) filters the input signal X
% %     using a raised cosine filter and default DELAY parameter, 3.
% % 
% %     Y = RCOSFLT(X, Fd, Fs, TYPE_FLAG) filters the input signal X using a
% %     raised cosine filter and the following default parameters
% %         DELAY = 3
% %         R = .5
% % 
% %     Y = RCOSFLT(X, Fd, Fs) filters the input signal X using a raised cosine
% %     filter and the following default parameters
% %         DELAY = 3
% %         R = .5
% %         TYPE_FLAG = 'fir/normal'
% % 
% %     Y = RCOSFLT(X, Fd, Fs, TYPE_FLAG, R, DELAY, TOL) specifies the
% %     tolerance in IIR filter design. The default value for TOL is .01.
% % 
% %     [Y, T] = RCOSFLT(...) returns the time vector in T.
% -------------------------------------------------------------------------


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约