matlab程序设计教程,MATLAB:设计程序,随机产生两个两位整数,并输入一个运算符,做出相应运算,并显示结果
matlab程序设计教程,MATLAB:设计程序,随机产生两个两位整数,并输入一个运算符,做出相应运算,并显示结果详细介绍
本文目录一览: MATLAB程序设计教程的内容简介
充实了实例、增加了实验部分,使得全书内容更丰富、教学适应性更强。全书按照由浅入深、循序渐进的原则进行编排,在讲清楚有关MATLAB算法原理及有关数学背景的基础上,结合实例介绍MATLAB的功能与应用。全书共12章,主要内容有MATLAB操作基础、MATLAB矩阵及其运算、MATLAB程序设计、MATLAB绘图、MATLAB数据分析与多项式计算、MATLAB解方程与最优化问题求解、MAI’LAB数值积匀与数值微分、MATLAB符号运算、MATLAB图形句柄、MATLAB图形用户界面设计、Simulinl动态仿真集成环境以及MATLAB外部接口技术。
matlab的音乐信号的分析与处理设计的实验咋做?
语音信号的采集和频谱分析:
[y,fs,bits]=wavread('voice'); %读取音频信息(双声道,16位,频率44100Hz)
sound(y,fs,bits); %回放该音频
Y=fft(y,4096); %进行傅立叶变换
subplot(211);
plot(y);
title('声音信号的波形');
subplot(212)
plot(abs(Y));
title('声音信号的频谱');
一、基本要求
1 学会MATLAB的使用,掌握MATLAB的基本编程语句。
2 掌握在Windows环境下音乐信号采集的方法。
3 掌握数字信号处理的基本概念、基本理论和基本方法。
4 掌握MATLAB设计FIR和IIR数字滤波器的方法。
5 掌握使用MATLAB处理数字信号、进行频谱分析、涉及数字滤波器的编程方法。
二、内容
实验1音乐信号的音谱和频谱观察
使用windows下的录音机录制一段音乐信号或采用其它软件截取一段音乐信号(要求:时间不超过5s、文件格式为wav文件)
① 使用wavread语句读取音乐信号,获取抽样率;(注意:读取的信号时双声道信号,即为双列向量,需要分列处理);
② 输出音乐信号的波形和频谱,观察现象;
使用sound语句播放音乐信号,注意不同抽样率下的音调变化,解释现象。
程序如下:
[Y,FS,NBITS]=WAVREAD('怒放的生命 - 汪峰5s'); %读取音乐信号
plot(Y); %显示音乐信号的波形和频谱
sound(Y,FS); %听音乐(按照原来的抽样率)
Y1=Y(:,1); %由双声道信号变为单声道信号
size(Y1)
figure
subplot(2,1,1);
plot(Y); %显示原信号波形
N=length(Y1);
f1=fft(Y1); %傅立叶变换
w=2/N*[0:N/2-1];
subplot(2,1,2);
plot(w,abs(f1(1:N/2))); %显示波形
实验2音乐信号的抽取(减抽样)
① 观察音乐信号频率上限,选择适当的抽取间隔对信号进行减抽样(给出两种抽取间隔,代表混叠与非混叠);
② 输出减抽样音乐信号的波形和频谱,观察现象,给出理论解释;
播放减抽样音乐信号,注意抽样率的变化,比较不同抽取间隔下的声音,解释现象
程序如下
[Y,FS,NBITS]=WAVREAD('怒放的生命 - 汪峰5s');
Y1=Y(:,1);
D= ;j=0; %减抽样,D表示抽样间隔(10倍和100倍)
for i=1:D:length(Y1) % I表示开始减抽样的起始点
j=j+1;
Y2(j)=Y1(i); %Y2减抽样后的信号
end
N=length(Y1);
N1=length(Y2);
F1=fft(Y1);
F2=fft(Y2);
w1=2/N*[0:N-1];
w2=2/N1*[0:N1-1];
figure
subplot(4,1,1);plot(Y1); %显示原单声道信号波形和频谱
subplot(4,1,2);plot(Y2); %图显示抽样信号波形和频谱
subplot(4,1,3);plot(w1,abs(F1)); %显示原单声道信号fft变换后的波形和频谱
subplot(4,1,4);plot(w2,abs(F2)); %显示抽样信号快速fft变换后的波形和频谱
sound(Y2,FS) %声音低沉,而且不是很清晰。有一些声音信号丢失,%抽样率越高,声音越听不清晰,
实验3 音乐信号的AM调制
① 观察音乐信号的频率上限,选择适当调制频率对信号进行调制(给出高、低两种调制频率);
② 输出调制信号的波形和频谱,观察现象,给出理论解释;
播放调制音乐信号,注意不同调制频率下的声音,解释现象。
程序如下:
[Y,FS,NBITS]=WAVREAD('怒放的生命 - 汪峰5s');
Y1=Y(:,1);
N=length(Y1);
F1=fft(Y1); %傅立叶变换
w1=2/N*[0:N/2-1];
figure
subplot(2,2,1);
plot(w1,abs(F1(1:N/2)));
N1=0:N-1;
Y2=cos(N1*pi/8); %设置高频调制信号
N2=length(Y2)
F2=fft(Y2);
w2=2/N2*[0:N2/2-1];
subplot(2,2,2);plot(w2,abs(F2(1:N2/2)));
subplot(2,2,3);stem((0:64),Y2(1:65));
F=Y1.*Y2'; %利用高频调制信号调制单列音乐信号
N3=length(F);
F3=fft(F); %傅立叶变换
w3=2/N3*[0:N3-1];
subplot(2,2,4);plot(w3,abs(F3));
sound(F,FS) % 未混叠时,声音尖锐,不清晰,刺耳
% 混叠时,声音轻,只有淡淡的音调,基本没有起伏,不清晰。
实验4 AM调制音乐信号同步解调
① 设计巴特沃斯IIR滤波器完成同步解调;观察滤波器频率响应曲线
② 用窗函数法设计FIR滤波器完成同步解调,观察滤波器频率响应曲线;(分别使用矩形窗和布莱克曼窗,进行比较);
③ 输出解调信号的波形和频谱图,观察现象,给出理论解释;
播放解调音乐信号,比较不同滤波器下的声音,解释现象。
巴特沃斯IIR 滤波器
程序如下
clear all;close all;clc
[Y,FS,NBITS]=WAVREAD('怒放的生命 - 汪峰5s');
Y1=Y(:,1);
N=length(Y1);
N1=0:N-1;
Y2=cos(N1*pi/8);
F=Y1.*Y2';
F2=F.*Y2'; %音乐信号调制
wp=0.18;ws=0.25;rp=1;rs=50; %设计巴特沃斯IIR 滤波器
[N4,Wc]=buttord(wp,ws,rp,rs);
[B,A]=butter(N4,Wc);
[Hd,w]=freqz(B,A);
figure
subplot(2,1,1);plot(w/pi,abs(Hd));
F3=filter(B,A,F2); %解调音乐信号
N4=length(F3);
F4=fft(F3);
w4=2/N4*[0:N4/2-1];
subplot(2,1,2);plot(w4,abs(F4(1:N4/2)));
sound(F3,FS) %声音清晰,基本和原来的音乐差不多,但是音乐开始有一点点杂音。
矩形窗和布莱克曼窗
function hd=ideal(N,wc)
for n=0:N-1
if n==(N-1)/2
hd(n+1)=wc/pi;
else hd(n+1)=sin(wc*(n-(N-1)/2))/(pi*(n-(N-1)/2));
end
end
(将上述程序保存为ideal.m,但是不能运行。然后在打开新窗口编写下列主程序)
clear all;close all;clc
[Y,FS,NBITS]=WAVREAD('怒放的生命 - 汪峰5s');
Y1=Y(:,1);
N=length(Y1);
N1=0:N-1;
Y2=cos(N1*pi/8);
F=Y1.*Y2';
F2=F.*Y2'; %调制音乐信号
N=89;wc=pi/0.22; % 矩形和布莱克曼窗
hd=ideal(N,wc);
w1=boxcar(N);
w2=blackman(N);
h1=hd.*w1';
h2=hd.*w2';
N1=length(h1);
N2=length(h2);
fh1=fft(h1);
fh2=fft(h2);
ww1=2/N1*(0:(N1-1)/2);
ww2=2/N2*(0:(N2-1)/2);
figure
subplot(2,1,1);plot(ww1,abs(fh1(1:(N1-1)/2+1)));
subplot(2,1,2);plot(ww2,abs(fh2(1:(N1-1)/2+1)));
F3=conv(F2,h1);
F4=conv(F2,h2);
M1=length(F3);
M2=length(F4);
fy1=fft(F3);
fy2=fft(F4);
w3=2/M1*[0:M1/2-1];
w4=2/M2*[0:M2/2-1];
figure
subplot(2,1,1);plot(w3,abs(fy1(1:M1/2)));
subplot(2,1,2);plot(w4,abs(fy2(1:M2/2)));
sound(F3,FS) %音乐信号清晰,有杂音,低沉.
5、音乐信号的滤波去噪
① 给出原始音乐信号叠加幅度为0.05,频率为3kHz,5kHz、8kHz的三余弦混合噪声,观察噪声频谱以及加噪后音乐信号的音谱和频谱,并播放音乐,感受噪声对音乐信号的影响;
② 给原始音乐信号叠加幅度为0.5的随机白噪声(可用rand语句产生),观察噪声频谱以及加噪后音乐信号的音谱和频谱,并播放音乐,感受噪声对音乐信号的影响;
根据步骤①、②观察到的频谱,选择合适指标设计滤波器进行滤波去噪,观察去噪后信号音谱和频谱,并播放音乐,解释现象。
程序如下:
三余弦混合噪声:
[x,fs,nbits]=wavread('怒放的生命 - 汪峰5s');
x1=x(:,1); %获取单列音乐信号并对其做FFT变换
N1=length(x1);
fx1=fft(x1);
w1=2/N1*[0:N1/2-1];
n=0:N1-1;y=0.05*(cos(2*pi*n*3000/fs)+cos(2*pi*n*5000/fs)+cos(2*pi*n*8000/fs));
%设计三余弦混合噪声信号
N2=length(y); %对三余弦混合噪声信号做FFT变换
fy=fft(y);
w2=2/N2*(0:N2/2-1)*fs/2;
hdx=x1+y'; %产生加噪后的音乐信号并对其做FFT变换
M=length(hdx);
fhdx=fft(hdx);
w3=2/M*(0:M/2-1);
figure %画出单列信号音乐信号的频谱图、三余弦混合噪声信号的离散信号图
%及其频谱图和加噪后音乐信号的频谱图
subplot(2,2,1);plot(w1,abs(fx1(1:N1/2)));
subplot(2,2,2);stem((0:127),y(1:128));
subplot(2,2,3);plot(w2,abs(fy(1:N2/2)));
subplot(2,2,4);plot(w3,abs(fhdx(1:M/2)));
sound(hdx,fs); % 音乐信号有电流声,而且噪声比较明显。
wp=0.1;ws=0.15;rp=1;rs=50; %设计巴特沃斯滤波器
[N4,Wc]=buttord(wp,ws,rp,rs);
[B,A]=butter(N4,Wc);
[Hd,w]=freqz(B,A);
lohdx=filter(B,A,hdx); %利用巴特沃斯滤波器对加噪后音乐信号进行滤波并对其做%FFT变换
M1=length(lohdx);
flohdx=fft(lohdx);
w4=2/M1*(0:M1/2-1);
figure %画出加噪后音乐信号的音频图、巴特沃斯滤波器的频率响应曲线
%和滤波后音乐信号的频谱图
subplot(3,1,1);plot(hdx);
subplot(3,1,2);plot(w/pi,abs(Hd));
subplot(3,1,3);plot(w4,abs(flohdx(1:M1/2)));
sound(lohdx,fs); %滤波后音乐信号比较低沉,较清晰。
白噪声:
[x,fs,nbits]=wavread('怒放的生命 - 汪峰5s');
x1=x(:,1); %获取单列音乐信号并对其做FFT变换
N1=length(x1);
fx1=fft(x1);
w1=2/N1*[0:N1/2-1];
ry=rand(size(x1))-0.5; %产生随机白噪声信号并对其做FFT变换
N=length(ry);
fry=fft(ry);
w=2/N*(0:N-1);
xry=x1+ry; %产生加噪后的音乐信号并对其做FFT变换
NN=length(xry)
fxry=fft(xry);
ww=2/NN*(0:NN/2-1);
figure %画出单列信号音乐信号的频谱图、随机白噪声信号的音频图
%及其频谱图和加噪后音乐信号的频谱图
subplot(2,2,1);plot(w1,abs(fx1(1:N1/2)));
subplot(2,2,2);plot(ry);
subplot(2,2,3);plot(w,abs(fry));
subplot(2,2,4);plot(ww,abs(fxry(1:NN/2)));
sound(xry,fs); %声音信号有沙沙声。
wp=0.1;ws=0.15;rp=1;rs=50; %设计巴特沃斯滤波器
[N4,Wc]=buttord(wp,ws,rp,rs);
[B,A]=butter(N4,Wc);
[Hd,w]=freqz(B,A);
loxry=filter(B,A,xry); %利用巴特沃斯滤波器对加噪后音乐信号进行滤波并对%其做FFT变换
NN1=length(loxry);
floxry=fft(loxry);
ww1=2/NN1*(0:NN1/2-1);
figure %画出加噪后音乐信号的音频图、巴特沃斯滤波器的频率响应曲线
%和滤波后音乐信号的频谱图
subplot(3,1,1);plot(xry)
subplot(3,1,2);plot(w/pi,abs(Hd));
subplot(3,1,3);plot(ww1,abs(floxry(1:NN1/2)));
%sound(loxry,fs); %音乐信号低沉,但是沙沙声还是没有滤除。但是较为减轻
6、音乐信号的幅频滤波及相频分析
① 设计低通滤波器(可自行选取不同的截止频率),滤除原始音乐信号的高频信息,观察滤波前后的幅度频谱,并比较滤波前后的音乐效果,感受高频信息对音乐信号的影响;
② 设计高通滤波器(可自行选取不同的截止频率),滤除原始音乐信号的低频信息,观察滤波前后的幅度频谱,并比较滤波前后的音乐效果,感受低频信息对音乐信号的影响;
③ 选取两段不同的音乐信号,分别将其幅度谱与相位谱交叉组合构成新的音乐信号,播放比较组合后的音乐与原始音乐,感受相频信息对音乐信号的影响。
程序如下;
滤除高频信息的程序:
clearall;close all;clc
[x,fs,nbits]=wavread('怒放的生命 - 汪峰5s');
x1=x(:,1); %获取单列音乐信号并对其做FFT变换
N=length(x1);
fx1=fft(x1);
w1=2/N*(0:N/2-1);
wp=0.01;ws=0.06;rp=1;rs=50; %设计巴特沃斯滤波器
[N4,Wc]=buttord(wp,ws,rp,rs);
[B,A]=butter(N4,Wc);
[Hd,w]=freqz(B,A);
lox1=filter(B,A,x1); %使用巴特沃斯滤波器滤除音乐信号的高频部分并对所得
%音乐信号做FFT变换
N1=length(lox1);
flox1=fft(lox1);
w2=2/N1*(0:N1/2-1);
figure %画出单列音乐信号的频谱图、巴特沃斯滤波器的频率响应曲线和滤除
%高频后的音乐信号的频谱图
subplot(3,1,1);plot(w1,abs(fx1(1:N/2)));
subplot(3,1,2);plot(w/pi,abs(Hd));
subplot(3,1,3);plot(w2,abs(flox1(1:N1/2)));
sound(x1,fs); %播放单列音乐信号和滤除高频后的音乐信号
sound(lox1,fs);%声音清晰
滤除低频信息的程序:
clear all;close all;clc
[x,fs,nbits]=wavread('怒放的生命 - 汪峰5s');
x1=x(:,1); %获取单列音乐信号并对其做FFT变换
N=length(x1);
fx1=fft(x1);
w1=2/N*(0:N/2-1);
wp=0.2;ws=0.05;rp=1;rs=50; %设计巴特沃斯高通滤波器
[N4,Wc]=buttord(wp,ws,rp,rs);
[B,A]=butter(N4,Wc,'high');
[Hd,w]=freqz(B,A);
lox1=filter(B,A,x1); %使用巴特沃斯滤波器滤除音乐信号的低频部分并对所得音乐信号做FFT变换
N1=length(lox1);
flox1=fft(lox1);
w2=2/N1*(0:N1/2-1);
figure %画出单列音乐信号的频谱图、巴特沃斯滤波器的频率响应曲
%线和滤除低频后的音乐信号的频谱图
subplot(3,1,1);plot(w1,abs(fx1(1:N/2)));
subplot(3,1,2);plot(w/pi,abs(Hd));
subplot(3,1,3);plot(w2,abs(flox1(1:N1/2)));
sound(lox1,fs); %声音低,不清晰。
交叉组合音乐
clear all;close all;clc
clear all;close all;clc
[x,fs,nbits]=wavread('钢琴曲 - 雨的印记5s');
[y,fs,nbits]=wavread('怒放的生命 - 汪峰5s');
x1=x(:,1);
y1=y(:,1);
x2=x1(1:200000) %取音乐长度
Nx2=length(x2);
y2=y1(1:200000);
Ny2=length(y2);
x3=fft(x2);
y3=fft(y2);
w1=2/Nx2*[0:Nx2-1];
w2=2/Ny2*[0:Ny2-1];
Fx1=abs(x3); %选取第一个音乐信号的幅度和第二个音乐信号%的相位
Ay1=angle(y3);
F4=Fx1.*exp(j*Ay1);
X4=ifft(F4);
NF4=length(F4);
F5=fft(F4);
w3=2/NF4*[0:NF4-1];
sound(real(X4),fs);
figure
subplot(3,1,1);plot(w1,abs(x3));
subplot(3,1,2);plot(w2,abs(y3));
subplot(3,1,3);plot(w3,abs(F5));
matlab二维数组的创建及其变换
二维数组实际上也是一个矩阵。应此直接创建一个矩阵就行。创建的方法你应该会吧,就是直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于一方括号([ ])内。
比如,创建一个3×5的矩阵(对应3×5的二维数组)
A = [12 62 93 -8 22; 16 2 87 43 91; -4 17 -72 95 6]
A =
12 62 93 -8 22
16 2 87 43 91
-4 17 -72 95 6
当然也可以用专门用来创建多维数组的cat函数来创建。
具体如下:
函数 cat
格式 A=cat(n,A1,A2,…,Am)
说明 n=1和n=2时分别构造[A1;A2]和[A1,A2],都是二维数组,而n=3时可以构造出三维数组。
例如:
>> A1=[1,2,3;4,5,6;7,8,9];A2=A1';
>> A3=cat(2,A1,A2)
A3 =
1 2 3 1 4 7
4 5 6 2 5 8
7 8 9 3 6 9
这样A3就是一个二维数组
此外还有诸如特殊矩阵的创建方法等 这里就不列举了 你可以百度 或者Google一下
二维数组的变换我还不太确定你的意思:
这里就提供几个矩阵的操作:
1.矩阵的变维
矩阵的变维有两种方法,即用“:”和函数“reshape”,前者主要针对2个已知维数矩阵之间的变维操作;而后者是对于一个矩阵的操作。
(1)“:”变维
例1-48
> A=[1 2 3 4 5 6;6 7 8 9 0 1]
A =
1 2 3 4 5 6
6 7 8 9 0 1
>> B=ones(3,4)
B =
1 1 1 1
1 1 1 1
1 1 1 1
>> B(:)=A(:)
B =
1 7 4 0
6 3 9 6
2 8 5 1
(2)Reshape函数变维
格式 B = reshape(A,m,n) %返回以矩阵A的元素构成的m×n矩阵B
B = reshape(A,m,n,p,…) %将矩阵A变维为m×n×p×…
B = reshape(A,[m n p…]) %同上
B = reshape(A,siz) %由siz决定变维的大小,元素个数与A中元素个数
相同。
矩阵变维例子:
>> a=[1:12];
>> b=reshape(a,2,6)
b =
1 3 5 7 9 11
2 4 6 8 10 12
2.矩阵的变向
(1)矩阵旋转
函数
格式 B = rot90 (A) %将矩阵A逆时针方向旋转90°
B = rot90 (A,k) %将矩阵A逆时针方向旋转(k×90°),k可取正负整数。
例如:
>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> Y1=rot90(A),Y2=rot90(A,-1)
Y1 = %逆时针方向旋转
3 6 9
2 5 8
1 4 7
Y2 = %顺时针方向旋转
7 4 1
8 5 2
9 6 3
(2)矩阵的左右翻转
函数 fliplr
格式 B = fliplr(A) %将矩阵A左右翻转
(3)矩阵的上下翻转
函数 flipud
格式 B = flipud(A) %将矩阵A上下翻转
例如:
>> A=[1 2 3;4 5 6]
A =
1 2 3
4 5 6
>> B1=fliplr(A),B2=flipud(A)
B1 =
3 2 1
6 5 4
B2 =
4 5 6
1 2 3
(4)按指定维数翻转矩阵
函数 flipdim
格式 B = flipdim(A,dim) % flipdim(A,1) = flipud(A),并且flipdim(A,2)=fliplr(A)。
例如
>> A=[1 2 3;4 5 6]
A =
1 2 3
4 5 6
>> B1=flipdim(A,1),B2=flipdim(A,2)
B1 =
4 5 6
1 2 3
B2 =
3 2 1
6 5 4
(5)复制和平铺矩阵
函数 repmat
格式 B = repmat(A,m,n) %将矩阵A复制m×n块,即B由m×n块A平铺而成。
B = repmat(A,[m n]) %与上面一致
B = repmat(A,[m n p…]) %B由m×n×p×…个A块平铺而成
repmat(A,m,n) %当A是一个数a时,该命令产生一个全由a组成的m×n矩阵。
例如
>> A=[1 2;5 6]
A =
1 2
5 6
>> B=repmat(A,3,4)
B =
1 2 1 2 1 2 1 2
5 6 5 6 5 6 5 6
1 2 1 2 1 2 1 2
5 6 5 6 5 6 5 6
1 2 1 2 1 2 1 2
5 6 5 6 5 6 5 6
3.矩阵元素的数据变换
对于小数构成的矩阵A来说,如果我们想对它取整数,有以下几种方法:
(1)按-∞方向取整
函数 floor
格式 floor(A) %将A中元素按-∞方向取整,即取不足整数。
(2)按+∞方向取整
函数 ceil
格式 ceil(A) %将A中元素按+∞方向取整,即取过剩整数。
(3)四舍五入取整
函数 round
格式 round (A) %将A中元素按最近的整数取整,即四舍五入取整。
(4)按离0近的方向取整
函数 fix
格式 fix (A) %将A中元素按离0近的方向取整
例如:
>> A=-1.5+4*rand(3)
A =
2.3005 0.4439 0.3259
-0.5754 2.0652 -1.4260
0.9274 1.5484 1.7856
>> B1=floor(A),B2=ceil(A),B3=round(A),B4=fix(A)
B1 =
2 0 0
-1 2 -2
0 1 1
B2 =
3 1 1
0 3 -1
1 2 2
B3 =
2 0 0
-1 2 -1
1 2 2
B4 =
2 0 0
0 2 -1
0 1 1
(5)矩阵的有理数形式
函数 rat
格式 [n,d]=rat (A) %将A表示为两个整数矩阵相除,即A=n./d。
例如: 对于上例中的A
>> [n,d]=rat(A)
n =
444 95 131
-225 2059 -472
166 48 1491
d =
193 214 402
391 997 331
179 31 835
(6)矩阵元素的余数
函数 rem
格式 C = rem (A, x) %表示A矩阵除以模数x后的余数。若x=0,则定义rem(A, 0)=NaN,若x≠0,则整数部分由fix(A./x)表示,余数C=A-x.*fix (A./x)。允许模x为小数。
如果还不详细 你就查阅帮助,上面有很详细的解答
1、MATLAB中,一般使用方括号([]),逗号(,),分号(;)与空格来创建二维数组。空数组是一种非常特殊的数组,没有任何元素。创建一个空数组:只要把一个方括号复制给一个变量就可以了。
2、在MATLAB中,创建二维数组可以使用空格+分号的形式。每一行的各个元素使用空格隔开,换行时使用分号隔开。需要注意的是,每一行的元素个数需要相同,不相同的情况下容易报错。
3、在MATLAB中,也可以使用逗号+分号的形式创建数组。每一行的各个元素使用逗号隔开,换行时使用分号隔开。每一行的元素个数需要相同,如果每一行的元素个数不同,MATLAB会报错。
4、在MATLAB中,可以使用冒号创建数组。A=a:b表示从实数a到实数b创建一个间隔为1的数组A。使用上述方式创造的数组A是一维数组,也可以被叫做行向量。数组A相邻两个元素的差值默认为1。
5、也可以使用一种更加自由的方式,创建间距固定的递增或递减数组。A=a:b:c表示从实数a到实数b以间隔为c递增或者递减,创造出数组A。使用这种方法创建数组时,数组A的第一个元素与最后一个元素分别是a和b,数组相邻两个元素之间的差值为c。
1、MATLAB中,一般使用方括号([]),逗号(,),分号(;)与空格来创建二维数组。空数组是一种非常特殊的数组,没有任何元素。创建一个空数组:只要把一个方括号复制给一个变量就可以了。
2、在MATLAB中,创建二维数组可以使用空格+分号的形式。每一行的各个元素使用空格隔开,换行时使用分号隔开。需要注意的是,每一行的元素个数需要相同,不相同的情况下容易报错。
3、在MATLAB中,也可以使用逗号+分号的形式创建数组。每一行的各个元素使用逗号隔开,换行时使用分号隔开。每一行的元素个数需要相同,如果每一行的元素个数不同,MATLAB会报错。
4、在MATLAB中,可以使用冒号创建数组。A=a:b表示从实数a到实数b创建一个间隔为1的数组A。使用上述方式创造的数组A是一维数组,也可以被叫做行向量。数组A相邻两个元素的差值默认为1。
5、也可以使用一种更加自由的方式,创建间距固定的递增或递减数组。A=a:b:c表示从实数a到实数b以间隔为c递增或者递减,创造出数组A。使用这种方法创建数组时,数组A的第一个元素与最后一个元素分别是a和b,数组相邻两个元素之间的差值为c。
用MATLAB设计程序,完成两位数的四则运算,即产生两个两位随机整数,再输入一个运算符号,做相应的运算,
a=fix(10+(99-10)*rand(1,2)) %产生两个随机整数
x=a(1);
y=a(2);
t=input('请输入运算符号:','s');
if t=='+'
z=x+y;
elseif t=='-'
z=x-y;
elseif t=='*'
z=x*y;
elseif t=='/'
z=x/y;
end
disp([num2str(x),t,num2str(y),'=',num2str(z)]) %输出运算结果
matlab 分段函数的程序设计 急!`循环语句
代码如下:
a=10;
x=-a:0.5:a;
for i=1:length(x)
if x(i)<=0
f(i)=-x(i)^3+5;
else
f(i)=x(i)^3+5;
end
end
plot(x,f)
最后一句是画图,可以不要,
clc
clear all
x=[-10:0.5:10]; %x取值范围
Lx=length(x);
for i=1:Lx
if x(i)>=0
y(i)=x(i)^3+5;
else
y(i)=-x(i)^3+5;
end
fprintf('f(%.1f)=%.2f ',x(i),y(i));
if mod(i,4)==0
fprintf('\n');
end
end
fprintf('\n');
代码如下:
a=10;
x=-a:0.5:a;
for
i=1:length(x)
if
x(i)<=0
f(i)=-x(i)^3+5;
else
f(i)=x(i)^3+5;
end
end
plot(x,f)
最后一句是画图,可以不要,
代码如下:
a=10;
x=-a:0.5:a;
for
i=1:length(x)
if
x(i)<=0
f(i)=-x(i)^3+5;
else
f(i)=x(i)^3+5;
end
end
plot(x,f)
最后一句是画图,可以不要,
我的程序是:
clear
for x=-10:0.5:10
if x>=0
f=x^3+5
else
f=-x^3+5
end
end
x=-10:0.5:10;
for i=1:length(x)
if x(i)<=0
f(i)=-x(i)^3+5;
else
f(i)=x(i)^3+5;
end
end
f
怎么用matlab编程将一组数据归一化到(0,1)之间?
按这样的格式提供参数:
将这组数据粘贴到matlab编程页面;
在页面中输入MappedData = mapminmax(OriginalData, 0, 1);
按回车键。
一、《MATLAB编程》:
是2007年科学出版社出版的图书;
作者是查普曼(StephenJ.Chapman)。
二、内容简介:
本书为国外高校电子信息类优秀教材(英文影印版)之一;
本书详细讲述了如何用MATLAB进行程序设计,如何编写清楚、高效的程序;
书中强调了自上而下的程序设计方法、函数的使用、MATLAB内部工具的使用和数据结构,并指出了一些使用技巧和编程者常犯的错误;
书可作为工科各专业本科生的教学辅导书,也可作为工程技术人员的参考书。
用matlab设计数字滤波器
产品名称:K&L可调带阻滤波器3TNF-200/400-N/N
频率范围(MHz):200-400
3dB带宽范围(MHz):3-7
40dB带宽(Min KHz):300
切槽深度:50 dB
长度(Inch/mm):6.56/167
宽度(Inch/mm):5.38/137
高度(Inch/mm):2.75/70
驻波比:1.5:1
插入损耗:< 0.5 dB
阻抗:50 Ohms
功率:50 Watts CW
刻度精确度:+/- 1%
连接器形式:Type N请访问:上海欧桥微波网
MATLAB:设计程序,随机产生两个两位整数,并输入一个运算符,做出相应运算,并显示结果
clear;clc;
a=num2str(floor(rand(1)*90+10));
b=num2str(floor(rand(1)*90+10));
op=input('input the operator','s');
disp([a op b '=' num2str(eval([a op b]))])
matlab用牛顿法计算潮流需要在命令窗口输入什么
在公式(18)中,和分别表示状态变量与其修正量组成的列向量;为方阵,一般叫作雅可比矩阵,第i行j列元素为 ,它的大小为第i个函数对第j个变量求偏导;k则表示阵元素都在处取;同时,F(X)是由n个函数组成的n维列向量;在极坐标下,节点电压可如下表示:
在这里插入图片描述
(19)
若和为已知大小的功率,与从节点电压求得的有功和无功功率之差,为功率的不平衡量,则节点功率不平衡量可用如下公式计算:
在这里插入图片描述
(20)
节点功率可用各节点电压模值与相位表示,如下公式所示:
在这里插入图片描述
(21)
式(21)中,为节点i和j的相位差。
由以公式(18)-(21)推得牛顿法下,其潮流计算方程可写为:
在这里插入图片描述
(22)
公式(22)中,雅可比矩阵的各元素为
在这里插入图片描述
(23)
(24)
(25)
(26)
在这里插入图片描述
(27)
(28)
(29)
(30)
其中,节点导纳矩阵的元素由Gij 、Bij表示。
随着国内外配电系统自动化水平不断提高,电力行业人员也开始更加深入地研究配电网系统。配电网潮流计算作为DMS(配电管理系统)的重要基础,受到广大行业界人士的关注。因此,配电网潮流计算,已然成为配电网分析的重要内容。配电网与输电网相比,两者有明显不同,前者一般采用网格结构,线路参数R/X的值较大,三相负荷不对称程度明显。这些特点使得在输电网中计算有效,如牛顿法,不再适用于配电网。为此,有学者提出了适用于配电网的潮流算法,主要包括基于回路方程的潮流算法、前推回推法和改进的牛顿-拉夫逊法[17](简称改进的牛拉法)。其中,基于回路方程的方法具有较强的网格处理能力和良好的收敛性,但该方法的节点数和分支数处理非常复杂。前推回推法是针对配电网的树状特性,可以避免潮流计算中的病态条件,同时速度更快。然而,由于其公式和算法与牛顿潮流算法不同,其在其它方面(如潮流优化)的应用将受到限制。
改进牛顿法通过对传统法进行一定的近似,将J阵写成UDUT 的形式。U仅由网络拓扑决定,是一个上三角矩阵;D是一个对角矩阵。在牛拉法中,需要对J阵因子分解与前代回代,改进法则只有前推回代的计算过程。它很好地改善了传统法以及前推回推法。经过算例计算结果证明,改进法可以避免J阵病态,且拥有前推回代法的收敛速度、精度,又由于它属于牛顿型算法,所以该算法已经得到了广泛的运用[18]。
下面附带电力系统分析牛顿法算例及matlab程序:
网络结构如下:系统结构图
系统参数如下:
在上图所示的简单电力系统中,系统中节点1、2为PQ节点,节点3为PV节点,节点4为平衡节点,已给定P1s+jQ1s=-0.30-j0.18 P2s+jQ2s=-0.55-j0.13 P3s=0.5 V3s=1.10 V4s=1.05∠0°
容许误差ε=10-5
节点导纳矩阵:
导纳矩阵
各节点电压:
节点 e f v ζ
1.0.984637 -0.008596 0.984675 -0.500172
2.0.958690 -0.108387 0.964798 -6.450306
3.1.092415 0.128955 1.100000 6.732347
4.1.050000 0.000000 1.050000 0.000000
各节点功率:
节点 P Q
1-0.300000 -0.180000
2–0.550000 -0.130000
3 0.500000 -0.551305
4 0.367883 0.264698
matlab程序如下:
// 牛顿法潮流计算matlab程序
clc;
Y=[1.042093-8.242876i -0.588235+2.352941i 3.666667i -0.453858+1.891074i;
-0.588235+2.352941i 1.069005-4.727377i 0 -0.480769+2.403846i;
3.666667i 0 -3.333333i 0;
-0.453858+1.891074i -0.480769+2.403846i 0 0.934627-4.261590i];
%导纳矩阵
e=[1 1 1.1 1.05];%初始电压
f=zeros(4,1);
V=zeros(4,1);%节点电压
Ws=[-0.3 ; -0.18 ; -0.55 ; -0.13 ; 0.5 ; 1.1];%初始功率
W=zeros(6,1);
n=length(Y);%节点数
J=zeros(2*(n-1));%雅可比矩阵
delta_v=zeros(1,6);
delta_w=Ws;
G=real(Y);
B=imag(Y);
S=zeros(4,2);
c=0;%循环次数
m=input('请输入PQ节点数:');
while max(abs(delta_w))>10^-5
for i=1:(n-1)%以下为求取雅可比矩阵
for j=1:(n-1)
if (i~=j)
J(2*i-1,2*j-1)=-(G(i,j)*e(i)+B(i,j)*f(i));
J(2*i,2*j)=-J(2*i-1,2*j-1);
J(2*i-1,2*j)=B(i,j)*e(i)-G(i,j)*f(i);
J(2*i,2*j-1)=J(2*i-1,2*j);
end
end
end
for j=1:(n-2)
J(6,2*j-1)=0;
J(6,2*j)=0;
end%以上为非对角线元素
s1=0;
s2=0;
for i=1:(n-1)
for j=1:n
s1=s1+(G(i,j).*e(j)-B(i,j).*f(j));
s2=s2+(G(i,j).*f(j)+B(i,j).*e(j));
end
J(2*i-1,2*i-1)=-s1-G(i,i) *e(i)-B(i,i)*f(i);
J(2*i-1,2*i)=-s2+B(i,i) *e(i)-G(i,i)*f(i);
s1=0;
s2=0;
end
for i=1:m
for j=1:n
s1=s1+G(i,j).*f(j)+B(i,j).*e(j);
s2=s2+(G(i,j).*e(j)-B(i,j).*f(j));
end
J(2*i,2*i-1)=s1+B(i,i) *e(i)-G(i,i)*f(i);
J(2*i,2*i)=-s2+G(i,i) *e(i)+B(i,i)*f(i);
s1=0;
s2=0;
end
J(6,5)=-2*e(3);
J(6,6)=-2*f(3);%对角线元素求解
for i=1:m
for j=1:n
s1=s1+e(i)*(G(i,j).*e(j)-B(i,j).*f(j))+f(i)*(G(i,j).*f(j)+B(i,j).*e(j));
s2=s2+f(i)*(G(i,j).*e(j)-B(i,j).*f(j))-e(i)*(G(i,j).*f(j)+B(i,j).*e(j));
end
delta_w(2*i-1)=Ws(2*i-1)-s1;
delta_w(2*i)=Ws(2*i)-s2;
W(2*i-1)=s1;
W(2*i)=s2;
s1=0;
s2=0;
end
for j=1:n
s1=s1+e(3)*(G(3,j).*e(j)-B(3,j).*f(j))+f(3)*(G(3,j).*f(j)+B(3,j).*e(j));
end
delta_w(5)=Ws(5)-s1;
delta_w(6)=(Ws(6)^2-(e(3)^2+f(3)^2));
W(5)=s1;
W(6)=sqrt(e(3)^2+f(3)^2);%以上求功率差值
delta_v=-inv(J)*delta_w;
for i=1:(n-1)
e(i)=e(i)+delta_v(2*i-1);
f(i)=f(i)+delta_v(2*i);
end%求电压差值
c=c+1;
end
for x=1:4
V(x)=e(x)+f(x)*1i;
end%节点电压
s1=0;
for x=3:4
for j=1:4
s1=s1+conj(Y(x,j))*conj(V(j));
end
S(x,1)=real(V(x)*s1);
S(x,2)=imag(V(x)*s1);
s1=0;
end%PV与平衡节点功率
for x=1:2
S(x,1)=W(2*x-1);
S(x,2)=W(2*x);
end%节点功率
c
J
V
S
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
运行结果如下:
潮流计算结果
文章知识点与官方知识档案匹配
算法技能树首页概览
34356 人正在系统学习中
电磁MATLAB
微信公众号
程序从vx公众号获取,助力科研!
打开CSDN APP,看更多技术内容
matlab潮流程序,潮流计算的MATLAB源程序_weixin_39760433的博客-CSDN...
1、简单潮流计算的牛顿拉夫逊程序,相关的原始数据数据数据输入格式如下:%B1是支路参数矩阵,第一列和第二列是节点编号。节点编号由小到大编写%对于含有变压器的支路,第一列为低压侧节点编号,第二列为高压侧节点%编号,将变压器的串联阻抗...
继续访问
...编程实现_某只旺仔的博客_电力系统潮流计算程序matlab
潮流计算是电力系统中最基本,应用最广泛的一种计算,是电力系统稳定计算和故障分析的基础。这个代码通过matlab实现了用极坐标表示的牛顿法和P-Q分解法进行潮流计算,使用IEEE14节点系统进行测试,计算结果和应用matpower的潮流计算完全一致。代码...
继续访问
matlab导数计算
matlab导数计算,通过编程实战掌握具体应用。包括matlab导数计算前、matlab导数计算中、matlab导数计算后。
继续访问
(完整版)基于MATLAB牛顿拉夫逊法进行潮流计算.doc
> %本程序的功能是用牛顿拉夫逊法进行潮流计算 n=input' 请输入节点数 :n=; nl=input' 请输入支路数 :nl=; isb=input' 请输入平衡母线节点号 :isb=; pr=input' 请输入误差精度 :pr=; B1=input' 请输入由各支路参数形成的矩阵 :B1=; B2=input' 请输入各节点参数形成的矩阵 :B2=; Y=zeros(n; e=zeros
牛顿拉夫逊潮流计算matlab程序
基于牛顿拉夫逊进行潮流计算,求得各节点电压,各支路功率流动,内附程序输入说明以及案例。
珍藏多年的matlab潮流计算程序源代码集合,包含多个潮流计算程序
【达摩老生出品,必属精品,亲测校正,质量保证】 资源名:珍藏多年的matlab潮流计算程序源代码集合,包含多个潮流计算程序 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群:新手及有一定经验的开发人员
牛顿-拉夫逊法潮流计算——采用极坐标形式
采用极坐标形式的Newton-Raphson法进行潮流计算,并提供IEEE 14、57节点及New England 39节点的计算数据。使用方法:运行/修改PowerFlow_Newton_Polar.m文件。
电力系统牛拉法潮流计算MATLAB程序
实现潮流计算的MATLAB代码,使用牛顿拉夫逊法,可更改结点数,支路数和导纳阵,通用性强
【课设/毕业设计】电力系统潮流计算(Matlab代码实现)
潮流计算是电力系统分析中的一种最基本的计算,对给定系统进行潮流计算可以得到各母线上的电压、网络中的功率分布及功率损耗等。本文介绍了潮流计算在电力系统分析中的作用及潮流计算的发展状况。通过对潮流计算所用的数学模型进行分析,建立潮流计算的基本方程。牛顿-拉夫逊法是目前广泛应用的一种潮流计算方法,本文阐述了牛顿-拉夫逊潮流计算的基本原理。详细展示了利用matlab平台编写潮流计算程序的具体过程,通过实例证明基于牛顿-拉夫逊法的潮流计算程序具有收敛速度快、占用内存小的优点。潮流计算的程序实现手段。
继续访问
传统牛顿拉夫逊法潮流计算matlab程序.zip
采用何仰赞《电力系统分析》中介绍的牛顿拉夫逊法matlab编程,程序还能实现N-1校核和线路网损分析,适合学习电气工程领域的学子。
基于matpower的电力系统潮流计算matlab程序
它是由美国康奈尔大学电力系统工程研究中心(PSERC of Cornell University)的RAY D. Zimmerman、Carlos E. Murillo-Sánchez和甘德强在Robert J. Thomas的指导下开发出来的,本章介绍的是MATPOWER4.0。每一个电网用变量名为“mpc”的结构体(structures)来定义,结构体mpc的不同字段用baseMVA、bus、branch、gen等来定义和返回电网的具体参数。列的数据类似于标准的IEEE 和PTI 列的数据格式。
继续访问
直流潮流计算matlab程序
直流潮流发的特点是用电力系统的交流潮流(有功功率和无功功率)等值的直流电流来代替。甚至只用直流电路的解析法来分析电力系统的有功潮流,而不考虑无功分布对有功的影响。这样一来计算速度加快,但计算的准确度有所降低,本方法适用于对潮流计算准确度要求不高的计算场景。θ为网络中各节点的电压相位角的向量;P为节点注入的有功功率向量?。这就相当于线路两端的直流电位分别为θi和θj。(2)按照标幺值计算时,节点电压与其额定电压相差不大,故有:Ui≈Uj≈1.0;以IEEE9节点系统为算例,系统参数如下?。
继续访问
牛顿-拉夫逊法潮流计算matlab程序,牛顿—拉夫逊法潮流计算MATLAB程序.doc
!!!!!!!!!!!!########################牛顿—拉夫逊法潮流计算程序By Yuluo%牛顿--拉夫逊法进行潮流计算n=input('请输入节点数:n=');n1=input('请输入支路数:n1=');isb=input('请输入平衡母线节点号:isb=');pr=input('请输入误差精度:pr=');B1=input('请输入由支路参数形成的矩阵:B1=');B...
继续访问
matlab程序 潮流计算,潮流计算matlab程序
《潮流计算matlab程序》由会员分享,可在线阅读,更多相关《潮流计算matlab程序(3页珍藏版)》请在人人文库网上搜索。1、clear;%各节点参数:节点编号,类型,电压幅值,电压相位,注入有功,注入无功 %类型:1PQ节点,2PV节点,3平衡节点%本程序中将最后一个节点设为平衡节点R_1=1 1 1.0 0 0.2 0.2j;2 1 1.0 0 -0.45 -0.15j;3 1 1.0 0 ...
继续访问
matlab潮流计算函数,基于牛顿拉夫逊法潮流计算的matlab实验报告(含源程序和结果)...
《基于牛顿拉夫逊法潮流计算的matlab实验报告(含源程序和结果)》由会员分享,可在线阅读,更多相关《基于牛顿拉夫逊法潮流计算的matlab实验报告(含源程序和结果)(24页珍藏版)》请在人人文库网上搜索。1、基于牛顿拉夫逊法潮流计算的matlab实验报告一、 实验目的和要求1.学习掌握matlab的基本用法2.应用MATLAB语言编写具有一定通用性的牛顿-拉夫逊法潮流计算程序。要求:(1)潮流计...
继续访问
matlab的做潮流计算,Matlab实现潮流计算程序
关于Matlab趋势计算program.doc文件的实现,爱文共享的信息具有丰富的相关文档,每天都有成千上万的行业名人在该站点上共享最新信息.程序代码如下: 读取数据clcclearfilename ='txt'a = textread(filename)n = a(,)pinghengjd = a(,)phjddianya = a(,)jingdu = a(,)b = zeros (,)j = ...
继续访问
天然气潮流计算matlab程序
此外,由于天然气在管道内传输时会产生压力损耗,所以每隔一段都要设置压缩机来提升节点压力,保证天然气系统的正常运行。(3)如果节点中存在压缩机,则可以求得压缩机消耗的等效天然气流量,将其作为一个负荷加入到潮流计算中;管道或者节点的约束,例如流量、节点压力、压缩机消耗电能和压缩比等,如下面四式所示。(2)根据天然气节点压力与节点间流量的关系式求出前一个节点的节点压力;(1)由用户负荷求得微型燃气轮机的功率??g,求出其消耗的天然气流量;(5)重复步骤(2)-(4),直至求解出整个天然气网络潮流。
继续访问
潮流计算程序matlab 牛拉法
潮流计算程序matlab 牛拉法 采用matlab对9节点进行潮流计算,采用牛拉法,程序运行可靠。 ID:6950640936668052 爱熬夜的程序猿 尊重原创,本文转载自:莫如博客,原文地址:https://mooru.cn/20673.html ...
继续访问
最新发布 基于matlab电力系统的牛顿-拉夫逊法进行潮流计算
习题的具体计算
继续访问
热门推荐 潮流计算的matlab程序实现方法
这是一个电气狗熬两个礼拜图书馆的成果,根据华中科技大学《电力系统分析》中原理编写,可用牛顿-拉夫逊和PQ分解法计算给定标幺值条件的潮流。本人水平有限,仅供参考,欢迎一起找Bug。 2019/11/17 添加算例系统图和基础数据、参考文献。 2019/01/05 添加word文档潮流计算课程设计。 2018/07/06 说明:由于本人变压器建模与PSASP不同,本人使用模型如下图,参数输入时...
继续访问
matlab潮流计算程序.rar_chaoliujisuan _matlab潮流计算_潮流程序_潮流计算_潮流计算程序
在MATLAB环境下的潮流计算程序简单清晰
【牛顿迭代】使用MATLAB综合设计电力系统潮流计算程序
综合设计潮流计算程序,以数据文件输入电网数据原始数据,牛拉法算法实现,研究分析收敛特性及其与线路参数的关系。
继续访问
潮流计算matlab程序
算法
matlab
写评论
6
130