**** BEGIN LOGGING AT Wed Jun 24 02:59:57 2020 Jun 24 03:01:41 +lorforlinux[m]: I am not sure how you accomplished it but it is done and for that idea, I am thankful. Thank you. Jun 24 03:02:25 This whole i2c idea was beating me. The difference b/t pwm and i2c is something I am not quite familiar w/ as of now. Jun 24 03:02:46 they have about as much to do with each other as cows and pineapples Jun 24 03:02:56 I like both! Jun 24 03:03:26 @zmatt: I thought this chip had to be programmed in i2c and I was mistaken. Jun 24 03:03:47 it is yes Jun 24 03:04:02 though if you're using the kernel driver then you don't need to worry about the i2c communication anymore since it takes care of that Jun 24 03:04:11 It is...I thought we were using PWM to program this chip? Jun 24 03:04:12 Oh. Jun 24 03:04:28 instead it'll just expose a pwm sysfs interface, like every other pwm controller Jun 24 03:04:42 So, .dts files are from the driver of linux and PCA9685? Jun 24 03:04:43 Oh. Jun 24 03:05:05 the .dts file contains a description of the hardware, so linux knows the device exists and what driver to use for it Jun 24 03:06:05 found it https://github.com/RobertCNelson/boot-scripts/blob/cb168aadb1dff03e8a97c1ca0fad5b5673e922bb/boot/bbai.sh#L41 Jun 24 03:06:09 I mean. Oh. I know that there is a driver and I know a bit (small bit) about Linux. I am just glad that the .dts file in current use allows for programming this chip w/ PWM in the sysfs interface. Jun 24 03:06:12 this is actually looking like a super flexible interface Jun 24 03:08:25 it's also looking rather verbose Jun 24 03:09:07 ayjay_t: yep Jun 24 03:10:03 I think there are projects that try to make usb gadget configuration a bit less icky Jun 24 03:10:30 that would be nice, i'd like to get a demo up Jun 24 03:10:40 i'm working on a super cool project these days, couldn't use a bbb tho- microscopes Jun 24 03:10:53 couldn't use the am355x line, but i wanted to Jun 24 03:11:08 what can you use? Jun 24 03:11:16 rca1807? Jun 24 03:11:41 haha what is that? i have three SBCs near me now, two NXP, one nVidia one Jun 24 03:11:54 ayjay_t: what excluded the am335x ? Jun 24 03:11:59 i need to do huge FFTs Jun 24 03:12:01 fast Jun 24 03:12:04 ah Jun 24 03:12:30 that sonuds like a decent reason Jun 24 03:12:34 100 megapixel into an FFT Jun 24 03:12:53 i'm kind of concerned it might be impossible Jun 24 03:12:53 what did you wind up using? Jun 24 03:13:05 well i haven't decided yet i have these three boards around me that i'll be testing Jun 24 03:13:08 100mp but how often and when do you need it completed? Jun 24 03:13:30 haha i mean, what's a reasonable ask in this case XD Jun 24 03:13:41 i mean i don't think i'm going to get 17*64 per second Jun 24 03:13:46 that's entirely up to your hardware budget :P Jun 24 03:14:05 depends on what you need Jun 24 03:14:18 so a 2D transform I assume? Jun 24 03:14:20 well right now they're resizing the image and then FFTing it, and I think i can FFT it and then upsample it Jun 24 03:14:28 using an interpolation filter Jun 24 03:14:30 if you want 100mp @ 30fps FT's then you pick the HW to match Jun 24 03:14:34 yeah it's a 2D transform Jun 24 03:14:51 ayjay_t: resizing as in upscaling? doing that before an FFT is extremely pointess Jun 24 03:14:54 *pointless Jun 24 03:15:03 yeah that's what my argument exactly Jun 24 03:15:12 the other question is what is your power budget? Jun 24 03:15:17 they're also iFFTing and then summing, and i said they should sum and then iFFT at the end Jun 24 03:15:33 because, you know, linear operations and all that Jun 24 03:15:42 ayjay_t: indeed Jun 24 03:15:57 100mp @ 30fps is not beyond the realm of possiblity Jun 24 03:16:02 i guess i need to find a library function or algo for actually doing the upsample after the FFT Jun 24 03:16:18 well i mean if i can do the upsample after and the iFFT at the end, i really only need to do 20MP FFT Jun 24 03:16:28 because this algo basically takes N low-res pictures and produces 1 high-res picture Jun 24 03:16:39 I'd think your data acquistion method would be a bigger problem Jun 24 03:16:52 dude the camera sensor we're using is ridiculously expensive Jun 24 03:17:18 i have like $2000 worth of CMOS in 5 square mm on my desk right now Jun 24 03:17:47 ayjay_t: so, idealized bandlimited (sinc) upscaling by an integer factor and then doing an FFT would cause the extra coefficients to be 0 Jun 24 03:17:52 I wonder if a RPi would do well in this application Jun 24 03:18:15 ayjay_t: I think. if I'm not doing a brainfart Jun 24 03:18:27 (I might be, I should be sleeping) Jun 24 03:18:38 the people who put this together don't have strong math skills Jun 24 03:18:47 and unfortunatelly mine are only like good enough to set off the bullshit detector Jun 24 03:18:57 no I'm not having a brainfart, what I said is right Jun 24 03:19:12 so my friend oliver is supposed to be helping me with this but he's v caught up in studying the opencl and cblas APIs Jun 24 03:19:22 even tho he's a mathy by trade Jun 24 03:19:37 are you restricted to using SW? Jun 24 03:19:58 i mean so i'd like to do gpu-accelerated FFTs for this initial revision Jun 24 03:20:05 but there is a longer term project of doing it in FPGA Jun 24 03:20:06 so actually, one way of doing integer upscaling is by doing an FFT, inserting zeros (between the coefficients, if they're sorted by frequency), and then doing an IFFT Jun 24 03:20:20 right so that would be an interpolation filter right? Jun 24 03:20:24 FPGA would be more flexible Jun 24 03:20:30 yes that would be a sinc-interpolation Jun 24 03:20:34 but wider skillset ds2 Jun 24 03:20:40 why is it a sinc-interpolation? Jun 24 03:20:51 because math Jun 24 03:20:58 haha okay ill google it Jun 24 03:21:06 i think they're actually doing a nearest-neighbor interpolation Jun 24 03:21:13 which i don't know why Jun 24 03:21:24 but i mean, that doesn't seem thjat more complex than inserting zeros Jun 24 03:21:26 it would seem like a slower processor w/hardware image acquisition plus a FPGA would solve the problem nicely Jun 24 03:21:53 but ds2 it does require more skillsets, we will hire those on it's just not going to happen in the next 30 days Jun 24 03:22:09 and there will be more image processing down the road so might as well build these GPU skills into our department now Jun 24 03:22:41 GPU ties your hands in so many ways Jun 24 03:23:07 i wonder if there is a GPU optimized library for some of the functions zmatt is describing Jun 24 03:23:19 What interface for GPU? Jun 24 03:23:19 i mean maybe a gpu implementation of opencv Jun 24 03:23:25 uh i've been using opencl Jun 24 03:23:27 GL? GLES? CUDA? CL? Jun 24 03:23:34 CL1.2 Jun 24 03:24:04 would like to hear about it in a few years after you've moved btwn vendors Jun 24 03:24:30 the BBx15/BBAI support CL Jun 24 03:24:37 HAHHA moved between vendors?! Jun 24 03:24:39 what does that mean Jun 24 03:24:52 ayjay_t: so far I haven't really described much of anything Jun 24 03:25:04 while that's true, you're confirming my suspicions Jun 24 03:25:08 mostly because it's also not very clear what you're even doing Jun 24 03:25:12 because i was already leaning in that direction Jun 24 03:25:31 but upscaling and then doing an FFT definitely sounds weird as hell Jun 24 03:25:31 i mean we're FFTing a small image, making it bigger, applying a transfer function, iFFTing it, doing it 64 times, and then summing it Jun 24 03:25:46 yeah that's what they're doing and the lab tech who can't get off matlab screams at me when i say you can reorder it Jun 24 03:25:58 definitely sum before IFFT Jun 24 03:26:05 becasue to him reordering it just means moving line 12 to line 11 instead of using the appropriately transformed operations Jun 24 03:26:16 same transfer function each time or different one? Jun 24 03:26:39 the coefficients are different each time Jun 24 03:26:43 ok Jun 24 03:26:46 a function of the angle of the camera Jun 24 03:26:54 i haven't look at the coefficient matrix yet Jun 24 03:27:10 but yeah i mean that would have been a blessing if it was a constant eh Jun 24 03:27:27 still, that's the cheap part compared to the IFFT Jun 24 03:27:29 back to planning VGA for the PocketBeagle Jun 24 03:27:47 sum then IFFT would save you 63 IFFTs Jun 24 03:27:56 i mean the little coral with it's 1GB of ram was doing a 2dFFT 1024x1024 in 30ms Jun 24 03:28:00 that's GPU optimized Jun 24 03:28:24 it did 256x256 in 1 ms Jun 24 03:28:31 i know it's nlogn Jun 24 03:28:41 so i could predict it at 20MP i guess lol Jun 24 03:29:24 it's 20 times the 1024x1024... so that means it's 26 times as long? theoretically? Jun 24 03:29:43 because 1kx1k is about 1MP,so 20 * log(20) = 26 Jun 24 03:32:31 not sure i did that right Jun 24 03:32:42 it's a bit oversimplistic Jun 24 03:33:18 i like to pretend i know math Jun 24 03:33:30 Me too! Jun 24 03:33:58 actually I'm not really sure what you think you computed there Jun 24 03:33:59 I wish I never sold my books back to the people who sold them to me. Jun 24 03:34:54 yeah zmatt i tried Jun 24 03:35:21 Hey! Jun 24 03:35:23 like, if the n log n term is completely dominating then 1024x1024 would be 20 times slower than 256x256 Jun 24 03:35:27 DO you guys need math help? Jun 24 03:35:55 and 4096x4096 would be 19.2 times slower than 1024x1024 Jun 24 03:36:00 uh it actually is Jun 24 03:36:05 exactly Jun 24 03:36:10 the 256x256 was 1.5ms Jun 24 03:36:15 and the 1024x1024 was 30ms Jun 24 03:36:18 ah you said 1ms Jun 24 03:36:22 like give or take .2 ms Jun 24 03:36:32 yeah sorry i forgot who i was talking to lol Jun 24 03:38:34 well if that trend continues then 20MP would be 694ms and 100MP would be 3.8s Jun 24 03:39:05 if Jun 24 03:50:19 that's about what i got i think Jun 24 03:50:30 the nvidia hardware should be a bit faster too i think Jun 24 04:13:53 Can sed make my unixfile.txt a dosfile.txt from BBB to Win? Jun 24 04:14:13 I remember you guys discussing this a while back. Anyway, forget it. Jun 24 08:56:03 I am trying to set and clear the interrupt bits of R31 REGISTER from my LKM. Any pointers on how this could be done Jun 24 10:31:09 deepankarmaithan: with the introduction of remoteproc-pru (whose kernel interface you should use to load your firmware onto pruss) also came an interrupt controller driver for the pruss intc, so you should properly declare the interrupt you want to receive from pru in DT and you'll be able to receive it like any other interrupt without having to deal with pruss intc yourself in any way Jun 24 13:07:07 @zmatt, are you here? Jun 24 13:24:59 so apparently sync in the frequency is nearest neighbor in the rectangular domain Jun 24 14:00:39 ayjay_t: depends on what you mean by that Jun 24 14:00:47 also it's "sinc", not "sync" :P Jun 24 14:01:29 Parduz_IRC: it's silly to ask "are you here?". if you have a question, just ask your question Jun 24 14:01:56 maybe that was the question Jun 24 14:02:02 :P Jun 24 14:02:52 yeah sorry Jun 24 14:03:04 actually zmatt i don't know what i mean by that Jun 24 14:03:24 and i'm trying this morning to write a python script that will FFT, do nearest neighbor (which is a sinc interpolation filter) and then iFFT Jun 24 14:03:49 ayjay_t: the sinc function is the fourier transform of the rectangular function, hence multiplying with rectangular function in frequency domain (low-pass filtering) equals convolving with sinc in time domain Jun 24 14:04:46 right that i understood Jun 24 14:04:53 well, that was 'cause you're aware of all my efforts. Jun 24 14:04:55 anyway Jun 24 14:05:13 Parduz: I help a lot of people, I rarely remember who is working on what Jun 24 14:05:14 and actually most people say to do upsampling is best done by zero stuffing and then low pass filtering the result, i'm not sure what what type of interpolation that looks like tho Jun 24 14:05:16 new image with Debian 10, same boot time, but UEART 2 not working Jun 24 14:05:25 or at least some people have told me that Jun 24 14:05:40 but i'm trying to replicate some code that does nearest neighboor in the rectangular domain and i wanna do it in the frequency domain Jun 24 14:05:54 so i'm going to multiply the FFT matrix by the sinc function, i think, somehow Jun 24 14:05:57 ayjay_t: that's the mathematical description of how interpolation, _any_ interpolation works yes Jun 24 14:06:11 well i mean there's different interpolations tho? Jun 24 14:06:22 different filters Jun 24 14:06:38 like how do i differentiate between linear, cubic, and nearest neighboor in the frequency domain? they're not all low pass filters or they just have different responses i guess Jun 24 14:06:38 well, unless the interpolation is non-linear of course Jun 24 14:06:49 they have different responses Jun 24 14:06:58 ooh i wish i could find a lib for this Jun 24 14:07:08 nearest neighbour is a rectangular response, linear is a triangular response, etc Jun 24 14:07:17 wait get out Jun 24 14:07:38 so nearest neighboor i'm just going to 0 the high frequencies in the frequency matrix? Jun 24 14:07:46 no Jun 24 14:07:52 *dissappointment* Jun 24 14:07:54 I'm talking about the response in the time domain Jun 24 14:08:05 the fourier transform of a rectangle is the sinc function and vice versa Jun 24 14:08:24 yeahhhh i just don't know how to actually multiply a matrix by a sinc function lol Jun 24 14:08:31 because honestly once there is more than one domain i'm like... ok Jun 24 14:08:35 i mean more than one dimension Jun 24 14:08:51 i can't think in 2D, only 1D Jun 24 14:08:53 fft, zap high, ifft Jun 24 14:08:53 so if you've zero-stuffed and FFTd the data then you get the different interpolated versions by multiplying in frequency domain with the FFT of the different filter functions Jun 24 14:09:23 WAIT i can just FFT the matrix representation of the filter to get the coefficients! Jun 24 14:09:27 2D(x,y) is just 1D(x)*1D(y) in time/spatial domain Jun 24 14:09:37 hence convolution of those in frequency domain Jun 24 14:10:03 convolution of their transforms I mean Jun 24 14:10:31 however I thought the goal here was to avoid having to do a bigass FFT on the input? so the big question is whether the zero-stuffing can be avoided Jun 24 14:10:52 yeah i mean ideally i want to somehow do the zero stuffing after the FFT Jun 24 14:11:00 like FFT, then resize and interpolate Jun 24 14:11:05 not resize, FFT and interpolate Jun 24 14:11:11 I think you can, for integer ratios anyway Jun 24 14:11:24 yeah the dimensions are *8 or *16 Jun 24 14:11:28 integer ratios and power of 2 to boot Jun 24 14:11:31 not that it matters Jun 24 14:11:36 my first instinct is that you'd repeat the frequency coefficients Jun 24 14:12:05 as a block I mean Jun 24 14:13:19 i'm going to do some experiments with like 6x6 matrices Jun 24 14:13:26 because i'm not skilled enough to prove this mathematically Jun 24 14:13:53 if oliver wakes up and helps me he can do it but he was all like "i nEeD tO wRiTE UnIT tEsTS fIrStS" Jun 24 14:14:16 like no you don't because the lab tech is trying to replace the ENTIRE ALGORITHM with a simple image translation and i want to die Jun 24 14:18:33 so, how can i know why my serial is'nt working? Jun 24 14:18:48 by finding the fault Jun 24 14:19:27 clever answer Jun 24 14:20:13 i've the same uEnv as the older image, the TTYS2 is there, i have no errors or permissions issue. Jun 24 14:20:28 i just boot the older Debian 9 image and it works Jun 24 14:20:34 what shoul i look for? Jun 24 14:20:54 or what should i pastebin to you? Jun 24 14:21:40 Parduz: did you configure its pins? Jun 24 14:22:25 I loaded the bdto in the uEnv.txt Jun 24 14:22:27 uboot_overlay_addr4=/lib/firmware/BB-UART2-00A0.dtbo Jun 24 14:23:09 that's all what i've always done Jun 24 14:24:42 i mean you might as well double check with the config-pin (pin-config?) utility to see that they're right Jun 24 14:24:50 really wish i had the utilities on these other boards, so nice Jun 24 14:25:22 ayjay_t: can't use config-pin to check on pins that are not runtime configurable Jun 24 14:25:40 Parduz: use my show-pins utility to confirm the pinmux: https://github.com/mvduin/bbb-pin-utils/#show-pins Jun 24 14:27:14 ohi didn't realize that uart wasn't runtime config, i guess you're talking about the main UART that BBB uses intiially Jun 24 14:28:14 huh matlab says upsampling a matricy creates new rows Jun 24 14:28:25 i feel like that's only valid for data pairs, not actual 2D data Jun 24 14:28:35 i guess it depends on what D's youre upsampling Jun 24 14:30:43 p9.21 and 22 are assigned to uart2, yes Jun 24 14:48:53 ayjay_t: anything you configure using an overlay becomes non-runtime-configurable Jun 24 14:49:07 ayjay_t: https://pastebin.com/WxjdxJXT Jun 24 14:49:10 ayjay_t: all assertions succeed Jun 24 14:50:55 ayjay_t: oh right, assert() is not built into GP, I have this in my ~/.gp/startup.gp : https://pastebin.com/q6mcjkzp Jun 24 14:59:01 ayjay_t: explicit example of what's happening, with output reformatted for readability: https://pastebin.com/hkfU6igB Jun 24 14:59:58 ayjay_t: of course this is all 1D, but everything you do 2D is just 1D done on each row and 1D done on each column Jun 24 15:10:39 oh my god zmatt Jun 24 15:10:48 this is the best thing anyones ever done for me Jun 24 15:11:24 i can pay you Jun 24 15:11:37 cleaned up for readability: https://pastebin.com/jBRG5cSR Jun 24 15:11:44 but is this matlab? i mean what language is this Jun 24 15:11:51 PARI/GP Jun 24 15:11:54 apt-get install pari-gp Jun 24 15:12:16 this isn't numerical, it's symbolic Jun 24 15:12:33 omfg dude i knew you were helpful but i am blown away Jun 24 15:12:54 oliver is going to lose his shit when he sees this Jun 24 15:12:56 zmatt does rock. Jun 24 15:13:28 literally speechless Jun 24 15:15:29 zmatt are you available to do any formal consulting? Jun 24 15:15:49 i mean i have to ask Jun 24 15:16:12 its for a novel microscope technology, a start collab between us harvard and caltech, if that's of any interest to you Jun 24 15:17:09 I'm not Jun 24 15:17:22 **cry** Jun 24 15:17:35 it just comes when you're feeling inspired i guess Jun 24 15:17:44 ayjay_t: Look on the bright side. You'll get to learn more. (wink) Jun 24 15:18:32 i mean right now i'm in a pickle because i literally have like 4 people pretending they can do this and the CEO is totally jargon-blinded Jun 24 15:18:48 and i'm like "listen i'm not sure i can implement but these people aren't even discussing the basic concepts" Jun 24 15:19:52 Speaking of learning, I've been researching the difference between built-in and loadable kernel modules. Specifially I'd like to list what is built-in and have some confidence it's working w/ my hardware. I'm thinking what I really should do is make those I'm interested in, loadable? Jun 24 15:20:24 i mean i went down that route too ragnorok, i liked some insight by typing "lsmod" Jun 24 15:20:37 otherwise it's "lsmod" + reading the config file to see what's built into the kernel Jun 24 15:21:06 but when i'm experimenting i definitely made them loadable so i could load and unload them and see what happened Jun 24 15:21:23 Yeah. I'm thinking that's likely the simplest route. Guess I'll do that. Jun 24 15:29:32 where can i find what "uboot_overlay_pru=/lib/firmware/AM335X-PRU-UIO-00A0.dtbo" is? Or can some of you explain me? Jun 24 15:30:37 ayjay_t: https://pastebin.com/D06tT98N Jun 24 15:31:12 at the bottom is your nearest-neighbour upscaling :) Jun 24 15:31:30 Hi, where is the latest u-boot source code for beaglebONE Black? I downloaded from git.denx.de/uboot.git, but it won't compile Jun 24 15:31:50 david92: https://github.com/RobertCNelson/Bootloader-Builder Jun 24 15:32:24 dunno if there's a repo somewhere with the u-boot already patched Jun 24 15:32:37 I feel like there ought to be, but if there is I don't know where Jun 24 15:33:58 Thank you, zmatt. Let me try Jun 24 15:34:51 ayjay_t: note that the various signal operations (dft*, idft*, zerostuff, upscale_nearest, repeat, mulpointwise) are all linear, hence I'm representing them as matrices and use matrix-multiplication to sequence operations Jun 24 15:35:14 I have downloaded from many sources. But for some reason, there is no default configuation for beagleBone Black. Jun 24 15:35:39 I think for mainline u-boot you'd use the am335x evm configuration Jun 24 15:36:05 however the u-boot normally shipped with beaglebone images have a bunch of customizations, e.g. for u-boot overlays and cape detection Jun 24 15:37:04 Parduz: uboot_overlay_pru lets you select which overlay you want to use for pru, which is primarily used to select between using remoteproc-pru and uio-pruss (which are two different drivers) Jun 24 15:38:01 Parduz: and if P9.21/22 are configured to uart2 then /dev/ttyS2 should just work Jun 24 15:48:25 yup, turns out that the serial cable of the BBB with the newer image decided to broke today Jun 24 15:48:33 so the serial works Jun 24 15:49:32 "the serial cable of the BBB" ? Jun 24 15:50:05 well, the cable i use on my circuit where the BBB is attached Jun 24 15:54:25 ah Jun 24 16:03:29 zmatt yeah i'm going through your latest code and i'm going to develop tests on random matrices in python Jun 24 16:04:00 im truly terrified reading this stuff but i don't think it's totally over my head Jun 24 16:04:24 i'm kinda panacking now lol this is so intense i can't believe i suddenly have these snippets this is like the holy grail Jun 24 16:07:19 btw beware that vector/matrix indexing in gp is 1-based Jun 24 16:07:23 that's one thing I really hate about it Jun 24 16:07:40 oh wait, but matlab is like that too Jun 24 16:07:45 iirc Jun 24 16:08:07 yeah i'm doing it in python but w/e, i have to use some "golden code" in matlab as a reference since its the canonical from caltech Jun 24 16:08:13 i'm trying to look up pari gp functions now Jun 24 16:13:33 minor update: https://pastebin.com/KVphxk37 Jun 24 16:13:40 i kinda just wanna study under you zmatt Jun 24 16:14:11 if you ever take a professorship position let me know i'll apply Jun 24 16:14:29 just to show that the frequency-domain representation for the nearest-neighbour thing is also fairly trivial to compute directly Jun 24 16:14:57 the filter I mean Jun 24 16:15:24 yeah that's what i'm looking for Jun 24 16:15:29 so is this only a 1D example? Jun 24 16:15:33 i mean nevermind let me read Jun 24 16:15:37 i'm going to slow and code keeps getting updated Jun 24 16:15:41 whether that's more accurate than using an FFT I don't know Jun 24 16:15:49 all of this is 1D yes Jun 24 16:15:59 but like I said: 2D is just 1D for each row and each coumn Jun 24 16:16:02 *column Jun 24 16:16:46 that actually helps me exploit GPU parallelism Jun 24 16:17:22 in general when doing a fourier transform of multidimensional data you can transform along each dimension individually or any combination thereof, and the order doesn't matter Jun 24 16:18:19 ayjay_t: note that you can just do gp myfile.gp and you'll get an interactive prompt to experiment with expressions Jun 24 16:18:40 you'll usually want to wrap any expression in lift() for readability Jun 24 16:20:45 (unless your expression only involves 4th roots of unity, then lift() will be redundant) Jun 24 16:21:25 and to get help about some function, just type ?FUNCTIONNAME Jun 24 16:23:58 okay i'm starting the repl Jun 24 16:24:07 i'm trying to compile this all Jun 24 16:24:12 https://gist.github.com/ayjayt/5d51183b50d1ced9a3f03a7b1efbf0f8 Jun 24 16:24:38 i called my buddy (you met him like years ago) and was like "... i talked to zmatt" Jun 24 16:24:58 so he's going to have a better handle on this stuff than me because unfortunately i started to have family problems during my DSP classes :-( Jun 24 16:25:05 so my knowledge of this stuff comes from analog time signals only, which i loved Jun 24 16:25:27 I recommend sticking the assert definition into your ~/.gp/startup.gp Jun 24 16:25:33 it's a useful thing to have Jun 24 16:26:01 also you missed the last update I think ;) Jun 24 16:26:12 no i think i got the last one, oh no you're right it isn't highlighted ok Jun 24 16:32:02 also note that these are all complex DFTs. when doing a DFT on real data the last floor(n/2) elements are often omitted since they are redundant. that should be taken into account when you want to perform repeat() in frequency domain Jun 24 16:36:36 ayjay_t: I hope it all makes sense... there really isn't that much going on in my code Jun 24 16:36:45 ayjay_t: so who is this buddy that I supposedly know? Jun 24 16:39:19 just a friend who used to help me with some BBB stuff, he came in here a few times Jun 24 16:39:23 and he is much better in math Jun 24 16:39:29 and i am much better in embedded systems Jun 24 16:39:36 and if you were able to combine us, we might be able to compete with you Jun 24 16:39:37 LOL Jun 24 16:40:01 well no you're still ahead of me on embedded systems too actually Jun 24 16:40:07 and probably still ahead of him in math Jun 24 16:40:07 hehe Jun 24 16:40:09 but we'd be closer! Jun 24 17:01:01 oliver is super pumped about your work too, we're both going over it Jun 24 17:01:19 ayjay_t: is it starting to make sense? Jun 24 17:02:48 the funny thing is that I remembered this because I know that taking the DFT of a signal repeated N times results in a spectrum where the only nonzero indices are the multiples of N Jun 24 17:03:01 which makes perfect sense if you think about it Jun 24 17:03:37 this is the same but with the roles of time and frequency swapped Jun 24 17:03:44 long live duality Jun 24 17:05:22 he really likes it Jun 24 17:05:28 i kinda get it but i still have trouble following it Jun 24 17:05:49 i'm curious about what the F(zero-stuffing()) is Jun 24 17:05:59 like is that just ... repeated coefficients like you said? Jun 24 17:06:10 type at prompt: zerostuff( 2, 3 ) * [ a, b, c ]~ Jun 24 17:06:20 and is that basically.... nearest neighbor interpolation of the frequency matrix? Jun 24 17:06:22 or zerostuff( 3, 2 ) * [ a, b ]~ Jun 24 17:06:28 what's the ~? Jun 24 17:06:41 transpose. [a,b] is a row, [a,b]~ is a column Jun 24 17:06:44 ah cool Jun 24 17:08:18 first argument is upscale factor, second argument is input size Jun 24 17:08:22 (output size is the product of those two) Jun 24 17:08:26 wait that means zerostuff( 3, 2) is the transfer fucntion for the zerostuff filter eh Jun 24 17:08:43 it's not really a "transfer function" Jun 24 17:08:45 it's also not a filter Jun 24 17:09:03 this is frequency domain though right? Jun 24 17:09:05 it's upsampling without the filter Jun 24 17:09:16 no i figured that much Jun 24 17:09:22 but this isn't a time domain operations Jun 24 17:09:25 it is Jun 24 17:09:50 if you tried it at the prompt you see that zerostuff() just literally inserts zeros Jun 24 17:10:33 zerostuff(2,3) * [a,b,c]~ == [a,0,b,0,c,0]~ Jun 24 17:10:50 okay but if I have x(t), and I want to F(x(t)) --> X(F), and then I want to upsample x(t) by operating on X(F) Jun 24 17:11:09 It should be F(x(t)) --> X(f), not a capital F for the parameter Jun 24 17:11:25 at least i made the mistake consistently Jun 24 17:11:28 that's exactly what assert( repeat( 4, 3 ) * dft3 == dft12 * zerostuff( 4, 3 ) ); is showing Jun 24 17:11:45 note on right side I do zerostuff in time-domain and then apply DFT of size 12 Jun 24 17:11:48 right so that's why i got confused, when i said "this is hapenning in the frequency domain" Jun 24 17:12:00 oh Jun 24 17:12:03 on left size I apply DFT of size 3 and then apply repeat() in frequency domain Jun 24 17:12:23 OH repeat() is the transfer function Jun 24 17:12:24 i.e. zerostuff() in timedomain equals repeat() in frequency domain Jun 24 17:12:28 zerostuff contains the impulse function Jun 24 17:12:30 they're not transfer functions Jun 24 17:12:34 why not Jun 24 17:12:47 like, a transfer "function" would be represented as a vector Jun 24 17:13:17 i mean in my mind any function that takes a frequency-domain input and produces a frequency-domain output is a trasnfer function Jun 24 17:13:23 but i'm wrong to say that? Jun 24 17:13:27 that's not normally how the word is used Jun 24 17:13:35 okay Jun 24 17:14:18 so right now i'm literally just moving the iFFT out of the sum and testing it against the output of the inefficient one Jun 24 17:14:43 repeat() changes the size of the data, while a transfer function is someting you'd apply by pointwise multiplication Jun 24 17:14:53 corresponding to convolution in the time domain, which is what filters do Jun 24 17:15:13 filters do not normally change the amount of data Jun 24 17:15:15 yeah i mean honestly okay, that makes sense, i mean yeah okay i guess a transfer function doesn't actually normally change the size of a matrix Jun 24 17:15:19 that wouldn't be called a filter Jun 24 17:15:23 no you're right Jun 24 17:15:36 i mean but the repeat() function is basically zero-stuffing too, isn't it? Jun 24 17:15:48 actually let me test it Jun 24 17:16:00 repeat(2,3) * [a,b,c]~ == [a,b,c,a,b,c]~ Jun 24 17:16:02 yep Jun 24 17:16:10 i was about to do that, looking for example in code XD Jun 24 17:16:13 so wait that is really a repeat Jun 24 17:16:18 hence the name Jun 24 17:16:22 that's not nearest neighbor, that's not stuffing Jun 24 17:16:25 its literally just concatenating Jun 24 17:16:28 OMG THAT MAKES SO MUCH SENSE Jun 24 17:16:42 :D Jun 24 17:17:58 also it looks a lot like what you get when you sample a continue time function Jun 24 17:18:10 continuous* Jun 24 17:18:41 like I said, if you swap the roles of time and frequency here then you get something that should seem much more familiar Jun 24 17:19:03 right Jun 24 17:19:09 that's why i make sense Jun 24 17:19:12 i'm a bit overwhelmed Jun 24 17:19:27 is the kroenecker related to convolution? Jun 24 17:20:12 like if you take 1000 samples of a signal that's has a period of 5 samples then you expect a mostly zero frequency spectrum, you'll only see non-zero values at frequencies 1000*0/5, 1000*1/5, 1000*2/5, 1000*3/5, and 1000*4/5 Jun 24 17:20:31 the kroenecker product here is really just a generic matrix utility, it doesn't "mean" anything Jun 24 17:20:41 it's just a nice way to quickly build various sorts of mactrices Jun 24 17:20:45 *matrices Jun 24 17:20:54 so i mean, are you convolving anything? Jun 24 17:21:03 no Jun 24 17:21:31 each output entry is just the product of one element from the first matrix and one element from the second matrix Jun 24 17:21:39 (and there's an output element for each such combination) Jun 24 17:22:02 any "convolution" involves summation Jun 24 17:22:25 matkronecker does not involve a single addition, just multiplications Jun 24 17:22:53 https://en.wikipedia.org/wiki/Kronecker_product Jun 24 17:23:13 it's a tensor product Jun 24 17:27:19 you don't need to understand it to understand my code Jun 24 17:28:01 yeah oliver gets it to Jun 24 17:28:02 tho* Jun 24 17:28:25 you can understand what repeat(), zerostuff(), and upscale_nearest() do by experiment, and just accept my implementation of them as some magic way to write it very concisely ;) Jun 24 17:30:18 there are lots of ways to implement each of those Jun 24 17:31:31 that's basically what oliver's going to do, he's basically using your code as an instructional reference Jun 24 17:31:42 because his background is in topology not necessarily signal processing Jun 24 17:31:48 but he's fine in general with this work Jun 24 17:32:11 note that none of this is even remotely efficient Jun 24 17:32:27 it's just meant as a quick way to verify some equalities Jun 24 17:32:36 not to be used as an implementation reference :P Jun 24 17:33:53 no he's using it like a textbook Jun 24 17:34:39 the assertions at the end are what it was all about Jun 24 17:35:56 upscaling followed by dft is same as doing dft, repeating the frequency data, and then pointwise multiplication by the transfer function of the upscaling filter Jun 24 17:37:08 i mean zmatt this is really like, the crux of the problem i was trying to solve Jun 24 17:37:14 note that upscale_nearest(n,m) is the same as zerostuff(n,m) followed by a convolution with ones(n*m, n) Jun 24 17:37:26 like i knew there was a solution there and i knew basically what the order of operations would look like but i had no idea how to actually figure out what the specific ops should be Jun 24 17:37:54 and i have a lab guy literally yelling at me that there is no solution where i'm looking for it Jun 24 17:37:57 that i'm crazy Jun 24 17:38:26 so the ones() you see on the left side is the filter response, and DFTing it gives the transfer function Jun 24 17:39:02 Tell him, set_ thinks he is out of line. Jun 24 17:39:04 non-integer upscaling is left as an exercise for the reader ;) Jun 24 17:40:16 Please do not use that word. cr%zy! It is not a nice word. Jun 24 17:43:25 ayjay_t: btw, do keep in mind that DFTs operate on periodic data... i.e. it considers the leftmost column and rightmost column of your image to be adjacent, likewise for the top row and bottom row. depending on what kind of operations you perform in frequency domain, that can become visible when you transform back Jun 24 17:47:59 ayjay_t: in this case it's not noticable because all terms of the convolution that "wrap around" are in fact zero anyway: https://pastebin.com/3yq9ktS2 Jun 24 17:49:16 but any filter that actually blends of multiple pixels (e.g. linear interpolation) will show the wraparound Jun 24 17:50:21 this is a bit complex because we're actually doing this on 3D data, there are N images Jun 24 17:50:27 i think its okay Jun 24 17:50:35 i just need to prove I can move the iFFT out of the sum and it's not working yet Jun 24 17:50:50 IFFT(a+b) = IFFT(a)+IFFT(b) Jun 24 17:50:54 simple as that Jun 24 17:50:57 yeah i know but i think there might be type issues Jun 24 17:51:20 also actually, they're doing an absolute value before the sume Jun 24 17:51:28 there doing IFFT(abs(a) + abs(b)) Jun 24 17:51:33 sorry Jun 24 17:51:44 they're doing abs(IFFT(a)) + abs(IFFT(b)) Jun 24 17:51:48 _that_ changes everything Jun 24 17:51:57 yeah now i'm worried about it Jun 24 17:52:14 also abs? not absolute-square ? weird Jun 24 17:52:38 i mean isn't this.. norming the complex? Jun 24 17:52:52 but generally you want to add them you'd use the square-norm Jun 24 17:53:07 abs(a+bi)^2 == a^2 + b^2 Jun 24 17:53:22 i'm not even sure this is possible anymore Jun 24 17:53:34 and i need to understand why they're doing that Jun 24 17:54:09 adding those is a smooth and sensible operation, e.g. abs(a+bi)^2 + abs(c+di)^2 == a^2 + b^2 + c^2 + d^2 Jun 24 17:54:21 while adding non-square absolutes is quite odd and unusual Jun 24 17:54:36 let me do a little reading Jun 24 17:54:41 (and very much not differentiable) Jun 24 17:54:41 also the CEO is calling lol Jun 24 17:55:50 with abs you mean elementwise here I assume? Jun 24 17:57:22 gosh i need to figure out what's going on Jun 24 17:58:43 either way it won't simply commute anymore obviously, neither abs nor absqr (which is what I'll call absolute-square from here on) is linear Jun 24 17:59:26 i really need to figure out why thats there tho Jun 24 17:59:29 ughhh Jun 24 17:59:32 in case of absqr there are still some nice properties though I'm not sure any of them would allow simplification Jun 24 17:59:41 in case of abs you're SOL Jun 24 17:59:50 it makes sense that it's there Jun 24 18:00:11 I guess it depends on what you're doing in frequency domain Jun 24 18:00:33 yeah it might or might not make sense, dunno, it really depends on what you're doing Jun 24 18:02:26 if the transfer functions applied in frequency domain are conjugate-symmetric (equivalently, if their IFFT is real) then each IFFT will have real output, and in that case I'd be surprised if applying abs() is the Right Thing to do Jun 24 18:03:14 i mean this why id love to have you look at the algo Jun 24 18:03:55 I suspect your boss isn't going to let you ;) Jun 24 18:08:50 probably not without an nda, no Jun 24 18:09:01 which I'm not interested in Jun 24 18:10:35 but yeah, if any non-linear transform is applied to the IFFT output before summation, then there may be nothing you can do to simplify that part Jun 24 19:34:03 linear problems are easy, non-linear ones are hard Jun 24 19:34:28 therefore, we pretend all problems are linear Jun 24 22:07:01 Hello all Jun 24 22:07:30 hello Jun 24 22:08:08 I got my BB AI today updated the software the reboot and that is it Jun 24 22:08:43 nothing happen, just it gets hot. Any one has the same experience? Jun 24 22:15:30 Hello...you need to get a fan for it! Jun 24 22:16:13 The AI gets a bit hot at times. I run mine w/ a USB fan and it cools off nicely. Jun 24 22:16:47 They have a FanCape right now that supposedly cools off that BBAI well enough to perform. Jun 24 22:17:40 There is also a script to test your heat w/ the chip. Let me see if I can find it. Jun 24 22:19:27 Use this command for real time heat ideas: watch /opt/scripts/device/x15/test_thermal.sh Jun 24 22:19:41 Fan! Jun 24 22:21:22 There are many ideas from Google Groups, still. I found that idea, the watch command and script, from google Groups. Jun 24 22:22:37 Let me show you the link: https://groups.google.com/g/beagleboard/c/-_4iwQ3RJsc/m/IEAqQbxxBQAJ Jun 24 22:23:12 That feed online is the beagleboard group for Google Groups. It shows a short list of ideas for what to do... Jun 24 22:23:43 https://beagleboard.org/upgrade <<< Try this too! Jun 24 22:24:39 bbl Jun 25 00:11:31 the do not have a heat sink for the thing Jun 25 00:11:33 ? Jun 25 00:11:48 it includes a heat sink Jun 25 00:17:22 not good enough for Guest5851 i guess Jun 25 00:24:47 yeah the bbai has heat production issues Jun 25 00:27:01 that call w/ the ceo was like, a nightmare Jun 25 00:27:11 hm? Jun 25 00:27:56 just like four hours of brainstorming to assign people 15 minute tasks at the end Jun 25 00:28:07 oooof Jun 25 00:28:08 and then someone got assigned work i already finished and i'm like screaming "IT'S ALREADY DONE" Jun 25 00:28:21 screaming is rarely a good idea Jun 25 00:28:21 now i get back to the fun stuff Jun 25 00:28:37 no i'm gonna break, i'm the only full time engineer Jun 25 00:28:42 and i have like 6 manager Jun 25 00:28:57 so somethings gotta give Jun 25 00:29:08 its me or them Jun 25 00:29:48 buutttt back to the fun stuff Jun 25 00:31:55 this abs() term is clearly to correct some kind of roundering/error constant Jun 25 00:32:03 like just in case something accidently goes negative Jun 25 00:32:39 engineer 1: "uhh negatives... that's not right...." engineer 2: "just abs() it" Jun 25 00:32:56 jkridner: btw, the i2c2 interface of the tps659037 is almost certainly unused, it's just a very restricted version of the main i2c interface intended for automatic voltage control commands produced by hardware (which is an omap thing that am57xx doesn't do I'm pretty sure) Jun 25 00:33:12 ayjay_t: that sounds very unlikely, you'd use saturation for that, not abs() Jun 25 00:33:27 and it would be weird to do that before summation rather than after Jun 25 00:33:36 what makes you think that it is "clearly" this? Jun 25 00:34:09 yeah actually i might be wrong Jun 25 00:34:15 you've checked the output of the IFFT to be (mostly) non-negative real numbers? Jun 25 00:34:17 i was just kind joking Jun 25 00:34:31 so yeah it works sometimes and not othertimes, i need to check more Jun 25 00:35:04 it's possible that there could be a negative in there but i bet i could account for it by adding an offset and then subtracting the offset later Jun 25 00:35:14 jkridner: so the main worry with the swapped i2c2 sda/scl lines on the bbai would be that it might interfere with transfers somehow... I'd need to think a bit about what happens Jun 25 00:35:33 ayjay_t: but they are real numbers and not complex numbers? Jun 25 00:35:33 my first thought was "it's an image generated by 20MP of 10bit pixels, why would it be negative" but i realize it definitely could be negative and that the offset is a better idea Jun 25 00:35:48 why offset? aren't these still floating-point numbers? Jun 25 00:35:59 okay so heres my idea with the offset Jun 25 00:36:02 just leave negative numbers be until the very end Jun 25 00:36:27 but are these real numbers or complex numbers? Jun 25 00:37:09 well normally it's sum(abs(ifft(array))) and i want to ifft(sum(array)) somehow why account for the offset (i have to figure out if there are complex numbers in this) Jun 25 00:37:42 you're using the matlab ifft() function? Jun 25 00:37:50 ifft2 Jun 25 00:37:55 but ive ported it to python Jun 25 00:38:07 so numpy.fft.ifft2 Jun 25 00:38:54 and no 'symmetric' specified as symflag ? Jun 25 00:39:25 a symmetric frequency response would be a real rectangular domain right? Jun 25 00:39:31 there was no symmetric symflag Jun 25 00:40:10 the transfer function is complex valued, i mean, honestly i don't know if the transfer function leads to a asymmetric frequency response Jun 25 00:40:16 symmetric is a hint that the input data is (supposed to be) conjugate-symmetric Jun 25 00:40:22 i suppose i might be able to determine that Jun 25 00:40:23 oh Jun 25 00:40:35 i mean i don't know if the transfer function leaves us with real rectangular-domain data Jun 25 00:40:42 i know that the input data is real Jun 25 00:41:28 i call it the rectangular domain, but sometimes i call it the prairie domain, because it's a plain Jun 25 00:41:46 conjugate-symmetry in frequency domain is equivalent to the data in time/spatial domain being real Jun 25 00:42:46 so if x consists of real values, fft(x) is conjugate-symmetric (along each dimension) Jun 25 00:42:51 is conjugate-symmetry in the frequency domain.... is conjugate symmetry... is that when the imaginary value = -real value? Jun 25 00:43:09 orrrrr Jun 25 00:43:10 no Jun 25 00:43:19 i mean, i think in continuous time, sorry Jun 25 00:43:48 so when i'm seeing an even frequency distribution = real values in time domain Jun 25 00:44:13 conjugate-symmetry for 1D vector of length n, with zero-based indexing means v[-i%n] is the complex conjugate of v[i] Jun 25 00:44:46 (taking i=0 shows that v[0] must be its own complex conjugate, i.e. must be real. ditto for v[n/2] when n is even) Jun 25 00:45:08 oh -i%n probably has the wrong operator precedence, I mean (-i)%n Jun 25 00:45:39 right so i really need to look at the transfer function and determine if it's destroying that conjugate symmetry Jun 25 00:45:48 so, [a, b+ci, d+ei, f, d-ei, b-ci] Jun 25 00:45:49 i mean, basically, the transfer function itself needs to be symmetrical no Jun 25 00:46:02 yep, transfer function must itself have the same symmetry Jun 25 00:46:06 i.e. the IFFT of it must be real Jun 25 00:46:24 i might just generate a million random inputs and let it tell me if the iFFTs are real Jun 25 00:46:35 the transfer function is dynamically generated? Jun 25 00:46:48 like, this isn't dependent on input data Jun 25 00:46:56 uh its dependent on the size Jun 25 00:47:12 but i dont think its a difference equation Jun 25 00:47:51 yeah i can't see that it is Jun 25 00:47:59 "a difference equation" ? Jun 25 00:48:08 yeah i might have been wrong to use that term Jun 25 00:48:29 a difference equation isn't where the value of an output is dependent on future/past outputs and inputs Jun 25 00:48:34 that's not what you mean Jun 25 00:48:43 the transfer function is just dependent on size Jun 25 00:49:19 then just check whether the transfer function is conjugate-symmetric, or equivalently whether its IFFT is real Jun 25 00:49:41 yeah i'm trying to determine that by looking at how its constructed Jun 25 00:49:48 that would be ideal Jun 25 00:50:09 but i still have negative values that i don't want to abs, even if this isn't a matter of moving a complex value to a real value Jun 25 00:50:17 or i mean Jun 25 00:50:20 that i have to be concerned about Jun 25 00:50:38 I have no idea what you mean by that Jun 25 00:50:39 i'm actually not sure the graduate student at caltech even translated the basic spatial-domain concept/algorithm into a fourier domain representation correctly Jun 25 00:50:45 yeah well i mean, you have a+bj Jun 25 00:50:52 and if you abs(a+bj) you lose b Jun 25 00:50:58 but also a becomes positive if it was negative Jun 25 00:51:00 abs(a+bj) = sqrt(a^2+b^2) Jun 25 00:51:14 right so even if the ifft has b = 0 Jun 25 00:51:29 i still have to account for sqrt(a^s) Jun 25 00:51:32 a^2 Jun 25 00:52:21 thing is, if the ifft doesn't produce real data then you're not going to be able to get rid of the abs() anyhow Jun 25 00:52:29 hence that's step 1 to check Jun 25 00:52:56 yeah i'm on it Jun 25 00:53:37 check the transfer function, or test the whole thing on a single random input (one test should suffice) and test whether each IFFT() produces a mostly-non-negative real result Jun 25 00:54:11 (obviously don't sum-before-IFFT for now) Jun 25 00:59:36 not looking good :_( Jun 25 00:59:58 okay but could this be like floating point error Jun 25 01:00:05 these conjugate values are e-13 Jun 25 01:00:17 i need to inspect Jun 25 01:00:32 obviously you'll get small non-zero imaginary parts Jun 25 01:01:39 take the max(imag()) or something Jun 25 01:03:34 or if they're all non-zero, max(abs(imag(log( x .^2 )))) Jun 25 01:04:05 /2 Jun 25 01:04:07 they seem pretty big Jun 25 01:05:46 max(abs(imag(log( x .^ 2 ))))/2 gives the max angle from the (positive or negative) real axis, in radians Jun 25 01:05:57 yeah i mean Jun 25 01:05:58 i'm getting Jun 25 01:06:02 pi Jun 25 01:06:10 pi? Jun 25 01:06:25 that expression cannot be larger than pi/2 Jun 25 01:06:33 lol oh i did max(abs(img(log(x./2)))) Jun 25 01:06:38 i thought you were correcting the ^2 lol Jun 25 01:06:41 no Jun 25 01:06:42 and they're all pi within .001 Jun 25 01:06:45 that's funny Jun 25 01:07:24 np.max(abs(np.imag(np.log(item ^ 2)))) /2 Jun 25 01:07:33 no i think i need ** Jun 25 01:07:38 ^ is xor Jun 25 01:07:48 haha it just told me Jun 25 01:08:28 so i'm running this on 64 different images, and that value is consistently turning out to be 1.5707 Jun 25 01:08:46 that means there are (close-to-)pure-imaginary values in your output Jun 25 01:09:12 wait oh we're just calculating the angle from the real axis Jun 25 01:09:17 "item" here is the IFFT output? Jun 25 01:09:28 yes item is the iFFT output Jun 25 01:09:47 alright so this is v complex values Jun 25 01:09:53 and that abs() must be an important part of the algo Jun 25 01:10:29 truly that sucks Jun 25 01:10:34 yep... although a weird one, like I said I'd more have expected absolute square Jun 25 01:11:13 (and only sqrt after the summation) Jun 25 01:11:46 why tho Jun 25 01:11:56 i mean why partial to one operation over another Jun 25 01:12:35 lots of reasons, the L2 norm has a tendency to show up a lot and has very nice properties Jun 25 01:14:12 it's also a simpler computation: abs(a+bi)**2 == a**2 + b**2 while abs(a+bi) == sqrt(a**2 + b**2) Jun 25 01:14:23 it's differentiable in a and b, abs() isn't Jun 25 01:14:44 it can also be expressed as z * conj(z) Jun 25 01:15:16 im so disappointed by this abs() Jun 25 01:15:43 I mean, if it weren't necessary, whatever research this is based on would probably have done the summation before the IFFT already Jun 25 01:16:07 it's a really really obvious thing to do if you only know the slightest thing about fourier transforms Jun 25 01:17:36 yeah it was supposed to be the low hanging fruit Jun 25 01:17:42 the resize after the FFT is next up Jun 25 01:21:54 this ifft is on 5000 megapixel image Jun 25 01:22:11 the goal is to do 256 5000MP ifft's per 10 minutes Jun 25 01:23:04 i thought it was 300MP but I was wrong, and I was hoping I'd only have to do 1 Jun 25 01:24:36 500, not 5000 :P Jun 25 01:25:29 no 5000 Jun 25 01:25:54 it's a 20MP and we're improving the resolution by a factor of 16 in both dimensions Jun 25 01:26:08 so 5gigapixels Jun 25 01:27:24 oof Jun 25 01:27:44 so i mean obviously we need to move to an FPGA Jun 25 01:27:50 i mean well that's our last resort Jun 25 01:27:52 i mean that's our last hope Jun 25 01:27:57 no guarentee this is actually possible Jun 25 01:29:03 is that faster? Jun 25 01:29:55 like, an FPGA excels at flexibility and bitwise fuckery, it doesn't necessary have good performance (for given price and/or power) compared to hardware that's actually designed for number-crunching Jun 25 01:30:35 you mean hardware like a DSP Jun 25 01:32:41 or GPUs, or EVEs.. just anything made for number crunching :P Jun 25 01:32:55 i mean IMO the little GPUs are pretty weak Jun 25 01:33:11 i mean if i can do thinks massively parallel i have to Jun 25 01:33:14 especially since you'll probably want to use floating-point numbers Jun 25 01:33:25 which is probably not fun on FPGAs Jun 25 01:33:54 don't modern GPUs outperform most other kinds of processors for floating-point computation? Jun 25 01:34:27 honestly this isn't stuff I know all that much about, like I've never compared the performance of these options Jun 25 01:34:32 especially not for FFTs of that size Jun 25 01:34:57 yeah it's honestly unreasonable Jun 25 01:36:03 5 GP is about 64K in each direction right? Jun 25 01:36:55 so 64K IFFTs in parallel, each of size 64K, and then again on the transpose Jun 25 01:39:17 yeah thats 4GP Jun 25 01:39:33 found some TI whitepaper listing 1.857 ms for a 64K FFT on a 1 GHz C66x DSP Jun 25 01:39:45 okay but now that i'm thinking about this more Jun 25 01:39:53 like who has the RAM Jun 25 01:40:06 that is a great question Jun 25 01:40:42 https://developer.nvidia.com/embedded/jetson-agx-xavier-developer-kit Jun 25 01:41:16 like, you don't need the whole thing in memory at once in principle, but if you're going to swap it in and out then I'm not sure the computation is going to be the bottleneck anymore :P Jun 25 01:42:28 yeah i mean we pretty much have to use this beast Jun 25 01:43:22 32GB Ram, 8 Core, 512-core GPU Jun 25 01:43:44 not sure what a vision processor is Jun 25 01:44:50 I'm sure they'll be happy to give you the details after your agree that they own your soul and firstborn child (which is basically what their developer agreement looked like last time I read it) Jun 25 01:45:14 i'm worried about getting access to this stuff Jun 25 01:45:31 like, usually conditions are like "blah blah" but for theirs I just wanted a "fuck you" button Jun 25 01:46:12 were you just looking at it for fun? Jun 25 01:46:12 it had some really bizarre shit Jun 25 01:46:26 no I was looking at it because I wanted to download a TRM for a SoC of theirs Jun 25 01:46:41 back when we very briefly looked at some board based on an nvidia soc for something Jun 25 01:47:46 https://developer.nvidia.com/registered-developer-agreement yeah, this thing Jun 25 01:48:09 they have a cute "summary" at the top, which you can safely ignore Jun 25 01:49:47 oh and everything you get under that agreement is only for "personal, non-commercial" use anyway Jun 25 01:50:24 also, read the "Feedback" section Jun 25 01:51:34 basically if you perform any test or analysis on their stuff, you agree to provide it to them _and_ it becomes their confidential property Jun 25 01:53:23 zmatt one of the things you've been telling me over and over again is that 2D ops i think is basically a sum of 1D ops Jun 25 01:53:38 like todayu Jun 25 01:53:52 and if the agreement terminates (which nvidia may do for any reason at any time), you remain bound by confidentiality but you're required to destroy any materials you received from them Jun 25 01:53:55 like the code you wrote can easily be extended to 2d just by doing it along each column? Jun 25 01:54:19 2D FFT = 1D FFT on each row individually and then on each column individually Jun 25 01:54:28 i need to read a bit about those propriteries i was wondering if you could point me to the property name Jun 25 01:54:28 or first on each column and then on each row, whichever you prefer Jun 25 01:54:42 is that unique to the FFT and iFFT? Jun 25 01:56:08 of course not Jun 25 02:02:56 i mean wait this is any linear function right Jun 25 02:03:14 zmatt do u know how i could find that white paper Jun 25 02:03:17 take any linear 1D transform and apply it to all rows, take any other linear 1D transform and apply it to all columns Jun 25 02:03:44 linearity will ensure you can also do the columns first and then the rows Jun 25 02:04:38 so this is just a result of linearity right? Jun 25 02:06:23 I mean, depends on what you mean by that. like, if you just mean that f(X+Y)=f(X)+f(Y) and f(c*X) = c*f(X) for matrices X and Y and scalar c then obviously no, that's a far more general class than those which can be decomposed into a rowwise transform + a columnwise transform Jun 25 02:07:30 but linearity in that sense wouldn't even make any use of the matrix structure, the input might as well be a flat vector of elements Jun 25 02:10:50 looked at it differently: a general linear map of n-by-m matrices would require (n*m)^2 coefficients to specify, while one that decomposes into rowwise + columnwise only requires n^2 + m^2 coefficients Jun 25 02:12:49 i'm just trying to find a thread to pull with my studies Jun 25 02:13:01 and also i am 99% sure we are going to end up using TI parts made for radar applications Jun 25 02:13:07 and i really want to use TI parts so that makes me happy Jun 25 02:13:13 btw what white paper? about the FFT on C66x ? Jun 25 02:13:17 yeah Jun 25 02:13:19 i found one Jun 25 02:13:20 but also i am over my league and jkridner pls halp Jun 25 02:13:22 https://www.ti.com/lit/wp/spry277/spry277.pdf Jun 25 02:13:31 yup! i'm on 294 Jun 25 02:40:42 i mean this DSP/FFT-coprocessor w/ 6 cores is going to be faster than a GPU i think Jun 25 02:40:46 from TI Jun 25 02:41:05 "DSP/FFT-coprocessor" ? Jun 25 02:45:19 yeah TI has all these radar chips, like the one you were talking about Jun 25 02:45:32 https://www.ti.com/lit/wp/spry294/spry294.pdf Jun 25 02:46:19 I'm pretty sure what I linked to purely usd the DSPs, no special coprocessors Jun 25 02:47:36 the FFTC coprocessors in the thing you found do sound interesting :) Jun 25 02:49:07 though they mention that it has poorer SNR than a single-precision FFT in software Jun 25 02:50:52 yeah i mean, i've done the math, i need to do uhh 109K 64K-point FFTs per second to meat goals Jun 25 02:52:32 sounds like it's gonna be expensive :D Jun 25 02:52:55 i mean i'm like, looking at the most expensive stuff and still trying to figure out if it's feasable Jun 25 02:53:38 this nvidia xavier SBC has 32GB RAM and can apparently do tflops Jun 25 02:57:51 a split-radix FFT of length 2^n takes (4*n-6)*2^n+8 flops Jun 25 02:58:21 (for n > 0) Jun 25 02:58:32 (for n > 1 sorry) Jun 25 02:58:43 no, > 0 Jun 25 02:59:17 I hope your width and height are powers of two, otherwise things get substantially more "fun" of course ;) Jun 25 02:59:52 or 3*2^n is also managable **** ENDING LOGGING AT Thu Jun 25 02:59:57 2020