• 大小: 5KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-14
  • 语言: Matlab
  • 标签: SD  LMS  MATLAB  

资源简介

学习维纳滤波原理及自适应算法时,编写的SD算法和LMS算法在统一条件下的仿真,有画SD算法的学习曲线和权值变化曲线,LMS算法的多次实验下的学习曲线和权系数更新曲线。参考教材:现代数字信号处理及其应用(何子述、夏威)

资源截图

代码片段和文件信息

clc
clear all
%******************************************%
%*********Speech channel model*************%
%******************************************%
%输入参数:
%         data             激励信号序列序列(列向量)

%输出参数
%         speech_signal     输出语音信号(列向量)

%初始化
data_average=0;%激励信号均值
data_variance=0.27;%激励信号方差
iterations=500;%迭代次数

data=normrnd(data_averagesqrt(data_variance)1iterations).‘;%产生白噪声序列

%画图(白噪声data)
figure(1)
subplot(311)
plot(data‘y‘);
grid on
title(sprintf(‘N(%d%d)分布的白噪声序列‘data_averagedata_variance));
subplot(312)
R_data=xcorr(data‘‘);
plot(R_data‘m‘);
grid on
title(sprintf(‘N(%d%d)分布的噪声序列自相关函数‘data_averagedata_variance));
subplot(313)
periodogram(data[]1024250);
title(sprintf(‘N(%d%d)分布的噪声序列功率谱密度‘data_averagedata_variance));
%结束画图
speech_signal = filter(1[10.8458]data);

%画图
figure(2)
subplot(211)
plot(speech_signal‘m‘);
title(‘语音信号序列‘);
axis([-10 510 -5 5]);
%结束画图

%******************************************%
%******Transmission signal model***********%
%******************************************%
%输入参数:
%        speech_signal    激励信号序列序列(列向量)
%        noise            信道中的加性噪声(列向量)
%输出参数
%        data_in_fiter    输出经过信道的带噪语音信号(列向量)
noise_average=0;%噪声均值
noise_variance=0.1;%噪声方差

noise=normrnd(noise_averagesqrt(noise_variance)1iterations).‘;
data_in_fiter = filter(1[1-0.9458]speech_signal)+noise;

%画图
subplot(212)
plot(data_in_fiter‘r‘);
title(‘输出经过信道的带噪语音信号序列‘);
axis([-10 510 -5 5]);
%结束画图

%******************************************%
%*************Least Mean Square************%
%******************************************%

%输入参数:
%         data_in_fiter    滤波器输入信号序列(列向量)
%         expct_data       所期望的响应序列(列向量)
%         M_rank           滤波器阶数(标量)
%         u_step           滤波器步长(标量)

%输出参数
%        weight            滤波器权值矩阵(矩阵 M_rank*length(data_in_fiter))
%                          设迭代次数即为其输入序列长度
%        erro              误差序列(length(data_in_fiter)*i)
%        real_data         实际输出序列
%        mse               均方误差

%输入参数赋值
expct_data = speech_signal;
M_rank = 2;
u_step = 0.02;

%初始化
n = 0;%迭代次数
weight = zeros(M_rankiterations);%权重
erro = zeros(1iterations);%误差
data_instantaneous = zeros(1iterations+M_rank-1).‘;%输入序列瞬时值
real_data = zeros(1iterations);%期望信号估计,实际输出的序列
mse = zeros(1iterations);%均方误差

erro(1) = expct_data(1) - real_data(1);
data_instantaneous(1:iterations:) =  flipud(data_in_fiter);%flipud 实现倒序
mse(1) = erro(1)^2;

for n = 1:(iterations-1)
    data_temporary = data_instantaneous((iterations+1-n):(iterations+M_rank-n));%临时
    weight(:n+1) = weight(:n) + u_step*data_temporary*conj(erro(n));
    data_temporary = data_instantaneous((iterations-n):(iterations+M_rank-n-1));%临时
    real_data(n+1) = weight(:n+1)‘*data_temporary;
    erro(n+1) = expct_data(n+1) - real_data(n+1);
    mse(n+1) = erro(n+1)^2;
end
%画图
figure(3)
plot(mse‘r‘);
title(‘LMS算法一次实验学习曲线‘);
xlabel(‘迭代次数n‘)
ylabel

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-10-31 20:34  SD&LMS\
     文件        4351  2019-10-29 15:02  SD&LMS\least_mean_square.m
     文件        6172  2019-10-31 20:25  SD&LMS\least_mean_square_ex.m
     文件        1460  2019-10-31 20:30  SD&LMS\LMS.m
     文件        3196  2019-10-31 19:18  SD&LMS\steepest_descent_method.m

评论

共有 条评论