Matlab源程序代码

合集下载

复杂网络聚类系数和平均路径长度计算的MATLAB源代码

复杂网络聚类系数和平均路径长度计算的MATLAB源代码

复杂网络聚类系数和平均路径长度计算的MATLAB源代码复杂网络的聚类系数和平均路径长度是度量网络结构特征的重要指标。

下面是MATLAB源代码,用于计算复杂网络的聚类系数和平均路径长度。

首先,我们需要定义一个函数,用于计算节点的聚集系数。

这个函数的输入参数是邻接矩阵和节点的索引,输出参数是节点的聚类系数。

```matlabfunction cc = clustering_coefficient(adj_matrix, node_index) neighbors = find(adj_matrix(node_index, :));k = length(neighbors);if k < 2cc = 0;elseconnected_count = 0;for i = 1:k-1for j = i+1:kif adj_matrix(neighbors(i), neighbors(j))connected_count = connected_count + 1;endendendcc = 2 * connected_count / (k * (k - 1));endend```接下来,我们定义一个函数,用于计算整个网络的平均聚合系数。

```matlabfunction avg_cc = average_clustering_coefficient(adj_matrix) n = size(adj_matrix, 1);cc = zeros(n, 1);for i = 1:ncc(i) = clustering_coefficient(adj_matrix, i);endavg_cc = sum(cc) / n;end```然后,我们需要计算网络的平均最短路径长度。

这里我们使用了Floyd算法来计算每对节点之间的最短路径。

```matlabfunction avg_path_length =average_shortest_path_length(adj_matrix)n = size(adj_matrix, 1);dist_matrix =graphallshortestpaths(sparse(double(adj_matrix)));avg_path_length = sum(dist_matrix(:)) / (n^2 - n);end```最后,我们可以使用这些函数来计算一个复杂网络的聚类系数和平均路径长度。

matlab的conv的c源代码

matlab的conv的c源代码

matlab的conv的c源代码MATLAB的conv函数是非常常用的信号处理函数,它用于进行离散卷积运算。

在MATLAB中,conv函数的底层实现是使用C语言编写的,我们可以通过查看源代码来了解其具体实现细节。

以下是MATLAB的conv函数的部分C源代码:```c#include "mex.h"/* Gateway Function */void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){/* Check input and output arguments */if (nrhs != 2){mexErrMsgIdAndTxt("MATLAB:conv:invalidNumInputs","Two input arguments required.");}if (nlhs > 1){mexErrMsgIdAndTxt("MATLAB:conv:maxlhs","Too many output arguments.");}/* Get input data */double *input1 = mxGetPr(prhs[0]);double *input2 = mxGetPr(prhs[1]);mwSize len1 = mxGetNumberOfElements(prhs[0]);mwSize len2 = mxGetNumberOfElements(prhs[1]);/* Calculate output size */mwSize outlen = len1 + len2 - 1;/* Create output array */plhs[0] = mxCreateDoubleMatrix(1, outlen, mxREAL); double *output = mxGetPr(plhs[0]);/* Perform convolution */for (mwSize i = 0; i < outlen; i++){output[i] = 0;for (mwSize j = 0; j < len2; j++){if (i - j >= 0 && i - j < len1){output[i] += input1[i - j] * input2[j];}}}}```以上是MATLAB的conv函数的简化版本C源代码。

TDOA定位的Chan算法MATLAB源代码

TDOA定位的Chan算法MATLAB源代码

