IIR滤波程序function y=iirfilter(b,a,x)nf=length(a);c=zeros(nf-1,nf-1);for i=nf-1:-1:1for j=1:ic(i,j)=b(i-j+1);d(i,j)=-a(i-j+1);endendd(1,1)=0;y(1)=b(1)*x(1);for i=2:nf-1ss=0;for j=2:iss=ss+x(j)*c(i,j)+y(j-1)*d(i,j-1);endy(i)=ss+x(1)*c(i,1);enda(1)=0;for i=nf:length(x)sum=0;for j=2:nfsum=sum+b(j)*x(i-j+1)-a(j)*y(i-j+1);endy(i)=sum+b(1)*x(i);end读写二进制文件写文件file_out = fopen('tdip.b', 'wb');fwrite(file_out,y,'double');%int8,int16,int24,double,float读文件[FileName,PathName] = uigetfile('*.*','Select the M-file');%选择需要处理的数据文件%% % 打开方式为二进制打开,其实'r'就行,matlab是默认二进制形式打开文件的file_id = fopen(FileName, 'rb');%设置输出文件名字jump_distance = 0; % 这里是跳过的字节数fseek(file_id, jump_distance, 'bof');i=0;week=0;week0=headt(7);while ~feof(file_id)% while(i<3)[data, ele_count] = fread(file_id, [4,fs/10] , 'int32' ) ;End批量处理文件编写程序时经常会遇到处理大量数据文件的情况,数据文件的命名比较相似,以一系列编号区分,如“a1.mat,a2.mat,... ,a100.mat " (假设其中的数据名称也为a1...a100) 。
为了可以批量处理这些文件,可以采用如下的方法:for i=1:1:100s=strcat('a', int2Str(i));load(strcat(s,'.mat'));x=eval(s); %将数据a1赋值给x,便于后继统一处理% ... %统一处理程序end写txt文件fid=fopen(‘1.txt’,’w t’);fprintf(fid,‘这是一个测试文件:\n’)fprintf(fid,’%f’,a)m=[A nskip nfft fxb real(pxb) imag(pxb)];fid = fopen('pxb.txt', 'at');fprintf(fid,'振幅开始时间fft点数激励频率pxb:\n');fprintf(fid,' %d %d %d %6.8f %6.8f %6.8f\n\n', m);% fprintf(fid,'l1 l2 l3 l4:\n')% fprintf(fid, ' %d %d %d %d %d %d %d %d\n ', l');fclose(fid);%a=’00:00:00’;% fprintf(fid,'%s ',a);用cell生成自动变量名并幅值clcclearfor i=1993:1996matName{i-1992}=strcat('Y',num2str(i)); % str=[num2str(i-1992) '.csv'];% matName{i-1992}=xlsread(str); matName{i-1992}=rand(1,i-1992);% eval([matName{i-1992} ' = rand(1,i);']); endmatName{1}(1)关于errorbar误差线:体现数据点置信水平和偏差MATLAB中errorbar的使用example#上下误差相等X = 0:pi/10:pi;Y = sin(X);E = 0:0.05:0.5;figureerrorbar(X,Y,E,'r');hold onplot(X,Y,'-mo',...'LineWidth',2,...'MarkerEdgeColor','k',...'MarkerFaceColor',[.49 1 .63],... 'MarkerSize',12);xlabel('x');ylabel('sin(x)');#上下误差不相等X = 0:pi/10:pi;Y = sin(X);L = 0:0.05:0.5;U=0.5:-0.05:0;figureerrorbar(X,Y,L,U,'r');hold onplot(X,Y,'-mo',...'LineWidth',2,...'MarkerEdgeColor','k',...'MarkerFaceColor',[.49 1 .63],... 'MarkerSize',12);xlabel('x');ylabel('sin(x)');误差棒端点拉长的问题(/blog/?p=45)在Matlab中有个画误差棒的函数errorbar,用在对数坐标下时,则会出现误差棒端点拉长的问题,严重影响画面(如下图左半轴所示)。
这个问题开始是在Matlab6.5中发现的,2006b中虽对此函数有所更新但并未解决这个问题。
幸运的是,这个函数没有嵌入内核,可以在命令窗口键入type errorbar ,直接察看其源代码。
找到定义误差棒端点长度的地方tee = (max(x(:))-min(x(:)))/100;% make tee .02 x-distance for error bars取误差棒端点大小为误差棒长度的2%xl = x – tee; 计算左端点xr = x + tee; 右端点找对地方,改起来就很简单了,在对数坐标中,点A变成了logA,要取到同一点,将A变成10^A 即可,后两行改为xl = x/10^tee;xr = x*10^tee;改名保存到工作目录,直接调用,效果如下图右半轴。
如果在这里加上个判断,就可以直接去目录MATLAB\R2006b\toolbox\matlab\specgraph下替换原始文件了:)时间做坐标轴clearclcx=load('a.txt');n=length(x);for i=1:nwhile(x(i,1)<10^5)x(i,1)=x(i,1)*10;endfor j=2:5while(x(i,j)<10^6)x(i,j)=x(i,j)*10;endendendx=x/10^6;ts=datenum('2013-03-25 19:30:06');% ¿ªÊ¼Ê±¼ätf=datenum('2013-03-26 08:06:06');% ½áÊøÊ±¼ät=linspace(ts,tf,length(x));% 21minΪ×ܹ²µÄʱ¼äcolor=['r','g','m','k'];figure(1)plot(t,x(:,1),'LineWidth',2)axis([ts tf 0 4.5])set(gca,'Xtick',[ts:(tf-ts)/6:tf])datetick('x','yyyy/mm/DD HH:MM:SS','keepticks')title('1-5','Color','k','FontSize',16);ylabel('mV','FontName','Times New Roman','FontSize',20)for i=2:5hold onplot(t,x(:,i),color(i-1),'LineWidth',2)endlegend('SB','SC','SD','C1','C2')plot详细semilogx(p_result(1:f_num-1,3),p_result(1:f_num-1,1),'-bo',...'LineWidth',2.2,...'MarkerEdgeColor','k',...'MarkerFaceColor',[0 0 1],...'MarkerSize',6);% set(gca,'xlim',[1 floor(length(p))/2]);% set(gca,'ylim',[-10 35]);hold onsemilogx(p_result(1:f_num-1,3),p_result(1:f_num-1,2),'-bo',...'LineWidth',2.2,...'MarkerEdgeColor','k',...'MarkerFaceColor',[0 0 1],...'MarkerSize',6);添加当前文件夹及其子文件夹到路径currentFolder = pwd;addpath(genpath(currentFolder))在MATLAB中得到系统当前日期、时间也是经常用到的内容,由以下函数实现。