固定小数点コンバーター アプリを使用した dsp.FIRFilter オブジェクトの固定小数点への変換
固定小数点コンバーター アプリを使用して、高周波数の正弦波信号をフィルター処理する dsp.FIRFilter System object™ を固定小数点に変換します。この例には、Fixed-Point Designer™ および DSP System Toolbox™ のライセンスが必要です。
DSP フィルター関数とテスト ベンチの作成
関数 myFIRFilter を dsp.FIRFilter System object から作成します。
既定では、完全精度の固定小数点演算を使用するように System object を設定します。範囲データを収集し、固定小数点コンバーター アプリからデータ型の推奨を取得するには、‘Custom’ 設定を使用するように System object を設定します。
関数をローカルの書き込み可能なフォルダーに保存します。
function output = myFIRFilter(input, num) persistent lowpassFIR; if isempty(lowpassFIR) lowpassFIR = dsp.FIRFilter('NumeratorSource', 'Input port', ... 'FullPrecisionOverride', false, ... 'ProductDataType', 'Full precision', ... % default 'AccumulatorDataType', 'Custom', ... 'CustomAccumulatorDataType', numerictype(1,16,4), ... 'OutputDataType', 'Custom', ... 'CustomOutputDataType', numerictype(1,8,2)); end output = lowpassFIR(input, num); end
myFIRFilter_tb を作成します。テスト ベンチは、変換のための範囲情報を収集する信号を生成します。テスト ベンチを保存します。% Test bench for myFIRFilter % Remove high-frequency sinusoid using an FIR filter. % Initialize f1 = 1000; f2 = 3000; Fs = 8000; Fcutoff = 2000; % Generate input SR = dsp.SineWave('Frequency',[f1,f2],'SampleRate',Fs,... 'SamplesPerFrame',1024); % Filter coefficients num = fir1(130,Fcutoff/(Fs/2)); % Visualize input and output spectra plot = spectrumAnalyzer('SampleRate',Fs,... 'PlotAsTwoSidedSpectrum',false,... 'ShowLegend',true,'YLimits',[-120 30],... 'Title','Input Signal (Channel 1) Output Signal (Channel 2)'); % Stream for k = 1:100 input = sum(SR(),2); % Add the two sinusoids together filteredOutput = myFIRFilter(input, num); % Filter plot([input,filteredOutput]); % Visualize end
固定小数点への関数の変換
固定小数点コンバーター アプリを開きます。
MATLAB® ツールストリップ: [アプリ] タブの [コード生成] の下で、アプリ アイコンをクリックします。
MATLAB コマンド プロンプト: 次のように入力します。
fixedPointConverter
プロジェクトにエントリポイント関数
myFIRFilterを追加するために、ファイルmyFIRFilter.mを探して [開く] をクリックします。既定では、アプリはこのプロジェクトの情報および設定を現在のフォルダーの
myFirFilter.prjというファイルに保存します。
[次へ] をクリックして [入力の型を定義] ステップに進みます。
myFIRFilter.mのコード違反および固定小数点変換の準備状態の問題が検査されます。myFIRFilter.mには問題は検出されません。[入力の型を定義] ページで、
myFIRFilter_tbをテスト ファイルとして追加するためにmyFIRFilter_tb.mを参照し、[入力の型の自動定義] をクリックします。アプリはテスト ファイルから、
inputの型をdouble(1024 x 1)に、numの型をdouble(1 x 131)にすることを決定します。
[次へ] をクリックして [固定小数点に変換] ステップに進みます。
[固定小数点に変換] ページで [解析] をクリックして範囲情報を収集します。

[変数] タブに、収集した範囲情報と型の推奨が表示されます。必要に応じてデータ型の推奨を手動で編集します。

[変換] をクリックし、推奨されたデータ型を関数に適用します。

固定小数点コンバーター アプリは推奨されたデータ型を適用し、固定小数点関数
myFIRFilter_fixptを生成します。
%#codegen function output = myFIRFilter_fixpt(input, num) fm = get_fimath(); persistent lowpassFIR; if isempty(lowpassFIR) lowpassFIR = dsp.FIRFilter('NumeratorSource', 'Input port', ... 'FullPrecisionOverride', false, ... 'ProductDataType', 'Full precision', ... % default 'AccumulatorDataType', 'Custom', ... 'CustomAccumulatorDataType', numerictype(1, 16, 14), ... 'OutputDataType', 'Custom', ... 'CustomOutputDataType', numerictype(1, 8, 6)); end output = fi(lowpassFIR(input, num), 1, 16, 14, fm); end function fm = get_fimath() fm = fimath('RoundingMethod', 'Floor',... 'OverflowAction', 'Wrap',... 'ProductMode','FullPrecision',... 'MaxProductWordLength', 128,... 'SumMode','FullPrecision',... 'MaxSumWordLength', 128); end
[次へ] をクリックして、プロジェクトのサマリー詳細と、固定小数点 MATLAB コードおよび変換レポートへのリンクを表示します。
