www.gusucode.com > dsp 案例源码程序 matlab代码 > dsp/FilteringFramesUsingTestbenchGeneratorExample.m

    %% Filter Frames of a Noisy Sine Wave Signal using Testbench Generator
% This example shows how to use the Streaming Testbench Generator app to
% generate DSP algorithm testbenches. The DSP algorithm generated in this
% example is similar to the algorithm in the
% <matlab:web(fullfile(docroot,'dsp/ug/filter-frames-of-a-noisy-sine-wave-signal-in-matlab.html')) Filter
% Frames of a Noisy Sine Wave Signal in MATLAB> example. That example
% filters a noisy sine wave signal using a FIR lowpass filter and displays
% the power spectrum using a spectrum analyzer.


%% Streaming Testbench Generator Example App
% The Streaming Testbench Generator app helps you develop and test
% streaming signal processing algorithms by enabling you to quickly
% generate testbenches. To launch the Testbench Generator, enter
% |testbenchGeneratorExampleApp| at the MATLAB command prompt. The command
% launches an interface through which you can:
%
% # Select a set of *sources* and *sinks*.
% # Enter the function name of your custom *User Algorithm*.
% # Customize the properties of each of the added sources and sinks.
%
% Each source is treated as a separate input to your algorithm, but you can
% associate more than one sink with the same output from your algorithm.
testbenchGeneratorExampleApp

%% Inputs - Sine Waves and White Noise
% By default, the testbench generator selects a two-channel sine wave
% source and a white Gaussian noise source. The two channels of the sine
% wave source have frequencies of 1 kHz and 10 kHz. The sampling frequency
% is 44.1 kHz. The white Gaussian noise input has mean 0 and standard
% deviation 0.1. The data is processed in frames of 1024 samples. To add
% more sources, use the list under *Add a new source to the above list of
% inputs* to select one of the supported sources. Alternatively, you can
% add your custom System object source by selecting *Custom System object*
% from the list and clicking *Add*. The added source appears in the list of
% inputs.
% 
% <<../TestbenchGeneratorExample_Inputs.png>>
%
% After adding a source, you can select it and click *Configure* to change
% the selected source's properties.
%
% <<../TestbenchGeneratorExample_Inputs_Configure.png>>
%

%% User Algorithm - Lowpass Filter
% The default user algorithm |dspStreamingPassthrough| is a generic
% function that just passes through the inputs to the outputs. The user
% algorithm used in this example is a more meaningful function
% |hTestbenchLowpass|. You can view the code for this function by entering
edit hTestbenchLowpass
%%
% at the MATLAB command prompt. |hTestbenchLowpass| accepts two inputs,
% lowpass filters the sum of those two inputs, and returns the filtered
% signal. It uses a constrained equiripple FIR filter design with a cutoff
% frequency of 5 kHz. The ripples in the passband and stopband are equal to
% 0.05 and 0.001. Filtering is performed using |dsp.FIRFilter|, which is
% optimized for streaming.
%
% Type |hTestbenchLowpass| in the User Algorithm text box replacing the
% default |dspStreamingPassthrough|. Alternatively, you can bring up a new
% testbench generator session by entering
% |testbenchGeneratorExampleApp('hTestbenchLowpass')| at the MATLAB command
% prompt.
% 
% <<../TestbenchGeneratorExample_UserAlgorithm.png>>
% 

%% Output 
% The power spectrum of the output is displayed on a spectrum analyzer in
% dBm. You can add more sinks to visualize or post-process the outputs.
% Similar to inputs, you can use the list under *Add a new sink to the
% above list of outputs* to add a new sink, and click *Configure* to modify
% the properties of the selected sink.
%
% You can associate a single output from the user algorithm with one or
% more sinks. For example, you can visualize the same output signal
% with both a time scope and spectrum analyzer. To do this, add the
% required sinks and make sure you associate all of the sinks to desired
% output from the user algorithm by changing the value under the *Associate
% selected sink with* list.
%
% <<../TestbenchGeneratorExample_Outputs.png>>
%

%% Generate Code and Simulate
% After you add and configure the sources and sinks and enter a function
% name in the *User Algorithm* text box, the testbench generator is ready
% to generate testbench MATLAB code. To generate code, click on the
% *Generate MATLAB Code* button. A new untitled document opens in the
% MATLAB editor containing the generated testbench code.
%
% You can edit the generated code to customize it before executing it. For
% the default example, the generated code is included below. Executing this
% testbench code, you see in the spectrum analyzer that the frequencies
% above 4 kHz in the source signal are attenuated. The resulting signal
% maintains the peak at 1 kHz because 1 kHz falls in the passband of the
% lowpass filter.

% Streaming testbench script
% Generated by Streaming Testbench Generator

% Initialization
numIterations = 10000;

% Construct sources (for all inputs)
src1 = dsp.SineWave('Frequency',[1000 10000], ...
    'SampleRate',44100, ...
    'SamplesPerFrame',1024);

% Construct sinks (for all outputs)
sink1 = dsp.SpectrumAnalyzer('SampleRate',44100, ...
    'PlotAsTwoSidedSpectrum',false, ...
    'ShowLegend',true);

% Stream processing loop
clear hTestbenchLowpass;
for i = 1:numIterations
    % Sources
    in1 = src1();
    in2 = 0.1*randn(1024,2);
    
    % User Algorithm
    out1 = hTestbenchLowpass(in1,in2);
    
    % Sinks
    sink1(out1);
end

% Clean up
release(src1);
release(sink1);

%% More Customizations in Testbench Generator
% The testbench generator offers additional top-level customizations, which
% you can configure using the *Testbench Generator Settings* dialog box. To
% open this dialog box, select *Settings > Testbench Generator Settings
% ...*.
%
% <<../TestbenchGeneratorExample_Settings.png>>
%
% You can also tune some of the parameters used in your algorithm during
% testbench execution. To use the *Parameter Tuning UI*, check the *Enable
% parameter tuning* check box under the *User Algorithm* and click *Edit
% parameters table* to add the details of your tunable parameters before
% you generate testbench code. Also, make sure that your user algorithm
% handles parameter tuning during execution. See the MATLAB code for
% |hTestbenchVariableBandwithFIR| for an example of how to make your user
% algorithm work with parameter tuning.