在matlab中,计算均方根误差和相关系数怎么写代码
时间: 2024-05-13 11:13:42 浏览: 14
以下是MATLAB中计算均方根误差(RMSE)和相关系数的代码:
RMSE:
```matlab
function rmse = calc_rmse(y_true, y_pred)
err = y_true - y_pred;
rmse = sqrt(mean(err .^ 2));
end
```
相关系数:
```matlab
function correlation_coefficient = calc_corrcoef(y_true, y_pred)
correlation_coefficient = corr(y_true, y_pred);
end
```
希望对你有所帮助。请问还有其他问题吗?
相关问题
matlab生成一个含噪声的信号利用不同的db小波基去噪对比他们的信噪比均方根误差和相关系数显示在折线图中
以下是一个简单的 MATLAB 代码,可以根据您的要求生成含噪信号并对其进行小波去噪,并比较它们的信噪比、均方根误差和相关系数。代码中使用了 Daubechies 4 小波基。
```matlab
% 生成含噪信号
t = 0:0.001:1;
x = sin(2*pi*50*t) + sin(2*pi*120*t);
noise = 0.5*randn(size(t));
y = x + noise;
% 小波去噪
wname = 'db4';
level = 4;
[C, L] = wavedec(y, level, wname);
thr = wthrmngr('dw2ddenoLVL','penalhi',C,L);
sorh = 's';
xd = wdencmp('gbl',C,L,wname,level,thr,sorh);
% 计算指标
SNR = snr(x, noise);
SNR_denoised = snr(x, x - xd);
RMSE = sqrt(mean((x - xd).^2));
corr = corrcoef(x, xd);
% 绘图
figure;
subplot(2,2,1);
plot(t, x);
title('原始信号');
subplot(2,2,2);
plot(t, y);
title('含噪信号');
subplot(2,2,3);
plot(t, xd);
title('去噪信号');
subplot(2,2,4);
plot([SNR, SNR_denoised, RMSE, corr(1,2)]);
title('指标比较');
xticklabels({'SNR', 'SNR_denoised', 'RMSE', 'corr'});
```
请注意,这只是一个简单的示例,您可以根据需要进行更改和修改。
matlab生成一个含噪声的信号利用不同的db小波基去噪对比他们的信噪比均方根误差和相关系数
首先,我们可以使用以下代码生成一个含噪声的信号:
```matlab
% 生成含噪声的信号
t = linspace(0,1,1000);
x = sin(2*pi*10*t) + sin(2*pi*20*t) + randn(size(t));
```
接下来,我们可以使用不同的小波基进行信号去噪,例如使用 db1、db2 和 db3 小波基:
```matlab
% 使用 db1 小波基进行信号去噪
[c,l] = wavedec(x,4,'db1');
thr = wthrmngr('swt',x);
xd1 = waverec(wthresh(c,'s',thr),'db1');
% 使用 db2 小波基进行信号去噪
[c,l] = wavedec(x,4,'db2');
thr = wthrmngr('swt',x);
xd2 = waverec(wthresh(c,'s',thr),'db2');
% 使用 db3 小波基进行信号去噪
[c,l] = wavedec(x,4,'db3');
thr = wthrmngr('swt',x);
xd3 = waverec(wthresh(c,'s',thr),'db3');
```
最后,我们可以计算每个信号去噪后的信噪比、均方根误差和相关系数:
```matlab
% 计算信噪比、均方根误差和相关系数
snr_d1 = snr(x,xd1-xd1);
rmse_d1 = sqrt(mean((x-xd1).^2));
corr_d1 = corrcoef(x,xd1);
snr_d2 = snr(x,xd2-xd2);
rmse_d2 = sqrt(mean((x-xd2).^2));
corr_d2 = corrcoef(x,xd2);
snr_d3 = snr(x,xd3-xd3);
rmse_d3 = sqrt(mean((x-xd3).^2));
corr_d3 = corrcoef(x,xd3);
```
其中,`snr()` 函数用于计算信噪比,`sqrt()` 函数用于计算均方根误差,`corrcoef()` 函数用于计算相关系数。最后,我们可以将结果打印出来:
```matlab
% 打印结果
fprintf('DB1: SNR=%.2f, RMSE=%.2f, Corr=%.2f\n', snr_d1, rmse_d1, corr_d1(1,2));
fprintf('DB2: SNR=%.2f, RMSE=%.2f, Corr=%.2f\n', snr_d2, rmse_d2, corr_d2(1,2));
fprintf('DB3: SNR=%.2f, RMSE=%.2f, Corr=%.2f\n', snr_d3, rmse_d3, corr_d3(1,2));
```