免费网站制作软件,网站js时间代码,建站及推广,网站设计与制作培训班最近在攻略ADC建模相关方面#xff0c;由好多零碎的知识点#xff0c;这里写个备忘录。
Matlab 判断一个数是否为整数
1. isinteger 函数
MATLAB中#xff0c;可以使用 isinteger 函数来判断一个数是否为整数#xff0c;例如#xff1a;要判断x是否为整数可以采用以下代…最近在攻略ADC建模相关方面由好多零碎的知识点这里写个备忘录。
Matlab 判断一个数是否为整数
1. isinteger 函数
MATLAB中可以使用 isinteger 函数来判断一个数是否为整数例如要判断x是否为整数可以采用以下代码
if isinteger(x)disp(x是整数)
elsedisp(x不是整数)
end
2. fix 或者 round 函数 通过对变量x取整然后再和原值对比判断取整后的结果如果等于原值则为整数。
if xfix(x)disp(x为整数)
endif xround(x)disp(x为整数)
end
3. rem 函数
用求余函数 rem(x, 1) 来求返回值0就是整数返回值非0就是非整数
if rem(x, 1)0disp(x为整数)
end
Matlab 判断一个数的数据类型 在Matlab中可以使用 class 函数来判断变量的数据类型。该函数返回变量的数据类型名称。例如class(var) 可以给出变量var的数据类型。另外还可以使用 isa 函数来判断一个变量是否属于某个特定的类别。该函数返回一个逻辑值如果变量属于指定的类别则返回1表示真”否则返回0表示“假”。在代码中可以使用 class函数 和 isa函数 来进行数据类型的判断和比较。
如何用matlab计算二进制加法
方法一
Q: 比如两个二进制数00101100 如何matlab实现 A: 二进制也好十进制也好都是一种表现形式数据实际的值是不会因为你使用二进制还是十进制变化的。 其实正如上面的问答所说进制不过是相互转换加减法是与进制无关的。我们只需要知道加法、减法和乘2这类运算对于硬件来说比较简单就行了。在matlab仿真如果还需要先转化为二进制再计算就绕远路了。 例如要计算0010 1100可以直接在matlab计算 2 12再把结果14转化为二进制数即可。
方法二 Matlab Case 语句 单个的就如同C语言中的一样不过在和switch使用的时候case后不用接 “”
n input(Enter a number: );switch ncase -1disp(negative one)case 0disp(zero)case 1disp(positive one)otherwisedisp(other value)
end
Matlab 通过整除判断倍数 可通过 fix 截尾取整进行判断示例判断一个数是否为5 的倍数
m12;
if fix(m/5)m/5
% 如果是5 的倍数则输出为1
end
Matlab 计算倍数 在Matlab中可以通过使用趋于运算符mod来计算一个数是否是另一个数的倍数。如果一个数a是另一个数b的倍数则 mod(b,a)0 。 例如要判断一个数×是否是3的倍数可以使用以下代码
X15; % 要判断的数
multiple3; % 倍数if mod(x,multiple) 0disp(x是multiple的倍数);
elsedisp(x不是multiple的倍数);
end
Matlab 中计算最小公倍数 Matlab中计算最小公倍数的函数是 lcm 使用方法如下
lcm(x,y)% 示例代码
lcm(6,8) % 输出结果为 6和8的最小公倍数 24其中x 和 y 是要计算最小公倍数的两个数。
Matlab 在工作区显示函数内的变量 在通常情况下matlab的工作区中不会显示函数内的变量。
方法一以函数输出的形式定义希望输出的变量 这里的A、B、C 可以定义为结构体好更方便的输出更多的变量。
function [A, B, C] fucntion_name(D, E, F)
% 这里的A B C 可以定义为结构体好更方便的输出更多的变量
方法二使用 save load 函数具体方法为 这里会将 变量 保存在 文件名.mat 文件里可省略 变量名 这样可以将当前所有变量存在 文件名.mat 文件里load 时也可以省略 文件名。
save 变量名 文件名 load(文件名.mat, 变量名)
方法三使用断点 可以在子程序内部设置断点然后开始运行当停在子程序时workspace即显示子程序变量。按F10即可进行单步调试。
Matlab 控制数值精度保留有效数字小数点后几位
方法一vpa 函数 控制有效数数字位数
digits(5); %定义精度
avpa(sqrt(2)); %a1.4142% 或者单独使用 vpa
avpa(sqrt(2),5); %a1.4142方法二roundn 函数 可以用来控制小数点前后多少位负数表示小数点后正数表示小数点前。 注意与 round 的区别。round 表示把小数往最接近的整数取整
aroundn(sqrt(2),-4); %a1.4142
Matlab 结构体的创建和使用 对于有C语言基础的使用者结构体这个词你可能很熟悉。 与元胞cell类型一样结构体也可以存储任意类型的数据。当然它们也存在许多不同点。最大的不同点是结构体是以不同名字的字段作为存储容器每个字段都可以存储任意类型的数据。此外若要构建结构体数组则要求每个结构体的字段数目和字段名字必须相同。下面将讲述结构体数组单个结构体也视为1x1的结构体数组。1. 结构体的创建 接直接定义字段对 结构体变量名.字段名 赋值字段的命名规则和变量一样并且像使用一般 Matlab 变量一样不需要事先声明支持动态扩充。 % 单个结构体
Student.name wangx;
Student.sex Male;
Student.height 170;% 多个结构体
Student(2).name zhangsan;
Student(2).sex Male;
Student(2).height 172;或者使用函数 struct() 创建。调用格式structname1,data1,name2,data2....注意这里的数据要用大括号括起来 node struct(name, {xiezhh, heping}, age,{31, 22}) node(1).name % 1x1的结构体数组
s1 struct; % 不含字段
s2 struct(name, 李四, gender, male);% 1x2的结构体数组
s3 struct(name, {张三, 李四}, gender, male); % 通过元胞数组来创建多结构体的结构体数组
s3
s3_1 s3(1)
s3_2 s3(2) 代码运行结果如下。注函数的字段参数不能重复。因此若要创建多结构体的结构体数组必须使用元胞数组。 2. 结构体数组的访问 结构体数组的访问很简单。这里不展示代码以文字叙述。
访问结构体数组中某个结构体的某个字段先对结构体数组进行索引得到待访问的结构体。再通过待访问的结构体.字段名获取该结构体的该字段的数据。此外如果该字段的数据是一个数组还可以对该数组进一步索引。访问结构体数组中所有结构体的某个字段直接通过 结构体数组.字段名结果相当于一个逗号间隔的式子结构体1.字段名, 结构体2.字段名, 结构体3.字段名 ...
3. 结构体数组的拼接
结构体数组的拼接也很简单和其它类型的拼接是一样的这里不展示代码只叙述它要遵循的纬度规则。
水平拼接待拼接的结构体数组的行数相等。垂直拼接待拼接的结构体数组的列数相等。
4. 结构体数组的操作函数
有很多函数可以作用于结构体数组下面举几个常用函数的简单用法。
isfield()判断输入的字段是否为输入结构体数组的字段。rmfield()删除结构体中的字段。
% 1x3的结构体数组
s struct(name, {张三, 李四, 王二麻子}, gender, male, age, {18, 20, unknown});% 函数isfield()
fieldStatus isfield(s, {name, gender})% 函数rmfield()
s_new rmfield(s, {name, gender})
s
代码运行结果如下。 Matlab 多个10进制数转成指定位宽的2进制矩阵 可以使用以下方法将Dec中的十进制数转换为二进制数组
Dec 4
Bar dec2bin(Dec, Nbit) % Bar100
for i 1:length(Bar)D(i) str2num(Bar); % D [1 0 0]
end
Matlab 实现二进制运算 在MATLAB中进行二进制运算可以使用位运算符包括按位与()、按位或()、按位异或()、按位取反(~)以及左移()和右移()。 例如对两个二进制数进行按位与运算可以使用以下代码
a bin2dec(1010)%将二进制数转换为十进制
b bin2dec(1100);
resultbitand(a,b); % 按拉与运算
dec2bin(result) %为将十进制结果转换为二进制 输出结果为
result 8ans 1000 其中bin2dec 函数将二进制转换为十进制数bitand 函数执行按位与运算dec2bin 函数将十进制转换为二进制数。 Matlab可以进行二进制运算可以使用bitand、bitor、bitxor、bitcmp等函数进行按位与、按位或、按位异或和按位取反等操作。此外还可以使用dec2bin和bin2dec函数进行十进制和二进制之间的转换。如果需要产生伪随机二进制序列可以使用randn函数和逻辑运算符进行操作。如果需要进行二进制加法可以使用类似于全加器的方法进行多位二进制加法器的设计。
Matlab 有符号十进制转二进制 matlab matlab 调用 dec2bin) 函数传入负数就报错做个笔记吧——新版Matlab已解决
% 当数字a大于0的时候直接调用函数
bin dec2bin( a, 8 ); % 8 是指变成8位的二进制数例如 a 3 则 bin 就是 0000_0011% 当数字a小于0的时候
bin dec2bin( a 2^8 , 8 ); % 8 还是8位的意思比如 a -3 ,则 bin 就是 1111_1101 % 操作一个一维数组的时候就可以这样来
% array 是一个一维数组 %
for i 1 :length(array )if(array (i) 0)array (i) array (i) 2^8;end
endans dec2bin(array , 8 ); %这个函数 可以直接把数组作为参数输入% 例子里面的 8 是指位数如果需要转化成16位的就把 所有的 8 换成 16 dec2bin() 函数会把大于0的整数转换成指定位数的二进制字符串比如把十进制的 3 转化成 8位的二进制就是0000_0011 小于0的数转化成二进制应该是转化成对应正整数的补码 按位取反 再 1比如3的8位的按位取反就是1111_1100 ; 为什么要 1呢如果不 1那么 0000_0011 1111_1100 就会得到 1111_1111 ,给他加个 1 就变成了 1_0000_0000 如果指定了 8 位 那么就会直接抛弃第一个1 结果就是 0000_0000 所以这样 按位取反 再 1 的操作就是为了对应 3 -3 0 这样的计算结果。 有了上面的基础就可以着手准备利用好dec2bin函数了思路就是 把负数 a 的补码 绝对值的按位取反 再 1对应的 十进制 的 整数 b 找到完了dec2binb , 8有点绕啊还是举例子-3 的 补码是 1111_1101这个字符串对应的十进制就是 253 ; 而 -3 2^ 8 253; power(2,0) power(2,2) power(2,3) power(2,4) power(2,5) power(2,6) power(2,7) 253结论
正数直接 dec2bin 负数先给负数 加一个 2^n 然后再用 dec2bin
Matlab 满足条件后不再向下执行的语句 在编写Matlab程序过程中有时会遇到当程序运行到不满足if条件时让程序跳出停止运行的情况在MATLAB中使用 return 语句实现程序跳出。
a 1; % 定义一个变量a
flag 1; % 定义一个标准量
if 1if flag a %判断a与flag是否相等 disp(0); %如果相等命令行打印0return; %不再向下执行 disp(1); %return 后的语句不执行else disp(2); %如果不相等命令行打印2end
elsedisp(3); %外层if对应的else命令行打印3
end
disp(4); %命令行打印4 程序运行后命令行窗口打印0可以证明在程序执行return后以后的程序都不运行。 只将以上程序中变量a的值变为0程序运行后命令行窗口打印2,4。 只将以上程序中第一个if后的1变为0程序运行后命令行窗口打印3,4。 以上程序则可以清楚的验证执行了return语句后程序不再运行下去。
Matlab 中的continue、break、return和 error 语句
Continue 经常用在for和while语句中continue一旦被执行就会终止当前循环进行下一次循环。
% eg, 在for 循环中
clc
clear all
close alli 1;
COND 1;for i 1:20if mod(i,2)0continueelsefprintf(the array is %d\n,i)end
end% 结果是
the array is 1
the array is 3
the array is 5
the array is 7
the array is 9
the array is 11
the array is 13
the array is 15
the array is 17
the array is 19% 我们跳过了能够被2整除的数字找出了剩下的数字
% eg:在while循环中clc
clear all
close alli 1;
COND 1;while COND 1if mod(i,2)0i i1;continue;elsefprintf(the array is %d\n,i)endif i19COND 2;endi i1;
end% 这里可以看到我们在符合while条件下的循环中如果被2整除了
% 那么就会跳过这个循环直接进到下一个while循环下从头开始执行。
% 再一次进入if 判断新的i是否满足整除要求。
% 结果如下
the array is 1
the array is 3
the array is 5
the array is 7
the array is 9
the array is 11
the array is 13
the array is 15
the array is 17
the array is 19break break和continue用法相似区别在于一旦执行了break, 就会推出循环而不是进入下一个循环。在for循环中我们在1:10中到一个被3整除的一旦找到了第一个整个for循环就不会再执行了。但是要注意只是不执行break所在的循环其他的循环还是要执行的。
return: return 跳出函数返回调用函数处。无论是while还是for,直接跳出函数返回到调用函数之前。
%%
clc
clear all
close alli 1;
COND 1;for i 1:20if mod(i,2)0returnelsefprintf(the array is %d\n,i)end
end
%%
clc
clear all
close alli 1;
COND 1;while COND 1if mod(i,2)0i i1;return;elsefprintf(the array is %d\n,i)endif i19COND 2;endi i1;
end% 执行这两段函数都是一个结果
the array is 1% 当i 2时函数就跳出了 用一个更简单的例子说明我们有一个很多层的if else 判断语句这个时候用return 就很好如果符合条件就可以直接跳出多层if else语句而不需要把所有的if else 全部执行一遍再跳出。
clc
clear all
close all
flag 20 ;
if flag -10fprintf(y-10\n)return
elseif flag 20fprintf(y20\n)return
elseif flag -10 flag 20fprintf(-10y20\n)return
else fprintf(y20\n)return
end% 总结来说
break 跳出循环
continue 继续循环不执行 循环体内continue 后面的语句直接进行下一循环
return 跳出函数返回调用函数 处。信号延迟仿真的 Matlab 源码实现 信号的延迟是数字信号处理中的一个重要概念将介绍如何使用Matlab实现信号的延迟仿真并给出相应的源代码实现。 首先我们需要定义一个信号并进行时域分析。在Matlab中我们可以使用 tlinspace(0,1,fs) 生成一个时间轴其中fs表示采样率然后根据需要定义一个正弦波信号如xsi(2*pi*f*t)表示频率为f的正弦波信号。 接着我们可以通过对信号进行时间延迟来模拟信号的传输过程。在Matlab中我们可以使用”y[zeros(1,delay),(1:end-delay)]”将信号向右移动delay个单位。其中y表示延迟后的信号x表示原始信号zeros(1,delay)表示在x前面填充delay个零元素(1:end-delay)表示去除x后面的delay个元素。 最后我们可以将延迟后的信号与原信号进行比较从而验证延迟是否成功。在Matlab中我们可以使用plot(t,X,t,y)”将两个信号绘制在同一张图上从而直观地比较它们的差异。 下面是完整的Matlab源代码实现
%% 信号延迟仿真% 定义信号
fs 1000; % 采样率
f 10; % 频率
t linspace(0, 1, fs); % 时间轴
x sin(2 * pi * f * t); % 正弦波信号% 模拟信号延迟
delay 0.5 * fs; % 延迟时间
y [zeros(1, delay), x(1:end-delay)]; % 延迟后的信号% 绘制信号图像
figure;
subplot(2,1,1);
plot(t, x);
xlabel(time);
ylabel(Amplitude);
title(Original Signal);subplot(2,1,2);
plot(t, y);
xlabel(time);
ylabel(Amplitude);
title(Delayed Signal);Verilog实现任意时钟周期延时的方法
方法一非阻塞赋值延时打拍 这个方法是最简单的实现延时的方法缺点是如果延时的周期比较长的话要写的东西也会变得很多通过这种方式可以把信号延时n个周期。
always (posedge clk) begind1 d;d2 d1;.......dout dn;
end
方法二移位寄存器延时 这个方法也比较简单实现起来也很容易缺点是消耗的资源比较大
//延时N个时钟周期
parameter N4;
reg [N-1:0] temp;always (posedge clk or negedge rst_n) beginif(!rst_n) begintemp 0;endelse if(in1) begintemp[N-1:0] {temp[N-2:0],in1};endelse begintemp[N-1:0] {temp[N-2:0],1b0};end
end
assign out1 temp[N-1];
方法三计数器实现任意周期延时 该方法较为节省资源能实现任意周期的延时
parameter delay_per 8h4;//延时周期数
reg flag;
reg [7:0] delay_count;
always (posedge clk or negedge rst_n) beginif(!rst_n) beginflag 0;endelse if(in1)beginflag 1;endelse if(delay_count delay_per)beginflag 0;end
end
always (posedge clk or negedge rst_n) beginif(!rst_n)begindelay_count 0;out1 0;endelse if(delay_count delay_per flag 1b1)begindelay_count 0;out1 1;endelse if(flag 1b1)begindelay_count delay_count 1b1;out1 0;endelse begindelay_count 0;out1 0;end
end 介绍了三种实现信号周期延时的方法但需要注意的是在方法三中如果信号间隔的周期数小于延时的周期这种方法就不太合适了。此时推荐使用方法二或者使用FIFO来实现信号延时。
% 未完待续