%三分之一倍频程处理
clear;
clc;
close all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
s = [2577
2215
1701
1200
735
324
0
1
0
1
1
1
507
1027
1458
1931
2354
2730
2986
3112
3130
3204
3208
3207
3019
2364
1906
1390
899
513
231
2
1
0
1
1
404
842
1254
1744
2141
2543
2853
3055
3205
3203
3044
2728
2391
2048
1700
1224
806
518
302
132
54
90
243
540
987
1395
1773
2086
2355
2685
2893
3072
3032
2929
2711
2466
2133
1802
1349
1012
702
493
5
151
238
230
544
840
1217
1514
1873
2165
2397
2571
2737
2731
2664
2594
2417
2159
1899
1625
1382
1188
946
772
674
658
736
877
948
1195
1362
1573
1845
2011
2150
2230
2304
2306
2219
2135
2100
1817
1710
1525
1353
1233
1101
968
879
901
877
904
1051
1205
1356
1478
1566
1810
1957
2081
2124
2150
2157
2105
2006
1908
1726
1540
1513
1379
1306
1184
1155
1185
1186
1221
1293
1371
1487
1604
1722
1618
1871
1969
1784
1906
1867
1812
1671
1642
1557
1492
1422
1385
1320
1265
1254
1269
1287
1374
1435
1556
1621
1637
1725
1763
1858
1857
1919
1900
1917
1841
1757
1699
1615
1494
1411
1359
1307
1239
1213
1313
1221
1319
1381
1482
1579
1615
1737
1805
1899
1935
1893
1910
1961
1931
1775
1642
1593
1443
1320
1197
1098
1102
1069
1079
1105
1156
1169
1387
1476
1611
1713
1775
1877
1890
1962
1932
1836
1817
1755
1644
1487
1576
1539
1277
1385
1360
1359
1328
1440
1496
1550
1637
1717
1785
1801
1825
];%输入时程数据
sf=256; %采样频率
x=s; %定义三分之一倍频程的中心频率
f=[1.00 1.25 1.60 2.00 2.50 3.15 4.00 5.00 6.30 8.00];
fc=[f,10*f,100*f,1000*f,10000*f];
%中心频率与下限频率的比值
oc6=2^(1/6);
%取中心频率总的长度
nc=length(fc);
%输入数据的长度
n=length(x);
%大于并接近n的2的幂次方长度
nfft=2^nextpow2(n);
%FFT变换
a=fft(x,nfft);
for j=1:nc
%下线频率
fl=fc(j)/oc6;
%上限频率
fu=fc(j)*oc6;
%下限频率对应的序号
nl=round(fl*nfft/sf+1);
%上限频率对应的序号
nu=round(fu*nfft/sf+1);
%如果上相频率大于折叠频率则循环中断
if fu>sf/2
m=j-1;break
end
%以每个中心频率段为通带进行带通频率滤波
b=zeros(1,nfft);
b(nl:nu)=a(nl:nu);
b(nfft-nu+1:nfft-nl+1)=a(nfft-nu+1:nfft-nl+1);
c=ifft(b,nfft);
%计算对应每个中心频段的有效值
yc(j)=sqrt(var(real(b(1:n))));
end
%绘制输入时程曲线图形
subplot(2,2,1);
t=0:1/sf:(n-1)/sf;
plot(t,x);
xlabel('时间(s)');
ylabel('加速度(g)');
grid on;
%绘制三分之一倍频程有效值图形
subplot(2,2,2);
plot(fc(1:m),yc(1:m));
xlabel('频率(Hz)');
ylabel('有效值');
grid on;
%保存倍频程数据
%fid=fopen(fno,'w');
%for k=1:m;
%fprintf(fid,'%f %f\n',fc(k),yc(k));
%end
%status=fclose(fid);