📄 saturday.m
字号:
clear;
x=linspace(0,1,510);
s=sin(2*pi*50*x); %s是发射的正弦信号,幅度是50,频率是50HZ,长度为510
s1=dct(s); %s1是s的dct变换后的结果
for j=1:50 %循环50次,求误差的平均值
u=awgn(s,20); %%u是接收到的 叠加了高斯白噪声 的信号,信噪比是20dB
u=dct(u); %对u进行dct,结果重新放入变量u中
w=zeros(100,1);
% 采用dct域LMS算法,迭代求解
for n=100:510
y(n)=w'*u(n:-1:n-99)'; %y是滤波器输出的值 ,它是估计信号的dct值
e(n)=s1(n)-y(n); %变量e代表输出信号dct值和输入信号的误差
mu=1/(2*n+u(n:-1:n-99)*u(n:-1:n-99)'); %mu是更新步长,按照归一化方法取值
w=w+mu*u(n:-1:n-99)'*conj(e(n)); %用上一次运算的结果 对下次的抽头系数进行更新
end
y1=idct(y); %将lms滤波器的输出值进行idct,得到对输入信号的估计值
yy(j,:)=y1; %将每一次lms运算的输出结果保存在yy
ee(j,:)=abs(e).^2; %将每一次lms运算的误差的平方结果保存在ee
end
y1=mean(yy); %求运算输出的平均值y1
e1=10*log10(sum(ee)./50); %通过ee得到均方误差,并将其用分贝形式表示,使得对误差的评判时视觉效果更好
%图形表示
figure(3)
subplot(2,2,1);
plot(s);title('original signal') %输入信号
subplot(2,2,2);
plot(u);title('dct后的原始信号') %输入信号的dct结果
subplot(2,2,3);
plot(y1);title('extract signal') %提取出的信号
subplot(2,2,4);
plot(y);title('提取出的dct域的信号') %lms滤波器的输出,即估计信号的dct值
figure(4)
plot(e1(100:510));title('mean square error') %均方误差e1(dB)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -