I have a file that contains a long list of data like this:
b09 fl__2220 fuel20 ddm___an ddm___an dfl___de dfl___de dfl___de dfl___de dfl___de dfl___de dfl___de
fl dfl___de dfl___de dfl___de dfl___de dfl___de dfl___de dfl___de ddm___an ddm___an
simulated 32.9 0.0000 0.0000 0.0659 0.0888 0.1132 0.1298 0.1374 0.1413 0.1452
0.1460 0.1434 0.1404 0.1339 0.1186 0.0946 0.0708 0.0000 0.0000
measured 29.0 0.0000 0.0000 0.0579 0.0780 0.0994 0.1140 0.1207 0.1241 0.1276
0.1283 0.1260 0.1233 0.1177 0.1042 0.0831 0.0622 0.0000 0.0000
I want to extract certain data from a particular row, and then more data from a few rows ahead. From the first row I want to extract 'b09 fl__2220' and then I want to extract the fifth and sixth rows, so everything after 'measured'. The final output would look something like this:
b09 fl__2220 measured 29.0 0.0000 0.0000 0.0579 0.0780 0.0994 0.1140 0.1207 0.1241 0.1276 0.1283 0.1260 0.1233 0.1177 0.1042 0.0831 0.0622 0.0000 0.0000
I can get gawk to extract the b09 and fl__2220 with gawk '/fl__2220/ {print $1, $2}', but how do I get it to skip ahead and read the stuff from 'measured' line onwards to the last 0.0000? Or would something like perl or grep be better for situations like this?
The whole file contains similar data, eg. 'c12 fl__2211. . .', etc. But I just want the data for b09 fl__2220.
This is pretty simple to do in Perl. It looks like your data is fixed width so in that case you would parse it with an unpack template.
Here is the documentation.
pack tutorial
https://perldoc.perl.org/functions/unpack
https://perldoc.perl.org/functions/pack
$line =
"b09 fl__2220 fuel20 ddm___an ddm___an dfl___de dfl___de dfl___de dfl___de dfl___de dfl___de dfl___de";
#fields = unpack "A6A10";
###
### produces #fields containing ("b09", "fl__2220")
###
You would write the template for each type of line and extract it in the same manner. The A template character automatically trims trailing spaces. The number after A means how many of that type to take. A6 means take 6 characters and trim.
Another way to do it would be to use substr to pull out a number of substrings but you have to trim it yourself. unpack is usually easier.
If you are new to Perl remember to always put use strict; and use diagnostics; at the top of your script. That way you'll get a nice explanatory message whenever anything goes wrong instead of hopelessness!
HTH
Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 3 years ago.
Improve this question
i have 2 reflection coefficient equations R1 and R2 from K with condition absolute must below 1, i use if command for this situation .But when i plot the graph the absolute reflection coefficient still above 1. (K is matrix with 1 column and 201 row)
R1=K+sqrt(K.^2-1);
R2=K-sqrt(K.^2-1);
if abs(R1)<1
r=R1;
else
r=R2;
end
this is the K in excel
real imaginer
-0.7536 0.0512
-0.802 0.0426
-0.8496 0.0408
-0.8872 0.0327
-0.927 0.0338
-0.9575 0.0242
-0.979 0.0174
-0.9977 0.0113
-10,031 0.0029
-10,012 -0.007
-0.9876 -0.0167
-0.9654 -0.0249
-0.9299 -0.0401
-0.8797 -0.0488
-0.8176 -0.0623
-0.7297 -0.0782
-0.6458 -0.0865
-0.5351 -0.1051
-0.4098 -0.1197
-0.2701 -0.1349
-0.1177 -0.1489
0.0536 -0.1699
0.213 -0.1853
0.3933 -0.1921
0.5519 -0.1857
0.7128 -0.1896
0.8511 -0.1712
0.9468 -0.1452
10,222 -0.0943
10,375 -0.04
10,134 0.0365
0.9361 0.1255
0.8122 0.2168
0.6622 0.3108
0.4657 0.3774
0.2577 0.4497
0.0431 0.4775
-0.1463 0.5093
-0.3442 0.4999
-0.5203 0.4782
-0.6692 0.4417
-0.7781 0.3822
-0.8856 0.3293
-0.9703 0.2615
-10,187 0.193
-10,524 0.1254
-10,614 0.0557
-10,539 -0.0016
-10,297 -0.0698
-0.9879 -0.1212
-0.9355 -0.1829
-0.8721 -0.2298
-0.8011 -0.2783
-0.7232 -0.325
-0.6401 -0.3586
-0.5455 -0.4008
-0.4429 -0.43
-0.3524 -0.4433
-0.2455 -0.4769
-0.1336 -0.4863
-0.0391 -0.5073
0.0779 -0.5105
0.1776 -0.5196
0.2869 -0.5152
0.3893 -0.5084
0.4831 -0.4978
0.5888 -0.4907
0.6822 -0.4574
0.7614 -0.4381
0.8484 -0.4017
0.9098 -0.3585
0.9771 -0.3172
10,268 -0.2607
10,667 -0.2102
10,969 -0.1464
11,115 -0.0724
11,141 -0.0019
10,981 0.0838
10,645 0.1546
10,135 0.2457
0.9409 0.3332
0.8657 0.4061
0.7519 0.4973
0.6426 0.5635
0.5072 0.6302
0.3633 0.6782
0.2148 0.7161
0.0382 0.7573
-0.1051 0.7395
-0.273 0.7359
-0.4273 0.7154
-0.5653 0.6794
-0.6971 0.6279
-0.8202 0.555
-0.905 0.493
-0.9996 0.4155
-10,716 0.3239
-11,006 0.2549
-11,444 0.1479
-11,464 0.0722
-11,493 -0.0031
-11,282 -0.0814
-11,040 -0.1603
-10,645 -0.2219
-10,187 -0.2787
-0.9514 -0.3223
-0.8878 -0.3841
-0.8225 -0.42
-0.7415 -0.4606
-0.6607 -0.4889
-0.5577 -0.5319
-0.482 -0.5512
-0.3775 -0.5614
-0.2918 -0.5798
-0.1621 -0.5712
-0.0979 -0.5917
0.0149 -0.5559
0.1062 -0.5734
0.2142 -0.5648
0.3159 -0.5363
0.3844 -0.5302
0.5019 -0.5066
0.5805 -0.4709
0.6626 -0.4506
0.7482 -0.4117
0.8005 -0.363
0.8799 -0.3378
0.9349 -0.2889
0.9883 -0.2449
10,306 -0.1946
10,643 -0.1373
10,870 -0.1025
10,935 -0.0389
10,840 0.0184
10,732 0.0639
10,333 0.1274
0.9906 0.1739
0.9243 0.2293
0.8455 0.2752
0.7527 0.3035
0.6292 0.3394
0.5384 0.3524
0.3808 0.3845
0.2509 0.4067
0.0931 0.4004
-0.0423 0.3839
-0.2123 0.377
-0.3666 0.3537
-0.4838 0.3309
-0.6157 0.288
-0.7211 0.2604
-0.8322 0.2172
-0.8947 0.1791
-0.9618 0.1366
-10,024 0.0932
-10,299 0.0493
-10,415 0.0099
-10,333 -0.0243
-10,092 -0.0612
-0.9798 -0.0906
-0.9321 -0.1302
-0.8796 -0.1472
-0.8121 -0.17
-0.7414 -0.1886
-0.6649 -0.2019
-0.5907 -0.2149
-0.4793 -0.2271
-0.4011 -0.2224
-0.3121 -0.2408
-0.1948 -0.2343
-0.0997 -0.2322
0.008 -0.2328
0.1304 -0.2224
0.2662 -0.2213
0.4093 -0.2298
0.553 -0.2406
0.7094 -0.3018
0.8613 -0.383
0.9745 -0.5634
0.9796 -0.8226
0.7781 -0.9412
0.6424 -0.8495
0.6264 -0.8147
0.6071 -0.6706
0.6682 -0.6029
0.6759 -0.5596
0.71 -0.5218
0.7479 -0.4825
0.7691 -0.4476
0.8264 -0.4056
0.8412 -0.3912
0.8511 -0.3813
0.8689 -0.3425
0.899 -0.3375
0.8827 -0.3198
0.9024 -0.3164
0.929 -0.2876
0.9106 -0.2855
0.9695 -0.2079
10,342 -0.5353
0.8692 -0.5046
I am not 100% sure exactly what you are asking, but I believe the problem you are experiencing is that r is above 1?
K is an imaginary number, where the first column is the real part and the second column is the imaginary part, do I have that correctly? So the first K value is -0.7536+0.0512i, right?
Ok, so did you perhaps intend to cycle through each position of the R1 matrix and see if each one was less than 1. Because right now what you are doing is saying if any values in the entire R1 vector are less than 1, then r equals to the entire R2 vector.
If you want to go through each position in the vector, you should do this:
R1=K+sqrt(K.^2-1);
R2=K-sqrt(K.^2-1);
l=length(R1);
for p=1:l
if abs(R1(p))<1
r(p)=R1(p);
else
r(p)=R2(p);
end
end
I have two matrices that i have concatenated vertically. However, i want to insert 2 or more rows in between them with a string in those rows.. how do i go about doing that.?
Basically this is what i have;
A = 0.7363 0.8217 0.7904 0.5144 0.5341
0.3947 0.4299 0.9493 0.8843 0.0900
0.6834 0.8878 0.3276 0.5880 0.1117
0.7040 0.3912 0.6713 0.1548 0.1363
0.4423 0.7691 0.4386 0.1999 0.6787
0.0196 0.3968 0.8335 0.4070 0.4952
0.3309 0.8085 0.7689 0.7487 0.1897
0.4243 0.7551 0.1673 0.8256 0.4950
0.2703 0.3774 0.8620 0.7900 0.1476
0.1971 0.2160 0.9899 0.3185 0.0550
But i want it to be;
A = 0.7363 0.8217 0.7904 0.5144 0.5341
0.3947 0.4299 0.9493 0.8843 0.0900
0.6834 0.8878 0.3276 0.5880 0.1117
0.7040 0.3912 0.6713 0.1548 0.1363
0.4423 0.7691 0.4386 0.1999 0.6787
MESH PART
0.0196 0.3968 0.8335 0.4070 0.4952
0.3309 0.8085 0.7689 0.7487 0.1897
0.4243 0.7551 0.1673 0.8256 0.4950
0.2703 0.3774 0.8620 0.7900 0.1476
0.1971 0.2160 0.9899 0.3185 0.0550
Assuming CATIA can read the output correctly, you could simply set A as a cell variable, which can contain both numbers and strings of characters. This is achieved by using the brackets { }, as opposed to [ ] for numeric matrices. In your particular case, I would write:
A = {0.7363 0.8217 0.7904 0.5144 0.5341; ...
0.3947 0.4299 0.9493 0.8843 0.0900; ...
0.6834 0.8878 0.3276 0.5880 0.1117; ...
0.7040 0.3912 0.6713 0.1548 0.1363; ...
0.4423 0.7691 0.4386 0.1999 0.6787; ...
'MESH' 'PART' '-' '-' '-' ; ...
0.0196 0.3968 0.8335 0.4070 0.4952; ...
0.3309 0.8085 0.7689 0.7487 0.1897; ...
0.4243 0.7551 0.1673 0.8256 0.4950; ...
0.2703 0.3774 0.8620 0.7900 0.1476; ...
0.1971 0.2160 0.9899 0.3185 0.0550};
The '-'s next to MESH and PART are for consistency with the matrix (in this case, cell) size. I hope this works for you.
My optimization using "Lsqnonlin" is running into an error in the 18th iteration. I was wondering if I could see what is the current input point that the algorithm is using for each iteration. It may help me diagnose what's going wrong. Thanks
EDIT: First Pass at Solution
I created myoutput.m
function stop = myoutput(x,optimValues,state)
stop = false;
indicator = x;
disp(indicator)
Then added OutPut Fcn to me options
options = optimset('disp','iter-detailed','MaxFunEvals',1000,'TolFun',1e-5,'OutputFcn',#myoutput);
HW1Fparams= lsqnonlin(HW1Fobjfun4,x0,lb,ub,options)
But I am getting hideous looking results like these:
I'd appreciate it if someone can help me make it look nicer. Below the break is the rest of the original question.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Full code below. I am using some Financial Toolbox functions. The idea is to calibrate the Hull White One Factor Model to market data. It's a straightforward exercise and I must be specifying things incorrectly because it's totally tripping me up.
ValuationDate = '10-01-2014';
Settle = datenum(ValuationDate);
CurveDates = [735874;
735882;
735906;
735936;
735950;
736040;
736133;
736224;
736314;
736424;
736606;
736788;
736971;
737153;
737336;
737518;
737701;
737884;
738069;
738251;
738433;
738615;
738797;
738979;
739162;
739345;
739528;
739710;
739893;
740075;
740260;
740442;
740624;
740806;
740989;
741171;
741354;
741536;
741719;
741901;
742084;
742269;
742451;
742633;
742815;
742997;
743180;
743362;
743545;
743728;
743911;
744093;
744278;
744460;
744642;
744824;
745006;
745189;
745372;
745554;
745737;
745919;
746102;
746284;
746469;
746651;
746833;
747015;
747198;
747380;
747563;
747745;
747928;
748111;
748296;
748478;
748660;
748842;
749024;
749206;
749389;
749572;
749755;
749937;
750120;
750302;
750487];
ZeroRates = 1.0e-03*[0.0172;
0.0188;
0.0191;
0.0221;
0.0249;
0.0244;
0.0269;
0.0333;
0.0423;
0.0571;
0.0789;
0.1021;
0.1253;
0.1435;
0.1617;
0.1749;
0.1881;
0.1973;
0.2064;
0.2158;
0.2253;
0.2311;
0.2370;
0.2429;
0.2488;
0.2547;
0.2607;
0.2640;
0.2672;
0.2706;
0.2738;
0.2772;
0.2807;
0.2842;
0.2877;
0.2913;
0.2948;
0.2964;
0.2979;
0.2995;
0.3011;
0.3026;
0.3043;
0.3060;
0.3077;
0.3095;
0.3112;
0.3118;
0.3125;
0.3132;
0.3138;
0.3146;
0.3152;
0.3160;
0.3167;
0.3175;
0.3183;
0.3186;
0.3189;
0.3192;
0.3196;
0.3199;
0.3202;
0.3206;
0.3209;
0.3213;
0.3217;
0.3217;
0.3216;
0.3216;
0.3216;
0.3216;
0.3216;
0.3216;
0.3216;
0.3216;
0.3216;
0.3217;
0.3217;
0.3218;
0.3218;
0.3219;
0.3219;
0.3220;
0.3220;
0.3221;
0.3221];
Compounding = 2;
RateSpec = intenvset('Compounding', 2,'ValuationDate', ValuationDate,'StartDates', ValuationDate,'EndDates', CurveDates,'Rates', ZeroRates);
InstrumentMaturity = datenum('12-Sep-2044');
SwaptionBlackVol = [ 0.5940 0.5550 0.4450 0.3710 0.3400 0.3110 0.2910 0.2750 0.2630 0.2520 0.2250 0.2140 0.2080 0.2050;
0.5630 0.5470 0.4420 0.3690 0.3360 0.3090 0.2900 0.2740 0.2630 0.2520 0.2260 0.2150 0.2090 0.2060;
0.5760 0.5330 0.4400 0.3730 0.3410 0.3150 0.2970 0.2820 0.2700 0.2590 0.2330 0.2220 0.2170 0.2140;
0.5840 0.5020 0.4240 0.3730 0.3480 0.3240 0.3060 0.2920 0.2810 0.2710 0.2430 0.2300 0.2230 0.2190;
0.5630 0.4750 0.4100 0.3700 0.3450 0.3230 0.3070 0.2940 0.2830 0.2740 0.2470 0.2330 0.2260 0.2210;
0.5510 0.4520 0.3980 0.3660 0.3410 0.3220 0.3070 0.2950 0.2850 0.2760 0.2500 0.2360 0.2290 0.2240;
0.4630 0.4010 0.3660 0.3440 0.3250 0.3100 0.2990 0.2890 0.2790 0.2720 0.2470 0.2320 0.2260 0.2210;
0.4230 0.3750 0.3480 0.3290 0.3140 0.3030 0.2930 0.2840 0.2760 0.2690 0.2420 0.2300 0.2240 0.2190;
0.3700 0.3470 0.3280 0.3110 0.2960 0.2880 0.2800 0.2730 0.2680 0.2620 0.2360 0.2240 0.2190 0.2150;
0.3420 0.3250 0.3100 0.2970 0.2850 0.2770 0.2700 0.2640 0.2590 0.2540 0.2280 0.2180 0.2140 0.2110;
0.3230 0.3010 0.2900 0.2810 0.2720 0.2650 0.2590 0.2540 0.2500 0.2470 0.2230 0.2130 0.2090 0.2060;
0.3010 0.2860 0.2760 0.2670 0.2580 0.2530 0.2480 0.2450 0.2420 0.2390 0.2160 0.2060 0.2030 0.2000;
0.2850 0.2750 0.2650 0.2560 0.2480 0.2440 0.2400 0.2370 0.2350 0.2320 0.2100 0.2000 0.1970 0.1940;
0.2710 0.2600 0.2510 0.2440 0.2380 0.2340 0.2310 0.2290 0.2260 0.2240 0.2040 0.1940 0.1910 0.1890;
0.2580 0.2470 0.2400 0.2350 0.2300 0.2270 0.2240 0.2210 0.2190 0.2170 0.1980 0.1890 0.1860 0.1840;
0.2460 0.2370 0.2320 0.2270 0.2240 0.2210 0.2180 0.2150 0.2130 0.2110 0.1980 0.1840 0.1820 0.1800;
0.2040 0.1980 0.1950 0.1920 0.1900 0.1890 0.1890 0.1880 0.1880 0.1870 0.1720 0.1660 0.1640 0.1620;
0.1790 0.1750 0.1740 0.1730 0.1730 0.1710 0.1710 0.1700 0.1690 0.1690 0.1530 0.1510 0.1500 0.1480;
0.1650 0.1650 0.1660 0.1670 0.1680 0.1670 0.1670 0.1680 0.1680 0.1680 0.1550 0.1580 0.1560 0.1530;
0.1530 0.1570 0.1590 0.1620 0.1640 0.1650 0.1660 0.1670 0.1680 0.1690 0.1560 0.1650 0.1620 0.1590];
SwaptionExerciseDates = cellstr(['1M ';'2M ';'3M '; '6M ';'9M ';'1Y ';'18M';'2Y ';'3Y ';'4Y ';'5Y ';'6Y ';'7Y ';'8Y ';'9Y ';'10Y';'15Y';'20Y';'25Y';'30Y']);
SwaptionTenors = cellstr(['1Y ';
'2Y ';
'3Y ';
'4Y ';
'5Y ';
'6Y ';
'7Y ';
'8Y ';
'9Y ';
'10Y';
'15Y';
'20Y';
'25Y';
'30Y']);
testmat = zeros(length(SwaptionExerciseDates),1);
for i = 1:length(SwaptionExerciseDates)
if SwaptionExerciseDates{i}(end)=='Y'
testmat(i) = addtodate(Settle,str2double(SwaptionExerciseDates{i}(1:end-1)),'year');
elseif SwaptionExerciseDates{i}(end)=='M'
testmat(i)=addtodate(Settle,str2double(SwaptionExerciseDates{i}(1:end-1)),'month');
end
end
EurExDates= testmat;
EurExDatesFull = repmat(testmat,1,length(SwaptionTenors));
testmat2 = zeros(length(SwaptionExerciseDates),length(SwaptionTenors));
for i = 1:size(EurExDatesFull,1)
for j = 1:size(EurExDatesFull,2)
if SwaptionTenors{j}(end)=='Y'
testmat2(i,j) = addtodate(EurExDatesFull(i,j),str2double(SwaptionTenors{j}(1:end-1)),'year');
elseif SwaptionTenors{j}(end)=='M'
testmat2(i,j)= addtodate(EurExDatesFull(i,j),str2double(SwaptionTenors{j}(1:end-1)),'month');
end
end
end
EurMatFull = testmat2;
relidx = find(EurMatFull <= InstrumentMaturity);
SwaptionBlackPrices = zeros(size(SwaptionBlackVol));
SwaptionStrike = zeros(size(SwaptionBlackVol));
for iSwaption=1:length(SwaptionExerciseDates)
for iTenor=1:length(SwaptionTenors)
[~,SwaptionStrike(iSwaption,iTenor)] = swapbyzero(RateSpec,[NaN 0],Settle, EurMatFull(iSwaption,iTenor),...
'StartDate',EurExDatesFull(iSwaption,iTenor),'LegReset',[1 2],'Basis',2);
SwaptionBlackPrices(iSwaption,iTenor) = swaptionbyblk(RateSpec,'call', SwaptionStrike(iSwaption,iTenor),Settle, ...
EurExDatesFull(iSwaption,iTenor), EurMatFull(iSwaption,iTenor),SwaptionBlackVol(iSwaption,iTenor));
end
end
TimeSpec = hwtimespec(Settle,daysadd(Settle,30*(1:370),6), 12);
% B = (214:224) produces error free solutions.
B = (150:224);
HW1Fobjfun4 = #(x) SwaptionBlackPrices(relidx(B)) - ...
swaptionbyhw(hwtree(hwvolspec(ValuationDate,testmat,x(2),testmat,x(1),'spline'), RateSpec, TimeSpec), 'call',SwaptionStrike(relidx(B)),EurExDatesFull(relidx(B)), 0,EurExDatesFull(relidx(B)), EurMatFull(relidx(B)),'Basis',2, 'SwapReset',12);
options = optimset('disp','iter','MaxFunEvals',1000,'TolFun',1e-5);
x0 = [.1 .01];
lb = [0 0];
ub = [1 1];
HW1Fparams = lsqnonlin(HW1Fobjfun4,x0,lb,ub,options)
Your best bet may be to modify the source lsqnonlin.m file. This can be a somewhat in-depth process, but it gives you the maximum control over what's going on.
Open the file by typing lsqnonlin at the command prompt, highlighting it, then right-clicking and clicking on Open Selection. Before you do anything else, save a copy of the file to your default Matlab working directory (e.g. C:\Users\username\Documents\MATLAB\ for Windows 7. Matlab puts your default working directory at the top of the search path, so if you have a program that's the same name as a Matlab built-in one, then Matlab will find yours first and use it instead. I don't have that particular function myself, so I can't give you the exact code to put in there, but the solution should be simple enough for you to implement.
With your locally-saved version of the code open, note that on the first line of the program, there's a function declaration that looks something like
function [output1,output2,...]=lsqnonlin(input1,input2,...)
From the MATLAB help page, it looks like x is the first output. Presumably, it's called x in the code itself or something similar, but if not, just use the first output parameter. Now that we know the name of the variable that is being output, we can go through the code and find where it is being calculated. MATLAB will probably have this routine be a wrapper around a more fundamental numerical code. For lsqnonneg, it calls lsqncommon, which then calls either snls or levenbergMarquardt, depending on the details of the problem. Any code that is iteratively solving something will eventually end up in a while loop, since it has to perform the same calculation an unknown number of times to converge on a solution. Once you find the while loop, it's simply a matter of adding a little code to output whatever parameter(s) you'd like to look at.
Just remember that as long as you have a file of the same name in your workspace, you'll be calling that one, not the original code, so you may want to delete (or at lease move) your modified code after you've finished debugging.
Here's my problem. I'm implementing high and low pass filers in the continuous time and discrete time domain, without using MATLAB built in functions or the Signal Processing Toolbox. I need to filter an uploaded wav file. I have the following code which implements the low pass continuous time filter. The main problem is that when I go to play the file, I get the following error:
Warning: Data clipped during write to file:flute_new
In wavwrite>PCM_Quantize at 286
In wavwrite>write_wavedat at 302
In wavwrite at 139
In test2 at 23
I've been reading that a common solution to this problem is: signal = signal/max(abs(signal)), but that still doesn't fix the problem of clipping. I don't quite understand what produces this error, so any help would be appreciated. Thank you for reading. Code is as follows:
[y,Fs,nbits]=wavread('flute.wav');
m = length(y); %96375
Fc = 500; %% frequency cut
nbits
n = -(m-1)/2 : (m-1)/2; %% kernel length / samples
%Fs = Fs; %22050 %% sample frequency / (nyquist - %2*m)
Tc = 2*pi*(Fc/Fs); %% theta c
Hm = sin(Tc*n) ./ (pi*n);
if (rem(m, 2) == 1)
index = (m+1)/2;
Hm(index) = Tc/pi;
end
[H w] = freqz(Hm, 1, 1024); % 1024 - Amount of Fourier Transform points
%do playback
sound(w,Fs);
%save and playback the file
wavwrite(w,'flute_new')
UPDATE:
From what I understand, because my wav file is 16 bits, I can only have -1<=w<1. I updated my code as suggested in the comments, but when I check the w values, I still have a w=1 at the end. The suggested code did eliminate the clipping warning, but the playback of the audio file through the speakers still has clipping. Maybe I'm understanding the concept wrong. Sorry if that's the case.
Playback Code (updated):
%Write and play file
w = w./max(abs(w(:)))*(1-(2^-(nbits-1)));
w
%do playback
sound(w,Fs);
wavwrite(w,'flute_new');
Output from terminal:
>> test2
nbits =
16
w =
0
0.0010
0.0020
0.0029
0.0039
0.0049
0.0059
0.0068
0.0078
0.0088
0.0098
0.0108
0.0117
0.0127
0.0137
0.0147
0.0156
0.0166
0.0176
0.0186
0.0195
0.0205
0.0215
0.0225
0.0235
0.0244
0.0254
0.0264
0.0274
0.0283
0.0293
0.0303
0.0313
0.0323
0.0332
0.0342
0.0352
0.0362
0.0371
0.0381
0.0391
0.0401
0.0411
0.0420
0.0430
0.0440
0.0450
0.0459
0.0469
0.0479
0.0489
0.0499
0.0508
0.0518
0.0528
0.0538
0.0547
0.0557
0.0567
0.0577
0.0586
0.0596
0.0606
0.0616
0.0626
0.0635
0.0645
0.0655
0.0665
0.0674
0.0684
0.0694
0.0704
0.0714
0.0723
0.0733
0.0743
0.0753
0.0762
0.0772
0.0782
0.0792
0.0802
0.0811
0.0821
0.0831
0.0841
0.0850
0.0860
0.0870
0.0880
0.0890
0.0899
0.0909
0.0919
0.0929
0.0938
0.0948
0.0958
0.0968
0.0977
0.0987
0.0997
0.1007
0.1017
0.1026
0.1036
0.1046
0.1056
0.1065
0.1075
0.1085
0.1095
0.1105
0.1114
0.1124
0.1134
0.1144
0.1153
0.1163
0.1173
0.1183
0.1193
0.1202
0.1212
0.1222
0.1232
0.1241
0.1251
0.1261
0.1271
0.1281
0.1290
0.1300
0.1310
0.1320
0.1329
0.1339
0.1349
0.1359
0.1368
0.1378
0.1388
0.1398
0.1408
0.1417
0.1427
0.1437
0.1447
0.1456
0.1466
0.1476
0.1486
0.1496
0.1505
0.1515
0.1525
0.1535
0.1544
0.1554
0.1564
0.1574
0.1584
0.1593
0.1603
0.1613
0.1623
0.1632
0.1642
0.1652
0.1662
0.1672
0.1681
0.1691
0.1701
0.1711
0.1720
0.1730
0.1740
0.1750
0.1759
0.1769
0.1779
0.1789
0.1799
0.1808
0.1818
0.1828
0.1838
0.1847
0.1857
0.1867
0.1877
0.1887
0.1896
0.1906
0.1916
0.1926
0.1935
0.1945
0.1955
0.1965
0.1975
0.1984
0.1994
0.2004
0.2014
0.2023
0.2033
0.2043
0.2053
0.2062
0.2072
0.2082
0.2092
0.2102
0.2111
0.2121
0.2131
0.2141
0.2150
0.2160
0.2170
0.2180
0.2190
0.2199
0.2209
0.2219
0.2229
0.2238
0.2248
0.2258
0.2268
0.2278
0.2287
0.2297
0.2307
0.2317
0.2326
0.2336
0.2346
0.2356
0.2366
0.2375
0.2385
0.2395
0.2405
0.2414
0.2424
0.2434
0.2444
0.2453
0.2463
0.2473
0.2483
0.2493
0.2502
0.2512
0.2522
0.2532
0.2541
0.2551
0.2561
0.2571
0.2581
0.2590
0.2600
0.2610
0.2620
0.2629
0.2639
0.2649
0.2659
0.2669
0.2678
0.2688
0.2698
0.2708
0.2717
0.2727
0.2737
0.2747
0.2757
0.2766
0.2776
0.2786
0.2796
0.2805
0.2815
0.2825
0.2835
0.2844
0.2854
0.2864
0.2874
0.2884
0.2893
0.2903
0.2913
0.2923
0.2932
0.2942
0.2952
0.2962
0.2972
0.2981
0.2991
0.3001
0.3011
0.3020
0.3030
0.3040
0.3050
0.3060
0.3069
0.3079
0.3089
0.3099
0.3108
0.3118
0.3128
0.3138
0.3148
0.3157
0.3167
0.3177
0.3187
0.3196
0.3206
0.3216
0.3226
0.3235
0.3245
0.3255
0.3265
0.3275
0.3284
0.3294
0.3304
0.3314
0.3323
0.3333
0.3343
0.3353
0.3363
0.3372
0.3382
0.3392
0.3402
0.3411
0.3421
0.3431
0.3441
0.3451
0.3460
0.3470
0.3480
0.3490
0.3499
0.3509
0.3519
0.3529
0.3539
0.3548
0.3558
0.3568
0.3578
0.3587
0.3597
0.3607
0.3617
0.3626
0.3636
0.3646
0.3656
0.3666
0.3675
0.3685
0.3695
0.3705
0.3714
0.3724
0.3734
0.3744
0.3754
0.3763
0.3773
0.3783
0.3793
0.3802
0.3812
0.3822
0.3832
0.3842
0.3851
0.3861
0.3871
0.3881
0.3890
0.3900
0.3910
0.3920
0.3929
0.3939
0.3949
0.3959
0.3969
0.3978
0.3988
0.3998
0.4008
0.4017
0.4027
0.4037
0.4047
0.4057
0.4066
0.4076
0.4086
0.4096
0.4105
0.4115
0.4125
0.4135
0.4145
0.4154
0.4164
0.4174
0.4184
0.4193
0.4203
0.4213
0.4223
0.4233
0.4242
0.4252
0.4262
0.4272
0.4281
0.4291
0.4301
0.4311
0.4320
0.4330
0.4340
0.4350
0.4360
0.4369
0.4379
0.4389
0.4399
0.4408
0.4418
0.4428
0.4438
0.4448
0.4457
0.4467
0.4477
0.4487
0.4496
0.4506
0.4516
0.4526
0.4536
0.4545
0.4555
0.4565
0.4575
0.4584
0.4594
0.4604
0.4614
0.4624
0.4633
0.4643
0.4653
0.4663
0.4672
0.4682
0.4692
0.4702
0.4711
0.4721
0.4731
0.4741
0.4751
0.4760
0.4770
0.4780
0.4790
0.4799
0.4809
0.4819
0.4829
0.4839
0.4848
0.4858
0.4868
0.4878
0.4887
0.4897
0.4907
0.4917
0.4927
0.4936
0.4946
0.4956
0.4966
0.4975
0.4985
0.4995
0.5005
0.5015
0.5024
0.5034
0.5044
0.5054
0.5063
0.5073
0.5083
0.5093
0.5102
0.5112
0.5122
0.5132
0.5142
0.5151
0.5161
0.5171
0.5181
0.5190
0.5200
0.5210
0.5220
0.5230
0.5239
0.5249
0.5259
0.5269
0.5278
0.5288
0.5298
0.5308
0.5318
0.5327
0.5337
0.5347
0.5357
0.5366
0.5376
0.5386
0.5396
0.5406
0.5415
0.5425
0.5435
0.5445
0.5454
0.5464
0.5474
0.5484
0.5493
0.5503
0.5513
0.5523
0.5533
0.5542
0.5552
0.5562
0.5572
0.5581
0.5591
0.5601
0.5611
0.5621
0.5630
0.5640
0.5650
0.5660
0.5669
0.5679
0.5689
0.5699
0.5709
0.5718
0.5728
0.5738
0.5748
0.5757
0.5767
0.5777
0.5787
0.5796
0.5806
0.5816
0.5826
0.5836
0.5845
0.5855
0.5865
0.5875
0.5884
0.5894
0.5904
0.5914
0.5924
0.5933
0.5943
0.5953
0.5963
0.5972
0.5982
0.5992
0.6002
0.6012
0.6021
0.6031
0.6041
0.6051
0.6060
0.6070
0.6080
0.6090
0.6100
0.6109
0.6119
0.6129
0.6139
0.6148
0.6158
0.6168
0.6178
0.6187
0.6197
0.6207
0.6217
0.6227
0.6236
0.6246
0.6256
0.6266
0.6275
0.6285
0.6295
0.6305
0.6315
0.6324
0.6334
0.6344
0.6354
0.6363
0.6373
0.6383
0.6393
0.6403
0.6412
0.6422
0.6432
0.6442
0.6451
0.6461
0.6471
0.6481
0.6491
0.6500
0.6510
0.6520
0.6530
0.6539
0.6549
0.6559
0.6569
0.6578
0.6588
0.6598
0.6608
0.6618
0.6627
0.6637
0.6647
0.6657
0.6666
0.6676
0.6686
0.6696
0.6706
0.6715
0.6725
0.6735
0.6745
0.6754
0.6764
0.6774
0.6784
0.6794
0.6803
0.6813
0.6823
0.6833
0.6842
0.6852
0.6862
0.6872
0.6882
0.6891
0.6901
0.6911
0.6921
0.6930
0.6940
0.6950
0.6960
0.6969
0.6979
0.6989
0.6999
0.7009
0.7018
0.7028
0.7038
0.7048
0.7057
0.7067
0.7077
0.7087
0.7097
0.7106
0.7116
0.7126
0.7136
0.7145
0.7155
0.7165
0.7175
0.7185
0.7194
0.7204
0.7214
0.7224
0.7233
0.7243
0.7253
0.7263
0.7273
0.7282
0.7292
0.7302
0.7312
0.7321
0.7331
0.7341
0.7351
0.7360
0.7370
0.7380
0.7390
0.7400
0.7409
0.7419
0.7429
0.7439
0.7448
0.7458
0.7468
0.7478
0.7488
0.7497
0.7507
0.7517
0.7527
0.7536
0.7546
0.7556
0.7566
0.7576
0.7585
0.7595
0.7605
0.7615
0.7624
0.7634
0.7644
0.7654
0.7664
0.7673
0.7683
0.7693
0.7703
0.7712
0.7722
0.7732
0.7742
0.7751
0.7761
0.7771
0.7781
0.7791
0.7800
0.7810
0.7820
0.7830
0.7839
0.7849
0.7859
0.7869
0.7879
0.7888
0.7898
0.7908
0.7918
0.7927
0.7937
0.7947
0.7957
0.7967
0.7976
0.7986
0.7996
0.8006
0.8015
0.8025
0.8035
0.8045
0.8054
0.8064
0.8074
0.8084
0.8094
0.8103
0.8113
0.8123
0.8133
0.8142
0.8152
0.8162
0.8172
0.8182
0.8191
0.8201
0.8211
0.8221
0.8230
0.8240
0.8250
0.8260
0.8270
0.8279
0.8289
0.8299
0.8309
0.8318
0.8328
0.8338
0.8348
0.8358
0.8367
0.8377
0.8387
0.8397
0.8406
0.8416
0.8426
0.8436
0.8445
0.8455
0.8465
0.8475
0.8485
0.8494
0.8504
0.8514
0.8524
0.8533
0.8543
0.8553
0.8563
0.8573
0.8582
0.8592
0.8602
0.8612
0.8621
0.8631
0.8641
0.8651
0.8661
0.8670
0.8680
0.8690
0.8700
0.8709
0.8719
0.8729
0.8739
0.8749
0.8758
0.8768
0.8778
0.8788
0.8797
0.8807
0.8817
0.8827
0.8836
0.8846
0.8856
0.8866
0.8876
0.8885
0.8895
0.8905
0.8915
0.8924
0.8934
0.8944
0.8954
0.8964
0.8973
0.8983
0.8993
0.9003
0.9012
0.9022
0.9032
0.9042
0.9052
0.9061
0.9071
0.9081
0.9091
0.9100
0.9110
0.9120
0.9130
0.9140
0.9149
0.9159
0.9169
0.9179
0.9188
0.9198
0.9208
0.9218
0.9227
0.9237
0.9247
0.9257
0.9267
0.9276
0.9286
0.9296
0.9306
0.9315
0.9325
0.9335
0.9345
0.9355
0.9364
0.9374
0.9384
0.9394
0.9403
0.9413
0.9423
0.9433
0.9443
0.9452
0.9462
0.9472
0.9482
0.9491
0.9501
0.9511
0.9521
0.9531
0.9540
0.9550
0.9560
0.9570
0.9579
0.9589
0.9599
0.9609
0.9618
0.9628
0.9638
0.9648
0.9658
0.9667
0.9677
0.9687
0.9697
0.9706
0.9716
0.9726
0.9736
0.9746
0.9755
0.9765
0.9775
0.9785
0.9794
0.9804
0.9814
0.9824
0.9834
0.9843
0.9853
0.9863
0.9873
0.9882
0.9892
0.9902
0.9912
0.9921
0.9931
0.9941
0.9951
0.9961
0.9970
0.9980
0.9990
1.0000
It's not an error, just a warning.
If you write a .wav-file with 32 bits resolution, the allowed data range is -1 <= w <= 1. But for 8, 16 or 24 bits, the limits are -1 <= w < 1, such that w==1 creates the clipping warning (1-bit short of '1', i.e., 1 - 1/32768 = 0.99996948242188 in 16-bit mode.), and it can not be written into file. You can ignore that, or :
format long
w = w./max(abs(w(:)))*(1-(2^-(nbits-1)));
wavwrite(w,'flute_new');