フィルターのクリア

Variable step-size LMS in comm.LinearEqualizer (varlms replacement)

5 ビュー (過去 30 日間)
Robert Borkowski
Robert Borkowski 2022 年 12 月 9 日
回答済み: Sachin Lodhi 2023 年 8 月 30 日
Hi,
In https://www.mathworks.com/help/comm/release-notes.html?searchHighlight=varlms&s_tid=srchtitle_varlms_2 I found that varlms (as well as normlms and signlms) should be replaced by comm.LinearEqualizer with LMS algorithm. However, I am unable to find equivalent of a variable-step size LMS (StepSize property of comm.LinearEqualizer seems fixed).
Is variable-step LMS not available in comm.LinearEqualizer?
Thanks!

回答 (1 件)

Sachin Lodhi
Sachin Lodhi 2023 年 8 月 30 日
Based on my understanding, it seems that you are seeking an alternative solution to the varlms function, which has been removed in MATLAB R2022a. However, you can achieve the equivalent functionality by utilizing either the comm.LinearEqualizer or comm.DecisionFeedback objects with the LMS Adaptive Algorithm. By adjusting the step size with each iteration, you can achieve the desired behavior. I have provided a sample code snippet below that demonstrates the usage of comm.LinearEqualizer with a variable step:
% Define the channel and transmit signal
channel = [0.9 0.2 0.1] % Example channel coefficients
channel = 1×3
0.9000 0.2000 0.1000
txSignal = randi([0 1], 1000, 1); % Random binary transmit signal.
% Apply the channel to the transmit signal
rxSignal = filter(channel, 1, txSignal);
%Create a linear equalizer object
equalizer = comm.LinearEqualizer('Algorithm', 'LMS', 'StepSize', 0.01, 'Constellation', [0 1]);
for i = 1:3
% Update the step size for each iteration
stepSize = 0.01 + 0.001 * i; % Example of a variable step size
% Set the step size in the equalizer object
equalizer.StepSize = stepSize;
% Perform equalization for the current symbol
[eqSignal, error] = equalizer(rxSignal, txSignal);
% Plot the original and equalized signals
figure;
subplot(2, 1, 1);
stem(txSignal, 'filled');
title('Original Transmit Signal');
subplot(2, 1, 2);
stem(eqSignal, 'filled');
title('Equalized Signal');
end
% Display the equalizer object properties
equalizer
equalizer =
comm.LinearEqualizer with properties: Algorithm: 'LMS' NumTaps: 5 StepSize: 0.0130 Constellation: [0 1] ReferenceTap: 3 InputDelay: 0 InputSamplesPerSymbol: 1 TrainingFlagInputPort: false AdaptAfterTraining: true InitialWeightsSource: 'Auto' WeightUpdatePeriod: 1
Also please refer to these links for further information -
I hope the suggestions help you address your requirements.

製品


リリース

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by