TDOA定位的Chan算法MATLAB源代码func on [POS_ref,POS1,POS2,POS3,POS4] = TDOA_chan(R,Pbs,Q)%% TDOA定位定位Chan算法%*********************************************************% CHAN算法,假设移动台与各基站位置较近,需进行三四WLS计算% 输入参数:% R(N-1×1): TDOA测量值% Pbs(N×2): 基站的坐标,第一列为X,第二列为Y;参考基站坐标位于第一行% 输出参数:% POS_ref(2X1):第一次WLS的估计结果,作为参考作最终定位结果的判决% POS1(2X1) :定位结果1% POS2(2X1) :定位结果2% POS3(2X1) :定位结果3% POS4(2X1) :定位结果4%这段程序用于自己产生算法输入参数,用于算法测试% delta = 10; %TDOA测量误差的标准差,用于产生Q矩阵% M=4; %参考基站外的基站数量% Xb = 20;Yb = 100; %参考的基站坐标% X = zeros(M,2);% a = 2*pi/M;% for i=1:M %生成其他基站的坐标% X(i,1) = 400*cos(a*(i-1));% X(i,2) = 400*sin(a*(i-1));% end% Xreal = -150;Yreal = 200;%移动台真实坐标% %产生TDOA测量结果% Rb = sqrt((Xreal - Xb)^2+(Yreal - Yb)^2);%移动台到基站的真实距离% N = normrnd(0,delta,1,M);%产生TDOA测量误差% Kb = Xb^2+Yb^2;% R = zeros(M,1);% for i=1:M %产生TDOA测量值% R(i) = -Rb+sqrt((Xreal - X(i,1))^2+(Yreal - X(i,2))^2)+N(i);% end% Q = (0.5*eye(M)+0.5*ones(M))*(delta^2);% Pbs = [Xb Yb;X];% N = 5;% [POS_ref POS1 POS2 POS3 POS4] = TDOA_chan(R,Pbs,Q)N = size(Pbs,1);K = zeros(1,N);K = Pbs(:,1).^2 + Pbs(:,2).^2;ha = 0.5*(R.^2-K(2:N)+K(1))Ga = -[Pbs(2:N,1)-Pbs(1,1) Pbs(2:N,2)-Pbs(1,2) R]%计算第一次WLS估计结果(远距算法)Za = inv(Ga.'*inv(Q)*Ga)*Ga.'*inv(Q)*ha;Ba = diag(Va);Fa = Ba*Q*Ba;Zacov = inv(Ga.'*inv(Fa)*Ga);%第一次WLS计算(近距算法)Va2 = sqrt((Za2(1)-Pbs(2:N,1)).^2+(Za2(2)-Pbs(2:N,2)).^2);Ba2 = diag(Va2);Fa2 = Ba2*Q*Ba2;Zacov2 = inv(Ga.'*inv(Fa2)*Ga);%第二次WLS计算(近距算法)Gb = [1 0;0 1;1 1];Bb2 = [Za2(1)-Pbs(1,1) 0 0;0 Za2(2)-Pbs(1,2) 0;0 0 sqrt((Za2(1)-Pbs(1,1))^2+ (Za2(2)-Pbs(1,2))^2)];Fb2 = 4*Bb2*Zacov2*Bb2;POS_ref = Za2(1:2,1); %第一次WLS的估计结果,作为参考作最终定位结果的判决POS1 = sqrt(Zb2)+Pbs(1,:).'; %定位结果1POS2 = -sqrt(Zb2)+Pbs(1,:).';%定位结果2POS3 = [-sqrt(Zb2(1));sqrt(Zb2(2))]+Pbs(1,:).';%定位结果3POS4 = [sqrt(Zb2(1));-sqrt(Zb2(2))]+Pbs(1,:).';%定位结果4源代码运行结果展示037附图1.emf。

互信息matlab源代码

互信息matlab源代码

互信息matlab源代码互信息是一种用于评估两个变量之间相关性的统计量。

它可以用于特征选择、机器学习和数据挖掘等领域。

下面是一个用MATLAB编写的计算两个随机变量之间互信息的例子。

首先,我们定义两个随机变量X和Y。

这里我们使用正态分布生成随机数据。

```matlabmu1 = 0; mu2 = 0; sigma1 = 1; sigma2 = 1; rho = 0.5;n = 1000;接下来,我们定义一个函数`calculate_entropy`来计算随机变量的熵。

熵用于衡量随机变量的不确定性。

```matlabfunction entropy = calculate_entropy(data)frequency = tabulate(data); % 统计每个值的频率probability = frequency(:,3)/100; % 计算每个值的概率probability = probability(probability ~= 0); % 剔除概率为0的值entropy = -sum(probability.*log2(probability)); % 计算熵end```接下来,我们定义另一个函数`calculate_mutual_information`来计算X和Y之间的互信息。

```matlabfunction mi = calculate_mutual_information(x, y)joint_probability = zeros(length(unique(x)), length(unique(y)));for i=1:length(x)x_idx = find(unique(x) == x(i));y_idx = find(unique(y) == y(i));joint_probability(x_idx, y_idx) = joint_probability(x_idx, y_idx) + 1;endjoint_probability = joint_probability/sum(sum(joint_probability)); % 计算联合概率分布x_probability = sum(joint_probability,2); % 计算X的概率分布y_probability = sum(joint_probability,1); % 计算Y的概率分布entropy_x = calculate_entropy(x); % 计算X的熵entropy_y = calculate_entropy(y); % 计算Y的熵mi = 0;for i=1:size(joint_probability,1)for j=1:size(joint_probability,2)if joint_probability(i,j) ~= 0mi = mi +joint_probability(i,j)*log2(joint_probability(i,j)/(x_probability(i)*y_probabi lity(j)));endendendend```最后,我们使用这两个函数计算X和Y之间的互信息。

chen系统李雅普诺夫指数的matlab源代码

chen系统李雅普诺夫指数的matlab源代码

chen系统李雅普诺夫指数的matlab源代码以下是计算 Chen 系统的李雅普诺夫指数的 Matlab 源代码。

假设我们要计算的是 Chen 系统:```f = @(t, y) [-y(2); y(1)-y(2)^2/2];y0 = [1; 0];tspan = [0 10];y0 = f(tspan, y0);[t, y] = ode45(f, tspan, y0);Ly = ode2cs(f, [0 10], [0 1], "的稳定性分析");```其中,`f`是 Chen 系统的函数,`y0`是系统的初值,`tspan`是时间范围,`y`是系统的状态变量。

`Ly`是李雅普诺夫指数,它表示系统的稳定性。

Matlab 代码的具体步骤如下:1. 定义 Chen 系统的函数`f`,并设置初值`y0`。

2. 使用`ode45`函数求解 Chen 系统的 ODE。

3. 使用`ode2cs`函数计算李雅普诺夫指数`Ly`。

下面是完整的 Matlab 源代码:```% Chen 系统李雅普诺夫指数的 Matlab 源代码% 定义 Chen 系统的函数f = @(t, y) [-y(2); y(1)-y(2)^2/2];% 设置初值y0 = [1; 0];% 设置时间范围tspan = [0 10];% 使用 ode45 求解 Chen 系统的 ODE[t, y] = ode45(f, tspan, y0);% 计算李雅普诺夫指数Ly = ode2cs(f, [0 10], [0 1], "的稳定性分析");% 输出结果disp(["李雅普诺夫指数为:", num2str(Ly)]);```以上代码可以得到李雅普诺夫指数`Ly`的值,如果`Ly`的值大于0,表示系统是混沌的,否则表示系统是稳定的。

因子分析MATLAB程序源代码

因子分析MATLAB程序源代码

因子分析MATLAB程序源代码因子分析是一种统计分析方法,用于确定一组观测变量的潜在因子结构。

在MATLAB中,可以使用`factoran`函数进行因子分析。

下面是一个示例的MATLAB代码,用于执行因子分析,并使用经典的因子旋转方法-变简单结构法(varimax)进行因子旋转:```matlab%数据准备data = [1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8; 5 6 7 8 9];%因子分析num_factors = 2; % 欲提取的因子个数method = 'varimax'; % 因子旋转方法[loadings, spec_var, T, stats] = factoran(data, num_factors, 'rotate', method);%输出结果disp('因子载荷矩阵:');disp(loadings);disp('特殊因子方差:');disp(spec_var);disp('变换矩阵:');disp(T);disp('统计信息:');disp(stats);```在这个示例中,我们首先准备了一个包含5个观测变量的数据矩阵`data`,然后指定欲提取的因子个数`num_factors`为2,并选择`varimax`作为因子旋转方法。

调用`factoran`函数进行因子分析后,会返回以下结果:- `loadings`:因子载荷矩阵,描述所有观测变量与因子之间的关系;- `spec_var`:特殊因子方差,每个观测变量独自解释的方差;-`T`:变换矩阵,将数据旋转到简单结构后的载荷矩阵;- `stats`:统计信息,包括共同度、特殊方差和解释总方差等。

使用`disp`函数将结果打印到控制台上。

以上就是一个简单的因子分析的MATLAB代码示例,你可以根据自己的需求修改和扩展代码。

magnify matlab源程序

magnify matlab源程序

magnify matlab源程序以下是一个简单的 MATLAB 源程序,用于实现图片的放大功能: % 以下代码实现了图片的放大功能% 输入的变量 im 是一个三维 RGB 图像矩阵,factor 是放大因子 % 输出的变量 im_scaled 是一个放大后的三维 RGB 图像矩阵function im_scaled = magnify(im, factor)% 读取输入的图片大小[height, width, ~] = size(im);% 通过放大因子计算新的图片大小new_height = round(height * factor);new_width = round(width * factor);% 通过双线性插值法计算新的像素值,并把结果存储到输出矩阵中 for i = 1:new_heightfor j = 1:new_widthy = y_ratio * (i-1) + 1;x = x_ratio * (j-1) + 1;y1 = floor(y);y2 = ceil(y);x1 = floor(x);x2 = ceil(x);if x1 == x2x2 = x1 + 1;endif y1 == y2y2 = y1 + 1;endf11 = double(im(y1, x1, :));f12 = double(im(y2, x1, :));f21 = double(im(y1, x2, :));f22 = double(im(y2, x2, :));dx = x - x1;dy = y - y1;im_scaled(i,j,:) = uint8((1-dx)*(1-dy)*f11 + dx*(1-dy)*f21 +(1-dx)*dy*f12 + dx*dy*f22);endend% 显示原始图片和放大后的图片subplot(1, 2, 1);imshow(im);title('原始图片');subplot(1, 2, 2);imshow(im_scaled);title('放大后的图片');end该程序的功能是将输入的 RGB 图片矩阵进行放大,输出结果是放大后的图片矩阵。

matlab strcat函数源代码

matlab strcat函数源代码

MATLAB中的strcat函数是用来连接字符串的函数,它可以将多个字符串连接成一个新的字符串。

1. strcat函数的定义strcat函数的定义如下所示:```matlabfunction s = strcat(varargin)```其中,s为连接后的字符串,varargin为输入的字符串参数。

2. strcat函数的使用方法strcat函数的使用方法如下所示:```matlabs = strcat(str1, str2, ..., strN)```其中,str1、str2、...、strN为要连接的字符串参数,s为连接后的字符串。

3. strcat函数的源代码strcat函数的源代码如下所示:```matlabfunction s = strcat(varargin)narginchk(1, inf)for i = 1:narginvalidateattributes(varargin{i}, {'char'}, {'row'})ends = [varargin{:}];end```在上面的源代码中,首先使用了narginchk函数来检查输入参数的个数,确保参数个数在1到无穷大之间。

然后使用了validateattributes 函数来验证输入参数的类型,确保输入的参数都是字符型的向量。

使用了括号运算符[]来将所有的字符串参数连接成一个新的字符串,并将结果赋值给变量s。

4. strcat函数的示例下面是使用strcat函数的一个示例:```matlabstr1 = 'Hello, ';str2 = 'world!';s = strcat(str1, str2);disp(s);```执行上面的示例代码后,变量s的值为'Hello, world!'。

5. strcat函数的注意事项在使用strcat函数时,需要注意以下几点:- 输入的参数必须是字符型的向量,否则会导致错误。

(完整版)遗传算法matlab实现源程序

(完整版)遗传算法matlab实现源程序

附页:一.遗传算法源程序:clc; clear;population;%评价目标函数值for uim=1:popsizevector=population(uim,:);obj(uim)=hanshu(hromlength,vector,phen);end%obj%min(obj)clear uim;objmin=min(obj);for sequ=1:popsizeif obj(sequ)==objminopti=population(sequ,:);endendclear sequ;fmax=22000;%==for gen=1:maxgen%选择操作%将求最小值的函数转化为适应度函数for indivi=1:popsizeobj1(indivi)=1/obj(indivi);endclear indivi;%适应度函数累加总合total=0;for indivi=1:popsizetotal=total+obj1(indivi);endclear indivi;%每条染色体被选中的几率for indivi=1:popsizefitness1(indivi)=obj1(indivi)/total;endclear indivi;%各条染色体被选中的范围for indivi=1:popsizefitness(indivi)=0;for j=1:indivifitness(indivi)=fitness(indivi)+fitness1(j);endendclear j;fitness;%选择适应度高的个体for ranseti=1:popsizeran=rand;while (ran>1||ran<0)ran=rand;endran;if ran〈=fitness(1)newpopulation(ranseti,:)=population(1,:);elsefor fet=2:popsizeif (ran〉fitness(fet—1))&&(ran<=fitness(fet))newpopulation(ranseti,:)=population(fet,:);endendendendclear ran;newpopulation;%交叉for int=1:2:popsize-1popmoth=newpopulation(int,:);popfath=newpopulation(int+1,:);popcross(int,:)=popmoth;popcross(int+1,:)=popfath;randnum=rand;if(randnum〈 P>cpoint1=round(rand*hromlength);cpoint2=round(rand*hromlength);while (cpoint2==cpoint1)cpoint2=round(rand*hromlength);endif cpoint1>cpoint2tem=cpoint1;cpoint1=cpoint2;cpoint2=tem;endcpoint1;cpoint2;for term=cpoint1+1:cpoint2for ss=1:hromlengthif popcross(int,ss)==popfath(term)tem1=popcross(int,ss);popcross(int,ss)=popcross(int,term);popcross(int,term)=tem1;endendclear tem1;endfor term=cpoint1+1:cpoint2for ss=1:hromlengthif popcross(int+1,ss)==popmoth(term)tem1=popcross(int+1,ss);popcross(int+1,ss)=popcross(int+1,term);popcross(int+1,term)=tem1;endendclear tem1;endendclear term;endclear randnum;popcross;%变异操作newpop=popcross;for int=1:popsizerandnum=rand;if randnumcpoint12=round(rand*hromlength);cpoint22=round(rand*hromlength);if (cpoint12==0)cpoint12=1;endif (cpoint22==0)cpoint22=1;endwhile (cpoint22==cpoint12)cpoint22=round(rand*hromlength);if cpoint22==0;cpoint22=1;endendtemp=newpop(int,cpoint12);newpop(int,cpoint12)=newpop(int,cpoint22);newpop(int,cpoint22)=temp;。

如何查看MATLAB自带函数的源代码

如何查看MATLAB自带函数的源代码

如何查看MATLAB自带函数的源代码要查看MATLAB自带函数的源代码,可以使用以下几种方法:
1. help命令
MATLAB中的help命令可以提供函数的基本信息和摘要,其中包括函数的输入参数、输出参数、用法示例等。

可以在命令窗口中直接输入“help 函数名”来查看函数的帮助文档。

例如,要查看“mean”函数的帮助文档,可以输入“help mean”。

2. doc命令
MATLAB中的doc命令提供了函数的详细文档,其中包含函数的算法实现和示例代码。

与help命令不同的是,doc命令会在MATLAB的帮助浏览器中打开函数的文档,以便更好地查看函数实现。

可以在命令窗口中输入“doc 函数名”来查看函数的详细文档。

例如,要查看“mean”函数的详细文档,可以输入“doc mean”。

3. edit命令
4.查看官方文档
5.查看安装目录
MATLAB的安装目录包含了所有自带函数和工具箱的源代码。

可以通过浏览安装目录来查看具体的函数实现。

在MATLAB的命令窗口中输入“matlabroot”,可以获取安装目录的路径。

然后在文件浏览器中打开该路径,找到“toolbox”文件夹,进入相应的工具箱文件夹,即可查看所有函数的源代码文件。

总结:。

Matlab源程序代码

Matlab源程序代码

正弦波的源程序:(一),用到的函数1,f2t函数function x=f2t(X)global dt df t f T N%x=f2t(X)%x为时域的取样值矢量%X为x的傅氏变换%X与x长度相同并为2的整幂%本函数需要一个全局变量dt(时域取样间隔) X=[X(N/2+1:N),X(1:N/2)];x=ifft(X)/dt;end2,t2f函数。

function X=t2f(x)global dt df N t f T%X=t2f(x)%x为时域的取样值矢量%X为x的傅氏变换%X与x长度相同,并为2的整幂。

%本函数需要一个全局变量dt(时域取样间隔) H=fft(x);X=[H(N/2+1:N),H(1:N/2)]*dt;end(二),主程序。

1,%(1)绘出正弦信号波形及频谱global dt df t f Nclose allk=input('取样点数=2^k, k取10摆布');if isempty(k), k=10; endf0=input('f0=取1(kz)摆布');if isempty(f0), f0=1; endN=2^k;dt=0.01; %msdf=1/(N*dt); %KHzT=N*dt; %截短期Bs=N*df/2; %系统带宽f=[-Bs+df/2:df:Bs]; %频域横坐标t=[-T/2+dt/2:dt:T/2]; %时域横坐标s=sin(2*pi*f0*t); %输入的正弦信号S=t2f(s); %S是s的傅氏变换a=f2t(S); %a是S的傅氏反变换a=real(a);as=abs(S);subplot(2,1,1) %输出的频谱plot(f,as,'b');gridaxis([-2*f0,+2*f0,min(as),max(as)])xlabel('f (KHz)')ylabel('|S(f)| (V/KHz)') %figure(2)subplot(2,1,2)plot(t,a,'black') %输出信号波形画图gridaxis([-2/f0,+2/f0,-1.5,1.5])xlabel('t(ms)')ylabel('a(t)(V)')gtext('频谱图')最佳基带系统的源程序:(一),用到的函数f2t函数和t2f函数。

lagrange插值matlab源程序

lagrange插值matlab源程序

lagrange插值matlab源程序function y = lagrange_interpolation(x, y, x0)% 检查输入值的维度是否一致if numel(x) ~= numel(y)error('输入的x和y的长度不一致');end% 初始化插值多项式的系数n = length(x);p = zeros(n, n);p(:, 1) = 1; % p0 = 1% 计算拉格朗日插值基函数for i = 1:nfor j = 1:nif i ~= jp(i, j) = (x0 - x(j)) / (x(i) - x(j));endendend% 计算插值结果y = p * y; % 使用矩阵乘法计算插值结果end在这个函数中,输入参数x和y是已知的数据点,x0是需要计算插值的点。

然后,我们使用Lagrange插值基函数来计算插值多项式,并将结果存储在变量y中。

最后,返回y作为插值结果。

% 已知数据点x = [0, 1, 2, 3];y = [1, 2, 1, 3];% 需要计算插值的点x0 = 1.5;% 使用Lagrange插值进行估算y0 = lagrange_interpolation(x, y, x0);disp(y0); % 输出插值结果在这个例子中,我们使用了一组已知的数据点(x, y),然后使用Lagrange 插值方法来估算在x0 = 1.5处的y值。

然后,我们打印出这个估算结果。

请注意,这是一个简单的例子,实际使用时需要根据具体的数据和需求进行调整。

二分法程序代码【matlab源码】

二分法程序代码【matlab源码】

毕业论文(设计)题目学院学院专业学生姓名学号年级级指导教师教务处制表二分法程序代码一、程序说明本团队长期从事matlab编程与仿真工作,擅长各类毕业设计、数据处理、图表绘制、理论分析等,程序代做、数据分析具体信息联系二、程序示例主程序:function [k,x,wuca,yx]=erfenfa(a,b,tol)%a、b为区间左右端点值,tol是精度,k为计算次数,x为使用k次二分法得到的小区间[ak,bk]的中点值,y(x)为x的函数值,wuca=|ak-bk|/2。

a1=a; b1=b;ya=fun(a1); yb=fun(b1); %程序中调用的fun.m 为函数if ya* yb&gt;0,disp('注意:ya*yb&gt;0,请重新调整区间端点a和b.'), returnendmax1=-1+ceil((log(b1-a1)- log(tol))/ log(2)); % ceil是上取整for k=1: max1+1ya=fun(a1);yb=fun(b1);x=(a1+b1)/2;yx=fun(x);wuca=abs(b1-a1)/2;k=k-1;[k,a,b,x,wuca,ya,yb,yx];if yx==0a1=x; b1=x;elseif yb*yx&gt;0b1=x;yb=yx;elsea1=x;ya=yx;endif b1-a1&lt; tol , return, endendk=max1;x;wuca;yx=fun(x);End、分程序:function y1=fun(x)y1=sqrt(x^2+1)-tan(x);end结果:[k,x,wuca,yx]=erfenfa(0,pi/2,10^-5)k =17x =0.9415wuca =5.9921e-06yx =-2.6595e-06。

查看matlab中函数源代码的方法

查看matlab中函数源代码的方法

查看matlab中函数源代码的方法
有几种方法可以实现查看matlab里自带函数的源代码:
在命令窗口中输入:
(1)、type 函数名(如type rgb2gray 或者type rgb2gray.m):即可在命令窗口中显示此函数的源代码;
(2)、open 函数名(如open rgb2gray 或者open rgb2gray.m):即可打开rgb2gray.m文件;
(3)、edit 函数名(如edit rgb2gray 或者edit rgb2gray.m):即可打开rgb2gray.m文件;
(4)、还有一种方法就是故意将原有函数的参数或类型写错,它就会提示错误,然后点击提示错误处,也可打开m文件,如:
rgb2gray(f, 3);%f为彩色图像文件名,后面的3是随意加上去的,因为函数rgb2gray原本就一个参数,现在为2个,肯定会报错
rgb2gray(f, 3);
??? Error using ==> iptchecknargin at 77
Function RGB2GRAY expected at most 1 input argument
but was called instead with 2 input arguments.
Error in ==> rgb2gray>parse_inputs at 76 %点击此处即可打开m文件iptchecknargin(1,1,nargin,mfilename);
Error in ==> rgb2gray at 35 %点击此出也可打开m文件
X = parse_inputs(varargin{:});
不过,一些比较底层的源代码是看不见得。

用MATLAB实现计算器程序源代码

用MATLAB实现计算器程序源代码

function varargout = caculator(varargin)gui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @caculator_OpeningFcn, ...'gui_OutputFcn', @caculator_OutputFcn, ...'gui_LayoutFcn', [] , ...'gui_Callback', []);if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});elsegui_mainfcn(gui_State, varargin{:});endfunction caculator_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;set(handles.edit1,'string','0');set(handles.edit5,'string','0');guidata(hObject, handles);function varargout = caculator_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;function edit1_Callback(hObject, eventdata, handles)function edit1_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction edit2_Callback(hObject, eventdata, handles)function edit2_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction edit3_Callback(hObject, eventdata, handles)function edit3_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction pushbutton1_Callback(hObject, eventdata, handles)handles.num1=strcat(get(handles.edit1,'string'),'+');set(handles.edit1,'string',handles.num1);guidata(hObject,handles);function pushbutton2_Callback(hObject, eventdata, handles) handles.num2=strcat(get(handles.edit1,'string'),'-');set(handles.edit1,'string',handles.num2);guidata(hObject,handles);function pushbutton3_Callback(hObject, eventdata, handles) handles.num3=strcat(get(handles.edit1,'string'),'*');set(handles.edit1,'string',handles.num3);guidata(hObject,handles);function pushbutton4_Callback(hObject, eventdata, handles) handles.num4=strcat(get(handles.edit1,'string'),'/');set(handles.edit1,'string',handles.num4);guidata(hObject,handles);function pushbutton_1_Callback(hObject, eventdata, handles) handles.shu1=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu1=strcat(handles.yuanshu,handles.shu1);if length(handles.shu1)<2;elseif (length(handles.shu1)>=2)&&(handles.shu1(end-1)==')')&& (handles.shu1(1)=='l')temp=handles.shu1(end);handles.shu1(end)=handles.shu1(end-1);handles.shu1(end-1)=temp;endset(handles.edit1,'string',handles.shu1);guidata(hObject, handles);function pushbutton_2_Callback(hObject, eventdata, handles) handles.shu2=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu2=strcat(handles.yuanshu,handles.shu2);if length(handles.shu2)<2;elseif (length(handles.shu2)>=2)&&(handles.shu2(end-1)==')')&& (handles.shu2(1)=='l')temp=handles.shu2(end);handles.shu2(end)=handles.shu2(end-1);handles.shu2(end-1)=temp;endset(handles.edit1,'string',handles.shu2);guidata(hObject, handles);function pushbutton_4_Callback(hObject, eventdata, handles) handles.shu4=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu4=strcat(handles.yuanshu,handles.shu4);if length(handles.shu4)<2;elseif (length(handles.shu4)>=2)&&(handles.shu4(end-1)==')')&& (handles.shu4(1)=='l')temp=handles.shu4(end);handles.shu4(end)=handles.shu4(end-1);handles.shu4(end-1)=temp;endset(handles.edit1,'string',handles.shu4);guidata(hObject, handles);function pushbutton_3_Callback(hObject, eventdata, handles) handles.shu3=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu3=strcat(handles.yuanshu,handles.shu3);if length(handles.shu3)<2;elseif (length(handles.shu3)>=2)&&(handles.shu3(end-1)==')')&& (handles.shu3(1)=='l')temp=handles.shu3(end);handles.shu3(end)=handles.shu3(end-1);handles.shu3(end-1)=temp;endset(handles.edit1,'string',handles.shu3);guidata(hObject, handles);function pushbutton_5_Callback(hObject, eventdata, handles) handles.shu5=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu5=strcat(handles.yuanshu,handles.shu5);if length(handles.shu5)<2;elseif (length(handles.shu5)>=2)&&(handles.shu5(end-1)==')')&& (handles.shu5(1)=='l')temp=handles.shu5(end);handles.shu5(end)=handles.shu5(end-1);handles.shu5(end-1)=temp;endset(handles.edit1,'string',handles.shu5);guidata(hObject, handles);function pushbutton_9_Callback(hObject, eventdata, handles) handles.shu9=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu9=strcat(handles.yuanshu,handles.shu9);if length(handles.shu9)<2;elseif (length(handles.shu9)>=2)&&(handles.shu9(end-1)==')')&& (handles.shu9(1)=='l')temp=handles.shu9(end);handles.shu9(end)=handles.shu9(end-1);handles.shu9(end-1)=temp;endset(handles.edit1,'string',handles.shu9);guidata(hObject, handles);function pushbutton_7_Callback(hObject, eventdata, handles) handles.shu7=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu7=strcat(handles.yuanshu,handles.shu7);if length(handles.shu7)<2;elseif (length(handles.shu7)>=2)&&(handles.shu7(end-1)==')')&& (handles.shu7(1)=='l')temp=handles.shu7(end);handles.shu7(end)=handles.shu7(end-1);handles.shu7(end-1)=temp;endset(handles.edit1,'string',handles.shu7);guidata(hObject, handles);function pushbutton_8_Callback(hObject, eventdata, handles) handles.shu8=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu8=strcat(handles.yuanshu,handles.shu8);if length(handles.shu8)<2;elseif (length(handles.shu8)>=2)&&(handles.shu8(end-1)==')')&& (handles.shu8(1)=='l')temp=handles.shu8(end);handles.shu8(end)=handles.shu8(end-1);handles.shu8(end-1)=temp;endset(handles.edit1,'string',handles.shu8);guidata(hObject, handles);function pushbutton_6_Callback(hObject, eventdata, handles) handles.shu6=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu6=strcat(handles.yuanshu,handles.shu6);if length(handles.shu6)<2;elseif (length(handles.shu6)>=2)&&(handles.shu6(end-1)==')')&& (handles.shu6(1)=='l')temp=handles.shu6(end);handles.shu6(end)=handles.shu6(end-1);handles.shu6(end-1)=temp;endset(handles.edit1,'string',handles.shu6);guidata(hObject, handles);function pushbutton18_Callback(hObject, eventdata, handles) handles.jieguo=get(handles.edit1,'string');handles.jieguo=strcat('=',handles.jieguo);eval(['handles.result''1' handles.jieguo]);set(handles.edit5,'string',num2str(handles.result1));guidata(hObject,handles);function pushbutton_0_Callback(hObject, eventdata, handles) handles.shu0=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu0=strcat(handles.yuanshu,handles.shu0);if length(handles.shu0)<2;elseif (length(handles.shu0)>=2)&&(handles.shu0(end-1)==')')&& (handles.shu0(1)=='l')temp=handles.shu0(end);handles.shu0(end)=handles.shu0(end-1);handles.shu0(end-1)=temp;endset(handles.edit1,'string',handles.shu0);guidata(hObject, handles);function pushbutton20_Callback(hObject, eventdata, handles) handles.shu10=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');handles.shu10=strcat(handles.yuanshu,handles.shu10);set(handles.edit1,'string',handles.shu10);guidata(hObject, handles);function pushbutton21_Callback(hObject, eventdata, handles) function edit5_Callback(hObject, eventdata, handles)function edit5_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction pushbutton22_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.fanhao=strcat('-(',handles.yuanshu,')');set(handles.edit1,'string',handles.fanhao);guidata(hObject, handles);function pushbutton23_Callback(hObject, eventdata, handles)set(handles.edit1,'string','0');set(handles.edit5,'string','0');guidata(hObject, handles);function pushbutton24_Callback(hObject, eventdata, handles)result=questdlg('ÕæµÄÒªÍ˳ö£¿','Í˳öÈ·ÈÏ','È·¶¨','È¡Ïû','È¡Ïû'); if result=='È·¶¨', close(gcf); endfunction pushbutton25_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.sin=strcat('sin(',handles.yuanshu,')');set(handles.edit1,'string',handles.sin);guidata(hObject, handles);function pushbutton26_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.cos=strcat('cos(',handles.yuanshu,')');set(handles.edit1,'string',handles.cos);guidata(hObject, handles);function pushbutton27_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.tan=strcat('tan(',handles.yuanshu,')');set(handles.edit1,'string',handles.tan);guidata(hObject, handles);function pushbutton28_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.ln=strcat('reallog(',handles.yuanshu,')');set(handles.edit1,'string',handles.ln);guidata(hObject, handles);function pushbutton29_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.log=strcat('log',handles.yuanshu,'()');set(handles.edit1,'string',handles.log);guidata(hObject, handles);function pushbutton30_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.daoshu=strcat('1/(',handles.yuanshu,')');set(handles.edit1,'string',handles.daoshu);guidata(hObject, handles);function pushbutton31_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.sqrt=strcat('sqrt(',handles.yuanshu,')');set(handles.edit1,'string',handles.sqrt);guidata(hObject, handles);function pushbutton32_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.pingfang=strcat('(',handles.yuanshu,')^2');set(handles.edit1,'string',handles.pingfang);guidata(hObject, handles);function pushbutton33_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.ncifang=strcat('(',handles.yuanshu,')^N');set(handles.edit1,'string',handles.ncifang);guidata(hObject, handles);function pushbutton35_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.kuohao=strcat('(',handles.yuanshu,')');set(handles.edit1,'string',handles.kuohao);guidata(hObject, handles);function pushbutton36_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.yuanshu=handles.yuanshu(1:(end-1));if length(handles.yuanshu)<1handles.yuanshu='0';endset(handles.edit1,'string',handles.yuanshu);guidata(hObject, handles);% --- Executes on button press in pushbutton37.function pushbutton37_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.exp=strcat('exp(',handles.yuanshu,')');set(handles.edit1,'string',handles.exp);guidata(hObject, handles);% --- Executes when user attempts to close figure1.function figure1_CloseRequestFcn(hObject, eventdata, handles)% hObject handle to figure1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% Hint: delete(hObject) closes the figuredelete(hObject);%--------------------------------------------------------------------function Untitled_14_Callback(hObject, eventdata, handles)% hObject handle to Untitled_14 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Untitled_15_Callback(hObject, eventdata, handles)set(gcf,'color','red')% hObject handle to Untitled_15 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Untitled_16_Callback(hObject, eventdata, handles)set(gcf,'color','blue')% hObject handle to Untitled_16 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Untitled_17_Callback(hObject, eventdata, handles)set(gcf,'color','green')% hObject handle to Untitled_17 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Untitled_18_Callback(hObject, eventdata, handles)set(gcf,'color','black')% hObject handle to Untitled_18 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Untitled_19_Callback(hObject, eventdata, handles)set(gcf,'color','yellow')% hObject handle to Untitled_19 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Untitled_20_Callback(hObject, eventdata, handles)set(gcf,'color','m')% hObject handle to Untitled_20 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) function Untitled_1_Callback(hObject, eventdata, handles)function Untitled_2_Callback(hObject, eventdata, handles)function Untitled_3_Callback(hObject, eventdata, handles)function Untitled_4_Callback(hObject, eventdata, handles)function Untitled_4_CreateFcn(hObject, eventdata, handles)function Untitled_5_Callback(hObject, eventdata, handles)function Untitled_6_Callback(hObject, eventdata, handles)。

Matlab实现数字信号处理(源代码)

Matlab实现数字信号处理(源代码)

1 编制程序产生单位抽样序列δ(n) 及δ(n﹣学号),并绘制出图形。

δ(n) %实现单位抽样序列δ(n)程序k=-30:30;delta=[zeros(1,30),1,zeros(1,30)];stem(k,delta)δ(n﹣学号)%实现单位抽样序列δ(n﹣22)程序k=-30:30;delta=[zeros(1,52),1,zeros(1,8)];stem(k,d2 编制程序产生单位阶跃序列u(n) 及u(n﹣学号)及u(n)﹣u(n﹣学号),并绘制出图形。

%实现单位阶跃序列u(n)程序k=-30:30;delta=[zeros(1,30),1,ones(1,30)]; stem(k,delta)%实现阶跃序列u(n﹣22)程序k=-30:30;delta=[zeros(1,52),1,ones(1,8)];stem(k,delta)%实现阶跃序列u(n)﹣u(n﹣22)程序k=-30:30;(1,52),1,ones(1,8)];stem(k,delta)3 编制程序产生正弦序列x(n)= 学号sin(2πn),x(n)= 学号sin(2πn/学号) 及x(n)= 学号sin(2n),并绘制出图形。

%实现正弦序列x(n)= 22sin(2πn)程序n=0:100;x=22*sin(2*n*pi);stem(n,x)%实现正弦序列x(n)= 22sin(2πn/22)程序Array n=0:100;x=22*sin(2*n*pi/22);stem(n,x)n=0:100;x=22*sin(2*n);stem(n,x)4 编制程序产生复指数序列x(n)= e j学号n,并绘制图形。

%实现复指数序列x(n)= ej22n程序n=0:50;x=exp(i*22).^n;xr=real(x);xi=imag(x);xm=abs(x); xa=angle(x); figure;subplot(221);stem(n,xr);title('实部'); subplot(222);stem(n,xi);title('虚部'); subplot(223);stem(n,xm);title('模'); subplot(224);stem(n,xa);title('相角');实部204060虚部0204060模0204060相角5编制程序产生指数序列x(n)= a n,并绘制出图形。

matlab源代码

matlab源代码

例错误!文档中没有指定样式的文字。

-1%周期信号(方波)的展开,fb_jinshi.mclose all;clear all;N=100; %取展开式的项数为2N+1项T=1;fs=1/T;N_sample=128; %为了画出波形,设置每个周期的采样点数dt = T/N_sample;t=0:dt:10*T-dt;n=-N:N;Fn = sinc(n/2).*exp(-j*n*pi/2);Fn(N+1)=0;ft = zeros(1,length(t));for m=-N:Nft = ft + Fn(m+N+1)*exp(j*2*pi*m*fs*t);endplot(t,ft)例错误!文档中没有指定样式的文字。

-4利用FFT计算信号的频谱并与信号的真实频谱的抽样比较。

脚本文件T2F.m定义了函数T2F,计算信号的傅立叶变换。

function [f,sf]= T2F(t,st)%This is a function using the FFT function to calculate a signal's Fourier %Translation%Input is the time and the signal vectors,the length of time must greater %than 2%Output is the frequency and the signal spectrumdt = t(2)-t(1);T=t(end);df = 1/T;N = length(st);f=-N/2*df:df:N/2*df-df;sf = fft(st);sf = T/N*fftshift(sf);脚本文件F2T.m定义了函数F2T,计算信号的反傅立叶变换。

function [t st]=F2T(f,sf)%This function calculate the time signal using ifft function for the input %signal's spectrumdf = f(2)-f(1);Fmx = ( f(end)-f(1) +df);dt = 1/Fmx;N = length(sf);T = dt*N;%t=-T/2:dt:T/2-dt;t = 0:dt:T-dt;sff = fftshift(sf);st = Fmx*ifft(sff);另写脚本文件fb_spec.m如下:%方波的傅氏变换, fb_spec.mclear all;close all;T=1;N_sample = 128;dt=T/N_sample;t=0:dt:T-dt;st=[ones(1,N_sample/2), -ones(1,N_sample/2)]; %方波一个周期subplot(211);plot(t,st);axis([0 1 -2 2]);xlabel('t'); ylabel('s(t)');subplot(212);[f sf]=T2F(t,st); %方波频谱plot(f,abs(sf)); hold on;axis([-10 10 0 1]);xlabel('f');ylabel('|S(f)|');%根据傅氏变换计算得到的信号频谱相应位置的抽样值sff= T^2*j*pi*f*0.5.*exp(-j*2*pi*f*T).*sinc(f*T*0.5).*sinc(f*T*0.5);plot(f,abs(sff),'r-')例错误!文档中没有指定样式的文字。

matlab中bode函数源程序

matlab中bode函数源程序

一、概述在控制系统工程中,频率响应是系统性能分析的重要手段之一。

Bode 图是频率响应的常用图示方法之一,它能够直观地展现系统的幅频特性和相频特性。

在MATLAB中,我们可以利用bode函数来绘制系统的Bode图,对系统的频率响应进行分析和评估。

二、bode函数的基本语法MATLAB中bode函数的基本语法如下:[bode_mag, bode_phase, w] = bode(sys)其中,sys表示系统的传递函数模型或状态空间模型;bode_mag和bode_phase分别表示系统的幅频特性和相频特性;w表示频率范围。

三、bode函数的使用方法1. 导入系统模型在使用bode函数之前,首先需要导入系统的传递函数模型或状态空间模型。

对于传递函数模型G(s),可以使用以下命令进行导入:sys = tf([1],[1 2 1])2. 绘制Bode图一旦导入了系统模型,就可以利用bode函数来绘制系统的Bode图。

使用以下命令可以实现:[bode_mag, bode_phase, w] = bode(sys)3. 显示Bode图绘制Bode图之后,可以使用以下命令来显示幅频特性和相频特性:figuresubplot(2,1,1)semilogx(w,20*log10(bode_mag))grid onxlabel('Frequency (rad/s)')ylabel('Magnitude (dB)')title('Bode Magnitude Plot')subplot(2,1,2)semilogx(w,bode_phase)grid onxlabel('Frequency (rad/s)')ylabel('Phase (deg)')title('Bode Phase Plot')四、实例演示下面我们以一个具体的系统为例,演示bode函数的使用方法。

matlab的conv的c源代码

matlab的conv的c源代码

matlab的conv的c源代码MATLAB的conv函数是一个非常常用的函数,用于计算两个向量的卷积。

在MATLAB中,conv函数是通过C语言编写的,下面是conv函数的C源代码。

```c#include <stdio.h>#include <stdlib.h>void conv(double *x, int len_x, double *h, int len_h, double *y) {int len_y = len_x + len_h - 1; // 计算卷积结果的长度// 分配内存空间double *temp = (double *)malloc(len_y * sizeof(double));// 初始化卷积结果为0for (int i = 0; i < len_y; i++) {temp[i] = 0;}// 计算卷积for (int i = 0; i < len_x; i++) {for (int j = 0; j < len_h; j++) {temp[i + j] += x[i] * h[j];}}// 将卷积结果复制到输出数组for (int i = 0; i < len_y; i++) {y[i] = temp[i];}// 释放内存空间free(temp);}int main() {double x[] = {1, 2, 3, 4, 5};double h[] = {1, 1, 1};int len_x = sizeof(x) / sizeof(x[0]);int len_h = sizeof(h) / sizeof(h[0]);int len_y = len_x + len_h - 1;double *y = (double *)malloc(len_y * sizeof(double)); conv(x, len_x, h, len_h, y);// 打印卷积结果for (int i = 0; i < len_y; i++) {printf("%f ", y[i]);}printf("\n");// 释放内存空间free(y);return 0;}```以上是conv函数的C源代码。

FSK调制解调MATLAB源代码

FSK调制解调MATLAB源代码

FSK调制解调MATLAB源代码关键词:FSK 高斯白噪声调制眼图信噪比function FSKFc=10; %载频Fs=40; %系统采样频率Fd=1; %码速率N=Fs/Fd;df=10;numSymb=25;%进行仿真的信息代码个数M=2; %进制数SNRpBit=60;%信噪比SNR=SNRpBit/log2(M);seed=[12345 54321];numPlot=25;%产生25个二进制随机码x=randsrc(numSymb,1,[0:M-1]);%产生25个二进制随机码figure(1)stem([0:numPlot-1],x(1:numPlot),'bx');title('二进制随机序列')xlabel('Time');ylabel('Amplitude');%调制y=dmod(x,Fc,Fd,Fs,'fsk',M,df);numModPlot=numPlot*Fs;t=[0:numModPlot-1]./Fs;figure(2)plot(t,y(1:length(t)),'b-');axis([min(t) max(t) -1.5 1.5]);title('调制后的信号')xlabel('Time');ylabel('Amplitude');%在已调信号中加入高斯白噪声randn('state',seed(2));y=awgn(y,SNR-10*log10(0.5)-10*log10(N),'measured',[],'dB');%在已调信号中加入高斯白噪声figure(3)plot(t,y(1:length(t)),'b-');%画出经过信道的实际信号axis([min(t) max(t) -1.5 1.5]);title('加入高斯白噪声后的已调信号')xlabel('Time');ylabel('Amplitude');%相干解调figure(4)z1=ddemod(y,Fc,Fd,Fs,'fsk/eye',M,df);title('相干解调后的信号的眼图')%带输出波形的相干M元频移键控解调figure(5)stem([0:numPlot-1],x(1:numPlot),'bx');hold on;stem([0:numPlot-1],z1(1:numPlot),'ro');hold off;axis([0 numPlot -0.5 1.5]);title('相干解调后的信号原序列比较')legend('原输入二进制随机序列','相干解调后的信号') xlabel('Time');ylabel('Amplitude');%非相干解调figure(6)z2=ddemod(y,Fc,Fd,Fs,'fsk/eye/noncoh',M,df);title('非相干解调后的信号的眼图')%带输出波形的非相干M元频移键控解调figure(7)stem([0:numPlot-1],x(1:numPlot),'bx');hold on;stem([0:numPlot-1],z2(1:numPlot),'ro');hold off;axis([0 numPlot -0.5 1.5]);title('非相干解调后的信号')legend('原输入二进制随机序列','非相干解调后的信号') xlabel('Time');ylabel('Amplitude');%误码率统计[errorSym ratioSym]=symerr(x,z1);figure(8)simbasebandex([0:1:5]);title('相干解调后误码率统计')[errorSym ratioSym]=symerr(x,z2);figure(9)simbasebandex([0:1:5]);title('非相干解调后误码率统计')%滤除高斯白噪声Delay=3;R=0.5ropD=0; %滞后3s[yf,tf]=rcosine(Fd,Fs,'fir',R,Delay); %升余弦函数[yo2,to2]=rcosflt(y,Fd,Fs,'filter',yf);%加入高斯白噪声后的已调信号和经过升余弦滤波器后的已调信号t=[0:numModPlot-1]./Fs;figure(10)plot(t,y(1:length(t)),'r-');hold on;plot(to2,yo2,'b-');hold off;axis([0 30 -1.5 1.5]);xlabel('Time');ylabel('Amplitude');legend('加入高斯白噪声后的已调信号','经过升余弦滤波器后的已调信号') title('升余弦滤波前后波形比较')eyediagram(yo2,N);%眼图title('加入高斯白噪声后的已调信号的眼图')ASK数字通信系统matlab仿真及误码率分析别人叫我帮忙的但是我不是通信专业大家帮帮忙1、假设某数字通信系统收发信息速率为1kbps,发送端对数字信息进行ASK调制后,使用模拟线路进行传输,其中,载波频率为4kHz,数字“1”对应有载波,数字“0”对应无载波,接收端接收到信号后使用载波信号为模板进行相关解调。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

正弦波的源程序:(一),用到的函数1,f2t函数function x=f2t(X)global dt df t f T N%x=f2t(X)%x为时域的取样值矢量%X为x的傅氏变换%X与x长度相同并为2的整幂%本函数需要一个全局变量dt(时域取样间隔) X=[X(N/2+1:N),X(1:N/2)];x=ifft(X)/dt;end2,t2f函数。

function X=t2f(x)global dt df N t f T%X=t2f(x)%x为时域的取样值矢量%X为x的傅氏变换%X与x长度相同,并为2的整幂。

%本函数需要一个全局变量dt(时域取样间隔) H=fft(x);X=[H(N/2+1:N),H(1:N/2)]*dt;end(二),主程序。

1,%(1)绘出正弦信号波形及频谱global dt df t f Nclose allk=input('取样点数=2^k, k取10左右');if isempty(k), k=10; endf0=input('f0=取1(kz)左右');if isempty(f0), f0=1; endN=2^k;dt=0.01; %msdf=1/(N*dt); %KHzT=N*dt; %截短时间Bs=N*df/2; %系统带宽f=[-Bs+df/2:df:Bs]; %频域横坐标t=[-T/2+dt/2:dt:T/2]; %时域横坐标s=sin(2*pi*f0*t); %输入的正弦信号S=t2f(s); %S是s的傅氏变换a=f2t(S); %a是S的傅氏反变换a=real(a);as=abs(S);subplot(2,1,1) %输出的频谱plot(f,as,'b');gridaxis([-2*f0,+2*f0,min(as),max(as)]) xlabel('f (KHz)')ylabel('|S(f)| (V/KHz)') %figure(2) subplot(2,1,2)plot(t,a,'black') %输出信号波形画图gridaxis([-2/f0,+2/f0,-1.5,1.5])xlabel('t(ms)')ylabel('a(t)(V)')gtext('频谱图')最佳基带系统的源程序:(一),用到的函数f2t函数和t2f函数。

代码>>(二),主程序globaldt t f df N Tclose allclear Eb_N0 Pek=input('取样点数=2^k, k取13左右'); if isempty(k), k=13; endz=input('每个信号取样点数=2^z, z<k'); if isempty(z), z=3; endaa=input('滚降系数=[0.5]');if aa==[],aa=0.5;endN=2^k;L=2^z;M=N/L;Rb=2; %码速率是2Mb/sTs=1/Rb; %码元间隔dt=Ts/L; %时域采样间隔df=1/(N*dt); %频域采样间隔T=N*dt; %截短时间Bs=N*df/2; %系统带宽f=[-Bs+df/2:df:Bs]; %频域横坐标t=[-T/2+dt/2:dt:T/2]; %时域横坐标g=sin(pi*t/Ts).*cos(pi*t*aa/Ts)./[pi*t/Ts.*(1-4*t.^2*aa^2/Ts^2)]; %升余弦脉冲波形GG=t2f(g);GG=abs(GG); %升余弦脉冲的傅式变换GT=sqrt(GG);GR=GT; %最佳系统的发送接收滤波器的傅式变换for l1=1:20;Eb_N0(l1)=(l1-1); %Eb/N0 in dBeb_n0(l1)=10^(Eb_N0(l1)/10);Eb=1;n0=Eb/eb_n0(l1); %信道的噪声谱密度sita=n0*Bs; %信道中噪声功率n_err=0; %误码计数for l2=1:20;b=sign(randn(1,M));s=zeros(1,N); %产生冲激序列s(L/2:L:N)=b/dt;SS=t2f(s);S=SS.*GG; %信道的傅式变化a=f2t(S);a=real(a); %不加噪声的输出n_ch=sqrt(sita)*randn(size(t)); %信道噪声N_CH=t2f(n_ch);nr=real(f2t(N_CH.*GR)); %输出噪声sr=a+nr; %接收信号y=sr(L/2-L/4:L:N-L/4); %取样bb=sign(y); %判决n_err=n_err+length(find(bb~=b));%错误累计endPe(l1)=n_err/(M*l2);semilogy(Eb_N0,Pe,'g'); %Pe~Eb/N0曲线画图xlabel('Eb/N0');ylabel('Pe');title('Pe~Eb/N0曲线');eb_n0=10.^(Eb_N0/10);hold onsemilogy(Eb_N0,0.5*erfc(sqrt(eb_n0)));axis([0,15,1e-4,1])xlabel('Eb/N0')ylabel('Pe')legend('实际的','理论的')end多径传输的源程序:(一),用到的函数f2t函数和t2f函数。

代码>>(二),主程序global dt t f df N Tclose allclear Eb_N0 Pek=input('取样点数=2^k, k取13左右');if isempty(k), k=13; endz=input('每个信号取样点数=2^z, z<k');if isempty(z), z=3; endaa=input('滚降系数=[0.5]');if aa==[],aa=0.5;endN=2^k;L=2^z;M=N/L;Rb=2; %码速率是2Mb/sTs=1/Rb; %码元间隔dt=Ts/L; %时域采样间隔df=1/(N*dt); %频域采样间隔T=N*dt; %截短时间Bs=N*df/2; %系统带宽f=[-Bs+df/2:df:Bs]; %频域横坐标t=[-T/2+dt/2:dt:T/2]; %时域横坐标g=sin(pi*t/Ts).*cos(pi*t*aa/Ts)./[pi*t/Ts.*(1-4*t.^2*aa^2/Ts^2)]; %升余弦脉冲波形GG=t2f(g);GG=abs(GG); %升余弦脉冲的傅式变换GT=sqrt(GG);GR=GT; %最佳系统的发送接收滤波器的傅式变换for l1=1:20;Eb_N0(l1)=(l1-1); %Eb/N0 in dBeb_n0(l1)=10^(Eb_N0(l1)/10);Eb=1;n0=Eb/eb_n0(l1); %信道的噪声谱密度sita=n0*Bs; %信道中噪声功率n_err=0; %误码计数for l2=1:5;dm=Ts/2;C=abs(1-0.5*exp(-j*2*pi*f*dm));%多径信道b=sign(randn(1,M));s=zeros(1,N); %产生冲激序列s(L/2:L:N)=b/dt;SS=t2f(s);S=SS.*GG.*C; %信道的傅式变化a=f2t(S);a=real(a); %不加噪声的输出n_ch=sqrt(sita)*randn(size(t)); %信道噪声N_CH=t2f(n_ch);nr=real(f2t(N_CH.*GR)); %输出噪声sr=a+nr; %接收信号y=sr(L/2:L:N); %取样bb=sign(y); %判决n_err=n_err+length(find(bb~=b));%错误累计endPe(l1)=n_err/(M*l2);semilogy(Eb_N0,Pe,'black'); %Pe~Eb/N0曲线画图xlabel('Eb/N0');ylabel('Pe');title('Pe~Eb/N0曲线'); eb_n0=10.^(Eb_N0/10);hold onsemilogy(Eb_N0,0.5*erfc(sqrt(eb_n0)));axis([0,15,1e-3,1])xlabel('Eb/N0')ylabel('Pe')legend('实际的','理论的')end高斯噪声的源程序:function[gsrv1,gsrv2]=gngauss(m,sgma)if nargin==0,m=0;sgma=1;elseif nargin==1,sgma=m;m=0;end;u=rand;z=sgma*(sqrt(2*log(1/(1-u))));u=rand;gsrv1=m+z*cos(2*pi*u);gsrv2=m+z*sin(2*pi*u);Q函数互补的源程序:function[y]=Qfunct(x)y=(1/2)*erfc(x/sqrt(2));单极性归零码的源程序:(一),用到的函数f2t函数和t2f函数。

代码>>(二),主程序global dt t f df N Tclose allk=input('取样点数=2^k, k取10左右'); if isempty(k), k=13; endz=input('每个信号取样点数=2^z,z<k'); if isempty(z), z=5; endf0=input('f0=取1(kz)左右');if isempty(f0), f0=1; endN=2^kL=2^z;M=N/L;Rb=2;Ts=0.5 %码元宽度是0.5usdt=Ts/L; %时域采样间隔df=1/(N*dt) %MHzT=N*dt %截短时间Bs=N*df/2 %系统带宽f=[-Bs+df/2:df:Bs]; %频域横坐标t=[-T/2+dt/2:dt:T/2]; %时域横坐标EP=zeros(size(f))+eps;for ii1=1:30b=round(rand(1,M)); %产生随机码s=zeros(1,N);for ii=1:L/2;s(ii+[0:M-1]*L)=b;endS=t2f(s); %S是s的傅氏变换a=f2t(S); %a是S的傅氏反变换a=abs(a);P=S.*conj(S)/T; %功率谱EP=(EP*(ii1-1)+P+eps)/ii1;figure(1) %输出的功率画图plot(f,10*log10(EP),'b');gridaxis([-15,15,-100,20]);xlabel('f (KHz)');ylabel('P (V/KHz)') ;title('功率谱图') figure(2) %输出信号波形画图plot(t,a,'b')gridaxis([-3,3,0,1.3]);xlabel('t (ms)');ylabel('s(t) (V)');title('单极性RZ的时域图') end8psk的源程序:function[pb,ps]=cm_sm32(snr_in_dB)N=10000;E=1;snr=10^(snr_in_dB/10);sgma=sqrt(E/(3*2*snr));s000=[1 0];s001=[cos(pi/4) sin(pi/4)];s011=[0 1];s010=[cos(3*pi/4) sin(3*pi/4)];s110=[-1 0];s111=[cos(5*pi/4) sin(5*pi/4)];s101=[0 -1];s100=[cos(7*pi/4) sin(7*pi/4)];for i=1:N,temp=rand;if(temp<0.125),dsource1(i)=0;dsource2(i)=0;dsource3(i)=0;elseif(temp<0.25),dsource1(i)=0;dsource2(i)=0;dsource3(i)=1;elseif(temp<0.375),dsource1(i)=0;dsource2(i)=1;dsource3(i)=0;elseif(temp<0.5),dsource1(i)=0;dsource2(i)=1;dsource3(i)=1;elseif(temp<0.625),dsource1(i)=1;dsource2(i)=0;dsource3(i)=0;elseif(temp<0.75),dsource1(i)=1;dsource2(i)=0;dsource3(i)=1;elseif(temp<0.875),dsource1(i)=1;dsource2(i)=1;dsource3(i)=0;elsedsource1(i)=1;dsource2(i)=1;dsource3(i)=1;end;end;numofsymbolerror=0;numofbiterror=0;for i=1:N,n(1)=gngauss(sgma);n(2)=gngauss(sgma);if((dsource1(i)==0)&(dsource2(i)==0)&(dsource3(i)==0)),r=s000+n;elseif((dsource1(i)==0)&(dsource2(i)==0)&(dsource3(i)==1)), r=s001+n;elseif((dsource1(i)==0)&(dsource2(i)==1)&(dsource3(i)==0)), r=s010+n;elseif((dsource1(i)==0)&(dsource2(i)==1)&(dsource3(i)==1)), r=s011+n;elseif((dsource1(i)==1)&(dsource2(i)==0)&(dsource3(i)==0)), r=s100+n;elseif((dsource1(i)==1)&(dsource2(i)==0)&(dsource3(i)==1)),r=s101+n;elseif((dsource1(i)==1)&(dsource2(i)==1)&(dsource3(i)==0)), r=s110+n;elser=s111+n;end;c000=dot(r,s000);c001=dot(r,s001);c010=dot(r,s010);c011=dot(r,s011);c100=dot(r,s100);c101=dot(r,s101);c110=dot(r,s110);c111=dot(r,s111);c_max=max([c000 c001 c010 c011 c100 c101 c110 c111]);if(c000==c_max),decis1=0;decis2=0;decis3=0;elseif(c001==c_max),decis1=0;decis2=0;decis3=1;elseif(c010==c_max),decis1=0;decis2=1;decis3=0;elseif(c011==c_max),decis1=0;decis2=1;decis3=1;elseif(c100==c_max),decis1=1;decis2=0;decis3=0;elseif(c101==c_max),decis1=1;decis2=0;decis3=1;elseif(c110==c_max),decis1=1;decis2=1;decis3=0;elsedecis1=1;decis2=1;decis3=1;end;symbolerror=0;if(decis1~=dsource1(i)),numofbiterror=numofbiterror+1;symbolerror=1;end;if(decis2~=dsource2(i)),numofbiterror=numofbiterror+1;symbolerror=1;end;if(decis3~=dsource3(i)),numofbiterror=numofbiterror+1;symbolerror=1;end;if(symbolerror==1),numofsymbolerror=numofsymbolerror+1;end;end;ps=numofsymbolerror/N;pb=numofbiterror/(3*N);4PSK的源程序:% 对M=4的PSK通信系统进行蒙特卡罗仿真%echo onSNRindB1=0:2:10;SNRindB2=0:0.1:10;for i=1:length (SNRindB1),[pb , ps]=cm_sm32 (SNRindB1 (i)); %仿真比特和符号误码率smld_bit_err_prb (i)=pb;smld_symbol_err_prb (i)=ps;end;for i=1:length (SNRindB2),SNR=exp(SNRindB2(i)*log(10)/10); %信噪比theo_err_prb(i)=Qfunct(sqrt(2*SNR)); %理论比特误码率end;%随后绘图曲线semilogy (SNRindB1,smld_bit_err_prb,'*');holdsemilogy (SNRindB1,smld_symbol_err_prb,'O');semilogy (SNRindB2,theo_err_prb);gridxlabel('Eb/No in dB')ylabel('error probability')title('4PSK通信系统的蒙特卡洛仿真')gtext('(注:“—”理论误码率;“*”误比特率;“o”误符号率)')。

相关文档
最新文档