Ik heb een projectje van de universiteit waarbij ik een fitler moet maken voor speakers.
Om een lang verhaal kort te maken; ik probeer nu van deze grafieken:
een formule op te stellen zodat ik dat in mijn programmeercode kan verwerken.
Ik heb alleen geen idee hoe ik dat moet aanpakken, kunnen jullie mij daarbij helpen?
formule opstellen van grafiek
Re: formule opstellen van grafiek
[1] Je kan met hogere graad polynomen de grafieken proberen te benaderen, omdat er 4 toppen per grafiek zijn heb je dan minstens een 5e graads functie nodig.
Nadeel is dat je dan waarschijnlijk toch afwijkingen blijft houden
[2] Je kan een aantal punten bepalen, en tussen die punten lineair of kwadratisch interpoleren.
Dit is een tussenvorm van [1] en [3].
[3] Omdat de grafiek zo klein is kan je hem per pixel scannen en de waarden opslaan in een tabel. Hieronder heb ik dat gedaan. De scanrichting is van onder naar boven, de waardebepaling bij overgang van niet-rood naar rood, dus de onderkant van elke vette rode lijn.
Locatiebepaling horizontaal (x) en vertikaal (y) in pixels van de bitmap:
20 Hz: x = 132
20 kHz: x = 532
130 dB: y = 21
0 dB: y = 454
(NB: in een bitmap loopt y van boven naar beneden).
Als je deze tabel nu vanuit je programma inleest, kan je een functie schrijven die voor gegeven frequentie en gegeven luidheid (phon) de Sound Pressure Level oplevert.
Hieronder een zeer basale versie in C, maar ik denk dat je dit wel kunt aanpassen en vertalen naar de programmeertaal die jij gebruikt (commentaar staat achter de // tekens):
Inlezen tabel:
Raadplegen tabel:
Nadeel is dat je dan waarschijnlijk toch afwijkingen blijft houden
[2] Je kan een aantal punten bepalen, en tussen die punten lineair of kwadratisch interpoleren.
Dit is een tussenvorm van [1] en [3].
[3] Omdat de grafiek zo klein is kan je hem per pixel scannen en de waarden opslaan in een tabel. Hieronder heb ik dat gedaan. De scanrichting is van onder naar boven, de waardebepaling bij overgang van niet-rood naar rood, dus de onderkant van elke vette rode lijn.
Locatiebepaling horizontaal (x) en vertikaal (y) in pixels van de bitmap:
20 Hz: x = 132
20 kHz: x = 532
130 dB: y = 21
0 dB: y = 454
(NB: in een bitmap loopt y van boven naar beneden).
Code: Selecteer alles
xpix blauw rood0 rood20 rood40 rood60 rood80 rood100
132 154 212 154 121 94 59 29
133 156 214 155 123 95 60 30
134 159 216 157 124 96 62 31
135 161 218 159 126 98 63 32
136 163 220 160 128 99 64 33
137 165 222 162 130 100 65 34
138 167 224 164 131 102 66 35
139 169 226 165 133 103 67 36
140 171 228 167 135 104 68 37
141 173 230 169 136 106 70 38
142 176 232 170 138 107 71 39
143 178 234 172 140 108 72 40
144 180 236 174 141 110 73 41
145 182 238 175 143 111 74 42
146 184 240 177 144 112 75 43
147 186 242 179 146 114 76 44
148 188 244 180 147 115 77 45
149 190 246 182 149 116 79 46
150 191 248 184 150 117 80 47
151 193 250 186 152 119 81 48
152 195 251 188 153 120 82 49
153 196 253 189 155 121 83 49
154 197 255 190 156 122 84 50
155 199 257 192 158 124 85 51
156 201 259 194 159 125 86 52
157 203 261 195 161 126 88 53
158 204 263 197 162 127 88 54
159 205 265 199 163 128 90 55
160 207 267 201 165 130 91 56
161 208 269 202 166 131 92 57
162 210 271 204 167 132 93 58
163 211 273 206 169 133 94 59
164 212 274 207 170 134 95 60
165 214 276 209 172 136 96 60
166 215 278 211 173 137 97 61
167 216 280 212 174 138 98 62
168 218 282 214 176 139 99 63
169 219 284 216 177 140 100 64
170 220 286 217 178 141 101 65
171 222 288 219 180 143 102 66
172 223 290 221 181 144 103 67
173 224 292 222 182 145 104 68
174 225 293 224 184 146 105 68
175 227 295 226 185 147 106 69
176 228 297 227 186 148 107 70
177 229 299 228 188 149 108 71
178 231 301 230 189 150 109 72
179 232 302 231 190 152 110 73
180 233 304 233 191 153 111 74
181 235 306 235 193 154 112 74
182 236 308 237 194 155 113 75
183 237 310 239 195 156 114 76
184 239 312 241 196 157 115 77
185 240 313 242 198 158 116 78
186 241 315 243 199 159 117 79
187 242 317 245 200 160 118 80
188 244 319 247 202 161 119 80
189 245 320 248 203 162 120 81
190 246 322 250 204 163 121 82
191 248 324 251 205 164 122 83
192 249 326 253 207 165 123 84
193 250 327 254 208 166 124 84
194 252 329 256 209 167 125 85
195 253 331 258 210 168 125 86
196 254 332 259 212 169 126 87
197 255 334 261 213 170 127 88
198 257 336 263 214 171 128 88
199 258 337 264 215 172 129 89
200 259 339 266 217 173 130 90
201 261 340 267 218 174 130 90
202 262 342 269 219 175 131 91
203 263 343 271 220 176 132 92
204 265 344 272 221 177 133 92
205 266 346 274 223 178 134 93
206 267 347 275 224 179 135 94
207 268 348 277 225 180 135 94
208 270 349 278 226 181 136 95
209 271 351 280 227 182 137 95
210 272 352 281 229 183 138 96
211 274 353 283 230 184 139 96
212 275 355 284 231 185 139 97
213 276 356 286 233 186 140 98
214 277 357 287 234 187 141 98
215 279 358 288 235 187 142 99
216 280 360 290 236 188 142 99
217 281 361 291 238 189 143 100
218 282 363 293 239 190 144 100
219 283 364 294 240 191 145 101
220 284 365 296 242 192 146 101
221 284 367 297 243 193 146 102
222 285 368 298 244 193 147 102
223 286 369 299 245 194 148 102
224 287 370 301 247 195 148 103
225 288 372 302 248 196 149 103
226 288 373 303 249 197 150 104
227 289 374 305 250 198 151 104
228 290 375 306 251 198 151 105
229 291 377 307 252 199 152 105
230 292 378 308 253 200 153 106
231 292 379 310 255 201 154 106
232 293 380 311 256 202 154 106
233 294 381 312 257 202 155 107
234 295 382 313 258 203 156 107
235 295 383 315 259 204 156 108
236 296 385 316 260 205 157 108
237 297 386 317 261 205 158 108
238 298 387 318 262 206 158 109
239 299 388 319 263 207 159 109
240 299 389 320 264 208 160 110
241 300 390 321 265 208 160 110
242 301 391 322 266 209 161 110
243 302 392 323 267 210 161 111
244 303 393 324 268 210 162 111
245 303 394 326 269 211 163 112
246 304 395 327 270 212 163 112
247 305 396 328 270 212 164 112
248 306 397 328 271 213 165 113
249 307 398 329 272 214 165 113
250 307 399 330 273 214 166 113
251 308 400 331 274 215 166 114
252 309 400 332 275 216 167 114
253 310 401 333 276 216 167 114
254 311 402 334 277 217 168 115
255 311 403 335 278 217 169 115
256 312 404 335 279 218 169 115
257 313 405 336 279 219 170 116
258 313 406 337 280 219 170 116
259 314 407 338 281 220 171 116
260 315 407 339 282 220 171 116
261 315 408 339 283 221 172 117
262 316 409 340 283 221 172 117
263 316 410 341 284 222 173 117
264 317 411 342 285 223 173 117
265 318 411 343 286 223 174 118
266 318 412 343 287 224 174 118
267 319 413 344 287 224 174 118
268 319 414 345 288 225 175 118
269 320 414 346 289 225 175 118
270 320 415 347 290 226 176 119
271 320 416 347 290 227 176 119
272 321 417 348 291 227 176 119
273 321 417 349 292 228 177 119
274 322 418 350 293 228 177 119
275 322 419 351 293 229 177 119
276 323 420 351 294 229 178 120
277 323 420 352 295 230 178 120
278 323 421 353 295 230 178 120
279 324 422 354 296 231 179 120
280 324 422 355 297 231 179 120
281 325 423 355 298 232 179 120
282 325 424 356 298 232 179 120
283 325 424 357 299 233 180 120
284 326 425 358 300 233 180 121
285 326 426 358 300 234 180 121
286 327 426 359 301 235 180 121
287 327 427 360 302 235 180 121
288 327 428 361 302 236 181 121
289 328 428 361 303 236 181 121
290 328 429 362 304 237 181 121
291 328 429 363 304 237 181 121
292 328 430 363 305 238 182 121
293 329 431 364 305 238 182 122
294 329 431 364 306 239 182 122
295 329 432 365 306 239 182 122
296 330 432 366 307 240 182 122
297 330 433 366 307 240 183 122
298 330 433 367 308 241 183 122
299 331 434 368 308 241 183 122
300 331 434 368 309 241 183 122
301 331 435 369 309 242 183 122
302 331 435 369 310 242 184 122
303 332 436 370 310 243 184 122
304 332 436 370 311 243 184 122
305 332 436 371 311 244 184 122
306 332 437 371 312 244 184 123
307 332 437 372 312 245 185 123
308 333 438 372 312 245 185 123
309 333 438 373 313 246 185 123
310 333 439 373 313 246 185 123
311 333 439 374 314 246 185 123
312 333 439 374 314 247 185 123
313 333 440 375 314 247 186 123
314 334 440 375 315 248 186 123
315 334 441 376 315 248 186 123
316 334 441 376 315 249 186 123
317 334 441 376 316 249 186 123
318 334 442 377 316 249 186 123
319 334 442 377 316 250 187 123
320 334 442 378 317 250 187 123
321 333 443 378 317 250 187 123
322 333 443 378 317 251 187 123
323 333 443 379 318 251 187 123
324 333 444 379 318 252 187 123
325 333 444 379 318 252 188 123
326 332 444 380 318 252 188 123
327 332 445 380 319 253 188 123
328 332 445 380 319 253 188 123
329 332 445 381 319 253 188 123
330 332 446 381 320 254 188 123
331 331 446 382 320 254 188 123
332 331 446 382 320 254 188 123
333 331 446 382 320 254 189 123
334 330 446 383 320 255 189 123
335 330 447 383 321 255 189 123
336 330 447 383 321 255 189 123
337 329 447 384 321 255 189 123
338 329 447 384 321 256 189 123
339 329 448 384 322 256 189 123
340 328 448 384 322 256 189 123
341 328 448 385 322 256 189 123
342 328 448 385 322 256 189 123
343 327 448 385 322 256 189 123
344 327 448 386 322 256 189 123
345 327 448 386 322 256 189 123
346 326 449 386 322 256 189 123
347 326 449 386 322 256 189 123
348 325 449 386 322 256 189 123
349 325 449 387 322 256 189 123
350 325 449 387 322 256 189 123
351 324 449 387 322 256 189 123
352 324 449 387 322 256 189 123
353 324 449 387 322 256 189 123
354 323 449 387 322 256 188 123
355 323 449 387 322 256 188 123
356 323 449 388 322 256 188 123
357 322 449 388 323 256 188 123
358 322 449 388 323 256 188 123
359 322 449 388 322 256 187 123
360 322 449 388 322 256 187 123
361 322 449 388 321 256 187 123
362 322 448 388 321 256 186 122
363 322 448 388 321 256 186 122
364 322 448 387 321 256 185 122
365 322 448 387 320 255 185 122
366 322 448 387 319 255 184 121
367 322 447 387 319 255 184 121
368 322 447 386 318 254 183 121
369 322 447 386 318 254 183 120
370 322 447 385 318 254 182 120
371 322 446 384 317 253 182 120
372 322 446 384 316 252 181 119
373 322 446 383 316 251 181 119
374 322 446 383 315 250 181 119
375 322 446 382 315 250 180 118
376 322 445 382 314 249 180 118
377 322 445 382 314 248 180 118
378 322 445 382 313 248 180 118
379 323 446 382 313 247 180 117
380 323 446 382 313 247 180 117
381 323 446 382 313 247 180 117
382 323 446 382 313 246 180 117
383 323 447 382 313 246 180 117
384 324 447 383 313 247 180 116
385 324 448 383 313 247 180 116
386 324 448 384 314 247 181 116
387 324 449 384 314 247 181 116
388 325 450 385 315 248 181 116
389 325 451 385 316 248 181 117
390 326 452 386 317 249 182 117
391 326 453 387 317 250 182 118
392 326 454 387 318 250 183 118
393 327 455 388 319 251 183 119
394 327 457 389 320 252 184 119
395 328 458 390 321 253 184 120
396 328 459 390 322 254 185 120
397 329 460 391 323 255 186 121
398 329 461 392 324 257 187 121
399 330 462 393 325 258 188 122
400 331 463 394 326 258 188 122
401 332 464 395 326 259 189 123
402 333 465 396 327 260 189 123
403 334 466 397 328 260 190 124
404 335 467 398 329 261 190 124
405 336 468 398 329 261 191 125
406 337 469 399 330 262 191 125
407 337 469 400 330 262 191 126
408 338 470 400 331 263 192 126
409 339 470 401 331 263 192 127
410 339 471 402 332 264 193 127
411 340 472 402 332 264 193 128
412 341 472 403 333 264 193 128
413 341 473 403 333 265 194 129
414 342 473 404 334 265 194 129
415 342 474 404 334 265 194 130
416 343 474 405 334 266 195 130
417 343 474 405 335 266 195 131
418 344 474 405 335 266 195 131
419 344 474 406 335 266 195 131
420 345 474 406 336 267 195 131
421 345 474 406 336 267 196 132
422 346 474 406 336 267 196 132
423 346 474 407 337 267 196 132
424 347 474 407 337 267 196 132
425 347 474 407 337 267 196 132
426 347 474 407 337 267 196 132
427 348 474 407 337 267 197 132
428 348 474 407 338 267 197 131
429 348 474 407 338 267 197 131
430 349 474 407 338 267 197 131
431 349 474 407 338 267 197 131
432 349 474 407 338 266 196 131
433 349 474 407 338 266 196 130
434 349 474 407 338 266 196 130
435 349 474 407 337 265 195 129
436 349 474 407 337 265 195 129
437 349 474 407 336 264 194 128
438 349 473 406 335 264 194 128
439 349 473 406 335 263 193 128
440 349 472 406 334 262 192 127
441 349 472 405 333 262 191 127
442 348 471 405 332 261 190 126
443 348 470 404 332 260 190 126
444 348 469 404 331 259 189 125
445 347 468 403 330 258 188 125
446 347 466 402 329 257 187 124
447 346 465 401 328 256 186 123
448 346 464 401 326 255 185 123
449 345 463 400 325 254 184 122
450 345 462 399 324 252 183 121
451 344 460 398 323 251 182 120
452 343 459 397 322 250 180 119
453 342 458 396 321 249 179 118
454 341 456 395 319 247 178 117
455 340 455 393 318 246 177 116
456 339 453 392 316 244 176 115
457 338 452 391 315 243 175 114
458 336 450 389 314 242 173 112
459 335 449 388 312 240 172 111
460 334 447 387 311 239 171 110
461 332 446 385 310 238 169 109
462 331 444 383 308 236 168 107
463 330 442 382 307 235 167 106
464 329 441 380 305 234 165 105
465 327 439 378 304 232 164 104
466 326 437 376 302 231 162 102
467 325 436 374 300 230 161 100
468 323 434 372 299 228 160 99
469 322 433 370 297 227 159 98
470 321 431 368 296 226 158 96
471 319 430 366 294 225 157 95
472 318 429 364 293 223 156 94
473 316 427 362 291 222 155 92
474 315 426 360 290 221 154 91
475 314 424 358 288 220 153 89
476 312 423 357 287 219 152 88
477 311 422 355 286 217 151 87
478 309 421 353 285 216 150 85
479 308 419 352 283 215 149 84
480 307 418 351 282 214 149 83
481 305 417 349 281 214 148 81
482 304 416 348 280 213 147 79
483 303 415 347 279 212 147 78
484 301 414 345 278 212 146 77
485 300 413 344 277 211 146 76
486 299 412 343 276 211 146 75
487 298 411 342 275 211 145 75
488 297 410 341 274 210 145 74
489 296 410 341 273 210 145 74
490 295 409 340 273 210 145 73
491 294 409 339 272 210 145 73
492 293 408 339 272 210 145 73
493 293 408 338 272 210 145 73
494 293 407 338 271 210 146 73
495 293 407 337 271 210 146 73
496 293 407 337 271 210 146 74
497 294 406 337 271 210 147 75
498 294 406 337 271 210 148 75
499 295 406 337 271 211 148 76
500 296 406 337 271 211 149 77
501 297 406 337 272 212 150 79
502 298 407 337 272 212 151 80
503 299 407 337 272 213 152 81
504 300 407 338 273 214 154 83
505 302 407 338 273 214 155 84
506 303 408 339 274 215 156 86
507 305 408 339 274 216 158 87
508 306 408 340 275 217 159 88
509 308 409 340 275 218 161 90
510 309 409 341 276 219 163 91
511 311 409 341 277 220 165 91
512 313 410 342 278 221 167 92
513 315 411 343 278 223 168 92
514 317 411 344 278 224 169 93
515 319 411 344 277 223 169 93
516 320 410 344 277 223 170 93
Hieronder een zeer basale versie in C, maar ik denk dat je dit wel kunt aanpassen en vertalen naar de programmeertaal die jij gebruikt (commentaar staat achter de // tekens):
Inlezen tabel:
Code: Selecteer alles
int loudnesstable[385][8];
//lees tabel:
void loadloudnesstable(void)
{
FILE *fi;
int i,j;
char str[32];
fi=fopen("loudnesstable.txt","rt");
//lees eerste rij (=table header):
for(j=0;j<8;j++)
fscanf(fi,"%s",str);
//lees waarden:
for(i=0;i<385;i++)
for(j=0;j<8;j++)
fscanf(fi,"%d",&loudnesstable[i][j]);
fclose(fi);
}
Raadplegen tabel:
Code: Selecteer alles
//get Sound Pressure Level
//input:
//freq=frequentie: 20Hz - 15kHz
//phon=kolom in tabel: 1=blauwe lijn, 2=rood_0, 3=rood_20, etc
//output:
//sound pressure level in dB:
double getSPL(double freq, int phon)
{
double x, spl, y;
int tx;
x=400.0*(log(freq)-log(20))/(log(20000)-log(20));
tx=(int)(x+0.5); //rond x-waarde af
if(tx<0) tx=0; //zorg dat tx een geldige index is
if(tx>384) tx=384;
y=loudnesstable[tx][phon];
spl=130.0*(454.0-y)/(454.0-21.0);
return(spl);
}
Re: formule opstellen van grafiek
Dank u zeer, ik zal kijken of ik daar iets mee kan. Het is mij in ieder geval om dat in een matrix te stoppen in matlab.