贝叶斯估计角度加高斯噪声Matlab➕画图的详细代码
时间: 2024-01-22 18:06:17 浏览: 112
基于Matlab的高斯噪声产生方法
5星 · 资源好评率100%
好的,以下是贝叶斯估计角度加高斯噪声的 Matlab 代码。
```matlab
% 生成随机角度和高斯噪声的数据
angle_true = 30; % 真实角度
sigma = 2; % 高斯噪声的标准差
x = cosd(angle_true) + sigma * randn(1, 1000); % 观测数据
% 计算先验概率
angles = 0:0.5:180; % 所有可能的角度
prior = ones(size(angles)) / length(angles); % 假设角度服从均匀分布,每个角度的先验概率相等
% 计算似然概率
likelihood = zeros(size(angles));
for i = 1:length(angles)
likelihood(i) = mean(normpdf(x, cosd(angles(i)), sigma)); % 高斯分布的概率密度函数
end
% 计算后验概率
posterior = likelihood .* prior;
posterior = posterior / sum(posterior);
% 选择角度
angle_est = angles(posterior == max(posterior));
% 画图
figure;
subplot(2, 2, 1);
plot(angles, prior);
title('Prior Probability');
xlabel('Angle (degree)');
ylabel('Probability');
subplot(2, 2, 2);
plot(x, zeros(size(x)), 'o');
hold on;
for i = 1:length(angles)
plot(x, normpdf(x, cosd(angles(i)), sigma));
end
title('Likelihood Function');
xlabel('Observation');
ylabel('Probability');
subplot(2, 2, 3);
plot(angles, posterior);
title('Posterior Probability');
xlabel('Angle (degree)');
ylabel('Probability');
subplot(2, 2, 4);
plot(angles, prior);
hold on;
plot(angles, likelihood);
plot(angles, posterior);
plot(angle_true, 0, 'ro');
plot(angle_est, 0, 'bx');
legend('Prior', 'Likelihood', 'Posterior', 'True Angle', 'Estimated Angle');
title('Probability Distributions');
xlabel('Angle (degree)');
ylabel('Probability');
```
这段代码将生成一个包含四张子图的图形界面。第一张子图显示先验概率,第二张子图显示似然概率,第三张子图显示后验概率,第四张子图将三种概率分布放在一起进行比较,并在图像中标记出真实角度和估计角度。
希望这个代码对您有所帮助。如果您有任何疑问,请随时告诉我。
阅读全文