处理图像时为什么显示有些高斯函数 图像处理未定义

求大神解决,明明定义了的函数却显示未定义_keil吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:6,675贴子:
求大神解决,明明定义了的函数却显示未定义
是这样的这几天用改飞控代码,但是我发现我自己写新函数后,无法调用。显示 implicit function is invalid in c99。我已经声明了且把头文件也include了,可是就是不能编译通过。
报考一级消防师要求,学尔森13年考培经验为您解答,更有百度信贷分期付学费.
如果把函数声明放在同一个倒是可以编译通过。。。。那为什么写在别的c文件然后include 头文件就不行?
废话当然不能用,除非你在你调用的.中写extern 调用的函数,声明一下
贴吧热议榜
使用签名档&&
保存至快速回贴查看: 2021|回复: 5|关注: 0
函数明明定义了,为什么运行的时候还是出错,说未定义
<h1 style="color:# 麦片财富积分
新手, 积分 5, 距离下一级还需 45 积分
% OFDM_basic.m&&上面是主程序,几个函数在最下面,
NgType=1; % NgType=1/2 for cyclic prefix/zero padding
if NgType==1, nt='CP'; elseif NgType==2, nt='ZP'; end
Ch=0; % Ch=0/1 for AWGN/multipath channel
if Ch==0, chType='AWGN'; Target_neb=100; else chType='CH'; Target_neb=500; end
figure(Ch+1), clf
PowerdB=[0 -8 -17 -21 -25]; % Channel tap power profile ’dB’
Delay=[0 3 5 6 8]; % Channel delay ’sample’
Power=10.^(PowerdB/10); % Channel tap power profile ’linear scale’
Ntap=length(PowerdB); % Chanel tap number
Lch=Delay(end)+1; % Channel length
Nbps=4; M=2^N % Modulation order=2/4/6 for QPSK/16QAM/64QAM
Nfft=64; % FFT size
Ng=Nfft/4; % GI (Guard Interval) length (Ng=0 for no GI)
Nsym=Nfft+Ng; % Symbol duration
Nvc=Nfft/4; % Nvc=0: no VC (virtual carrier)
Nused=Nfft-N
EbN0=[0:5:30]; % EbN0
N_iter=1e5; % Number of iterations for each EbN0
Nframe=3; % Number of symbols per frame
sigPow=0; % Signal power initialization
file_name=['OFDM_BER_' chType '_' nt '_' 'GL' num2str(Ng) '.dat'];
fid=fopen(file_name, 'w+');
norms=[1 sqrt(2) 0 sqrt(10) 0 sqrt(42)]; % BPSK 4-QAM 16-QAM
for i=0:length(EbN0)
randn('state',0);
rand('state',0);
Ber2=ber(); % BER initialization
Neb=0; Ntb=0; % Initialize the number of error/total bits
for m=1:N_iter
% Tx______________________________________________________________
X=randint(1,Nused*Nframe,M); % bit: integer vector
Xmod= qammod(X,M,0,'gray')/norms(Nbps);
if NgType~=2, x_GI=zeros(1,Nframe*Nsym);
elseif NgType==2, x_GI= zeros(1,Nframe*Nsym+Ng);
% Extend an OFDM symbol by Ng zeros
kk1=[1:Nused/2]; kk2=[Nused/2+1:Nused]; kk3=1:N kk4=1:N
for k=1:Nframe
if Nvc~=0, X_shift= [0 Xmod(kk2) zeros(1,Nvc-1) Xmod(kk1)];
else X_shift= [Xmod(kk2) Xmod(kk1)];
x= ifft(X_shift);
x_GI(kk4)= guard_interval(Ng,Nfft,NgType,x);
kk1=kk1+N kk2= kk2+N kk3=kk3+N kk4=kk4+N
if Ch==0, y= x_GI; % No channel
else % Multipath fading channel
channel=(randn(1,Ntap)+j*randn(1,Ntap)).*sqrt(Power/2);
h=zeros(1,Lch); h(Delay+1)= % cir: channel impulse response
y = conv(x_GI,h);
if i==0 % Only to measure the signal power for adding AWGN noise
y1=y(1:Nframe*Nsym); sigPow = sigPow + y1*y1';
% Add AWGN noise________________________________________________
snr = EbN0(i)+10*log10(Nbps*(Nused/Nfft)); % SNR vs. Eb/N0 by Eq.(4.28)
noise_mag = sqrt((10.^(-snr/10))*sigPow/2);
y_GI = y + noise_mag*(randn(size(y))+j*randn(size(y)));
% Rx_____________________________________________________________
kk1=(NgType==2)*Ng+[1:Nsym]; kk2=1:N
kk3=1:N kk4=Nused/2+Nvc+1:N kk5=(Nvc~=0)+[1:Nused/2];
H= fft([h zeros(1,Nfft-Lch)]); % Channel frequency response
H_shift(kk3)= [H(kk4) H(kk5)];
for k=1:Nframe
Y(kk2)= fft(remove_GI(Ng,Nsym,NgType,y_GI(kk1)));
Y_shift=[Y(kk4) Y(kk5)];
if Ch==0, Xmod_r(kk3) = Y_
else Xmod_r(kk3)=Y_shift./H_ % Equalizer - channel compensation
kk1=kk1+N kk2=kk2+N kk3=kk3+N kk4=kk4+N
X_r=qamdemod(Xmod_r*norms(Nbps),M,0,'gray');
Neb=Neb+sum(sum(de2bi(X_r,Nbps)~=de2bi(X,Nbps)));
Ntb=Ntb+Nused*Nframe*N %[Ber,Neb,Ntb]=ber(bit_Rx,bit,Nbps);
if Neb&Target_neb, end
if i==0, sigPow= sigPow/Nsym/Nframe/N_
Ber = Neb/N
fprintf('EbN0=%3d[dB], BER=%4d/%8d =%11.3e\n', EbN0(i), Neb,Ntb,Ber)
fprintf(fid, '%d\t%11.3e\n', EbN0(i), Ber);
if Ber&1e-6, end
if (fid~=0), fclose(fid); end
plot_ber(file_name,Nbps);
上面是一个ofdm的仿真程序
下面是几个函数
但是在运行的时候老是提示变量或函数未定义
function y=remove_GI(Ng,Lsym,NgType,ofdmSym)
if NgType==1, y=ofdmSym(Ng+1:Lsym); % cyclic prefix
elseif NgType==2 % cyclic suffix
y=ofdmSym(1:Lsym-Ng)+[ofdmSym(Lsym-Ng+1:Lsym) zeros (1,Lsym-2*Ng)];
else y=ofdmS
function y=Q(x)
% co-error function: 1/sqrt(2*pi) * int_x^inf exp(-t^2/2) dt. % Eq.(4.27)
y=erfc(x/sqrt(2))/2;
function plot_ber(file_name,Nbps)
EbN0dB=[0:1:30]; M=2^N
ber_AWGN = ber_QAM(EbN0dB,M,'AWGN');
ber_Rayleigh = ber_QAM(EbN0dB,M,'Rayleigh');
semilogy(EbN0dB,ber_AWGN,'r:'), hold on,
semilogy(EbN0dB,ber_Rayleigh,'r-')
a= load(file_name); semilogy(a(:,1),a(:,2),'b–s'); grid on
legend('AWGN analytic','Rayleigh fading analytic', 'Simulation');
xlabel('EbN0[dB]'), ylabel('BER'); axis([a(1,1) a(end,1) 1e-5 1])
function y = guard_interval(Ng,Nfft,NgType,ofdmSym)
if NgType==1, y=[ofdmSym(Nfft-Ng+1:Nfft) ofdmSym(1:Nfft)];
elseif NgType==2, y=[zeros(1,Ng) ofdmSym(1:Nfft)];
function ber=ber_QAM(EbN0dB,M,AWGN_or_Rayleigh)
% Find analytical BER of M-ary QAM in AWGN or Rayleigh channel
% EbN0dB=EbN0dB: Energy per bit-to-noise power[dB] for AWGN channel
% =rdB : Average SNR(2*sigma Eb/N0)[dB] for Rayleigh channel
% M = Modulation order (Alphabet or Constellation size)
N= length(EbN0dB); sqM= sqrt(M);
a= 2*(1-power(sqM,-1))/log2(sqM); b= 6*log2(sqM)/(M-1);
if nargin&3, AWGN_or_Rayleigh='AWGN'; end
if lower(AWGN_or_Rayleigh(1))=='a'
ber = a*Q(sqrt(b*10.^(EbN0dB/10))); % ber=berawgn(EbN0dB,’QAM’,M) Eq.(4.25)
else % diversity_order=1; ber=berfading(EbN0dB,’QAM’,M,diversity_order)
rn=b*10.^(EbN0dB/10)/2; ber = 0.5*a*(1-sqrt(rn./(rn+1))); % Eq.(4.26)
运行的时候&&一直提示
Undefined function or variable 'ber'.
Error in oneXone (line 29)
Ber2=ber(); % BER initialization
<h1 style="color:# 麦片财富积分
希望有人帮忙看下,实在是不会改
<h1 style="color:# 麦片财富积分
你下面程序中就没有function ber();&&只有function ber_QAM()
<h1 style="color:# 麦片财富积分
你下面程序中就没有function ber();&&只有function ber_QAM()
可是我把调用函数改为ber_QAM还是不行呢,程序都有了,你可以帮忙仿真一下看看么,改了好久了
<h1 style="color:# 麦片财富积分
我也遇到了这个问题,请问你解决了吗。请帮帮我
<h1 style="color:# 麦片财富积分
改一下一条语句&&初始化误码率 改为&&Ber2=ber_QAM(0,0,0)。
站长推荐 /2
Powered by查看: 5237|回复: 13|关注: 0
关于MATLAB图像处理的一些问题还请大神指教!!
<h1 style="color:# 麦片财富积分
新手, 积分 6, 距离下一级还需 44 积分
将一个数据矩阵转换成一幅灰度图像,下面是源程序:
I=imread('c:\users\donald\desktop\1.tif');
J=filter2(fspecial('sobel'),I);
K=mat2gray(J)
未定义与 'double' 类型且具有 'full 3d real' 属性的输入参数相对应的函数 'conv2'。
出错 filter2 (line 59)
& && &&&y = conv2(hcol, hrow, x, shape);
出错 Untitled21 (line 2)
J=filter2(fspecial('sobel'),I);
怎样修改上面的程序啊!!
<h1 style="color:# 麦片财富积分
你读入的1.tif应该是三维数据,而filter2是二维数字滤波(2-D digital filter)
<h1 style="color:# 麦片财富积分
你读入的1.tif应该是三维数据,而filter2是二维数字滤波(2-D digital filter)
那怎样去修改呢?
<h1 style="color:#39 麦片财富积分
关注者: 263
那怎样去修改呢?
买本图像处理的书吧
这种问题太尴尬了
如果这种问题都搞不定,后面的算法你又有什么能力完成呢?
<h1 style="color:# 麦片财富积分
买本图像处理的书吧
这种问题太尴尬了
如果这种问题都搞不定,后面的算法你又有什么能力完成呢? ...
:'(,我也只是刚开始学这个,这才看书看了三天,还希望不吝赐教!!!
<h1 style="color:#39 麦片财富积分
关注者: 263
,我也只是刚开始学这个,这才看书看了三天,还希望不吝赐教!!!
看书吧,有点基础了再问别人问题
否则,你懂的,你不觉得尴尬吗?
<h1 style="color:# 麦片财富积分
看书吧,有点基础了再问别人问题
否则,你懂的,你不觉得尴尬吗?
我不觉得尴尬啊,我不会我就要问,但是你会却不答,只能说明你太过于自恃清高了!!就像是别人问你1+1等于多少的问题,直接回答是2不就行了!说上面那些话的时间,对你这种大神来说足以解决我这基础的问题了吧!!
<h1 style="color:# 麦片财富积分
|此回复为最佳答案
那怎样去修改呢?
假如你的图像是RGB格式,可以先用rgb2gray,把他转化为灰度图
<h1 style="color:#39 麦片财富积分
关注者: 263
我不觉得尴尬啊,我不会我就要问,但是你会却不答,只能说明你太过于自恃清高了!!就像是别人问你1+1等 ...
呵呵...那么你就等吧....
<h1 style="color:# 麦片财富积分
假如你的图像是RGB格式,可以先用rgb2gray,把他转化为灰度图
我刚才试过了,的确可以解决,谢谢啊!!!:)
站长推荐 /2
Powered by我明明定义了这个函数为什么这个函数还会显示未定义 - STM32/STM8技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
我明明定义了这个函数为什么这个函数还会显示未定义
12:37:02  
在main函数中
GUI_Show12Char(0,20,&HZ&,RED,BLACK);
&&GUI_Show12Char(20,20,&%&,RED,BLACK);
&&GUI_Show12Char(0,0,F,RED,BLACK);
&&GUI_Show12Char(20,0,D,RED,BLACK);& &
void GUI_Show12Char(uint16_t x, uint16_t y, uint8_t *ch, uint16_t wordColor, uint16_t backColor)
& & uint8_t i, j, color, buf[32];
& & uint16_
& & uint32_t wordAddr = 0;
& & while(*ch != '\0')
& && &&&/*显示字母 */
& && &&&if(*ch & 0x80)&&//ASCII码从0~127
& && && && &/* 在字库中的ASCII码是从空格开始的也就是32开始的,所以减去32 */
& && && && &wordAddr = *ch - 32;
& && && && &wordAddr *= 16;
& && && && &wordAddr += GUI_FLASH_ASCII_ADDR;
& && && && &
& && && && &/* 读取FLASH中该字的字模 */
& && && && &FLASH_ReadData(buf, wordAddr, 16);
& && && && &
& && && && &/* 显示该文字 */& && &&&
& && && && &TFT_SetWindow(x, y, x+7, y+15);& && && &&&//字宽*高为:8*16
& && && && &for (j=0; j&16; j++) //每个字模一共有16个字节
& && && && &{
& && && && && & color = buf[j];
& && && && && & for (i=0; i&8; i++)
& && && && && & {
& && && && && && &&&if ((color&0x80) == 0x80)
& && && && && && &&&{
& && && && && && && && &TFT_WriteData(wordColor);
& && && && && && &&&}& && && && && && && && &
& && && && && && &&&else
& && && && && && &&&{
& && && && && && && && &TFT_WriteData(backColor);
& && && && && && &&&}& &&&
& && && && && && &&&color &&= 1;
& && && && && & }
& && && && &}
& && && && &ch++;& & //指针指向下一个字
& && && && &
& && && && &/* 屏幕坐标处理 */
& && && && &x += 8;
& && && && &if(x & 233)& &//TFT_XMAX -8
& && && && &{
& && && && && & x = 0;
& && && && && & y += 16;& &
& && && && &}& && && && &
& && &&&/* 显示汉字 */
& && &&&else
& && && && &/* 将汉字编码转换成在FLASH中的地址 */
& && && && &asc = *ch - 0x81;& &&&//高字节是表示分区,分区是从0x81到0xFE,所以转换成地址-0x80
& && && && &wordAddr = asc * 190; //每个分区一共有190个字
& && && && &asc = *(ch + 1); //低字节代表每个字在每个分区的位置,它是从0x40到0xFF
& && && && &if(asc & 0x7F)& &//在0x7F位置有个空位,但是我们取模不留空,所以大于0x7F之后多减一
& && && && &{
& && && && && & asc -= 0x40;
& && && && &}
& && && && &else
& && && && &{
& && && && && & asc -= 0x41;
& && && && &}
& && && && &
& && && && &wordAddr += //求出在GBK中是第几个字
& && && && &wordAddr *= 32;&&//将字位置转换位FLASH地址
& && && && &wordAddr += GUI_FLASH_12CHAR_ADDR; //加上首地址
& && && && &/* 读取FLASH中该字的字模 */
& && && && &FLASH_ReadData(buf, wordAddr, 32);
& && && && &/* 在彩屏上面显示 */
& && && && &TFT_SetWindow(x, y, x+15, y+15);
& && && && &for(i=0; i&32; i++)
& && && && &{
& && && && && &&&
& && && && && & color = buf[i];& && && && &
& && && && && & for(j=0; j&8; j++)
& && && && && & {
& && && && && && &&&if((color & 0x80) == 0x80)
& && && && && && &&&{
& && && && && && && && &TFT_WriteData(wordColor);
& && && && && && &&&}& && && && && && && && &
& && && && && && &&&else
& && && && && && &&&{
& && && && && && && && &TFT_WriteData(backColor);
& && && && && && &&&}
& && && && && && &&&color &&= 1;
& && && && && & }//for(j=0;j&8;j++)结束
& && && && &}
& && && && &/* 屏幕坐标处理 */
& && && && &x += 16;
& && && && &if(x & 225)& &//TFT_XMAX -15
& && && && &{
& && && && && & x = 0;
& && && && && & y += 16;& &
& && && && &}
& && && && &/* 写下一个字,每个汉字占两个字节所以+2 */
& && && && &ch += 2;& && && && &
void GUI_Show12Char(uint16_t x, uint16_t y, uint8_t *ch, uint16_t wordColor, uint16_t backColor);
main.c和gui.c都调用了gui.h为什么编译时报错为
.\output\工程模板.axf: Error: L6218E: Undefined symbol GUI_Show12Char (referred from main.o).
不可能不行,你在.h文件中要申明成外部函数,main才能访问,不行的话,就是你错误不止这一个!
助理工程师
12:37:03  
不可能不行,你在.h文件中要申明成外部函数,main才能访问,不行的话,就是你错误不止这一个!
助理工程师
13:54:07  
在gui.h的函数命名中中 加入extern
extern void GUI_Show12Char(uint16_t x, uint16_t y, uint8_t *ch, uint16_t wordColor, uint16_t backColor);
积分太少啦,赶紧确认.
14:02:59  
可以给我看看你的完整代码吗
14:13:34  
声明前加extern试试
14:52:28  
在gui.h的函数命名中中 加入extern
extern void GUI_Show12Char(uint16_t x, uint16_t y, uint8_t *ch, uint16_t wordColor, uint16_t backColor);
积分太少啦,赶紧确认.
我按您的方法试过了还是有这个错误,积分少。。是因为我刚进这个论坛,,,这是我的新人贴
14:52:46  
声明前加extern试试
助理工程师
23:00:50  
你在gui.h中申明一下函数,在main.c中#include &gui.h&,不可能不能调用,另外注意下你的编译器#include路径
20:22:36  
兄弟,这个怎么解决的?
浏览过的版块
Powered by}

我要回帖

更多关于 图像处理函数及其用法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信