nVidia CUDA GPU computing PC FIR

Status
This old topic is closed. If you want to reopen this topic, contact a moderator using the "Report Post" button.
VST: flexible multichannel audio plugins

Hi there,

great job so far, though i can't use it yet without that new GPU i want :)
have you ever thought about making a VST-plugin out of your solution?
Steinberg VST features high level multichannel input and output streaming.
It integrates perfectly into most professional audio editing programs on the market.
Howewer, VST3 has not as many host applications yet, so VST2.4 would be the better choice here. They provide nice SDKs for both and even for host application development and for ASIO-drivers.
You could use your code in a studio environments for music (DVD-) production as well as a digital mixer in a DJ-Setup.
I would love to see the massive power of CUDA integrated into my music production software.

Greetz
Toffer
 
FIR Coeff Gen

The FIR coefficient generator in your package is nice, thanks for sharing, I really like the EQ feature... however, I cant seem to make a filter with it that doesnt 'ring' horribly, changing kaiser window doesnt seem to do anything to the slope, as does reducing the target stopband attenuation, many attempts with different values of taps, alpha and attenuation all seem to result in increadibly steep cut off slopes... am I missing something obvious?

Many thanks.
 
Illustration

Just a quick arta grab to show what I mean, the low pass had a kaiser alpha value of 8 and a target stopband atten of -60db, the high pass has a kaiser alpha value of 16 and a target stopband atten of -100db, the cutoff slope is exactly the same.... ??
 

Attachments

  • kaiser-post.jpg
    kaiser-post.jpg
    75.8 KB · Views: 633
I thought kaiser window defined slope as well as stopband attenuation? I dont mind a 100db/octave filter, but the ones produced by your program seem to make filters with a much higher slope than that, moving 10-20db down within a few hertz.... I have searched through the source to find a variable to change to make the filter slope less sharp, couldnt find anything that worked....

Using DPS links, increasing the kaiser window alpha value not only increases stopband attenuation, but makes the curve less steep.

Have you not experienced 'ringing' with the filters from your program? To me its very audable.... but it could be something else wrong......
 
I thought the number of taps in a filter affected frequency resolution, which allows for a steeper slope, but does not create it.....

I'l post back in a little while after creating some filters with much lower taps using your program.....

Btw, using filters based on the remez algorthim I get no ringing what so ever.... I have no 'mid speaker high frequency noise'...
 
ok, tried 1024 tap filter, you are indeed correct that with your program fewer taps produce a shallower slope, but I then tried listening to these filters, they sound HORRIBLE..... just cant listen to them, (though the ringing almost disapeared).

So is there anyway to reduce the slope of the filters it produces while keeping tap count the same???? :)

Thanks.
 
Forgive me for coding knowledge = zero, but from looking at the CreateFres part of the program it seems the only thing to edit is the : gain = pow(10.0, DEFREDUCT / 20.0); terms, which deal with the gain in the pass and stop bands, nothing seems to affect the transition between the two.... :confused:

I tried many cominations of the '10.0' & '20.0' terms above (different values) but none of them affected slope....

I'm using brutefir, maybe it creates ringing more readily with steep filters than your (excellent) GPUFIR program... would be using yours if I could lay my hands on an 8 series gpu....

I'm not sure my measurement technique is good enough to provide measured evidence, but I shall have a go soon....

Thanks again.
 
CreateFres() function only works to make "ON"/"OFF", then modify FreqResR[] by EQ parameter, in pass band.
I mean you need your source code to make some "dull curve" in FreqResR[]...

I don't know inside of brutefir, but I think brutefir can work with FIR coeffs which is made by brutefir itself. I'm wondering about you are using EQ functionallity. you should try my Coeffs : without EQ, can work in brutefir first.

http://momiji.i.ishikawa-nct.ac.jp/dfdesign_eng/gfir/fir.shtml
here is some FIR filter analyzer, not made by me / not related to brutefir. So you can compare both (mine / brutefir) coeffs here.
 
Originally posted by Theo404
I thought the number of taps in a filter affected frequency resolution, which allows for a steeper slope, but does not create it.....

You're right, there. With most window types, the number of taps is directly proportional to the "product" (I can't think of a better word for it) of the steepness and stopband attenuation. In the case of the Kaiser window, the (alpha) parameter allows you to pretty much just trade off one for the other. The length of the filter dictates how much slope/attenuation you get overall, but not the balance. It is perfectly possible, with lots of taps, to get a shallow filter with a lot of stopband attenuation.

Incidentally, I find that provided you use enough taps, you get a stopband attenuation of approximately 10 * beta. Using less taps than required gives less attenuation, and using more taps than required gives the same attenuation with a steeper slope. My normal method with the Kaiser window is to specify a parameter of 10-15 (for between 100dB and 150dB of stopband attenuation), then scale the number of taps to get the sort of slope I'm looking for.

I apologise for the wordyness of my descriptions, I don't think they are very good. If response graphs are wanted, I can make some some of those and post them up (don't have the time just now)
 
Theo404 said:
I thought the number of taps in a filter affected frequency resolution, which allows for a steeper slope, but does not create it.....

I'l post back in a little while after creating some filters with much lower taps using your program.....

Btw, using filters based on the remez algorthim I get no ringing what so ever.... I have no 'mid speaker high frequency noise'...

Hi Theo404-

I think you are thinking of a FFT "spectrograph" when you say that more taps produce more accuracy, correct? The number of taps in a filter only determine its ultimate "shape" or steepness, if you will.

Perhaps you already know all this, but a very nice paper was written by K. Steiglitz called "METEOR - A Constraint-Based FIR Filter Design Program", which also details some of the mathematics behind the Remes algorithm and the Parks-McClellan approach to the design of filters. The paper is here:
http://www.cs.princeton.edu/~ken/meteor_article.pdf

Anyone else wanting a very in-depth look at the mathematics behind audio DSP in general might have a look at Steiglitz's book "A Digital Signal Processing Primer", I have found it invaluable as a resource! In it he gives a pretty thorough treatment of digital filter design using METEOR as the primary tool.

Believe it or not, Wiki has a pretty good explanation of "windowing functions", many of which I was not remotely familiar with:
http://en.wikipedia.org/wiki/Window_function

Also Koon3876, your work is most excellent! Thank-you again for inspiration... :)

Kindest Regards!
 
KOON3876 said:
Hi Cliff thanks,

some progress:

Now I can play GPU FIR on ASUS N10Jc netbook (with GeForce 9300M GS). also programs are looks like more simple now.

And I found "Virtual Audio Cable" can connect between iTunes / WindowsMediaPlayer / or any, and my GPUFIR. maybe I will post "howto" next weekend.
http://www.ntonyx.com/vac.htm

Does that mean you have removed the process of splitting the audio into 8 wavs and saving them to disk?
 
Status
This old topic is closed. If you want to reopen this topic, contact a moderator using the "Report Post" button.