Numerically Stable IIR filterAre there any standard implementation forms for tunable Butterworth filters?DC blocking IIR filter clipping?Is there a widely available implementation of an adaptive, recursive, numerically stable IIR filter?Why lattice-structured all-pole IIR filter becomes stable, if the k-coefficients satisfies $|k_i| < 1$?Weighting function for output error IIR filter designDesigning butterworth filter with pole placementDesign Stable IIR Filter in MATLABFilter design by distributing poles and zeros on parametric curvesIIR filter group delayRe-mixing high and low pass filtered audio has interference in the shared transition band?
Best Ergonomic Design for a handheld ranged weapon
NULL value causes blank row in SELECT results for text concatenation
If the Moon were impacted by a suitably sized meteor, how long would it take to impact the Earth?
How can flights operated by the same company have such different prices when marketed by another?
What would the United Kingdom's "optimal" Brexit deal look like?
How to structure presentation to avoid getting questions that will be answered later in the presentation?
What is the term for completing a route uncleanly?
Why are prop blades not shaped like household fan blades?
Academic progression in Germany, what happens after a postdoc? What is the next step?
What is the full text of the song about the failed battle of Kiska?
What force enables us to walk? Friction or normal reaction?
Prepare a user to perform an action before proceeding to the next step
My employer is refusing to give me the pay that was advertised after an internal job move
Adding a (stair/baby) gate without facing walls
Why don't short runways use ramps for takeoff?
Applying for mortgage when living together but only one will be on the mortgage
Russian pronunciation of /etc (a directory)
Can I shorten this filter, that finds disk sizes over 100G?
How did Biff return to 2015 from 1955 without a lightning strike?
How to litter train a cat if both my husband and I work away from home all day?
UX writing: When to use "we"?
Create two random teams from a list of players
Can machine learning learn a function like finding maximum from a list?
Patio gate not at right angle to the house
Numerically Stable IIR filter
Are there any standard implementation forms for tunable Butterworth filters?DC blocking IIR filter clipping?Is there a widely available implementation of an adaptive, recursive, numerically stable IIR filter?Why lattice-structured all-pole IIR filter becomes stable, if the k-coefficients satisfies $|k_i| < 1$?Weighting function for output error IIR filter designDesigning butterworth filter with pole placementDesign Stable IIR Filter in MATLABFilter design by distributing poles and zeros on parametric curvesIIR filter group delayRe-mixing high and low pass filtered audio has interference in the shared transition band?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
$begingroup$
I am making an IIR Filter and I am running into problems with stability with higher orders. The values go off to infinity as soon as it starts.
So far, I've been using MATLAB to generate my filters and then running them in an embedded system. I'm using a band-pass filter, state-space representation and single precision values. If I understand this correctly, the issues happens because the poles are getting too close to the unit circle, so the rounding errors on my coefficients or state space are getting out of hand.
I could reduce the order, but that feels wasteful when I have the computational power to run a higher order filter. Is there a filter design that will improve at a higher order while giving the poles a good margin?
Alternatively, Is there another trick I can use to mitigate this issue?
filters filter-design infinite-impulse-response digital-filters bandpass
New contributor
Jack is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
$endgroup$
add a comment |
$begingroup$
I am making an IIR Filter and I am running into problems with stability with higher orders. The values go off to infinity as soon as it starts.
So far, I've been using MATLAB to generate my filters and then running them in an embedded system. I'm using a band-pass filter, state-space representation and single precision values. If I understand this correctly, the issues happens because the poles are getting too close to the unit circle, so the rounding errors on my coefficients or state space are getting out of hand.
I could reduce the order, but that feels wasteful when I have the computational power to run a higher order filter. Is there a filter design that will improve at a higher order while giving the poles a good margin?
Alternatively, Is there another trick I can use to mitigate this issue?
filters filter-design infinite-impulse-response digital-filters bandpass
New contributor
Jack is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
$endgroup$
add a comment |
$begingroup$
I am making an IIR Filter and I am running into problems with stability with higher orders. The values go off to infinity as soon as it starts.
So far, I've been using MATLAB to generate my filters and then running them in an embedded system. I'm using a band-pass filter, state-space representation and single precision values. If I understand this correctly, the issues happens because the poles are getting too close to the unit circle, so the rounding errors on my coefficients or state space are getting out of hand.
I could reduce the order, but that feels wasteful when I have the computational power to run a higher order filter. Is there a filter design that will improve at a higher order while giving the poles a good margin?
Alternatively, Is there another trick I can use to mitigate this issue?
filters filter-design infinite-impulse-response digital-filters bandpass
New contributor
Jack is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
$endgroup$
I am making an IIR Filter and I am running into problems with stability with higher orders. The values go off to infinity as soon as it starts.
So far, I've been using MATLAB to generate my filters and then running them in an embedded system. I'm using a band-pass filter, state-space representation and single precision values. If I understand this correctly, the issues happens because the poles are getting too close to the unit circle, so the rounding errors on my coefficients or state space are getting out of hand.
I could reduce the order, but that feels wasteful when I have the computational power to run a higher order filter. Is there a filter design that will improve at a higher order while giving the poles a good margin?
Alternatively, Is there another trick I can use to mitigate this issue?
filters filter-design infinite-impulse-response digital-filters bandpass
filters filter-design infinite-impulse-response digital-filters bandpass
New contributor
Jack is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Jack is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Jack is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
asked 9 hours ago
JackJack
82 bronze badges
82 bronze badges
New contributor
Jack is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Jack is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
$begingroup$
Given your hardware constrains mentioned in the comments, your best shot is probably to do this as parallel second order section. Since the parallel sections are independent of each other, it's pretty straight forward to vectorize and it's also a little cheaper: each section has a complex conjugate pole pair but only one real zero.
Things get a bit more tricky if you have real poles or multiple poles at the same location: this can still be done, but it makes the code more awkward.
In order to calculate the coefficients for the parallel sections you need to do a partial fraction expansion. The good news: Matlab has a function for this, it's called $residuez()$. The bad news: it's not a very good implementation and will often fail with similar numerical problems as you get with your filtering. You can try it on your filter and post another question if residuez() fails for your particular example.
$endgroup$
add a comment |
$begingroup$
First of all, what is the order of your IIR filter? The highest order I have ever used was an order-10 IIR filter for a control loop application. I feel like it is unlikely that you need more that this.
Second, it is a good idea to split your filter in second-order-sections (SOS) and cascade them , this usually fix most issues.
https://www.dsprelated.com/showarticle/1137.php
You can also split your filter in second-order-sections and put them in parallel and add their ouputs too.
$endgroup$
$begingroup$
Thanks Ben. I've gotten an 8th order filter working and it's not quite enough for my application, and a 20th order filter, which was enough. However, once I started playing with the band the filter worked on, even 8th order filters are failing. I'm looking into SOS, but I'm not sure if it will work for me. I like SS representation because I can do it in a few large matrix operations, and I'm not sure I can do that with SOS.
$endgroup$
– Jack
9 hours ago
$begingroup$
you split your order-20 IIR filter in 10 separate order-2 IIR filter. Afterwards, you cascade them. The output of the first filter will be the input of the second filter, until the output of your 10th filter will be the output you want all along.
$endgroup$
– Ben
8 hours ago
$begingroup$
Right, and that would be 10x as many matrix operations. I have specialized hardware for matrix operations, so I can handle 20th order all in one go, but I don't think I can run more than 1 while staying in real-time.
$endgroup$
– Jack
8 hours ago
$begingroup$
The matrices will be much smaller so I'm not sure the actual complexity will increase.
$endgroup$
– Ben
8 hours ago
1
$begingroup$
If I convert it in number of multiplications : an order-20 IIR filter in direct implementation will require 41 multiplications. an order-20 IIR filter in cascaded second-order-sections will require 50 multiplications but it will be more numerically stable.
$endgroup$
– Ben
8 hours ago
|
show 2 more comments
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "295"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
noCode: true, onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Jack is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdsp.stackexchange.com%2fquestions%2f59862%2fnumerically-stable-iir-filter%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
Given your hardware constrains mentioned in the comments, your best shot is probably to do this as parallel second order section. Since the parallel sections are independent of each other, it's pretty straight forward to vectorize and it's also a little cheaper: each section has a complex conjugate pole pair but only one real zero.
Things get a bit more tricky if you have real poles or multiple poles at the same location: this can still be done, but it makes the code more awkward.
In order to calculate the coefficients for the parallel sections you need to do a partial fraction expansion. The good news: Matlab has a function for this, it's called $residuez()$. The bad news: it's not a very good implementation and will often fail with similar numerical problems as you get with your filtering. You can try it on your filter and post another question if residuez() fails for your particular example.
$endgroup$
add a comment |
$begingroup$
Given your hardware constrains mentioned in the comments, your best shot is probably to do this as parallel second order section. Since the parallel sections are independent of each other, it's pretty straight forward to vectorize and it's also a little cheaper: each section has a complex conjugate pole pair but only one real zero.
Things get a bit more tricky if you have real poles or multiple poles at the same location: this can still be done, but it makes the code more awkward.
In order to calculate the coefficients for the parallel sections you need to do a partial fraction expansion. The good news: Matlab has a function for this, it's called $residuez()$. The bad news: it's not a very good implementation and will often fail with similar numerical problems as you get with your filtering. You can try it on your filter and post another question if residuez() fails for your particular example.
$endgroup$
add a comment |
$begingroup$
Given your hardware constrains mentioned in the comments, your best shot is probably to do this as parallel second order section. Since the parallel sections are independent of each other, it's pretty straight forward to vectorize and it's also a little cheaper: each section has a complex conjugate pole pair but only one real zero.
Things get a bit more tricky if you have real poles or multiple poles at the same location: this can still be done, but it makes the code more awkward.
In order to calculate the coefficients for the parallel sections you need to do a partial fraction expansion. The good news: Matlab has a function for this, it's called $residuez()$. The bad news: it's not a very good implementation and will often fail with similar numerical problems as you get with your filtering. You can try it on your filter and post another question if residuez() fails for your particular example.
$endgroup$
Given your hardware constrains mentioned in the comments, your best shot is probably to do this as parallel second order section. Since the parallel sections are independent of each other, it's pretty straight forward to vectorize and it's also a little cheaper: each section has a complex conjugate pole pair but only one real zero.
Things get a bit more tricky if you have real poles or multiple poles at the same location: this can still be done, but it makes the code more awkward.
In order to calculate the coefficients for the parallel sections you need to do a partial fraction expansion. The good news: Matlab has a function for this, it's called $residuez()$. The bad news: it's not a very good implementation and will often fail with similar numerical problems as you get with your filtering. You can try it on your filter and post another question if residuez() fails for your particular example.
answered 7 hours ago
HilmarHilmar
11.5k1 gold badge12 silver badges18 bronze badges
11.5k1 gold badge12 silver badges18 bronze badges
add a comment |
add a comment |
$begingroup$
First of all, what is the order of your IIR filter? The highest order I have ever used was an order-10 IIR filter for a control loop application. I feel like it is unlikely that you need more that this.
Second, it is a good idea to split your filter in second-order-sections (SOS) and cascade them , this usually fix most issues.
https://www.dsprelated.com/showarticle/1137.php
You can also split your filter in second-order-sections and put them in parallel and add their ouputs too.
$endgroup$
$begingroup$
Thanks Ben. I've gotten an 8th order filter working and it's not quite enough for my application, and a 20th order filter, which was enough. However, once I started playing with the band the filter worked on, even 8th order filters are failing. I'm looking into SOS, but I'm not sure if it will work for me. I like SS representation because I can do it in a few large matrix operations, and I'm not sure I can do that with SOS.
$endgroup$
– Jack
9 hours ago
$begingroup$
you split your order-20 IIR filter in 10 separate order-2 IIR filter. Afterwards, you cascade them. The output of the first filter will be the input of the second filter, until the output of your 10th filter will be the output you want all along.
$endgroup$
– Ben
8 hours ago
$begingroup$
Right, and that would be 10x as many matrix operations. I have specialized hardware for matrix operations, so I can handle 20th order all in one go, but I don't think I can run more than 1 while staying in real-time.
$endgroup$
– Jack
8 hours ago
$begingroup$
The matrices will be much smaller so I'm not sure the actual complexity will increase.
$endgroup$
– Ben
8 hours ago
1
$begingroup$
If I convert it in number of multiplications : an order-20 IIR filter in direct implementation will require 41 multiplications. an order-20 IIR filter in cascaded second-order-sections will require 50 multiplications but it will be more numerically stable.
$endgroup$
– Ben
8 hours ago
|
show 2 more comments
$begingroup$
First of all, what is the order of your IIR filter? The highest order I have ever used was an order-10 IIR filter for a control loop application. I feel like it is unlikely that you need more that this.
Second, it is a good idea to split your filter in second-order-sections (SOS) and cascade them , this usually fix most issues.
https://www.dsprelated.com/showarticle/1137.php
You can also split your filter in second-order-sections and put them in parallel and add their ouputs too.
$endgroup$
$begingroup$
Thanks Ben. I've gotten an 8th order filter working and it's not quite enough for my application, and a 20th order filter, which was enough. However, once I started playing with the band the filter worked on, even 8th order filters are failing. I'm looking into SOS, but I'm not sure if it will work for me. I like SS representation because I can do it in a few large matrix operations, and I'm not sure I can do that with SOS.
$endgroup$
– Jack
9 hours ago
$begingroup$
you split your order-20 IIR filter in 10 separate order-2 IIR filter. Afterwards, you cascade them. The output of the first filter will be the input of the second filter, until the output of your 10th filter will be the output you want all along.
$endgroup$
– Ben
8 hours ago
$begingroup$
Right, and that would be 10x as many matrix operations. I have specialized hardware for matrix operations, so I can handle 20th order all in one go, but I don't think I can run more than 1 while staying in real-time.
$endgroup$
– Jack
8 hours ago
$begingroup$
The matrices will be much smaller so I'm not sure the actual complexity will increase.
$endgroup$
– Ben
8 hours ago
1
$begingroup$
If I convert it in number of multiplications : an order-20 IIR filter in direct implementation will require 41 multiplications. an order-20 IIR filter in cascaded second-order-sections will require 50 multiplications but it will be more numerically stable.
$endgroup$
– Ben
8 hours ago
|
show 2 more comments
$begingroup$
First of all, what is the order of your IIR filter? The highest order I have ever used was an order-10 IIR filter for a control loop application. I feel like it is unlikely that you need more that this.
Second, it is a good idea to split your filter in second-order-sections (SOS) and cascade them , this usually fix most issues.
https://www.dsprelated.com/showarticle/1137.php
You can also split your filter in second-order-sections and put them in parallel and add their ouputs too.
$endgroup$
First of all, what is the order of your IIR filter? The highest order I have ever used was an order-10 IIR filter for a control loop application. I feel like it is unlikely that you need more that this.
Second, it is a good idea to split your filter in second-order-sections (SOS) and cascade them , this usually fix most issues.
https://www.dsprelated.com/showarticle/1137.php
You can also split your filter in second-order-sections and put them in parallel and add their ouputs too.
answered 9 hours ago
BenBen
1,0714 silver badges12 bronze badges
1,0714 silver badges12 bronze badges
$begingroup$
Thanks Ben. I've gotten an 8th order filter working and it's not quite enough for my application, and a 20th order filter, which was enough. However, once I started playing with the band the filter worked on, even 8th order filters are failing. I'm looking into SOS, but I'm not sure if it will work for me. I like SS representation because I can do it in a few large matrix operations, and I'm not sure I can do that with SOS.
$endgroup$
– Jack
9 hours ago
$begingroup$
you split your order-20 IIR filter in 10 separate order-2 IIR filter. Afterwards, you cascade them. The output of the first filter will be the input of the second filter, until the output of your 10th filter will be the output you want all along.
$endgroup$
– Ben
8 hours ago
$begingroup$
Right, and that would be 10x as many matrix operations. I have specialized hardware for matrix operations, so I can handle 20th order all in one go, but I don't think I can run more than 1 while staying in real-time.
$endgroup$
– Jack
8 hours ago
$begingroup$
The matrices will be much smaller so I'm not sure the actual complexity will increase.
$endgroup$
– Ben
8 hours ago
1
$begingroup$
If I convert it in number of multiplications : an order-20 IIR filter in direct implementation will require 41 multiplications. an order-20 IIR filter in cascaded second-order-sections will require 50 multiplications but it will be more numerically stable.
$endgroup$
– Ben
8 hours ago
|
show 2 more comments
$begingroup$
Thanks Ben. I've gotten an 8th order filter working and it's not quite enough for my application, and a 20th order filter, which was enough. However, once I started playing with the band the filter worked on, even 8th order filters are failing. I'm looking into SOS, but I'm not sure if it will work for me. I like SS representation because I can do it in a few large matrix operations, and I'm not sure I can do that with SOS.
$endgroup$
– Jack
9 hours ago
$begingroup$
you split your order-20 IIR filter in 10 separate order-2 IIR filter. Afterwards, you cascade them. The output of the first filter will be the input of the second filter, until the output of your 10th filter will be the output you want all along.
$endgroup$
– Ben
8 hours ago
$begingroup$
Right, and that would be 10x as many matrix operations. I have specialized hardware for matrix operations, so I can handle 20th order all in one go, but I don't think I can run more than 1 while staying in real-time.
$endgroup$
– Jack
8 hours ago
$begingroup$
The matrices will be much smaller so I'm not sure the actual complexity will increase.
$endgroup$
– Ben
8 hours ago
1
$begingroup$
If I convert it in number of multiplications : an order-20 IIR filter in direct implementation will require 41 multiplications. an order-20 IIR filter in cascaded second-order-sections will require 50 multiplications but it will be more numerically stable.
$endgroup$
– Ben
8 hours ago
$begingroup$
Thanks Ben. I've gotten an 8th order filter working and it's not quite enough for my application, and a 20th order filter, which was enough. However, once I started playing with the band the filter worked on, even 8th order filters are failing. I'm looking into SOS, but I'm not sure if it will work for me. I like SS representation because I can do it in a few large matrix operations, and I'm not sure I can do that with SOS.
$endgroup$
– Jack
9 hours ago
$begingroup$
Thanks Ben. I've gotten an 8th order filter working and it's not quite enough for my application, and a 20th order filter, which was enough. However, once I started playing with the band the filter worked on, even 8th order filters are failing. I'm looking into SOS, but I'm not sure if it will work for me. I like SS representation because I can do it in a few large matrix operations, and I'm not sure I can do that with SOS.
$endgroup$
– Jack
9 hours ago
$begingroup$
you split your order-20 IIR filter in 10 separate order-2 IIR filter. Afterwards, you cascade them. The output of the first filter will be the input of the second filter, until the output of your 10th filter will be the output you want all along.
$endgroup$
– Ben
8 hours ago
$begingroup$
you split your order-20 IIR filter in 10 separate order-2 IIR filter. Afterwards, you cascade them. The output of the first filter will be the input of the second filter, until the output of your 10th filter will be the output you want all along.
$endgroup$
– Ben
8 hours ago
$begingroup$
Right, and that would be 10x as many matrix operations. I have specialized hardware for matrix operations, so I can handle 20th order all in one go, but I don't think I can run more than 1 while staying in real-time.
$endgroup$
– Jack
8 hours ago
$begingroup$
Right, and that would be 10x as many matrix operations. I have specialized hardware for matrix operations, so I can handle 20th order all in one go, but I don't think I can run more than 1 while staying in real-time.
$endgroup$
– Jack
8 hours ago
$begingroup$
The matrices will be much smaller so I'm not sure the actual complexity will increase.
$endgroup$
– Ben
8 hours ago
$begingroup$
The matrices will be much smaller so I'm not sure the actual complexity will increase.
$endgroup$
– Ben
8 hours ago
1
1
$begingroup$
If I convert it in number of multiplications : an order-20 IIR filter in direct implementation will require 41 multiplications. an order-20 IIR filter in cascaded second-order-sections will require 50 multiplications but it will be more numerically stable.
$endgroup$
– Ben
8 hours ago
$begingroup$
If I convert it in number of multiplications : an order-20 IIR filter in direct implementation will require 41 multiplications. an order-20 IIR filter in cascaded second-order-sections will require 50 multiplications but it will be more numerically stable.
$endgroup$
– Ben
8 hours ago
|
show 2 more comments
Jack is a new contributor. Be nice, and check out our Code of Conduct.
Jack is a new contributor. Be nice, and check out our Code of Conduct.
Jack is a new contributor. Be nice, and check out our Code of Conduct.
Jack is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Signal Processing Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdsp.stackexchange.com%2fquestions%2f59862%2fnumerically-stable-iir-filter%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown