声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1751|回复: 10

[编程技巧] 关于信噪比程序出错问题

[复制链接]
发表于 2007-5-22 16:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
y=wavread('d:/mat/xinhao.wav');
save y
load y
I=y
load noissin
In=noissin
function snr=SNR(I,In)
% I:original signal
% In:noisy signal(ie. original signal + noise signal)
% snr=10*log10(sigma2(I2)/sigma2(I2-I1))
[row,col,nchannel]=size(I);
snr=0;
if nchannel==1%gray image
Ps=sum(sum((I-mean(mean(I))).^2));%signal power
Pn=sum(sum((I-In).^2));%noise power
snr=10*log10(Ps/Pn);
elseif nchannel==3%color image
for i=1:3
Ps=sum(sum((I(:,:,i)-mean(mean(I(:,:,i)))).^2));%signal power
Pn=sum(sum((I(:,:,i)-In(:,:,i)).^2));%noise power
snr=snr+10*log10(Ps/Pn);
end
snr=snr/3;
end


出现如下错误
??? Error: File: D:\mat\xinzao.m Line: 7 Column: 1
A function declaration cannot appear within a script M-file.

如何解决啊?弄了一下午了。。

[ 本帖最后由 eight 于 2007-5-22 16:12 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-5-22 16:12 | 显示全部楼层
原帖由 dyhdyh 于 2007-5-22 16:10 发表
y=wavread('d:/mat/xinhao.wav');
save y
load y
I=y
load noissin
In=noissin
function snr=SNR(I,In)
% I:original signal
% In:noisy signal(ie. original signal + noise signal)
% snr=10*log10( ...


脚本文件不能定义函数,只能使用m文件

请多阅读 matlab 基础书
 楼主| 发表于 2007-5-22 16:16 | 显示全部楼层
哦 谢谢 实在赶时间 图书馆又关门了 借不到指导类的书籍 所以我跳过了基础部分 直接信号处理了  对于脚本不甚了解 如果能讲的具体点 将万分感谢!
 楼主| 发表于 2007-5-22 16:20 | 显示全部楼层
是否意思是 我在M函数中 只能做FUNCTION 而不能做y=wavread('d:/mat/xinhao.wav');
save y
load y
I=y
load noissin
In=noissin
是么?
发表于 2007-5-22 16:22 | 显示全部楼层
原帖由 dyhdyh 于 2007-5-22 16:20 发表
是否意思是 我在M函数中 只能做FUNCTION 而不能做y=wavread('d:/mat/xinhao.wav');
save y
load y
I=y
load noissin
In=noissin
是么?


function 之前:命令窗口,之后:m文件

评分

1

查看全部评分

 楼主| 发表于 2007-5-22 16:35 | 显示全部楼层
谢谢 EIGHT的帮助 我改成在COMMAND WINDOW里面输入
y=wavread('d:/mat/xinhao.wav');
save y
load y
I=y
load noissin
In=noissin

然后再RUN M文件执行FUNCTION 是这样么?

结果出了Input argument 'I' is undefined.

Error in ==> D:\mat\xinzao.m
On line 8  ==> [row,col,nchannel]=size(I);
是我脚本&M函数没定义清楚么?
发表于 2007-5-22 16:42 | 显示全部楼层
原帖由 dyhdyh 于 2007-5-22 16:35 发表
谢谢 EIGHT的帮助 我改成在COMMAND WINDOW里面输入
y=wavread('d:/mat/xinhao.wav');
save y
load y
I=y
load noissin
In=noissin

然后再RUN M文件执行FUNCTION 是这样么?

结果出了Input argumen ...


看来真的要送佛送到西,把 function 那行及之后的代码存储为m文件,然后在命令窗口输入:

y=wavread('d:/mat/xinhao.wav');
save y
load y
I=y
load noissin
In=noissin
z = SNR(I,In)
 楼主| 发表于 2007-5-22 16:50 | 显示全部楼层
呵呵,晚上还要出差,学个东西都不能静下心,要玩速成的....
真是麻烦这为EIGHT了!
 楼主| 发表于 2007-5-22 16:51 | 显示全部楼层
又出了个新错误 呵呵。。。

??? Error using ==> -
Matrix dimensions must agree.

Error in ==> F:\matlab\work\SNR.m
On line 11  ==> Pn=sum(sum((I-In).^2));%noise power

看来好事多磨。。
发表于 2007-5-22 17:06 | 显示全部楼层
原帖由 dyhdyh 于 2007-5-22 16:51 发表
又出了个新错误 呵呵。。。

??? Error using ==> -
Matrix dimensions must agree.

Error in ==> F:\matlab\work\SNR.m
On line 11  ==> Pn=sum(sum((I-In).^2));%noise power

看来好事多磨。。


矩阵大小不匹配,估计一个是RGB,另一个是灰度


多看看基础书,你到处碰壁,然后不断上来提问根本不能解决问题,没有人有这个空闲
 楼主| 发表于 2007-5-22 17:17 | 显示全部楼层
恩 矩阵中原一维信号SIZE 是601×1
而噪音信号的SIZE是1×601 就这里不匹配

知道以后一定去看书的,无论如何,谢谢EIGHT,占用你的时间十分抱歉。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-10-3 10:37 , Processed in 0.054270 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表